summaryrefslogtreecommitdiff
path: root/plat/nvidia
diff options
context:
space:
mode:
Diffstat (limited to 'plat/nvidia')
-rw-r--r--plat/nvidia/tegra/common/drivers/bpmp/bpmp.c12
-rw-r--r--plat/nvidia/tegra/include/drivers/bpmp.h1
2 files changed, 11 insertions, 2 deletions
diff --git a/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c b/plat/nvidia/tegra/common/drivers/bpmp/bpmp.c
index 31c7d805..29dc2674 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 0046f6cc..dc3fb6b6 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