diff options
-rw-r--r-- | Documentation/arm64/silicon-errata.txt | 1 | ||||
-rw-r--r-- | arch/arm64/Kconfig | 10 | ||||
-rw-r--r-- | drivers/irqchip/irq-crossbar.c | 8 | ||||
-rw-r--r-- | drivers/irqchip/irq-gic-v3-its.c | 16 | ||||
-rw-r--r-- | include/linux/irqdomain.h | 4 |
5 files changed, 35 insertions, 4 deletions
diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt index a71b8095dbd8..2f66683500b8 100644 --- a/Documentation/arm64/silicon-errata.txt +++ b/Documentation/arm64/silicon-errata.txt | |||
@@ -68,3 +68,4 @@ stable kernels. | |||
68 | | | | | | | 68 | | | | | | |
69 | | Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | | 69 | | Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | |
70 | | Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 | | 70 | | Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 | |
71 | | Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 | | ||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index a39029b5414e..8c7c244247b6 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -508,6 +508,16 @@ config QCOM_FALKOR_ERRATUM_1009 | |||
508 | 508 | ||
509 | If unsure, say Y. | 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 | endmenu | 521 | endmenu |
512 | 522 | ||
513 | 523 | ||
diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c index 05bbf171df37..f96601268f71 100644 --- a/drivers/irqchip/irq-crossbar.c +++ b/drivers/irqchip/irq-crossbar.c | |||
@@ -198,8 +198,8 @@ static const struct irq_domain_ops crossbar_domain_ops = { | |||
198 | 198 | ||
199 | static int __init crossbar_of_init(struct device_node *node) | 199 | static int __init crossbar_of_init(struct device_node *node) |
200 | { | 200 | { |
201 | u32 max = 0, entry, reg_size; | ||
201 | int i, size, reserved = 0; | 202 | int i, size, reserved = 0; |
202 | u32 max = 0, entry; | ||
203 | const __be32 *irqsr; | 203 | const __be32 *irqsr; |
204 | int ret = -ENOMEM; | 204 | int ret = -ENOMEM; |
205 | 205 | ||
@@ -276,9 +276,9 @@ static int __init crossbar_of_init(struct device_node *node) | |||
276 | if (!cb->register_offsets) | 276 | if (!cb->register_offsets) |
277 | goto err_irq_map; | 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 | case 1: | 282 | case 1: |
283 | cb->write = crossbar_writeb; | 283 | cb->write = crossbar_writeb; |
284 | break; | 284 | break; |
@@ -304,7 +304,7 @@ static int __init crossbar_of_init(struct device_node *node) | |||
304 | continue; | 304 | continue; |
305 | 305 | ||
306 | cb->register_offsets[i] = reserved; | 306 | cb->register_offsets[i] = reserved; |
307 | reserved += size; | 307 | reserved += reg_size; |
308 | } | 308 | } |
309 | 309 | ||
310 | of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map); | 310 | of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map); |
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 23201004fd7a..f77f840d2b5f 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c | |||
@@ -1601,6 +1601,14 @@ static void __maybe_unused its_enable_quirk_cavium_23144(void *data) | |||
1601 | its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144; | 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 | static const struct gic_quirk its_quirks[] = { | 1612 | static const struct gic_quirk its_quirks[] = { |
1605 | #ifdef CONFIG_CAVIUM_ERRATUM_22375 | 1613 | #ifdef CONFIG_CAVIUM_ERRATUM_22375 |
1606 | { | 1614 | { |
@@ -1618,6 +1626,14 @@ static const struct gic_quirk its_quirks[] = { | |||
1618 | .init = its_enable_quirk_cavium_23144, | 1626 | .init = its_enable_quirk_cavium_23144, |
1619 | }, | 1627 | }, |
1620 | #endif | 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 | }, | ||
1636 | #endif | ||
1621 | { | 1637 | { |
1622 | } | 1638 | } |
1623 | }; | 1639 | }; |
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index 188eced6813e..9f3616085423 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h | |||
@@ -524,6 +524,10 @@ static inline struct irq_domain *irq_find_matching_fwnode( | |||
524 | { | 524 | { |
525 | return NULL; | 525 | return NULL; |
526 | } | 526 | } |
527 | static inline bool irq_domain_check_msi_remap(void) | ||
528 | { | ||
529 | return false; | ||
530 | } | ||
527 | #endif /* !CONFIG_IRQ_DOMAIN */ | 531 | #endif /* !CONFIG_IRQ_DOMAIN */ |
528 | 532 | ||
529 | #endif /* _LINUX_IRQDOMAIN_H */ | 533 | #endif /* _LINUX_IRQDOMAIN_H */ |