[U-Boot] [PATCH] driver/ddr: Fix DDR4 driver for ARM

Jon Loeliger loeliger at gmail.com
Wed Jun 18 16:57:22 CEST 2014


On Tue, Jun 17, 2014 at 5:07 PM, York Sun <yorksun at freescale.com> wrote:
> Previously the driver was only tested on Power SoCs. Minor fix is needed
> for ARM SoCs.
>
> Signed-off-by: York Sun <yorksun at freescale.com>


Hi York!


> --- a/drivers/ddr/fsl/fsl_ddr_gen4.c
> +++ b/drivers/ddr/fsl/fsl_ddr_gen4.c

> @@ -183,12 +184,20 @@ step2:
>          * we choose the max, that is 500 us for all of case.
>          */
>         udelay(500);
> +#ifdef CONFIG_PPC
>         asm volatile("sync;isync");
> +#else
> +       asm volatile("dsb sy;isb");
> +#endif
>
>         /* Let the controller go */
>         temp_sdram_cfg = ddr_in32(&ddr->sdram_cfg) & ~SDRAM_CFG_BI;
>         ddr_out32(&ddr->sdram_cfg, temp_sdram_cfg | SDRAM_CFG_MEM_EN);
> +#ifdef CONFIG_PPC
>         asm volatile("sync;isync");
> +#else
> +       asm volatile("dsb sy;isb");
> +#endif
>
>         total_gb_size_per_controller = 0;
>         for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {

This is a great example where we should try to introduce better abstractions
in much the same way that Linux has.  Specifically, we (U-Boot) collective
might work toward some common lower-level abstractions such as a
memory_barrier() (and variants), and let those generic names get mapped
into architecture-specific implementations via a linked binding.  Then this
code would not need to change, nor would #ifdefs be needed.

HTH,
jdl


More information about the U-Boot mailing list