diff options
-rw-r--r-- | Documentation/admin-guide/kernel-parameters.txt | 8 | ||||
-rw-r--r-- | drivers/irqchip/irq-gic-v3.c | 10 |
2 files changed, 17 insertions, 1 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 1d1d53f85ddd..60130231db3b 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt | |||
@@ -1743,6 +1743,14 @@ | |||
1743 | of a GICv2 controller even if the memory range | 1743 | of a GICv2 controller even if the memory range |
1744 | exposed by the device tree is too small. | 1744 | exposed by the device tree is too small. |
1745 | 1745 | ||
1746 | irqchip.gicv3_nolpi= | ||
1747 | [ARM, ARM64] | ||
1748 | Force the kernel to ignore the availability of | ||
1749 | LPIs (and by consequence ITSs). Intended for system | ||
1750 | that use the kernel as a bootloader, and thus want | ||
1751 | to let secondary kernels in charge of setting up | ||
1752 | LPIs. | ||
1753 | |||
1746 | irqfixup [HW] | 1754 | irqfixup [HW] |
1747 | When an interrupt is not handled search all handlers | 1755 | When an interrupt is not handled search all handlers |
1748 | for it. Intended to get systems with badly broken | 1756 | for it. Intended to get systems with badly broken |
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index 0ea02504115d..3e9eeb6cb294 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c | |||
@@ -613,9 +613,17 @@ static void gic_cpu_sys_reg_init(void) | |||
613 | pr_crit_once("RSS is required but GICD doesn't support it\n"); | 613 | pr_crit_once("RSS is required but GICD doesn't support it\n"); |
614 | } | 614 | } |
615 | 615 | ||
616 | static bool gicv3_nolpi; | ||
617 | |||
618 | static int __init gicv3_nolpi_cfg(char *buf) | ||
619 | { | ||
620 | return strtobool(buf, &gicv3_nolpi); | ||
621 | } | ||
622 | early_param("irqchip.gicv3_nolpi", gicv3_nolpi_cfg); | ||
623 | |||
616 | static int gic_dist_supports_lpis(void) | 624 | static int gic_dist_supports_lpis(void) |
617 | { | 625 | { |
618 | return !!(readl_relaxed(gic_data.dist_base + GICD_TYPER) & GICD_TYPER_LPIS); | 626 | return !!(readl_relaxed(gic_data.dist_base + GICD_TYPER) & GICD_TYPER_LPIS) && !gicv3_nolpi; |
619 | } | 627 | } |
620 | 628 | ||
621 | static void gic_cpu_init(void) | 629 | static void gic_cpu_init(void) |