[U-Boot] [PATCH v4 1/7] armv8: lsch3: Add serdes and DDR voltage setup
Rajesh Bhagat
rajesh.bhagat at nxp.com
Fri Nov 10 06:54:44 UTC 2017
> -----Original Message-----
> From: York Sun
> Sent: Thursday, November 09, 2017 2:02 AM
> To: Rajesh Bhagat <rajesh.bhagat at nxp.com>; u-boot at lists.denx.de
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha at nxp.com>; Priyanka Jain
> <priyanka.jain at nxp.com>; Ashish Kumar <ashish.kumar at nxp.com>
> Subject: Re: [PATCH v4 1/7] armv8: lsch3: Add serdes and DDR voltage setup
>
> On 11/07/2017 02:37 AM, Rajesh Bhagat wrote:
> > Adds SERDES voltage and reset SERDES lanes API and makes
> > enable/disable DDR controller support 0.9V API common.
> >
> > Signed-off-by: Ashish Kumar <Ashish.Kumar at nxp.com>
> > Signed-off-by: Rajesh Bhagat <rajesh.bhagat at nxp.com>
> > ---
> > Changes in v4:
> > - Added local macros instead of magical numbers
> > - Created macros to remove duplicate code
> >
> > Changes in v3:
> > Restructured LS1088A VID support to use common VID driver Cosmetic
> > review comments fixed Added __iomem for accessing registers
> >
> > Changes in v2:
> > Checkpatch errors fixed
> >
> > .../cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c | 263
> +++++++++++++++++++++
> > arch/arm/cpu/armv8/fsl-layerscape/soc.c | 34 +--
> > .../include/asm/arch-fsl-layerscape/fsl_serdes.h | 2 +-
> > .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 34 +++
> > arch/arm/include/asm/arch-fsl-layerscape/soc.h | 1 +
> > 5 files changed, 316 insertions(+), 18 deletions(-)
> >
> > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c
> > b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c
> > index 179cac6..6fbfbed 100644
> > --- a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c
> > +++ b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c
> > @@ -158,6 +158,269 @@ void serdes_init(u32 sd, u32 sd_addr, u32 rcwsr, u32
> sd_prctl_mask,
> > serdes_prtcl_map[NONE] = 1;
> > }
> >
> > +__weak int get_serdes_volt(void)
> > +{
> > + return -1;
> > +}
> > +
> > +__weak int set_serdes_volt(int svdd)
> > +{
> > + return -1;
> > +}
> > +
> > +#define LNAGCR0_RESET_MASK 0xFF9FFFFF
> > +#define LNAGCR0_RT_RSTB 0x00600000
> > +#define RSTCTL_RESET_MASK_1 0xFFFFFFBF
> > +#define RSTCTL_RESET_MASK_2 0xFFFFFF1F
> > +#define RSTCTL_RESET_MASK_3 0xFFFFFFEF
> > +#define RSTCTL_RSTREQ 0x80000000
> > +#define RSTCTL_RSTERR 0x20000000
> > +#define RSTCTL_SDEN 0x00000020
> > +#define RSTCTL_SDRST_B 0x00000040
> > +#define RSTCTL_PLLRST_B 0x00000080
> > +#define RSTCTL_RST_DONE 0x40000000
> > +#define TCALCR_RESET_MASK 0xF7FFFFFF
> > +#define TCALCR_CALRST_B 0x08000000
> > +
> > +#define CAT2(x, y) CAT2_(x, y)
> > +#define CAT2_(x, y) x ## y
> > +
> > +#define CAT3(x, y, z) CAT3_(x, y, z)
> > +#define CAT3_(x, y, z) x ## y ## z
> > +
> > +#define DO_ENABLED_LANES_RESET(x) do { \
> > + cfg_tmp = CAT2(cfg_rcwsrds, x) & \
> > + CAT3(FSL_CHASSIS3_SRDS, x, _PRTCL_MASK); \
> > + cfg_tmp >>= CAT3(FSL_CHASSIS3_SRDS, x, _PRTCL_SHIFT); \
> > + \
> > + for (i = 0; i < 4 && cfg_tmp & (0xf << (3 - i)); i++) { \
> > + reg = in_le32(&CAT3(serdes, x, _base)->lane[i].gcr0); \
> > + reg &= LNAGCR0_RESET_MASK; \
> > + out_le32(&CAT3(serdes, x, _base)->lane[i].gcr0, reg); \
> > + } \
> > +} while (0)
> > +
>
> I don't like these macros. They break grep-ability. I understand you are trying to
> simply the code and reuse. There are other technique to do the same. I personally
> would use local functions with pointers to deal with serdes base, and use array to
> handle things like FSL_CHASSIS3_SRDS1_PRTCL_SHIFT and masks.
>
Will take care in v5
- Rajesh
> York
More information about the U-Boot
mailing list