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 ...
Showing the changes to include/linux (7 of 36 files). Show all
Unified · Split
| @@ -1150,16 +1150,27 @@ struct acpi_probe_entry { · 1149 unmodified lines | |||
| 1150 | kernel_ulong_t driver_data; | 1150 | kernel_ulong_t driver_data; |
| 1151 | }; | 1151 | }; |
| 1152 | 1152 | ||
| 1153 | #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, valid, data, fn) \ | 1153 | #define ACPI_DECLARE_PROBE_ENTRY(table, name, table_id, subtable, \ |
| 1154 | valid, data, fn) \ | ||
| 1154 | static const struct acpi_probe_entry __acpi_probe_##name \ | 1155 | static const struct acpi_probe_entry __acpi_probe_##name \ |
| 1155 | __used __section(__##table##_acpi_probe_table) \ | 1156 | __used __section(__##table##_acpi_probe_table) = { \ |
| 1156 | = { \ | ||
| 1157 | .id = table_id, \ | 1157 | .id = table_id, \ |
| 1158 | .type = subtable, \ | 1158 | .type = subtable, \ |
| 1159 | .subtable_valid = valid, \ | 1159 | .subtable_valid = valid, \ |
| 1160 | .probe_table = (acpi_tbl_table_handler)fn, \ | 1160 | .probe_table = fn, \ |
| 1161 | .driver_data = data, \ | 1161 | .driver_data = data, \ |
| 1162 | } | 1162 | } |
| 1163 | |||
| 1164 | #define ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(table, name, table_id, \ | ||
| 1165 | subtable, valid, data, fn) \ | ||
| 1166 | static const struct acpi_probe_entry __acpi_probe_##name \ | ||
| 1167 | __used __section(__##table##_acpi_probe_table) = { \ | ||
| 1168 | .id = table_id, \ | ||
| 1169 | .type = subtable, \ | ||
| 1170 | .subtable_valid = valid, \ | ||
| 1171 | .probe_subtbl = fn, \ | ||
| 1172 | .driver_data = data, \ | ||
| 1173 | } | ||
| 1163 | 1174 | ||
| 1164 | #define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table | 1175 | #define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table |
| 1165 | #define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end | 1176 | #define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end |
| @@ -12,7 +12,9 @@ · 11 unmodified lines | |||
| 12 | #define _LINUX_IRQCHIP_H | 12 | #define _LINUX_IRQCHIP_H |
| 13 | 13 | ||
| 14 | #include <linux/acpi.h> | 14 | #include <linux/acpi.h> |
| 15 | #include <linux/module.h> | ||
| 15 | #include <linux/of.h> | 16 | #include <linux/of.h> |
| 17 | #include <linux/platform_device.h> | ||
| 16 | 18 | ||
| 17 | /* | 19 | /* |
| 18 | * This macro must be used by the different irqchip drivers to declare | 20 | * This macro must be used by the different irqchip drivers to declare |
| @@ -26,6 +28,28 @@ · 7 unmodified lines | |||
| 26 | */ | 28 | */ |
| 27 | #define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, fn) | 29 | #define IRQCHIP_DECLARE(name, compat, fn) OF_DECLARE_2(irqchip, name, compat, fn) |
| 28 | 30 | ||
| 31 | extern int platform_irqchip_probe(struct platform_device *pdev); | ||
| 32 | |||
| 33 | #define IRQCHIP_PLATFORM_DRIVER_BEGIN(drv_name) \ | ||
| 34 | static const struct of_device_id drv_name##_irqchip_match_table[] = { | ||
| 35 | |||
| 36 | #define IRQCHIP_MATCH(compat, fn) { .compatible = compat, .data = fn }, | ||
| 37 | |||
| 38 | #define IRQCHIP_PLATFORM_DRIVER_END(drv_name) \ | ||
| 39 | {}, \ | ||
| 40 | }; \ | ||
| 41 | MODULE_DEVICE_TABLE(of, drv_name##_irqchip_match_table); \ | ||
| 42 | static struct platform_driver drv_name##_driver = { \ | ||
| 43 | .probe = platform_irqchip_probe, \ | ||
| 44 | .driver = { \ | ||
| 45 | .name = #drv_name, \ | ||
| 46 | .owner = THIS_MODULE, \ | ||
| 47 | .of_match_table = drv_name##_irqchip_match_table, \ | ||
| 48 | .suppress_bind_attrs = true, \ | ||
| 49 | }, \ | ||
| 50 | }; \ | ||
| 51 | builtin_platform_driver(drv_name##_driver) | ||
| 52 | |||
| 29 | /* | 53 | /* |
| 30 | * This macro must be used by the different irqchip drivers to declare | 54 | * This macro must be used by the different irqchip drivers to declare |
| 31 | * the association between their version and their initialization function. | 55 | * the association between their version and their initialization function. |
| @@ -39,8 +63,9 @@ · 7 unmodified lines | |||
| 39 | * @fn: initialization function | 63 | * @fn: initialization function |
| 40 | */ | 64 | */ |
| 41 | #define IRQCHIP_ACPI_DECLARE(name, subtable, validate, data, fn) \ | 65 | #define IRQCHIP_ACPI_DECLARE(name, subtable, validate, data, fn) \ |
| 42 | ACPI_DECLARE_PROBE_ENTRY(irqchip, name, ACPI_SIG_MADT, \ | 66 | ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(irqchip, name, \ |
| 43 | subtable, validate, data, fn) | 67 | ACPI_SIG_MADT, subtable, \ |
| 68 | validate, data, fn) | ||
| 44 | 69 | ||
| 45 | #ifdef CONFIG_IRQCHIP | 70 | #ifdef CONFIG_IRQCHIP |
| 46 | void irqchip_init(void); | 71 | void irqchip_init(void); |
| @@ -19,7 +19,6 @@ · 18 unmodified lines | |||
| 19 | #define GICD_CLRSPI_NSR 0x0048 | 19 | #define GICD_CLRSPI_NSR 0x0048 |
| 20 | #define GICD_SETSPI_SR 0x0050 | 20 | #define GICD_SETSPI_SR 0x0050 |
| 21 | #define GICD_CLRSPI_SR 0x0058 | 21 | #define GICD_CLRSPI_SR 0x0058 |
| 22 | #define GICD_SEIR 0x0068 | ||
| 23 | #define GICD_IGROUPR 0x0080 | 22 | #define GICD_IGROUPR 0x0080 |
| 24 | #define GICD_ISENABLER 0x0100 | 23 | #define GICD_ISENABLER 0x0100 |
| 25 | #define GICD_ICENABLER 0x0180 | 24 | #define GICD_ICENABLER 0x0180 |
| @@ -119,14 +118,11 @@ · 93 unmodified lines | |||
| 119 | #define GICR_WAKER 0x0014 | 118 | #define GICR_WAKER 0x0014 |
| 120 | #define GICR_SETLPIR 0x0040 | 119 | #define GICR_SETLPIR 0x0040 |
| 121 | #define GICR_CLRLPIR 0x0048 | 120 | #define GICR_CLRLPIR 0x0048 |
| 122 | #define GICR_SEIR GICD_SEIR | ||
| 123 | #define GICR_PROPBASER 0x0070 | 121 | #define GICR_PROPBASER 0x0070 |
| 124 | #define GICR_PENDBASER 0x0078 | 122 | #define GICR_PENDBASER 0x0078 |
| 125 | #define GICR_INVLPIR 0x00A0 | 123 | #define GICR_INVLPIR 0x00A0 |
| 126 | #define GICR_INVALLR 0x00B0 | 124 | #define GICR_INVALLR 0x00B0 |
| 127 | #define GICR_SYNCR 0x00C0 | 125 | #define GICR_SYNCR 0x00C0 |
| 128 | #define GICR_MOVLPIR 0x0100 | ||
| 129 | #define GICR_MOVALLR 0x0110 | ||
| 130 | #define GICR_IDREGS GICD_IDREGS | 126 | #define GICR_IDREGS GICD_IDREGS |
| 131 | #define GICR_PIDR2 GICD_PIDR2 | 127 | #define GICR_PIDR2 GICD_PIDR2 |
| 132 | 128 | ||
| @@ -9,17 +9,6 @@ · 8 unmodified lines | |||
| 9 | 9 | ||
| 10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
| 11 | 11 | ||
| 12 | #define VIC_RAW_STATUS 0x08 | ||
| 13 | #define VIC_INT_ENABLE 0x10 /* 1 = enable, 0 = disable */ | ||
| 14 | #define VIC_INT_ENABLE_CLEAR 0x14 | ||
| 15 | |||
| 16 | struct device_node; | ||
| 17 | struct pt_regs; | ||
| 18 | |||
| 19 | void __vic_init(void __iomem *base, int parent_irq, int irq_start, | ||
| 20 | u32 vic_sources, u32 resume_sources, struct device_node *node); | ||
| 21 | void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); | 12 | void vic_init(void __iomem *base, unsigned int irq_start, u32 vic_sources, u32 resume_sources); |
| 22 | int vic_init_cascaded(void __iomem *base, unsigned int parent_irq, | ||
| 23 | u32 vic_sources, u32 resume_sources); | ||
| 24 | 13 | ||
| 25 | #endif | 14 | #endif |
| @@ -30,7 +30,7 @@ · 29 unmodified lines | |||
| 30 | */ | 30 | */ |
| 31 | #define LOCAL_MAILBOX_INT_CONTROL0 0x050 | 31 | #define LOCAL_MAILBOX_INT_CONTROL0 0x050 |
| 32 | /* | 32 | /* |
| 33 | * The CPU's interrupt status register. Bits are defined by the the | 33 | * The CPU's interrupt status register. Bits are defined by the |
| 34 | * LOCAL_IRQ_* bits below. | 34 | * LOCAL_IRQ_* bits below. |
| 35 | */ | 35 | */ |
| 36 | #define LOCAL_IRQ_PENDING0 0x060 | 36 | #define LOCAL_IRQ_PENDING0 0x060 |
| @@ -22,7 +22,6 @@ struct pt_regs; · 21 unmodified lines | |||
| 22 | * @irq_common_data: per irq and chip data passed down to chip functions | 22 | * @irq_common_data: per irq and chip data passed down to chip functions |
| 23 | * @kstat_irqs: irq stats per cpu | 23 | * @kstat_irqs: irq stats per cpu |
| 24 | * @handle_irq: highlevel irq-events handler | 24 | * @handle_irq: highlevel irq-events handler |
| 25 | * @preflow_handler: handler called before the flow handler (currently used by sparc) | ||
| 26 | * @action: the irq action chain | 25 | * @action: the irq action chain |
| 27 | * @status_use_accessors: status information | 26 | * @status_use_accessors: status information |
| 28 | * @core_internal_state__do_not_mess_with_it: core internal status information | 27 | * @core_internal_state__do_not_mess_with_it: core internal status information |
| @@ -58,9 +57,6 @@ struct irq_desc { · 29 unmodified lines | |||
| 58 | struct irq_data irq_data; | 57 | struct irq_data irq_data; |
| 59 | unsigned int __percpu *kstat_irqs; | 58 | unsigned int __percpu *kstat_irqs; |
| 60 | irq_flow_handler_t handle_irq; | 59 | irq_flow_handler_t handle_irq; |
| 61 | #ifdef CONFIG_IRQ_PREFLOW_FASTEOI | ||
| 62 | irq_preflow_handler_t preflow_handler; | ||
| 63 | #endif | ||
| 64 | struct irqaction *action; /* IRQ action list */ | 60 | struct irqaction *action; /* IRQ action list */ |
| 65 | unsigned int status_use_accessors; | 61 | unsigned int status_use_accessors; |
| 66 | unsigned int core_internal_state__do_not_mess_with_it; | 62 | 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, · 201 unmodified lines | |||
| 268 | } | 264 | } |
| 269 | } | 265 | } |
| 270 | 266 | ||
| 271 | #ifdef CONFIG_IRQ_PREFLOW_FASTEOI | ||
| 272 | static inline void | ||
| 273 | __irq_set_preflow_handler(unsigned int irq, irq_preflow_handler_t handler) | ||
| 274 | { | ||
| 275 | struct irq_desc *desc; | ||
| 276 | |||
| 277 | desc = irq_to_desc(irq); | ||
| 278 | desc->preflow_handler = handler; | ||
| 279 | } | ||
| 280 | #endif | ||
| 281 | |||
| 282 | #endif | 267 | #endif |
| @@ -10,6 +10,5 @@ · 9 unmodified lines | |||
| 10 | struct irq_desc; | 10 | struct irq_desc; |
| 11 | struct irq_data; | 11 | struct irq_data; |
| 12 | typedef void (*irq_flow_handler_t)(struct irq_desc *desc); | 12 | typedef void (*irq_flow_handler_t)(struct irq_desc *desc); |
| 13 | typedef void (*irq_preflow_handler_t)(struct irq_data *data); | ||
| 14 | 13 | ||
| 15 | #endif | 14 | #endif |