On 10/01/2018 06:20, Peng Fan wrote: > The i.MX7 cpu speed/temp code could be reused on i.MX8M, > so move them to common cpu code. > > Signed-off-by: Peng Fan <peng....@nxp.com> > Cc: Stefano Babic <sba...@denx.de> > Cc: Fabio Estevam <fabio.este...@nxp.com> > --- > arch/arm/mach-imx/cpu.c | 73 > +++++++++++++++++++++++++++++++++++++++++++++ > arch/arm/mach-imx/mx7/soc.c | 71 ------------------------------------------- > 2 files changed, 73 insertions(+), 71 deletions(-) > > diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c > index fae8b0a419..52dbafb50c 100644 > --- a/arch/arm/mach-imx/cpu.c > +++ b/arch/arm/mach-imx/cpu.c > @@ -333,6 +333,79 @@ void set_chipselect_size(int const cs_size) > } > #endif > > +#if defined(CONFIG_MX7) > +/* > + * OCOTP_TESTER3[9:8] (see Fusemap Description Table offset 0x440) > + * defines a 2-bit SPEED_GRADING > + */ > +#define OCOTP_TESTER3_SPEED_SHIFT 8 > +#define OCOTP_TESTER3_SPEED_800MHZ 0 > +#define OCOTP_TESTER3_SPEED_500MHZ 1 > +#define OCOTP_TESTER3_SPEED_1GHZ 2 > +#define OCOTP_TESTER3_SPEED_1P2GHZ 3 > + > +u32 get_cpu_speed_grade_hz(void) > +{ > + struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; > + struct fuse_bank *bank = &ocotp->bank[1]; > + struct fuse_bank1_regs *fuse = > + (struct fuse_bank1_regs *)bank->fuse_regs; > + uint32_t val; > + > + val = readl(&fuse->tester3); > + val >>= OCOTP_TESTER3_SPEED_SHIFT; > + val &= 0x3; > + > + switch(val) { > + case OCOTP_TESTER3_SPEED_800MHZ: > + return 800000000; > + case OCOTP_TESTER3_SPEED_500MHZ: > + return 500000000; > + case OCOTP_TESTER3_SPEED_1GHZ: > + return 1000000000; > + case OCOTP_TESTER3_SPEED_1P2GHZ: > + return 1200000000; > + } > + return 0; > +} > + > +/* > + * OCOTP_TESTER3[7:6] (see Fusemap Description Table offset 0x440) > + * defines a 2-bit SPEED_GRADING > + */ > +#define OCOTP_TESTER3_TEMP_SHIFT 6 > + > +u32 get_cpu_temp_grade(int *minc, int *maxc) > +{ > + struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; > + struct fuse_bank *bank = &ocotp->bank[1]; > + struct fuse_bank1_regs *fuse = > + (struct fuse_bank1_regs *)bank->fuse_regs; > + uint32_t val; > + > + val = readl(&fuse->tester3); > + val >>= OCOTP_TESTER3_TEMP_SHIFT; > + val &= 0x3; > + > + if (minc && maxc) { > + if (val == TEMP_AUTOMOTIVE) { > + *minc = -40; > + *maxc = 125; > + } else if (val == TEMP_INDUSTRIAL) { > + *minc = -40; > + *maxc = 105; > + } else if (val == TEMP_EXTCOMMERCIAL) { > + *minc = -20; > + *maxc = 105; > + } else { > + *minc = 0; > + *maxc = 95; > + } > + } > + return val; > +} > +#endif > + > #ifdef CONFIG_NXP_BOARD_REVISION > int nxp_board_rev(void) > { > diff --git a/arch/arm/mach-imx/mx7/soc.c b/arch/arm/mach-imx/mx7/soc.c > index d160e80146..032dfcf2ce 100644 > --- a/arch/arm/mach-imx/mx7/soc.c > +++ b/arch/arm/mach-imx/mx7/soc.c > @@ -97,77 +97,6 @@ struct imx_sec_config_fuse_t const imx_sec_config_fuse = { > }; > #endif > > -/* > - * OCOTP_TESTER3[9:8] (see Fusemap Description Table offset 0x440) > - * defines a 2-bit SPEED_GRADING > - */ > -#define OCOTP_TESTER3_SPEED_SHIFT 8 > -#define OCOTP_TESTER3_SPEED_800MHZ 0 > -#define OCOTP_TESTER3_SPEED_500MHZ 1 > -#define OCOTP_TESTER3_SPEED_1GHZ 2 > -#define OCOTP_TESTER3_SPEED_1P2GHZ 3 > - > -u32 get_cpu_speed_grade_hz(void) > -{ > - struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; > - struct fuse_bank *bank = &ocotp->bank[1]; > - struct fuse_bank1_regs *fuse = > - (struct fuse_bank1_regs *)bank->fuse_regs; > - uint32_t val; > - > - val = readl(&fuse->tester3); > - val >>= OCOTP_TESTER3_SPEED_SHIFT; > - val &= 0x3; > - > - switch(val) { > - case OCOTP_TESTER3_SPEED_800MHZ: > - return 800000000; > - case OCOTP_TESTER3_SPEED_500MHZ: > - return 500000000; > - case OCOTP_TESTER3_SPEED_1GHZ: > - return 1000000000; > - case OCOTP_TESTER3_SPEED_1P2GHZ: > - return 1200000000; > - } > - return 0; > -} > - > -/* > - * OCOTP_TESTER3[7:6] (see Fusemap Description Table offset 0x440) > - * defines a 2-bit SPEED_GRADING > - */ > -#define OCOTP_TESTER3_TEMP_SHIFT 6 > - > -u32 get_cpu_temp_grade(int *minc, int *maxc) > -{ > - struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; > - struct fuse_bank *bank = &ocotp->bank[1]; > - struct fuse_bank1_regs *fuse = > - (struct fuse_bank1_regs *)bank->fuse_regs; > - uint32_t val; > - > - val = readl(&fuse->tester3); > - val >>= OCOTP_TESTER3_TEMP_SHIFT; > - val &= 0x3; > - > - if (minc && maxc) { > - if (val == TEMP_AUTOMOTIVE) { > - *minc = -40; > - *maxc = 125; > - } else if (val == TEMP_INDUSTRIAL) { > - *minc = -40; > - *maxc = 105; > - } else if (val == TEMP_EXTCOMMERCIAL) { > - *minc = -20; > - *maxc = 105; > - } else { > - *minc = 0; > - *maxc = 95; > - } > - } > - return val; > -} > - > static bool is_mx7d(void) > { > struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; >
Reviewed-by: Stefano Babic <sba...@denx.de> Best regards, Stefano Babic -- ===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de ===================================================================== _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot