summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGatien Chevallier <gatien.chevallier@foss.st.com>2026-02-10 11:26:05 +0100
committerPatrice Chotard <patrice.chotard@foss.st.com>2026-02-24 17:49:43 +0100
commitc61d6f67f46f05149182b33c3c0ba5d9b6b46889 (patch)
tree1cf1f24096194521e20b5d3703a09f4d8ff9111f
parent9d3a9080c9fb57186dd90be4cfa8ac9759f0d823 (diff)
ARM: stm32mp: Check secure state first
Secure state must be checked before handling semaphores, otherwise it can cause an IAC. Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com> Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com> Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
-rw-r--r--arch/arm/mach-stm32mp/stm32mp2/rifsc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/arm/mach-stm32mp/stm32mp2/rifsc.c b/arch/arm/mach-stm32mp/stm32mp2/rifsc.c
index 0ef086bb956..9db8b9efc64 100644
--- a/arch/arm/mach-stm32mp/stm32mp2/rifsc.c
+++ b/arch/arm/mach-stm32mp/stm32mp2/rifsc.c
@@ -141,6 +141,12 @@ static int rifsc_check_access(void *base, u32 id)
cid_reg_value = readl(base + RIFSC_RISC_PER0_CIDCFGR(id));
sem_reg_value = readl(base + RIFSC_RISC_PER0_SEMCR(id));
+ /* Check security configuration */
+ if (sec_reg_value & BIT(reg_offset)) {
+ log_debug("Invalid security configuration for peripheral %d\n", id);
+ return -EACCES;
+ }
+
/* Skip cid check if CID filtering isn't enabled */
if (!(cid_reg_value & CIDCFGR_CFEN))
goto skip_cid_check;
@@ -162,12 +168,6 @@ static int rifsc_check_access(void *base, u32 id)
}
skip_cid_check:
- /* Check security configuration */
- if (sec_reg_value & BIT(reg_offset)) {
- log_debug("Invalid security configuration for peripheral %d\n", id);
- return -EACCES;
- }
-
return 0;
}