diff --git a/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c b/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c index 31c7d80510418e1d87514d7ee1838e5b3dfb35a4..29dc2674c8c34ebb8ef74a7993850e5f9d9beb2b 100644 --- a/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c +++ b/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c @@ -175,6 +175,11 @@ int tegra_bpmp_init(void) } else { ERROR("BPMP not powered on\n"); + + /* bpmp is not present in the system */ + bpmp_init_state = BPMP_NOT_PRESENT; + + /* communication timed out */ ret = -ETIMEDOUT; } } @@ -185,8 +190,11 @@ int tegra_bpmp_init(void) void tegra_bpmp_suspend(void) { /* freeze the interface */ - bpmp_init_state = BPMP_SUSPEND_ENTRY; - flush_dcache_range((uint64_t)&bpmp_init_state, sizeof(bpmp_init_state)); + if (bpmp_init_state == BPMP_INIT_COMPLETE) { + bpmp_init_state = BPMP_SUSPEND_ENTRY; + flush_dcache_range((uint64_t)&bpmp_init_state, + sizeof(bpmp_init_state)); + } } void tegra_bpmp_resume(void) diff --git a/plat/nvidia/tegra/include/drivers/bpmp.h b/plat/nvidia/tegra/include/drivers/bpmp.h index 0046f6cc7617722a6ac423f144e480c67aa0dd55..dc3fb6b614d8da88c4481373ac9063bddb826372 100644 --- a/plat/nvidia/tegra/include/drivers/bpmp.h +++ b/plat/nvidia/tegra/include/drivers/bpmp.h @@ -27,6 +27,7 @@ #define SIGN_OF_LIFE 0xAAAAAAAAU /* flags to indicate bpmp driver's state */ +#define BPMP_NOT_PRESENT 0xF00DBEEFU #define BPMP_INIT_COMPLETE 0xBEEFF00DU #define BPMP_INIT_PENDING 0xDEADBEEFU #define BPMP_SUSPEND_ENTRY 0xF00DCAFEU