[U-Boot] [PATCH 1/2] ls102x: add soc version function

Add get_svr_ver_major() and get_svr_ver_minor() helper.
Signed-off-by: Shengzhou Liu Shengzhou.Liu@freescale.com --- arch/arm/cpu/armv7/ls102xa/cpu.c | 14 ++++++++++++++ arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h | 3 +++ 2 files changed, 17 insertions(+)
diff --git a/arch/arm/cpu/armv7/ls102xa/cpu.c b/arch/arm/cpu/armv7/ls102xa/cpu.c index 14ae2a3..9253ea3 100644 --- a/arch/arm/cpu/armv7/ls102xa/cpu.c +++ b/arch/arm/cpu/armv7/ls102xa/cpu.c @@ -209,6 +209,20 @@ void enable_caches(void) } #endif /* #ifndef CONFIG_SYS_DCACHE_OFF */
+u32 get_svr_ver_major(void) +{ + struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + + return SVR_MAJ(in_be32(&gur->svr)); +} + +u32 get_svr_ver_minor(void) +{ + struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); + + return SVR_MIN(in_be32(&gur->svr)); +} + #if defined(CONFIG_DISPLAY_CPUINFO) int print_cpuinfo(void) { diff --git a/arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h b/arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h index c59c93a..4a996b8 100644 --- a/arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h +++ b/arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h @@ -427,4 +427,7 @@ struct ccsr_ahci { u32 pberr; /* port 0/1 BIST error */ u32 cmds; /* port 0/1 CMD status error */ }; + +u32 get_svr_ver_major(void); +u32 get_svr_ver_minor(void); #endif /* __ASM_ARCH_LS102XA_IMMAP_H_ */

DDR Errata A008378 only exists on LS102x Rev1, it has been fixed on LS102x Rev2.
Signed-off-by: Shengzhou Liu Shengzhou.Liu@freescale.com --- drivers/ddr/fsl/arm_ddr_gen3.c | 11 +++++++++++ drivers/ddr/fsl/fsl_ddr_gen4.c | 9 ++++++--- 2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/ddr/fsl/arm_ddr_gen3.c b/drivers/ddr/fsl/arm_ddr_gen3.c index c139da6..e059b83 100644 --- a/drivers/ddr/fsl/arm_ddr_gen3.c +++ b/drivers/ddr/fsl/arm_ddr_gen3.c @@ -152,6 +152,17 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, } }
+#ifdef CONFIG_SYS_FSL_ERRATUM_A008378 +#include <asm/arch-ls102xa/immap_ls102xa.h> +#define IS_ACC_ECC_EN(v) ((v) & 0x4) +#define IS_DBI(v) ((((v) >> 12) & 0x3) == 0x2) + if (get_svr_ver_major() < 2) { + if (IS_ACC_ECC_EN(regs->ddr_sdram_cfg) || + IS_DBI(regs->ddr_sdram_cfg_3)) + ddr_setbits32(ddr->debug[28], 0x9 << 20); + } +#endif + /* * For RDIMMs, JEDEC spec requires clocks to be stable before reset is * deasserted. Clocks start when any chip select is enabled and clock diff --git a/drivers/ddr/fsl/fsl_ddr_gen4.c b/drivers/ddr/fsl/fsl_ddr_gen4.c index 4eef047..0b0bcd2 100644 --- a/drivers/ddr/fsl/fsl_ddr_gen4.c +++ b/drivers/ddr/fsl/fsl_ddr_gen4.c @@ -172,12 +172,15 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, } } #ifdef CONFIG_SYS_FSL_ERRATUM_A008378 +#include <asm/arch-ls102xa/immap_ls102xa.h> /* Erratum applies when accumulated ECC is used, or DBI is enabled */ #define IS_ACC_ECC_EN(v) ((v) & 0x4) #define IS_DBI(v) ((((v) >> 12) & 0x3) == 0x2) - if (IS_ACC_ECC_EN(regs->ddr_sdram_cfg) || - IS_DBI(regs->ddr_sdram_cfg_3)) - ddr_setbits32(ddr->debug[28], 0x9 << 20); + if (get_svr_ver_major() < 2) { + if (IS_ACC_ECC_EN(regs->ddr_sdram_cfg) || + IS_DBI(regs->ddr_sdram_cfg_3)) + ddr_setbits32(ddr->debug[28], 0x9 << 20); + } #endif
/*

On 11/19/2015 01:57 AM, Shengzhou Liu wrote:
DDR Errata A008378 only exists on LS102x Rev1, it has been fixed on LS102x Rev2.
Shengzhou,
I have different document for this erratum. We will discuss internally.
York
participants (2)
-
Shengzhou Liu
-
York Sun