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 | 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 | 1155 | static const struct acpi_probe_entry __acpi_probe_##name \ |
| 1155 | − __used __section(__##table##_acpi_probe_table) \ | |
| 1156 | − = { \ | |
| 1156 | + __used __section(__##table##_acpi_probe_table) = { \ | |
| 1157 | 1157 | .id = table_id, \ |
| 1158 | 1158 | .type = subtable, \ |
| 1159 | 1159 | .subtable_valid = valid, \ |
| 1160 | − .probe_table = (acpi_tbl_table_handler)fn, \ | |
| 1161 | − .driver_data = data, \ | |
| 1162 | − } | |
| 1160 | + .probe_table = fn, \ | |
| 1161 | + .driver_data = data, \ | |
| 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 | 1175 | #define ACPI_PROBE_TABLE(name) __##name##_acpi_probe_table |
| 1165 | 1176 | #define ACPI_PROBE_TABLE_END(name) __##name##_acpi_probe_table_end |
| @@ -12,7 +12,9 @@ · 11 unmodified lines | ||
| 12 | 12 | #define _LINUX_IRQCHIP_H |
| 13 | 13 | |
| 14 | 14 | #include <linux/acpi.h> |
| 15 | +#include <linux/module.h> | |
| 15 | 16 | #include <linux/of.h> |
| 17 | +#include <linux/platform_device.h> | |
| 16 | 18 | |
| 17 | 19 | /* |
| 18 | 20 | * This macro must be used by the different irqchip drivers to declare |
| @@ -26,6 +28,28 @@ · 7 unmodified lines | ||
| 26 | 28 | */ |
| 27 | 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 | 54 | * This macro must be used by the different irqchip drivers to declare |
| 31 | 55 | * the association between their version and their initialization function. |
| @@ -39,8 +63,9 @@ · 7 unmodified lines | ||
| 39 | 63 | * @fn: initialization function |
| 40 | 64 | */ |
| 41 | 65 | #define IRQCHIP_ACPI_DECLARE(name, subtable, validate, data, fn) \ |
| 42 | − ACPI_DECLARE_PROBE_ENTRY(irqchip, name, ACPI_SIG_MADT, \ | |
| 43 | − subtable, validate, data, fn) | |
| 66 | + ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(irqchip, name, \ | |
| 67 | + ACPI_SIG_MADT, subtable, \ | |
| 68 | + validate, data, fn) | |
| 44 | 69 | |
| 45 | 70 | #ifdef CONFIG_IRQCHIP |
| 46 | 71 | void irqchip_init(void); |
| @@ -19,7 +19,6 @@ · 18 unmodified lines | ||
| 19 | 19 | #define GICD_CLRSPI_NSR 0x0048 |
| 20 | 20 | #define GICD_SETSPI_SR 0x0050 |
| 21 | 21 | #define GICD_CLRSPI_SR 0x0058 |
| 22 | −#define GICD_SEIR 0x0068 | |
| 23 | 22 | #define GICD_IGROUPR 0x0080 |
| 24 | 23 | #define GICD_ISENABLER 0x0100 |
| 25 | 24 | #define GICD_ICENABLER 0x0180 |
| @@ -119,14 +118,11 @@ · 93 unmodified lines | ||
| 119 | 118 | #define GICR_WAKER 0x0014 |
| 120 | 119 | #define GICR_SETLPIR 0x0040 |
| 121 | 120 | #define GICR_CLRLPIR 0x0048 |
| 122 | −#define GICR_SEIR GICD_SEIR | |
| 123 | 121 | #define GICR_PROPBASER 0x0070 |
| 124 | 122 | #define GICR_PENDBASER 0x0078 |
| 125 | 123 | #define GICR_INVLPIR 0x00A0 |
| 126 | 124 | #define GICR_INVALLR 0x00B0 |
| 127 | 125 | #define GICR_SYNCR 0x00C0 |
| 128 | −#define GICR_MOVLPIR 0x0100 | |
| 129 | −#define GICR_MOVALLR 0x0110 | |
| 130 | 126 | #define GICR_IDREGS GICD_IDREGS |
| 131 | 127 | #define GICR_PIDR2 GICD_PIDR2 |
| 132 | 128 | |
| @@ -9,17 +9,6 @@ · 8 unmodified lines | ||
| 9 | 9 | |
| 10 | 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 | 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 | 14 | #endif |
| @@ -30,7 +30,7 @@ · 29 unmodified lines | ||
| 30 | 30 | */ |
| 31 | 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 | 34 | * LOCAL_IRQ_* bits below. |
| 35 | 35 | */ |
| 36 | 36 | #define LOCAL_IRQ_PENDING0 0x060 |
| @@ -22,7 +22,6 @@ struct pt_regs; · 21 unmodified lines | ||
| 22 | 22 | * @irq_common_data: per irq and chip data passed down to chip functions |
| 23 | 23 | * @kstat_irqs: irq stats per cpu |
| 24 | 24 | * @handle_irq: highlevel irq-events handler |
| 25 | − * @preflow_handler: handler called before the flow handler (currently used by sparc) | |
| 26 | 25 | * @action: the irq action chain |
| 27 | 26 | * @status_use_accessors: status information |
| 28 | 27 | * @core_internal_state__do_not_mess_with_it: core internal status information |
| @@ -58,9 +57,6 @@ struct irq_desc { · 29 unmodified lines | ||
| 58 | 57 | struct irq_data irq_data; |
| 59 | 58 | unsigned int __percpu *kstat_irqs; |
| 60 | 59 | irq_flow_handler_t handle_irq; |
| 61 | −#ifdef CONFIG_IRQ_PREFLOW_FASTEOI | |
| 62 | − irq_preflow_handler_t preflow_handler; | |
| 63 | −#endif | |
| 64 | 60 | struct irqaction *action; /* IRQ action list */ |
| 65 | 61 | unsigned int status_use_accessors; |
| 66 | 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 | 267 | #endif |
| @@ -10,6 +10,5 @@ · 9 unmodified lines | ||
| 10 | 10 | struct irq_desc; |
| 11 | 11 | struct irq_data; |
| 12 | 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 | 14 | #endif |