The usual boring updates from the interrupt subsystem:
- Infrastructure to allow building irqchip drivers as modules
- Consolidation of irqchip ACPI probing
- Removal of the EOI-preflow interrupt handler which was required for
SPARC support and became obsolete after SPARC was converted to
use sparse interrupts.
- Cleanups, fixes and improvements all over the place
-----BEGIN PGP SIGNATURE-----
iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAl8pDL0THHRnbHhAbGlu
dXRyb25peC5kZQAKCRCmGPVMDXSYoRTFEACYvH2LnSu1GlXB0XtL3+XyV8bWN3Yr
Qfcp9JbIibx65YkJjcyvfBNA6GjXoogMr9vOHeRVnPtOwzl/7n/lnh/43d6+YPot
7UvIjGtpH3E/lF0kJKfuEsM8CX8DcVhn6dV/T+dJ00m69dAVQHNRsVqAi1/iWEeT
9vBBELoJL79BU2g83NQZ7V0UrqiA5QlPYLpbSffliE6UWjG6XTH2CPM5XucuySNQ
es3szxQ55rtPEzqCHVL0YW75vV39bmKZPqoApA/XQDJrp3bgftjdldoTe7YPQfSG
MXAvB+6axPD+mdeag7/XZFC1DcMx8CnistZSJKpdYZe7mQ7iunfeJRhkEzb+DrO1
WdcDcYOm0rLHhPrUZItJdACjuPNmN9pMaK1PbabsivnHVWzMYYKmMwbW+AEsygGW
nnlsZP1Nr61Mo7O8+EKmxDdox4Qjk3lmQl4SdQgUKNKsI5yFYjvt2CfCjWLQJNBa
w7YiLnL9IChXwrvdGqMIoEueUi0pC3gGbZ/bjDbxI4NJxJgEEav49m/prxM2A2Pl
gfNdwlM1xgNydIBgt/jij/a8Lmv555RuZmvDV7QV7fFwaIqt3Qb5cs0Roq+GlzZR
e0wuikGl0r/Bdow62rle7EysbBBGosAYf6K/kaGhd8v/kx2ByDnPPWzOqtxc+K+i
Iw/daEQRsSnWuw==
=KA8b
-----END PGP SIGNATURE-----
Merge tag 'irq-core-2020-08-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner:
"The usual boring updates from the interrupt subsystem:
- Infrastructure to allow building irqchip drivers as modules
- Consolidation of irqchip ACPI probing
- Removal of the EOI-preflow interrupt handler which was required for
SPARC support and became obsolete after SPARC was converted to use
sparse interrupts.
- Cleanups, fixes and improvements all over the place"
* tag 'irq-core-2020-08-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (51 commits)
irqchip/loongson-pch-pic: Fix the misused irq flow handler
irqchip/loongson-htvec: Support 8 groups of HT vectors
irqchip/loongson-liointc: Fix misuse of gc->mask_cache
dt-bindings: interrupt-controller: Update Loongson HTVEC description
irqchip/imx-intmux: Fix irqdata regs save in imx_intmux_runtime_suspend()
irqchip/imx-intmux: Implement intmux runtime power management
irqchip/gic-v4.1: Use GFP_ATOMIC flag in allocate_vpe_l1_table()
irqchip: Fix IRQCHIP_PLATFORM_DRIVER_* compilation by including module.h
irqchip/stm32-exti: Map direct event to irq parent
irqchip/mtk-cirq: Convert to a platform driver
irqchip/mtk-sysirq: Convert to a platform driver
irqchip/qcom-pdc: Switch to using IRQCHIP_PLATFORM_DRIVER helper macros
irqchip: Add IRQCHIP_PLATFORM_DRIVER_BEGIN/END and IRQCHIP_MATCH helper macros
irqchip: irq-bcm2836.h: drop a duplicated word
irqchip/gic-v4.1: Ensure accessing the correct RD when writing INVALLR
irqchip/irq-bcm7038-l1: Guard uses of cpu_logical_map
irqchip/gic-v3: Remove unused register definition
irqchip/qcom-pdc: Allow QCOM_PDC to be loadable as a permanent module
genirq: Export irq_chip_retrigger_hierarchy and irq_chip_set_vcpu_affinity_parent
irqdomain: Export irq_domain_update_bus_token
...
This commit is contained in:
commit
f8b036a7fc
36 changed files with 346 additions and 244 deletions
|
|
@ -1150,16 +1150,27 @@ struct acpi_probe_entry {
|
|||
kernel_ulong_t driver_data;
|
||||
};
|
||||
|
||||
#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \
|
||||
#define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, \
|
||||
valid, data, fn) \
|
||||
static const struct acpi_probe_entry __acpi_probe_##name \
|
||||
__used __section(__##table##_acpi_probe_table) \
|
||||
= { \
|
||||
__used __section(__##table##_acpi_probe_table) = { \
|
||||
.id = table_id, \
|
||||
.type = subtable, \
|
||||
.subtable_valid = valid, \
|
||||
.probe_table = (acpi_tbl_table_handler)fn, \
|
||||
.driver_data = data, \
|
||||
}
|
||||
.probe_table = fn, \
|
||||
.driver_data = data, \
|
||||
}
|
||||
|
||||
#define ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(table, name, table_id, \
|
||||
subtable, valid, data, fn) \
|
||||
static const struct acpi_probe_entry __acpi_probe_##name \
|
||||
__used __section(__##table##_acpi_probe_table) = { \
|
||||
.id = table_id, \
|
||||
.type = subtable, \
|
||||
.subtable_valid = valid, \
|
||||
.probe_subtbl = fn, \
|
||||
.driver_data = data, \
|
||||
}
|
||||
|
||||
#define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table
|
||||
#define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@
|
|||
#define _LINUX_IRQCHIP_H
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
/*
|
||||
* This macro must be used by the different irqchip drivers to declare
|
||||
|
|
@ -26,6 +28,28 @@
|
|||
*/
|
||||
#define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, fn)
|
||||
|
||||
extern int platform_irqchip_probe(struct platform_device *pdev);
|
||||
|
||||
#define IRQCHIP_PLATFORM_DRIVER_BEGIN(drv_name) \
|
||||
static const struct of_device_id drv_name##_irqchip_match_table[] = {
|
||||
|
||||
#define IRQCHIP_MATCH(compat, fn) { .compatible = compat, .data = fn },
|
||||
|
||||
#define IRQCHIP_PLATFORM_DRIVER_END(drv_name) \
|
||||
{}, \
|
||||
}; \
|
||||
MODULE_DEVICE_TABLE(of, drv_name##_irqchip_match_table); \
|
||||
static struct platform_driver drv_name##_driver = { \
|
||||
.probe = platform_irqchip_probe, \
|
||||
.driver = { \
|
||||
.name = #drv_name, \
|
||||
.owner = THIS_MODULE, \
|
||||
.of_match_table = drv_name##_irqchip_match_table, \
|
||||
.suppress_bind_attrs = true, \
|
||||
}, \
|
||||
}; \
|
||||
builtin_platform_driver(drv_name##_driver)
|
||||
|
||||
/*
|
||||
* This macro must be used by the different irqchip drivers to declare
|
||||
* the association between their version and their initialization function.
|
||||
|
|
@ -39,8 +63,9 @@
|
|||
* @fn: initialization function
|
||||
*/
|
||||
#define IRQCHIP_ACPI_DECLARE(name, subtable, validate, data, fn) \
|
||||
ACPI_DECLARE_PROBE_ENTRY(irqchip, name, ACPI_SIG_MADT, \
|
||||
subtable, validate, data, fn)
|
||||
ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(irqchip, name, \
|
||||
ACPI_SIG_MADT, subtable, \
|
||||
validate, data, fn)
|
||||
|
||||
#ifdef CONFIG_IRQCHIP
|
||||
void irqchip_init(void);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
#define GICD_CLRSPI_NSR 0x0048
|
||||
#define GICD_SETSPI_SR 0x0050
|
||||
#define GICD_CLRSPI_SR 0x0058
|
||||
#define GICD_SEIR 0x0068
|
||||
#define GICD_IGROUPR 0x0080
|
||||
#define GICD_ISENABLER 0x0100
|
||||
#define GICD_ICENABLER 0x0180
|
||||
|
|
@ -119,14 +118,11 @@
|
|||
#define GICR_WAKER 0x0014
|
||||
#define GICR_SETLPIR 0x0040
|
||||
#define GICR_CLRLPIR 0x0048
|
||||
#define GICR_SEIR GICD_SEIR
|
||||
#define GICR_PROPBASER 0x0070
|
||||
#define GICR_PENDBASER 0x0078
|
||||
#define GICR_INVLPIR 0x00A0
|
||||
#define GICR_INVALLR 0x00B0
|
||||
#define GICR_SYNCR 0x00C0
|
||||
#define GICR_MOVLPIR 0x0100
|
||||
#define GICR_MOVALLR 0x0110
|
||||
#define GICR_IDREGS GICD_IDREGS
|
||||
#define GICR_PIDR2 GICD_PIDR2
|
||||
|
||||
|
|
|
|||
|
|
@ -9,17 +9,6 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define VIC_RAW_STATUS 0x08
|
||||
#define VIC_INT_ENABLE 0x10 /* 1 = enable, 0 = disable */
|
||||
#define VIC_INT_ENABLE_CLEAR 0x14
|
||||
|
||||
struct device_node;
|
||||
struct pt_regs;
|
||||
|
||||
void __vic_init(void __iomem *base, int parent_irq, int irq_start,
|
||||
u32 vic_sources, u32 resume_sources, struct device_node *node);
|
||||
void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources);
|
||||
int vic_init_cascaded(void __iomem *base, unsigned int parent_irq,
|
||||
u32 vic_sources, u32 resume_sources);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
#define LOCAL_MAILBOX_INT_CONTROL0 0x050
|
||||
/*
|
||||
* The CPU's interrupt status register. Bits are defined by the the
|
||||
* The CPU's interrupt status register. Bits are defined by the
|
||||
* LOCAL_IRQ_* bits below.
|
||||
*/
|
||||
#define LOCAL_IRQ_PENDING0 0x060
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ struct pt_regs;
|
|||
* @irq_common_data: per irq and chip data passed down to chip functions
|
||||
* @kstat_irqs: irq stats per cpu
|
||||
* @handle_irq: highlevel irq-events handler
|
||||
* @preflow_handler: handler called before the flow handler (currently used by sparc)
|
||||
* @action: the irq action chain
|
||||
* @status_use_accessors: status information
|
||||
* @core_internal_state__do_not_mess_with_it: core internal status information
|
||||
|
|
@ -58,9 +57,6 @@ struct irq_desc {
|
|||
struct irq_data irq_data;
|
||||
unsigned int __percpu *kstat_irqs;
|
||||
irq_flow_handler_t handle_irq;
|
||||
#ifdef CONFIG_IRQ_PREFLOW_FASTEOI
|
||||
irq_preflow_handler_t preflow_handler;
|
||||
#endif
|
||||
struct irqaction *action; /* IRQ action list */
|
||||
unsigned int status_use_accessors;
|
||||
unsigned int core_internal_state__do_not_mess_with_it;
|
||||
|
|
@ -268,15 +264,4 @@ irq_set_lockdep_class(unsigned int irq, struct lock_class_key *lock_class,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IRQ_PREFLOW_FASTEOI
|
||||
static inline void
|
||||
__irq_set_preflow_handler(unsigned int irq, irq_preflow_handler_t handler)
|
||||
{
|
||||
struct irq_desc *desc;
|
||||
|
||||
desc = irq_to_desc(irq);
|
||||
desc->preflow_handler = handler;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,6 +10,5 @@
|
|||
struct irq_desc;
|
||||
struct irq_data;
|
||||
typedef void (*irq_flow_handler_t)(struct irq_desc *desc);
|
||||
typedef void (*irq_preflow_handler_t)(struct irq_data *data);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue