]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
ARM: stm32: Report OTP-CLOSED instead of rev.? on closed STM32MP15xx
authorMarek Vasut <marex@denx.de>
Sun, 14 Apr 2024 18:39:29 +0000 (20:39 +0200)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Fri, 19 Apr 2024 09:32:41 +0000 (11:32 +0200)
SoC revision is only accessible via DBUMCU IDC register,
which requires BSEC.DENABLE DBGSWENABLE bit to be set to
make the register accessible, otherwise an access to the
register triggers bus fault. As BSEC.DBGSWENABLE is zero
in case of an OTP-CLOSED system, do NOT set DBGSWENABLE
bit as this might open a brief window for timing attacks.
Instead, report that this system is OTP-CLOSED and do not
report any SoC revision to avoid confusing users. Use an
SEC/C abbreviation to avoid growing SOC_NAME_SIZE .

Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
arch/arm/mach-stm32mp/stm32mp1/stm32mp15x.c

index afc56b02eea451636bce270349502dce45d8591a..dd99150fbc2507f663c7241026342f18706fc046 100644 (file)
@@ -322,8 +322,23 @@ void get_soc_name(char name[SOC_NAME_SIZE])
 
        get_cpu_string_offsets(&type, &pkg, &rev);
 
-       snprintf(name, SOC_NAME_SIZE, "STM32MP%s%s Rev.%s",
-                soc_type[type], soc_pkg[pkg], soc_rev[rev]);
+       if (bsec_dbgswenable()) {
+               snprintf(name, SOC_NAME_SIZE, "STM32MP%s%s Rev.%s",
+                        soc_type[type], soc_pkg[pkg], soc_rev[rev]);
+       } else {
+               /*
+                * SoC revision is only accessible via DBUMCU IDC register,
+                * which requires BSEC.DENABLE DBGSWENABLE bit to be set to
+                * make the register accessible, otherwise an access to the
+                * register triggers bus fault. As BSEC.DBGSWENABLE is zero
+                * in case of an OTP-CLOSED system, do NOT set DBGSWENABLE
+                * bit as this might open a brief window for timing attacks.
+                * Instead, report that this system is OTP-CLOSED and do not
+                * report any SoC revision to avoid confusing users.
+                */
+               snprintf(name, SOC_NAME_SIZE, "STM32MP%s%s SEC/C",
+                        soc_type[type], soc_pkg[pkg]);
+       }
 }
 
 static void setup_soc_type_pkg_rev(void)