[U-Boot] [PATCH v2 12/19] arm: socfpga: Add DDR driver for Arria 10

Chee, Tien Fong
2017-09-27T04:55:14Z

On Sel, 2017-09-26 at 12:35 +0200, Marek Vasut wrote:
> On 09/26/2017 10:20 AM, Chee, Tien Fong wrote:
> >
> > On Isn, 2017-09-25 at 11:19 +0200, Marek Vasut wrote:
> > >
> > > On 09/25/2017 10:40 AM, tien.fong.chee at intel.com wrote:
> > > >
> > > >
> > > > From: Tien Fong Chee <tien.fong.chee@intel.com>
> > > >
> > > > Add DDR driver suppport for Arria 10.
> > > >
> > > > Signed-off-by: Tien Fong Chee <tien.fong.chee@intel.com>
> > > > ---
> > > >  arch/arm/mach-socfpga/include/mach/sdram.h         |   2 +
> > > >  arch/arm/mach-socfpga/include/mach/sdram_arria10.h | 103 ++-
> > > >  drivers/ddr/altera/sdram_arria10.c                 | 735
> > > > +++++++++++++++++++++
> > > >  3 files changed, 839 insertions(+), 1 deletion(-)
> > > >  create mode 100644 drivers/ddr/altera/sdram_arria10.c
> > > >
> > > > diff --git a/arch/arm/mach-socfpga/include/mach/sdram.h
> > > > b/arch/arm/mach-socfpga/include/mach/sdram.h
> > > > index 4a9754e..b833fc2 100644
> > > > --- a/arch/arm/mach-socfpga/include/mach/sdram.h
> > > > +++ b/arch/arm/mach-socfpga/include/mach/sdram.h
> > > > @@ -10,6 +10,8 @@
> > > >
> > > >  #if defined(CONFIG_TARGET_SOCFPGA_GEN5)
> > > >  #include <asm/arch/sdram_gen5.h>
> > > > +#elif defined(CONFIG_TARGET_SOCFPGA_ARRIA10)
> > > > +#include <asm/arch/sdram_arria10.h>
> > > >  #endif
> > > >
> > > >  #endif
> > > > diff --git a/arch/arm/mach-socfpga/include/mach/sdram_arria10.h
> > > > b/arch/arm/mach-socfpga/include/mach/sdram_arria10.h
> > > > index 1d7b7c1..7af9431 100644
> > > > --- a/arch/arm/mach-socfpga/include/mach/sdram_arria10.h
> > > > +++ b/arch/arm/mach-socfpga/include/mach/sdram_arria10.h
> > > > @@ -1,5 +1,5 @@
> > > >  /*
> > > > - * Copyright (C) 2015-2017 Intel Corporation <www.intel.com>
> > > > + * Copyright (C) 2017 Intel Corporation <www.intel.com>
> > > >   *
> > > >   * SPDX-License-Identifier: GPL-2.0
> > > >   */
> > > > @@ -8,6 +8,7 @@
> > > >  #define _SOCFPGA_SDRAM_ARRIA10_H_
> > > >
> > > >  #ifndef __ASSEMBLY__
> > > > +int ddr_calibration_sequence(void);
> > > >
> > > >  struct socfpga_ecc_hmc {
> > > >   u32 ip_rev_id;
> > > > @@ -204,6 +205,106 @@ struct socfpga_io48_mmr {
> > > >   u32 niosreserve1;
> > > >   u32 niosreserve2;
> > > >  };
> > > > +
> > > > +union dramaddrw_reg {
> > > > + struct {
> > > > + u32 cfg_col_addr_width:5;
> > > > + u32 cfg_row_addr_width:5;
> > > > + u32 cfg_bank_addr_width:4;
> > > > + u32 cfg_bank_group_addr_width:2;
> > > > + u32 cfg_cs_addr_width:3;
> > > > + u32 reserved:13;
> > > > + };
> > > Use regular macros for bitfields, not this crap.
> > >
> > Why regular macros is prefered? Above implementation improve
> > readability, simplify the implementation and saving memory.
> Because that's how U-Boot does it (and the above afair breaks on
> different endianness).
>
Okay.
> >
> > >
> > > >
> > > >
> > > > + u32 word;
> > > > +};
> > > > +
> > > > +union ctrlcfg0_reg {
> > > > + struct {
> > > > + u32 cfg_mem_type:4;
> > > > + u32 cfg_dimm_type:3;
> > > > + u32 cfg_ac_pos:2;
> > > > + u32 cfg_ctrl_burst_len:5;
> > > > + u32 reserved:18;  /* Other fields unused */
> > > > + };
> > > > + u32 word;
> > > > +};
> > > [...]
> [...]
>