Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch irq/misc-6.2 into irq/irqchip-next

* irq/misc-6.2:
: .
: Random minor fixes and improvments:
:
: - More Loongson fixes after the Loongarch merge
:
: - Error handling fixes for wpcm450, GIC...
:
: - BE detection for a FSL controller
:
: - Declare the Sifive PLIC as wake-up agnostic
:
: - Simplify fishing out the device data for the ST irqchip
:
: - Mark some data structures as __initconst in the apple-aic driver
:
: - Switch over from strtobool to kstrtobool
:
: - COMPILET_TEST fixes
:
: - and the mandatory "repeated word" commit...
: .
irqchip/ls-extirq: Fix endianness detection
irqchip/gic: Use kstrtobool() instead of strtobool()
irqchip/sifive-plic: Support wake IRQs
irqchip/loongson-liointc: Fix improper error handling in liointc_init()
irqchip/sl28cpld: Replace irqchip mask_invert with unmask_base
irqchip/wpcm450: Fix memory leak in wpcm450_aic_of_init()
irqchip/st: Use device_get_match_data() to simplify the code
irqchip/al-fic: Drop obsolete dependency on COMPILE_TEST
irqchip: gic-pm: Use pm_runtime_resume_and_get() in gic_probe()
irqchip/mips-gic: Drop repeated word in comment
irqchip/apple-aic: Mark aic_info structs __initconst

Signed-off-by: Marc Zyngier <maz@kernel.org>

