diff mbox series

ddr: altera: n5x: Checking DDR DBE

Message ID 20221123141955.27691-1-jit.loon.lim@intel.com
State Needs Review / ACK, archived
Delegated to: Marek Vasut
Headers show
Series ddr: altera: n5x: Checking DDR DBE | expand

Commit Message

Jit Loon Lim Nov. 23, 2022, 2:19 p.m. UTC
From: Tien Fong Chee <tien.fong.chee@intel.com>

DDR need to be initialized and running calibration if DBE is triggered

Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
Signed-off-by: Jit Loon Lim <jit.loon.lim@intel.com>
---
 drivers/ddr/altera/sdram_n5x.c | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/drivers/ddr/altera/sdram_n5x.c b/drivers/ddr/altera/sdram_n5x.c
index d707bba862..7d4225e471 100644
--- a/drivers/ddr/altera/sdram_n5x.c
+++ b/drivers/ddr/altera/sdram_n5x.c
@@ -428,6 +428,17 @@  enum data_process {
 	LOADING
 };
 
+bool is_ddr_dbe_triggered(void)
+{
+	u32 reg = readl(socfpga_get_sysmgr_addr() +
+			SYSMGR_SOC64_BOOT_SCRATCH_COLD8);
+
+	if (reg & ALT_SYSMGR_SCRATCH_REG_8_DDR_DBE_MASK)
+		return true;
+
+	return false;
+}
+
 void ddr_init_inprogress(bool start)
 {
 	if (start)
@@ -486,17 +497,20 @@  bool is_ddr_init_skipped(u32 reg)
 
 	reset_type_print(reset_t);
 
-	if (reset_t == WARM_RESET) {
-		debug("%s: DDR init is skipped\n", __func__);
-		return true;
-	}
-
-	if (reset_t == COLD_RESET) {
-		if (is_ddr_retention_enabled(reg)) {
-			debug("%s: DDR retention bit is set\n", __func__);
+	if (!is_ddr_dbe_triggered()) {
+		if (reset_t == WARM_RESET) {
 			debug("%s: DDR init is skipped\n", __func__);
 			return true;
 		}
+
+		if (reset_t == COLD_RESET) {
+			if (is_ddr_retention_enabled(reg)) {
+				debug("%s: DDR retention bit is set\n",
+				      __func__);
+				debug("%s: DDR init is skipped\n", __func__);
+				return true;
+			}
+		}
 	}
 
 	debug("%s: DDR init is required\n", __func__);
@@ -508,7 +522,8 @@  bool is_ddr_calibration_skipped(u32 reg)
 	enum reset_type reset_t = get_reset_type(reg);
 
 	if ((reset_t == NCONFIG || reset_t == JTAG_CONFIG ||
-	    reset_t == RSU_RECONFIG) && is_ddr_retention_enabled(reg)) {
+	    reset_t == RSU_RECONFIG) && is_ddr_retention_enabled(reg) &&
+	    !is_ddr_dbe_triggered()) {
 		debug("%s: DDR retention bit is set\n", __func__);
 		return true;
 	}