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

Merge tag 'irqchip-5.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent

Pull irqchip updates for 5.1 from Marc Zyngier:

- irqsteer error handling fix
- GICv3 range coalescing fix
- stm32 coprocessor coexistence fixes
- mbigen MSI teardown fix
- non-DT secondary GIC infrastructure removed
- various cleanups (brcmstb-l2, mmp)
- new DT bindings (r8a774c0)

+32 -48
+1
Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt
··· 16 16 - "renesas,irqc-r8a7793" (R-Car M2-N) 17 17 - "renesas,irqc-r8a7794" (R-Car E2) 18 18 - "renesas,intc-ex-r8a774a1" (RZ/G2M) 19 + - "renesas,intc-ex-r8a774c0" (RZ/G2E) 19 20 - "renesas,intc-ex-r8a7795" (R-Car H3) 20 21 - "renesas,intc-ex-r8a7796" (R-Car M3-W) 21 22 - "renesas,intc-ex-r8a77965" (R-Car M3-N)
+1 -1
arch/arm/mach-cns3xxx/core.c
··· 90 90 /* used by entry-macro.S */ 91 91 void __init cns3xxx_init_irq(void) 92 92 { 93 - gic_init(0, 29, IOMEM(CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT), 93 + gic_init(IOMEM(CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT), 94 94 IOMEM(CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT)); 95 95 } 96 96
+2 -2
drivers/irqchip/irq-brcmstb-l2.c
··· 275 275 return ret; 276 276 } 277 277 278 - int __init brcmstb_l2_edge_intc_of_init(struct device_node *np, 278 + static int __init brcmstb_l2_edge_intc_of_init(struct device_node *np, 279 279 struct device_node *parent) 280 280 { 281 281 return brcmstb_l2_intc_of_init(np, parent, &l2_edge_intc_init); 282 282 } 283 283 IRQCHIP_DECLARE(brcmstb_l2_intc, "brcm,l2-intc", brcmstb_l2_edge_intc_of_init); 284 284 285 - int __init brcmstb_l2_lvl_intc_of_init(struct device_node *np, 285 + static int __init brcmstb_l2_lvl_intc_of_init(struct device_node *np, 286 286 struct device_node *parent) 287 287 { 288 288 return brcmstb_l2_intc_of_init(np, parent, &l2_lvl_intc_init);
+1 -1
drivers/irqchip/irq-gic-v3-its.c
··· 1482 1482 ra = container_of(a, struct lpi_range, entry); 1483 1483 rb = container_of(b, struct lpi_range, entry); 1484 1484 1485 - return rb->base_id - ra->base_id; 1485 + return ra->base_id - rb->base_id; 1486 1486 } 1487 1487 1488 1488 static void merge_lpi_ranges(void)
+16 -29
drivers/irqchip/irq-gic.c
··· 1089 1089 #endif 1090 1090 } 1091 1091 1092 - static int gic_init_bases(struct gic_chip_data *gic, int irq_start, 1092 + static int gic_init_bases(struct gic_chip_data *gic, 1093 1093 struct fwnode_handle *handle) 1094 1094 { 1095 - irq_hw_number_t hwirq_base; 1096 - int gic_irqs, irq_base, ret; 1095 + int gic_irqs, ret; 1097 1096 1098 1097 if (IS_ENABLED(CONFIG_GIC_NON_BANKED) && gic->percpu_offset) { 1099 1098 /* Frankein-GIC without banked registers... */ ··· 1144 1145 } else { /* Legacy support */ 1145 1146 /* 1146 1147 * For primary GICs, skip over SGIs. 1147 - * For secondary GICs, skip over PPIs, too. 1148 + * No secondary GIC support whatsoever. 1148 1149 */ 1149 - if (gic == &gic_data[0] && (irq_start & 31) > 0) { 1150 - hwirq_base = 16; 1151 - if (irq_start != -1) 1152 - irq_start = (irq_start & ~31) + 16; 1153 - } else { 1154 - hwirq_base = 32; 1155 - } 1150 + int irq_base; 1156 1151 1157 - gic_irqs -= hwirq_base; /* calculate # of irqs to allocate */ 1152 + gic_irqs -= 16; /* calculate # of irqs to allocate */ 1158 1153 1159 - irq_base = irq_alloc_descs(irq_start, 16, gic_irqs, 1154 + irq_base = irq_alloc_descs(16, 16, gic_irqs, 1160 1155 numa_node_id()); 1161 1156 if (irq_base < 0) { 1162 - WARN(1, "Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n", 1163 - irq_start); 1164 - irq_base = irq_start; 1157 + WARN(1, "Cannot allocate irq_descs @ IRQ16, assuming pre-allocated\n"); 1158 + irq_base = 16; 1165 1159 } 1166 1160 1167 1161 gic->domain = irq_domain_add_legacy(NULL, gic_irqs, irq_base, 1168 - hwirq_base, &gic_irq_domain_ops, gic); 1162 + 16, &gic_irq_domain_ops, gic); 1169 1163 } 1170 1164 1171 1165 if (WARN_ON(!gic->domain)) { ··· 1187 1195 } 1188 1196 1189 1197 static int __init __gic_init_bases(struct gic_chip_data *gic, 1190 - int irq_start, 1191 1198 struct fwnode_handle *handle) 1192 1199 { 1193 1200 char *name; ··· 1222 1231 gic_init_chip(gic, NULL, name, false); 1223 1232 } 1224 1233 1225 - ret = gic_init_bases(gic, irq_start, handle); 1234 + ret = gic_init_bases(gic, handle); 1226 1235 if (ret) 1227 1236 kfree(name); 1228 1237 1229 1238 return ret; 1230 1239 } 1231 1240 1232 - void __init gic_init(unsigned int gic_nr, int irq_start, 1233 - void __iomem *dist_base, void __iomem *cpu_base) 1241 + void __init gic_init(void __iomem *dist_base, void __iomem *cpu_base) 1234 1242 { 1235 1243 struct gic_chip_data *gic; 1236 - 1237 - if (WARN_ON(gic_nr >= CONFIG_ARM_GIC_MAX_NR)) 1238 - return; 1239 1244 1240 1245 /* 1241 1246 * Non-DT/ACPI systems won't run a hypervisor, so let's not ··· 1239 1252 */ 1240 1253 static_branch_disable(&supports_deactivate_key); 1241 1254 1242 - gic = &gic_data[gic_nr]; 1255 + gic = &gic_data[0]; 1243 1256 gic->raw_dist_base = dist_base; 1244 1257 gic->raw_cpu_base = cpu_base; 1245 1258 1246 - __gic_init_bases(gic, irq_start, NULL); 1259 + __gic_init_bases(gic, NULL); 1247 1260 } 1248 1261 1249 1262 static void gic_teardown(struct gic_chip_data *gic) ··· 1386 1399 if (ret) 1387 1400 return ret; 1388 1401 1389 - ret = gic_init_bases(*gic, -1, &dev->of_node->fwnode); 1402 + ret = gic_init_bases(*gic, &dev->of_node->fwnode); 1390 1403 if (ret) { 1391 1404 gic_teardown(*gic); 1392 1405 return ret; ··· 1446 1459 if (gic_cnt == 0 && !gic_check_eoimode(node, &gic->raw_cpu_base)) 1447 1460 static_branch_disable(&supports_deactivate_key); 1448 1461 1449 - ret = __gic_init_bases(gic, -1, &node->fwnode); 1462 + ret = __gic_init_bases(gic, &node->fwnode); 1450 1463 if (ret) { 1451 1464 gic_teardown(gic); 1452 1465 return ret; ··· 1637 1650 return -ENOMEM; 1638 1651 } 1639 1652 1640 - ret = __gic_init_bases(gic, -1, domain_handle); 1653 + ret = __gic_init_bases(gic, domain_handle); 1641 1654 if (ret) { 1642 1655 pr_err("Failed to initialise GIC\n"); 1643 1656 irq_domain_free_fwnode(domain_handle);
+6 -2
drivers/irqchip/irq-imx-irqsteer.c
··· 169 169 170 170 raw_spin_lock_init(&data->lock); 171 171 172 - of_property_read_u32(np, "fsl,num-irqs", &irqs_num); 173 - of_property_read_u32(np, "fsl,channel", &data->channel); 172 + ret = of_property_read_u32(np, "fsl,num-irqs", &irqs_num); 173 + if (ret) 174 + return ret; 175 + ret = of_property_read_u32(np, "fsl,channel", &data->channel); 176 + if (ret) 177 + return ret; 174 178 175 179 /* 176 180 * There is one output irq for each group of 64 inputs.
+3
drivers/irqchip/irq-mbigen.c
··· 161 161 void __iomem *base = d->chip_data; 162 162 u32 val; 163 163 164 + if (!msg->address_lo && !msg->address_hi) 165 + return; 166 + 164 167 base += get_mbigen_vec_reg(d->hwirq); 165 168 val = readl_relaxed(base); 166 169
+1 -1
drivers/irqchip/irq-mmp.c
··· 179 179 return 0; 180 180 } 181 181 182 - const struct irq_domain_ops mmp_irq_domain_ops = { 182 + static const struct irq_domain_ops mmp_irq_domain_ops = { 183 183 .map = mmp_irq_domain_map, 184 184 .xlate = mmp_irq_domain_xlate, 185 185 };
-10
drivers/irqchip/irq-stm32-exti.c
··· 716 716 const struct stm32_exti_bank *stm32_bank; 717 717 struct stm32_exti_chip_data *chip_data; 718 718 void __iomem *base = h_data->base; 719 - u32 irqs_mask; 720 719 721 720 stm32_bank = h_data->drv_data->exti_banks[bank_idx]; 722 721 chip_data = &h_data->chips_data[bank_idx]; ··· 724 725 725 726 raw_spin_lock_init(&chip_data->rlock); 726 727 727 - /* Determine number of irqs supported */ 728 - writel_relaxed(~0UL, base + stm32_bank->rtsr_ofst); 729 - irqs_mask = readl_relaxed(base + stm32_bank->rtsr_ofst); 730 - 731 728 /* 732 729 * This IP has no reset, so after hot reboot we should 733 730 * clear registers to avoid residue 734 731 */ 735 732 writel_relaxed(0, base + stm32_bank->imr_ofst); 736 733 writel_relaxed(0, base + stm32_bank->emr_ofst); 737 - writel_relaxed(0, base + stm32_bank->rtsr_ofst); 738 - writel_relaxed(0, base + stm32_bank->ftsr_ofst); 739 - writel_relaxed(~0UL, base + stm32_bank->rpr_ofst); 740 - if (stm32_bank->fpr_ofst != UNDEF_REG) 741 - writel_relaxed(~0UL, base + stm32_bank->fpr_ofst); 742 734 743 735 pr_info("%pOF: bank%d\n", h_data->node, bank_idx); 744 736
+1 -2
include/linux/irqchip/arm-gic.h
··· 158 158 * Legacy platforms not converted to DT yet must use this to init 159 159 * their GIC 160 160 */ 161 - void gic_init(unsigned int nr, int start, 162 - void __iomem *dist , void __iomem *cpu); 161 + void gic_init(void __iomem *dist , void __iomem *cpu); 163 162 164 163 int gicv2m_init(struct fwnode_handle *parent_handle, 165 164 struct irq_domain *parent);