Commit 4a68489e12313a7fa8740463dee0eea2985eb563

Authored by Shengzhou Liu
Committed by York Sun
1 parent 074596c0b5

drivers/ddr/fsl: update workaround for erratum A-008511

Per the latest erratum document, update step 4 and step 8, only
DEBUG_29[21] is changed, all other bits should not be changed.

Signed-off-by: Shengzhou Liu <Shengzhou.Liu@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>

Showing 2 changed files with 10 additions and 3 deletions Side-by-side Diff

drivers/ddr/fsl/fsl_ddr_gen4.c
... ... @@ -240,8 +240,10 @@
240 240 /* Disable DRAM VRef training */
241 241 ddr_out32(&ddr->ddr_cdr2,
242 242 regs->ddr_cdr2 & ~DDR_CDR2_VREF_TRAIN_EN);
243   - /* Disable deskew */
244   - ddr_out32(&ddr->debug[28], 0x400);
  243 + /* disable transmit bit deskew */
  244 + temp32 = ddr_in32(&ddr->debug[28]);
  245 + temp32 |= DDR_TX_BD_DIS;
  246 + ddr_out32(&ddr->debug[28], temp32);
245 247 /* Disable D_INIT */
246 248 ddr_out32(&ddr->sdram_cfg_2,
247 249 regs->ddr_sdram_cfg_2 & ~SDRAM_CFG2_D_INIT);
... ... @@ -358,7 +360,9 @@
358 360 debug("MR6 = 0x%08x\n", temp32);
359 361 }
360 362 ddr_out32(&ddr->sdram_md_cntl, 0);
361   - ddr_out32(&ddr->debug[28], 0); /* Enable deskew */
  363 + temp32 = ddr_in32(&ddr->debug[28]);
  364 + temp32 &= ~DDR_TX_BD_DIS; /* Enable deskew */
  365 + ddr_out32(&ddr->debug[28], temp32);
362 366 ddr_out32(&ddr->debug[1], 0x400); /* restart deskew */
363 367 /* wait for idle */
364 368 timeout = 40;
include/fsl_ddr_sdram.h
... ... @@ -189,6 +189,9 @@
189 189 #define DDR_MR5_CA_PARITY_LAT_4_CLK 0x1 /* for DDR4-1600/1866/2133 */
190 190 #define DDR_MR5_CA_PARITY_LAT_5_CLK 0x2 /* for DDR4-2400 */
191 191  
  192 +/* DEBUG_29 register */
  193 +#define DDR_TX_BD_DIS (1 << 10) /* Transmit Bit Deskew Disable */
  194 +
192 195  
193 196 #if (defined(CONFIG_SYS_FSL_DDR_VER) && \
194 197 (CONFIG_SYS_FSL_DDR_VER >= FSL_DDR_VER_4_7))