diff options
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/cmd_errata.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/ddr-gen2.c | 20 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/config_mpc85xx.h | 1 | 
3 files changed, 25 insertions, 0 deletions
| diff --git a/arch/powerpc/cpu/mpc85xx/cmd_errata.c b/arch/powerpc/cpu/mpc85xx/cmd_errata.c index 0478ec1ed..f0fa0f565 100644 --- a/arch/powerpc/cpu/mpc85xx/cmd_errata.c +++ b/arch/powerpc/cpu/mpc85xx/cmd_errata.c @@ -96,6 +96,10 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  #ifdef CONFIG_SYS_FSL_ERRATUM_IFC_A003399  	puts("Work-around for Erratum IFC A-003399 enabled\n");  #endif +#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_DDR120 +	if ((SVR_MAJ(svr) == 1) || IS_SVR_REV(svr, 2, 0)) +		puts("Work-around for Erratum NMG DDR120 enabled\n"); +#endif  	return 0;  } diff --git a/arch/powerpc/cpu/mpc85xx/ddr-gen2.c b/arch/powerpc/cpu/mpc85xx/ddr-gen2.c index 10f36856d..49000a19e 100644 --- a/arch/powerpc/cpu/mpc85xx/ddr-gen2.c +++ b/arch/powerpc/cpu/mpc85xx/ddr-gen2.c @@ -8,6 +8,7 @@  #include <common.h>  #include <asm/io.h> +#include <asm/processor.h>  #include <asm/fsl_ddr_sdram.h>  #if (CONFIG_CHIP_SELECTS_PER_CTRL > 4) @@ -22,6 +23,10 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,  	ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC83xx_DDR_ADDR;  #else  	ccsr_ddr_t *ddr = (void *)CONFIG_SYS_MPC85xx_DDR_ADDR; +#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_DDR120 +	ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); +	uint svr; +#endif  #endif  	if (ctrl_num) { @@ -29,6 +34,21 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,  		return;  	} +#ifdef CONFIG_SYS_FSL_ERRATUM_NMG_DDR120 +	/* +	 * Set the DDR IO receiver to an acceptable bias point. +	 * Fixed in Rev 2.1. +	 */ +	svr = get_svr(); +	if ((SVR_MAJ(svr) == 1) || IS_SVR_REV(svr, 2, 0)) { +		if ((regs->ddr_sdram_cfg & SDRAM_CFG_SDRAM_TYPE_MASK) == +		   SDRAM_CFG_SDRAM_TYPE_DDR2) +			out_be32(&gur->ddrioovcr, 0x90000000); +		else +			out_be32(&gur->ddrioovcr, 0xA8000000); +	} +#endif +  	for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {  		if (i == 0) {  			out_be32(&ddr->cs0_bnds, regs->cs[i].bnds); diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index f9bf80d07..a0a12b23e 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -62,6 +62,7 @@  #define CONFIG_SYS_FSL_NUM_LAWS		10  #define CONFIG_SYS_FSL_SEC_COMPAT	2  #define CONFIG_SYS_CCSRBAR_DEFAULT	0xff700000 +#define CONFIG_SYS_FSL_ERRATUM_NMG_DDR120  #elif defined(CONFIG_MPC8555)  #define CONFIG_MAX_CPUS			1 |