Hi Fabio,

On 22/11/2017 14:15, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.este...@nxp.com>
> 
> NXP development boards based on i.MX6/i.MX7 contain the board
> revision information stored in the fuses.
> 
> Introduce a common function that can be shared by different boards and
> convert mx6sabreauto to use this new mechanism.
> 
> Signed-off-by: Fabio Estevam <fabio.este...@nxp.com>
> ---
>  arch/arm/include/asm/mach-imx/sys_proto.h   |  3 ++
>  arch/arm/mach-imx/Kconfig                   |  8 +++++
>  arch/arm/mach-imx/cpu.c                     | 27 +++++++++++++++++
>  board/freescale/mx6sabreauto/mx6sabreauto.c | 47 
> ++---------------------------
>  configs/mx6sabreauto_defconfig              |  1 +
>  5 files changed, 41 insertions(+), 45 deletions(-)
> 
> diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h 
> b/arch/arm/include/asm/mach-imx/sys_proto.h
> index 7036343..d5e3eec 100644
> --- a/arch/arm/include/asm/mach-imx/sys_proto.h
> +++ b/arch/arm/include/asm/mach-imx/sys_proto.h
> @@ -109,6 +109,9 @@ void imx_set_wdog_powerdown(bool enable);
>  
>  int board_mmc_get_env_dev(int devno);
>  
> +int nxp_board_rev(void);
> +const char *nxp_board_rev_string(void);
> +
>  /*
>   * Initializes on-chip ethernet controllers.
>   * to override, implement board_eth_init()
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index cd8b8d2..81ab125 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -61,3 +61,11 @@ config CMD_HDMIDETECT
>       help
>         This enables the 'hdmidet' command which detects if an HDMI monitor
>         is connected.
> +
> +config NXP_BOARD_REVISION
> +     bool "Read NXP board revision from fuses"
> +     depends on ARCH_MX6 || ARCH_MX7
> +     help
> +       NXP boards based on i.MX6/7 contain the board revision information
> +       stored in the fuses. Select this option if you want to be able to
> +       retrieve the board revision information.
> diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
> index 18205dc..84e829e 100644
> --- a/arch/arm/mach-imx/cpu.c
> +++ b/arch/arm/mach-imx/cpu.c
> @@ -323,3 +323,30 @@ void set_chipselect_size(int const cs_size)
>  
>       writel(reg, &iomuxc_regs->gpr[1]);
>  }
> +
> +#ifdef CONFIG_NXP_BOARD_REVISION
> +int nxp_board_rev(void)
> +{
> +     /*
> +      * Get Board ID information from OCOTP_GP1[15:8]
> +      * RevA: 0x1
> +      * RevB: 0x2
> +      * RevC: 0x3
> +      */
> +     struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
> +     struct fuse_bank *bank = &ocotp->bank[4];
> +     struct fuse_bank4_regs *fuse =
> +                     (struct fuse_bank4_regs *)bank->fuse_regs;
> +
> +     return (readl(&fuse->gp1) >> 8 & 0x0F);
> +}
> +
> +const char *nxp_board_rev_string(void)
> +{
> +     char *rev = "A" - 1;
> +
> +     rev += nxp_board_rev();

I am applying this and I note this point. It looks like it does not do
what you meant.

rev is a char pointer, it is set to a a fix string ("A", maybe rodata),
and then the pointer is decreased to 1 (going to Nirvana ?).

Compiler is not happy, too, it notes that address is out of bounds.

I have also noted that mx6sxsabresd_spl_defconfig has not
CONFIG_NXP_BOARD_REVISION set, and build is broken. Can you take a look
and resend patch with fixes ?


Thanks,
Stefano

-- 
=====================================================================
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

Reply via email to