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
Unified · Split
| @@ -68,3 +68,4 @@ stable kernels. · 67 unmodified lines | ||
| 68 | 68 | | | | | | |
| 69 | 69 | | Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | |
| 70 | 70 | | Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 | |
| 71 | +| Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 | | |
| @@ -508,6 +508,16 @@ config QCOM_FALKOR_ERRATUM_1009 · 507 unmodified lines | ||
| 508 | 508 | |
| 509 | 509 | If unsure, say Y. |
| 510 | 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 | + | |
| 511 | 521 | endmenu |
| 512 | 522 | |
| 513 | 523 | |
| @@ -198,8 +198,8 @@ static const struct irq_domain_ops crossbar_domain_ops = { · 197 unmodified lines | ||
| 198 | 198 | |
| 199 | 199 | static int __init crossbar_of_init(struct device_node *node) |
| 200 | 200 | { |
| 201 | + u32 max = 0, entry, reg_size; | |
| 201 | 202 | int i, size, reserved = 0; |
| 202 | − u32 max = 0, entry; | |
| 203 | 203 | const __be32 *irqsr; |
| 204 | 204 | int ret = -ENOMEM; |
| 205 | 205 | |
| @@ -276,9 +276,9 @@ static int __init crossbar_of_init(struct device_node *node) · 70 unmodified lines | ||
| 276 | 276 | if (!cb->register_offsets) |
| 277 | 277 | goto err_irq_map; |
| 278 | 278 | |
| 279 | − of_property_read_u32(node, "ti,reg-size", &size); | |
| 279 | + of_property_read_u32(node, "ti,reg-size", ®_size); | |
| 280 | 280 | |
| 281 | − switch (size) { | |
| 281 | + switch (reg_size) { | |
| 282 | 282 | case 1: |
| 283 | 283 | cb->write = crossbar_writeb; |
| 284 | 284 | break; |
| @@ -304,7 +304,7 @@ static int __init crossbar_of_init(struct device_node *node) · 19 unmodified lines | ||
| 304 | 304 | continue; |
| 305 | 305 | |
| 306 | 306 | cb->register_offsets[i] = reserved; |
| 307 | − reserved += size; | |
| 307 | + reserved += reg_size; | |
| 308 | 308 | } |
| 309 | 309 | |
| 310 | 310 | of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map); |
| @@ -1601,6 +1601,14 @@ static void __maybe_unused its_enable_quirk_cavium_23144(void *data) · 1600 unmodified lines | ||
| 1601 | 1601 | its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144; |
| 1602 | 1602 | } |
| 1603 | 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 | + | |
| 1604 | 1612 | static const struct gic_quirk its_quirks[] = { |
| 1605 | 1613 | #ifdef CONFIG_CAVIUM_ERRATUM_22375 |
| 1606 | 1614 | { |
| @@ -1617,6 +1625,14 @@ static const struct gic_quirk its_quirks[] = { · 10 unmodified lines | ||
| 1617 | 1625 | .mask = 0xffff0fff, |
| 1618 | 1626 | .init = its_enable_quirk_cavium_23144, |
| 1619 | 1627 | }, |
| 1628 | +#endif | |
| 1629 | +#ifdef CONFIG_QCOM_QDF2400_ERRATUM_0065 | |
| 1630 | + { | |
| 1631 | + .desc = "ITS: QDF2400 erratum 0065", | |
| 1632 | + .iidr = 0x00001070, /* QDF2400 ITS rev 1.x */ | |
| 1633 | + .mask = 0xffffffff, | |
| 1634 | + .init = its_enable_quirk_qdf2400_e0065, | |
| 1635 | + }, | |
| 1620 | 1636 | #endif |
| 1621 | 1637 | { |
| 1622 | 1638 | } |
| @@ -524,6 +524,10 @@ static inline struct irq_domain *irq_find_matching_fwnode( · 523 unmodified lines | ||
| 524 | 524 | { |
| 525 | 525 | return NULL; |
| 526 | 526 | } |
| 527 | +static inline bool irq_domain_check_msi_remap(void) | |
| 528 | +{ | |
| 529 | + return false; | |
| 530 | +} | |
| 527 | 531 | #endif /* !CONFIG_IRQ_DOMAIN */ |
| 528 | 532 | |
| 529 | 533 | #endif /* _LINUX_IRQDOMAIN_H */ |