summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/ele_ahab.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2025-10-06 13:20:24 -0600
committerTom Rini <trini@konsulko.com>2025-10-06 13:20:24 -0600
commit0eaa4b337336dbbe93395d1f2ccc18937eaafea2 (patch)
treec01e661d69181dceca68f56a4849a9bd04608521 /arch/arm/mach-imx/ele_ahab.c
parente50b1e8715011def8aff1588081a2649a2c6cd47 (diff)
parent4e4a9de31de2a5f395ee25c59e4026422fbcb27e (diff)
Merge branch 'next'
Merge the outstanding changes from the 'next' branch to master.
Diffstat (limited to 'arch/arm/mach-imx/ele_ahab.c')
-rw-r--r--arch/arm/mach-imx/ele_ahab.c55
1 files changed, 52 insertions, 3 deletions
diff --git a/arch/arm/mach-imx/ele_ahab.c b/arch/arm/mach-imx/ele_ahab.c
index 647daeb6562..38e671e3935 100644
--- a/arch/arm/mach-imx/ele_ahab.c
+++ b/arch/arm/mach-imx/ele_ahab.c
@@ -411,6 +411,54 @@ static int do_authenticate(struct cmd_tbl *cmdtp, int flag, int argc,
return CMD_RET_SUCCESS;
}
+#if IS_ENABLED(CONFIG_IMX95) || IS_ENABLED(CONFIG_IMX94)
+#define FSB_LC_OFFSET 0x414
+#define LC_OEM_OPEN 0x10
+static void display_life_cycle(u32 lc)
+{
+ printf("Lifecycle: 0x%08X, ", lc);
+ switch (lc) {
+ case 0x1:
+ printf("BLANK\n\n");
+ break;
+ case 0x2:
+ printf("FAB Default\n\n");
+ break;
+ case 0x4:
+ printf("FAB\n\n");
+ break;
+ case 0x8:
+ printf("NXP Provisioned\n\n");
+ break;
+ case 0x10:
+ printf("OEM Open\n\n");
+ break;
+ case 0x20:
+ printf("OEM secure world closed\n\n");
+ break;
+ case 0x40:
+ printf("OEM closed\n\n");
+ break;
+ case 0x80:
+ printf("OEM Locked\n\n");
+ break;
+ case 0x100:
+ printf("Field Return OEM\n\n");
+ break;
+ case 0x200:
+ printf("Field Return NXP\n\n");
+ break;
+ case 0x400:
+ printf("BRICKED\n\n");
+ break;
+ default:
+ printf("Unknown\n\n");
+ break;
+ }
+}
+#else
+#define FSB_LC_OFFSET 0x41c
+#define LC_OEM_OPEN 0x8
static void display_life_cycle(u32 lc)
{
printf("Lifecycle: 0x%08X, ", lc);
@@ -447,6 +495,7 @@ static void display_life_cycle(u32 lc)
break;
}
}
+#endif
static int confirm_close(void)
{
@@ -474,10 +523,10 @@ static int do_ahab_close(struct cmd_tbl *cmdtp, int flag, int argc,
if (!confirm_close())
return -EACCES;
- lc = readl(FSB_BASE_ADDR + 0x41c);
+ lc = readl(FSB_BASE_ADDR + FSB_LC_OFFSET);
lc &= 0x3ff;
- if (lc != 0x8) {
+ if (lc != LC_OEM_OPEN) {
puts("Current lifecycle is NOT OEM open, can't move to OEM closed\n");
display_life_cycle(lc);
return -EPERM;
@@ -540,7 +589,7 @@ static int do_ahab_status(struct cmd_tbl *cmdtp, int flag, int argc, char *const
u32 cnt = AHAB_MAX_EVENTS;
int ret;
- lc = readl(FSB_BASE_ADDR + 0x41c);
+ lc = readl(FSB_BASE_ADDR + FSB_LC_OFFSET);
lc &= 0x3ff;
display_life_cycle(lc);