Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:

- a workaround for a GIC erratum

- a missing stub function for CONFIG_IRQDOMAIN=n

- fixes for a couple of type inconsistencies

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/crossbar: Fix incorrect type of register size
irqchip/gicv3-its: Add workaround for QDF2400 ITS erratum 0065
irqdomain: Add empty irq_domain_check_msi_remap
irqchip/crossbar: Fix incorrect type of local variables

+35 -4
+1
Documentation/arm64/silicon-errata.txt
··· 68 | | | | | 69 | Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | 70 | Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
··· 68 | | | | | 69 | Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | 70 | Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 | 71 + | Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 |
+10
arch/arm64/Kconfig
··· 508 509 If unsure, say Y. 510 511 endmenu 512 513
··· 508 509 If unsure, say Y. 510 511 + config QCOM_QDF2400_ERRATUM_0065 512 + bool "QDF2400 E0065: Incorrect GITS_TYPER.ITT_Entry_size" 513 + default y 514 + help 515 + On Qualcomm Datacenter Technologies QDF2400 SoC, ITS hardware reports 516 + ITE size incorrectly. The GITS_TYPER.ITT_Entry_size field should have 517 + been indicated as 16Bytes (0xf), not 8Bytes (0x7). 518 + 519 + If unsure, say Y. 520 + 521 endmenu 522 523
+4 -4
drivers/irqchip/irq-crossbar.c
··· 198 199 static int __init crossbar_of_init(struct device_node *node) 200 { 201 int i, size, reserved = 0; 202 - u32 max = 0, entry; 203 const __be32 *irqsr; 204 int ret = -ENOMEM; 205 ··· 276 if (!cb->register_offsets) 277 goto err_irq_map; 278 279 - of_property_read_u32(node, "ti,reg-size", &size); 280 281 - switch (size) { 282 case 1: 283 cb->write = crossbar_writeb; 284 break; ··· 304 continue; 305 306 cb->register_offsets[i] = reserved; 307 - reserved += size; 308 } 309 310 of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map);
··· 198 199 static int __init crossbar_of_init(struct device_node *node) 200 { 201 + u32 max = 0, entry, reg_size; 202 int i, size, reserved = 0; 203 const __be32 *irqsr; 204 int ret = -ENOMEM; 205 ··· 276 if (!cb->register_offsets) 277 goto err_irq_map; 278 279 + of_property_read_u32(node, "ti,reg-size", &reg_size); 280 281 + switch (reg_size) { 282 case 1: 283 cb->write = crossbar_writeb; 284 break; ··· 304 continue; 305 306 cb->register_offsets[i] = reserved; 307 + reserved += reg_size; 308 } 309 310 of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map);
+16
drivers/irqchip/irq-gic-v3-its.c
··· 1601 its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144; 1602 } 1603 1604 static const struct gic_quirk its_quirks[] = { 1605 #ifdef CONFIG_CAVIUM_ERRATUM_22375 1606 { ··· 1624 .iidr = 0xa100034c, /* ThunderX pass 1.x */ 1625 .mask = 0xffff0fff, 1626 .init = its_enable_quirk_cavium_23144, 1627 }, 1628 #endif 1629 {
··· 1601 its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144; 1602 } 1603 1604 + static void __maybe_unused its_enable_quirk_qdf2400_e0065(void *data) 1605 + { 1606 + struct its_node *its = data; 1607 + 1608 + /* On QDF2400, the size of the ITE is 16Bytes */ 1609 + its->ite_size = 16; 1610 + } 1611 + 1612 static const struct gic_quirk its_quirks[] = { 1613 #ifdef CONFIG_CAVIUM_ERRATUM_22375 1614 { ··· 1616 .iidr = 0xa100034c, /* ThunderX pass 1.x */ 1617 .mask = 0xffff0fff, 1618 .init = its_enable_quirk_cavium_23144, 1619 + }, 1620 + #endif 1621 + #ifdef CONFIG_QCOM_QDF2400_ERRATUM_0065 1622 + { 1623 + .desc = "ITS: QDF2400 erratum 0065", 1624 + .iidr = 0x00001070, /* QDF2400 ITS rev 1.x */ 1625 + .mask = 0xffffffff, 1626 + .init = its_enable_quirk_qdf2400_e0065, 1627 }, 1628 #endif 1629 {
+4
include/linux/irqdomain.h
··· 524 { 525 return NULL; 526 } 527 #endif /* !CONFIG_IRQ_DOMAIN */ 528 529 #endif /* _LINUX_IRQDOMAIN_H */
··· 524 { 525 return NULL; 526 } 527 + static inline bool irq_domain_check_msi_remap(void) 528 + { 529 + return false; 530 + } 531 #endif /* !CONFIG_IRQ_DOMAIN */ 532 533 #endif /* _LINUX_IRQDOMAIN_H */