imx: ele_ahab: Implement display_life_cycle() for i.MX95

The register reflects lifecycle and some lifecycle-derived state of
i.MX95 has new offset address and layout, so display_life_cycle() is
added specifically for it.

Signed-off-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Alice Guo <alice.guo@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
Ye Li
2025-09-26 09:51:21 -03:00
committed by Fabio Estevam
parent 54e4b1c36b
commit 226a606c10
+52 -3
View File
@@ -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)
#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);