[PATCH] ddr: fsl: Impl. Erratum A008109
Priyanka Jain
priyanka.jain at nxp.com
Tue Dec 17 09:55:32 CET 2019
>-----Original Message-----
>From: Joakim Tjernlund <Joakim.Tjernlund at infinera.com>
>Sent: Monday, November 25, 2019 2:06 PM
>To: Priyanka Jain <priyanka.jain at nxp.com>; u-boot at lists.denx.de
>Cc: York Sun <york.sun at nxp.com>
>Subject: Re: [PATCH] ddr: fsl: Impl. Erratum A008109
>
>On Wed, 2019-11-20 at 17:07 +0100, Joakim Tjernlund wrote:
>> Impl. erratum as descibed in errata doc.
>> Enable A008109 for T1040 and T1024
>>
>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund at infinera.com>
>> ---
>> arch/powerpc/cpu/mpc85xx/Kconfig | 2 ++
>> drivers/ddr/fsl/Kconfig | 3 +++
>> drivers/ddr/fsl/ctrl_regs.c | 6 ++++++
>> 3 files changed, 11 insertions(+)
>>
>> diff --git a/arch/powerpc/cpu/mpc85xx/Kconfig
>> b/arch/powerpc/cpu/mpc85xx/Kconfig
>> index 8cc82f80b4..6caf5c8389 100644
>> --- a/arch/powerpc/cpu/mpc85xx/Kconfig
>> +++ b/arch/powerpc/cpu/mpc85xx/Kconfig
>> @@ -1038,6 +1038,7 @@ config ARCH_T1040
>> select SYS_FSL_DDR_VER_50
>> select SYS_FSL_ERRATUM_A008044
>> select SYS_FSL_ERRATUM_A008378
>> + select SYS_FSL_ERRATUM_A008109
>> select SYS_FSL_ERRATUM_A009663
>> select SYS_FSL_ERRATUM_A009942
>> select SYS_FSL_ERRATUM_ESDHC111
>> @@ -1061,6 +1062,7 @@ config ARCH_T1042
>> select SYS_FSL_DDR_VER_50
>> select SYS_FSL_ERRATUM_A008044
>> select SYS_FSL_ERRATUM_A008378
>> + select SYS_FSL_ERRATUM_A008109
>> select SYS_FSL_ERRATUM_A009663
>> select SYS_FSL_ERRATUM_A009942
>> select SYS_FSL_ERRATUM_ESDHC111
>> diff --git a/drivers/ddr/fsl/Kconfig b/drivers/ddr/fsl/Kconfig index
>> 1b73df82de..f75d97b15c 100644
>> --- a/drivers/ddr/fsl/Kconfig
>> +++ b/drivers/ddr/fsl/Kconfig
>> @@ -151,6 +151,9 @@ endmenu
>> config SYS_FSL_ERRATUM_A008378
>> bool
>>
>> +config SYS_FSL_ERRATUM_A008109
>> + bool
>> +
>> config SYS_FSL_ERRATUM_A008511
>> bool
>>
>> diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c
>> index 98ccbb70de..d467160d0c 100644
>> --- a/drivers/ddr/fsl/ctrl_regs.c
>> +++ b/drivers/ddr/fsl/ctrl_regs.c
>> @@ -2626,6 +2626,12 @@ compute_fsl_memctl_config_regs(const unsigned
>int ctrl_num,
>> }
>> #endif
>>
>> +#ifdef CONFIG_SYS_FSL_ERRATUM_A008109
>> + ddr->ddr_sdram_cfg_2 = ddr_in32(&ddr->ddr_sdram_cfg_2) | 0x800;
>/* DDR_SLOW */
>> + ddr->debug[18] = ddr_in32(&ddrc->debug[18]) | 0x2;
>> + ddr->debug[28] = 0x30000000;
>> +#endif
>> +
>
>I just noticed something odd(buggy?). Each errata reads from DDR controller
>bug saves the new value in a RAM variable(ddr->debug[X]) but does not write
>values back to HW.
>
>As several erratas update the same register, this looses the previous data.
>Also, are theses errtas/debug stateless? Now the code tries gather all writes
>into a RAM variable and write the total change in one go later on, this will
>only work if all errata fixes are stateless.
>
It seems Errata fixes are not stateless.
We need to program HW register separately for each errata workaround.
In SoC chip errata document: section A-008109,
order of errata workaround implementation is mentioned
as first implement A-008378, then A-008109 and then A-009942.
Can you please check if things works fine at your end with this order.
Meanwhile I will also check within NXP.
>> #ifdef CONFIG_SYS_FSL_ERRATUM_A009942
>> ddr_freq = get_ddr_freq(ctrl_num) / 1000000;
>> ddr->debug[28] |= ddr_in32(&ddrc->debug[28]);
Priyanka
More information about the U-Boot
mailing list