Skip to content

Commit ecade11

Browse files
committed
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
2 parents 106e4da + 920c634 commit ecade11

File tree

5 files changed

+35
-4
lines changed

5 files changed

+35
-4
lines changed

Documentation/arm64/silicon-errata.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,4 @@ stable kernels.
6868
| | | | |
6969
| Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
7070
| Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
71+
| Qualcomm Tech. | QDF2400 ITS | E0065 | QCOM_QDF2400_ERRATUM_0065 |

arch/arm64/Kconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,16 @@ config QCOM_FALKOR_ERRATUM_1009
508508

509509
If unsure, say Y.
510510

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+
511521
endmenu
512522

513523

drivers/irqchip/irq-crossbar.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ static const struct irq_domain_ops crossbar_domain_ops = {
198198

199199
static int __init crossbar_of_init(struct device_node *node)
200200
{
201+
u32 max = 0, entry, reg_size;
201202
int i, size, reserved = 0;
202-
u32 max = 0, entry;
203203
const __be32 *irqsr;
204204
int ret = -ENOMEM;
205205

@@ -276,9 +276,9 @@ static int __init crossbar_of_init(struct device_node *node)
276276
if (!cb->register_offsets)
277277
goto err_irq_map;
278278

279-
of_property_read_u32(node, "ti,reg-size", &size);
279+
of_property_read_u32(node, "ti,reg-size", &reg_size);
280280

281-
switch (size) {
281+
switch (reg_size) {
282282
case 1:
283283
cb->write = crossbar_writeb;
284284
break;
@@ -304,7 +304,7 @@ static int __init crossbar_of_init(struct device_node *node)
304304
continue;
305305

306306
cb->register_offsets[i] = reserved;
307-
reserved += size;
307+
reserved += reg_size;
308308
}
309309

310310
of_property_read_u32(node, "ti,irqs-safe-map", &cb->safe_map);

drivers/irqchip/irq-gic-v3-its.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,6 +1601,14 @@ static void __maybe_unused its_enable_quirk_cavium_23144(void *data)
16011601
its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_23144;
16021602
}
16031603

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+
16041612
static const struct gic_quirk its_quirks[] = {
16051613
#ifdef CONFIG_CAVIUM_ERRATUM_22375
16061614
{
@@ -1617,6 +1625,14 @@ static const struct gic_quirk its_quirks[] = {
16171625
.mask = 0xffff0fff,
16181626
.init = its_enable_quirk_cavium_23144,
16191627
},
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+
},
16201636
#endif
16211637
{
16221638
}

include/linux/irqdomain.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,10 @@ static inline struct irq_domain *irq_find_matching_fwnode(
524524
{
525525
return NULL;
526526
}
527+
static inline bool irq_domain_check_msi_remap(void)
528+
{
529+
return false;
530+
}
527531
#endif /* !CONFIG_IRQ_DOMAIN */
528532

529533
#endif /* _LINUX_IRQDOMAIN_H */

0 commit comments

Comments
 (0)