+22 -20
+1 -1
drivers/irqchip/Kconfig
··· 86 86 87 87 config AL_FIC 88 88 bool "Amazon's Annapurna Labs Fabric Interrupt Controller" 89 - depends on OF || COMPILE_TEST 89 + depends on OF 90 90 select GENERIC_IRQ_CHIP 91 91 select IRQ_DOMAIN 92 92 help
+3 -3
drivers/irqchip/irq-apple-aic.c
··· 248 248 bool fast_ipi; 249 249 }; 250 250 251 - static const struct aic_info aic1_info = { 251 + static const struct aic_info aic1_info __initconst = { 252 252 .version = 1, 253 253 254 254 .event = AIC_EVENT, 255 255 .target_cpu = AIC_TARGET_CPU, 256 256 }; 257 257 258 - static const struct aic_info aic1_fipi_info = { 258 + static const struct aic_info aic1_fipi_info __initconst = { 259 259 .version = 1, 260 260 261 261 .event = AIC_EVENT, ··· 264 264 .fast_ipi = true, 265 265 }; 266 266 267 - static const struct aic_info aic2_info = { 267 + static const struct aic_info aic2_info __initconst = { 268 268 .version = 2, 269 269 270 270 .irq_cfg = AIC2_IRQ_CFG,
+1 -1
drivers/irqchip/irq-gic-pm.c
··· 102 102 103 103 pm_runtime_enable(dev); 104 104 105 - ret = pm_runtime_get_sync(dev); 105 + ret = pm_runtime_resume_and_get(dev); 106 106 if (ret < 0) 107 107 goto rpm_disable; 108 108
+2 -1
drivers/irqchip/irq-gic-v3.c
··· 12 12 #include <linux/delay.h> 13 13 #include <linux/interrupt.h> 14 14 #include <linux/irqdomain.h> 15 + #include <linux/kstrtox.h> 15 16 #include <linux/of.h> 16 17 #include <linux/of_address.h> 17 18 #include <linux/of_irq.h> ··· 1172 1171 1173 1172 static int __init gicv3_nolpi_cfg(char *buf) 1174 1173 { 1175 - return strtobool(buf, &gicv3_nolpi); 1174 + return kstrtobool(buf, &gicv3_nolpi); 1176 1175 } 1177 1176 early_param("irqchip.gicv3_nolpi", gicv3_nolpi_cfg); 1178 1177
+2 -1
drivers/irqchip/irq-gic.c
··· 19 19 */ 20 20 #include <linux/init.h> 21 21 #include <linux/kernel.h> 22 + #include <linux/kstrtox.h> 22 23 #include <linux/err.h> 23 24 #include <linux/module.h> 24 25 #include <linux/list.h> ··· 1333 1332 1334 1333 static int __init gicv2_force_probe_cfg(char *buf) 1335 1334 { 1336 - return strtobool(buf, &gicv2_force_probe); 1335 + return kstrtobool(buf, &gicv2_force_probe); 1337 1336 } 1338 1337 early_param("irqchip.gicv2_force_probe", gicv2_force_probe_cfg); 1339 1338
+4 -1
drivers/irqchip/irq-loongson-liointc.c
··· 212 212 "reg-names", core_reg_names[i]); 213 213 214 214 if (index < 0) 215 - goto out_iounmap; 215 + continue; 216 216 217 217 priv->core_isr[i] = of_iomap(node, index); 218 218 } 219 + 220 + if (!priv->core_isr[0]) 221 + goto out_iounmap; 219 222 } 220 223 221 224 /* Setup IRQ domain */
+1 -1
drivers/irqchip/irq-ls-extirq.c
··· 203 203 if (ret) 204 204 goto err_parse_map; 205 205 206 - priv->big_endian = of_device_is_big_endian(parent); 206 + priv->big_endian = of_device_is_big_endian(node->parent); 207 207 priv->is_ls1021a_or_ls1043a = of_device_is_compatible(node, "fsl,ls1021a-extirq") || 208 208 of_device_is_compatible(node, "fsl,ls1043a-extirq"); 209 209 raw_spin_lock_init(&priv->lock);
+1 -1
drivers/irqchip/irq-mips-gic.c
··· 494 494 map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin; 495 495 496 496 /* 497 - * If adding support for more per-cpu interrupts, keep the the 497 + * If adding support for more per-cpu interrupts, keep the 498 498 * array in gic_all_vpes_irq_cpu_online() in sync. 499 499 */ 500 500 switch (intr) {
+4 -2
drivers/irqchip/irq-sifive-plic.c
··· 187 187 .irq_set_affinity = plic_set_affinity, 188 188 #endif 189 189 .irq_set_type = plic_irq_set_type, 190 - .flags = IRQCHIP_AFFINITY_PRE_STARTUP, 190 + .flags = IRQCHIP_SKIP_SET_WAKE | 191 + IRQCHIP_AFFINITY_PRE_STARTUP, 191 192 }; 192 193 193 194 static struct irq_chip plic_chip = { ··· 202 201 .irq_set_affinity = plic_set_affinity, 203 202 #endif 204 203 .irq_set_type = plic_irq_set_type, 205 - .flags = IRQCHIP_AFFINITY_PRE_STARTUP, 204 + .flags = IRQCHIP_SKIP_SET_WAKE | 205 + IRQCHIP_AFFINITY_PRE_STARTUP, 206 206 }; 207 207 208 208 static int plic_irq_set_type(struct irq_data *d, unsigned int type)
+1 -2
drivers/irqchip/irq-sl28cpld.c
··· 65 65 irqchip->chip.num_irqs = ARRAY_SIZE(sl28cpld_irqs); 66 66 irqchip->chip.num_regs = 1; 67 67 irqchip->chip.status_base = base + INTC_IP; 68 - irqchip->chip.mask_base = base + INTC_IE; 69 - irqchip->chip.mask_invert = true; 68 + irqchip->chip.unmask_base = base + INTC_IE; 70 69 irqchip->chip.ack_base = base + INTC_IP; 71 70 72 71 return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev),
+1 -6
drivers/irqchip/irq-st.c
··· 153 153 static int st_irq_syscfg_probe(struct platform_device *pdev) 154 154 { 155 155 struct device_node *np = pdev->dev.of_node; 156 - const struct of_device_id *match; 157 156 struct st_irq_syscfg *ddata; 158 157 159 158 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); 160 159 if (!ddata) 161 160 return -ENOMEM; 162 161 163 - match = of_match_device(st_irq_syscfg_match, &pdev->dev); 164 - if (!match) 165 - return -ENODEV; 166 - 167 - ddata->syscfg = (unsigned int)match->data; 162 + ddata->syscfg = (unsigned int) device_get_match_data(&pdev->dev); 168 163 169 164 ddata->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg"); 170 165 if (IS_ERR(ddata->regmap)) {
+1
drivers/irqchip/irq-wpcm450-aic.c
··· 146 146 aic->regs = of_iomap(node, 0); 147 147 if (!aic->regs) { 148 148 pr_err("Failed to map WPCM450 AIC registers\n"); 149 + kfree(aic); 149 150 return -ENOMEM; 150 151 } 151 152