summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLyrix liu <[email protected]>2026-05-22 16:06:22 +0800
committerFabio Estevam <[email protected]>2026-06-05 08:59:01 -0300
commit2d47fbc31d3db4d43d9c9b33432e9ef04d33bf0c (patch)
tree6ec4f8a19b327f7b2bd026dfb6f27a1d4f2b1b61
parent35c47a1eab776625d9a7454bac7f7615ee4c2582 (diff)
arm: gic-v3-its: Fix LPI pending table size calculation
The variable `pend_tab_total_sz` is calculated using the macro `LPI_PENDBASE_SZ`, which depends on the global variable `lpi_id_bits`. However, `lpi_id_bits` is initialized later in the function based on the GICD_TYPER register. This results in `pend_tab_total_sz` being calculated with an uninitialized `lpi_id_bits` value (0), This leads to the LPI pending tables being mapped with an incorrect size. Fixes: 60b9b47d295b ("Revert "arch: arm: use dt and UCLASS_SYSCON to get gic lpi details"") Signed-off-by: Lyrix liu <[email protected]> Signed-off-by: Ye Li <[email protected]>
-rw-r--r--arch/arm/lib/gic-v3-its.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm/lib/gic-v3-its.c b/arch/arm/lib/gic-v3-its.c
index 34f05e94672..d11a1ea436e 100644
--- a/arch/arm/lib/gic-v3-its.c
+++ b/arch/arm/lib/gic-v3-its.c
@@ -81,7 +81,7 @@ int gic_lpi_tables_init(u64 base, u32 num_redist)
int i;
u64 redist_lpi_base;
u64 pend_base;
- ulong pend_tab_total_sz = num_redist * LPI_PENDBASE_SZ;
+ ulong pend_tab_total_sz;
void *pend_tab_va;
if (gic_v3_its_get_gic_addr(&priv))
@@ -133,6 +133,7 @@ int gic_lpi_tables_init(u64 base, u32 num_redist)
}
redist_lpi_base = base + LPI_PROPBASE_SZ;
+ pend_tab_total_sz = num_redist * LPI_PENDBASE_SZ;
pend_tab_va = map_physmem(redist_lpi_base, pend_tab_total_sz,
MAP_NOCACHE);
memset(pend_tab_va, 0, pend_tab_total_sz);