All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision
@ 2017-11-22 13:15 Fabio Estevam
  2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Fabio Estevam @ 2017-11-22 13:15 UTC (permalink / raw)
  To: u-boot

From: Fabio Estevam <fabio.estevam@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.estevam@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();
+
+	return rev;
+}
+#endif
diff --git a/board/freescale/mx6sabreauto/mx6sabreauto.c b/board/freescale/mx6sabreauto/mx6sabreauto.c
index bdeb5f7..ced254a 100644
--- a/board/freescale/mx6sabreauto/mx6sabreauto.c
+++ b/board/freescale/mx6sabreauto/mx6sabreauto.c
@@ -397,39 +397,9 @@ int board_eth_init(bd_t *bis)
 	return cpu_eth_init(bis);
 }
 
-#define BOARD_REV_B  0x200
-#define BOARD_REV_A  0x100
-
-static int mx6sabre_rev(void)
-{
-	/*
-	 * Get Board ID information from OCOTP_GP1[15:8]
-	 * i.MX6Q ARD RevA: 0x01
-	 * i.MX6Q ARD RevB: 0x02
-	 */
-	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;
-	int reg = readl(&fuse->gp1);
-	int ret;
-
-	switch (reg >> 8 & 0x0F) {
-	case 0x02:
-		ret = BOARD_REV_B;
-		break;
-	case 0x01:
-	default:
-		ret = BOARD_REV_A;
-		break;
-	}
-
-	return ret;
-}
-
 u32 get_board_rev(void)
 {
-	int rev = mx6sabre_rev();
+	int rev = nxp_board_rev();
 
 	return (get_cpu_rev() & ~(0xF << 8)) | rev;
 }
@@ -703,20 +673,7 @@ int board_late_init(void)
 
 int checkboard(void)
 {
-	int rev = mx6sabre_rev();
-	char *revname;
-
-	switch (rev) {
-	case BOARD_REV_B:
-		revname = "B";
-		break;
-	case BOARD_REV_A:
-	default:
-		revname = "A";
-		break;
-	}
-
-	printf("Board: MX6Q-Sabreauto rev%s\n", revname);
+	printf("Board: MX6Q-Sabreauto rev%s\n", nxp_board_rev_string());
 
 	return 0;
 }
diff --git a/configs/mx6sabreauto_defconfig b/configs/mx6sabreauto_defconfig
index 418a836..215700b 100644
--- a/configs/mx6sabreauto_defconfig
+++ b/configs/mx6sabreauto_defconfig
@@ -8,6 +8,7 @@ CONFIG_SPL_MMC_SUPPORT=y
 CONFIG_SPL_SERIAL_SUPPORT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_SPL_WATCHDOG_SUPPORT=y
+CONFIG_NXP_BOARD_REVISION=y
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
 # CONFIG_CONSOLE_MUX is not set
 CONFIG_SYS_CONSOLE_IS_IN_ENV=y
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board
  2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
@ 2017-11-22 13:15 ` Fabio Estevam
  2017-11-22 14:01   ` Stefano Babic
  2017-11-23  9:08   ` Lukasz Majewski
  2017-11-22 13:15 ` [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location Fabio Estevam
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: Fabio Estevam @ 2017-11-22 13:15 UTC (permalink / raw)
  To: u-boot

From: Fabio Estevam <fabio.estevam@nxp.com>

Currently only imx6sx-sdb.dtb is loaded, but if revA board is used the
correct dtb is imx6sx-sdb-reva.dtb, so make this possible.

While at it, remove an extra 'mmc dev'.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
---
 arch/arm/mach-imx/mx6/Kconfig               |  1 +
 board/freescale/mx6sxsabresd/mx6sxsabresd.c | 16 +++++++++++++++-
 configs/mx6sxsabresd_defconfig              |  1 +
 include/configs/mx6sxsabresd.h              |  8 ++++++--
 4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig
index 6f5a92a..52d9984 100644
--- a/arch/arm/mach-imx/mx6/Kconfig
+++ b/arch/arm/mach-imx/mx6/Kconfig
@@ -266,6 +266,7 @@ config TARGET_MX6SLLEVK
 
 config TARGET_MX6SXSABRESD
 	bool "mx6sxsabresd"
+	select BOARD_LATE_INIT
 	select MX6SX
 	select SUPPORT_SPL
 	select DM
diff --git a/board/freescale/mx6sxsabresd/mx6sxsabresd.c b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
index 2aeef61..8a918a5 100644
--- a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
+++ b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
@@ -540,9 +540,23 @@ int board_init(void)
 	return 0;
 }
 
+static bool is_reva(void)
+{
+	return (nxp_board_rev() == 1);
+}
+
+int board_late_init(void)
+{
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+	if (is_reva())
+		env_set("board_rev", "REVA");
+#endif
+	return 0;
+}
+
 int checkboard(void)
 {
-	puts("Board: MX6SX SABRE SDB\n");
+	printf("Board: MX6SX SABRE SDB rev%s\n", nxp_board_rev_string());
 
 	return 0;
 }
diff --git a/configs/mx6sxsabresd_defconfig b/configs/mx6sxsabresd_defconfig
index c4eb7ca..ac36a18 100644
--- a/configs/mx6sxsabresd_defconfig
+++ b/configs/mx6sxsabresd_defconfig
@@ -2,6 +2,7 @@ CONFIG_ARM=y
 CONFIG_ARCH_MX6=y
 CONFIG_TARGET_MX6SXSABRESD=y
 # CONFIG_CMD_BMODE is not set
+CONFIG_NXP_BOARD_REVISION=y
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6sxsabresd/imximage.cfg"
 # CONFIG_CONSOLE_MUX is not set
 CONFIG_SYS_CONSOLE_IS_IN_ENV=y
diff --git a/include/configs/mx6sxsabresd.h b/include/configs/mx6sxsabresd.h
index 5ef78a7..85b8601 100644
--- a/include/configs/mx6sxsabresd.h
+++ b/include/configs/mx6sxsabresd.h
@@ -43,6 +43,7 @@
 #define UPDATE_M4_ENV ""
 #endif
 
+#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
 #define CONFIG_EXTRA_ENV_SETTINGS \
 	UPDATE_M4_ENV \
 	"script=boot.scr\0" \
@@ -104,10 +105,13 @@
 			"fi; " \
 		"else " \
 			"bootz; " \
-		"fi;\0"
+		"fi;\0" \
+	"findfdt="\
+		"if test test $board_rev = REVA ; then " \
+			"setenv fdt_file imx6sx-sdb-reva.dtb; fi; " \
 
 #define CONFIG_BOOTCOMMAND \
-	   "mmc dev ${mmcdev};" \
+	   "run findfdt; " \
 	   "mmc dev ${mmcdev}; if mmc rescan; then " \
 		   "if run loadbootscript; then " \
 			   "run bootscript; " \
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location
  2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
  2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
@ 2017-11-22 13:15 ` Fabio Estevam
  2017-11-22 14:01   ` Stefano Babic
  2017-11-23  9:08   ` Lukasz Majewski
  2017-11-22 14:00 ` [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Stefano Babic
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: Fabio Estevam @ 2017-11-22 13:15 UTC (permalink / raw)
  To: u-boot

From: Fabio Estevam <fabio.estevam@nxp.com>

mx6sxsabresd can run different kernel versions, such as NXP 4.1 or mainline.
    
Currently the rootfs location is passed via mmcblk number and the
problem with this approach is that the mmcblk number for the SD
card changes depending on the kernel version.
    
In order to avoid such issue, use the UUID method to specify the
rootfs location.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
---
 configs/mx6sxsabresd_defconfig | 1 +
 include/configs/mx6sxsabresd.h | 5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/configs/mx6sxsabresd_defconfig b/configs/mx6sxsabresd_defconfig
index ac36a18..b707322 100644
--- a/configs/mx6sxsabresd_defconfig
+++ b/configs/mx6sxsabresd_defconfig
@@ -12,6 +12,7 @@ CONFIG_CMD_BOOTZ=y
 CONFIG_CMD_GPIO=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_PART=y
 CONFIG_CMD_PCI=y
 CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
diff --git a/include/configs/mx6sxsabresd.h b/include/configs/mx6sxsabresd.h
index 85b8601..906e677 100644
--- a/include/configs/mx6sxsabresd.h
+++ b/include/configs/mx6sxsabresd.h
@@ -58,9 +58,9 @@
 	"videomode=video=ctfb:x:800,y:480,depth:24,pclk:29850,le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0\0" \
 	"mmcdev=2\0" \
 	"mmcpart=1\0" \
-	"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
+	"finduuid=part uuid mmc 2:2 uuid\0" \
 	"mmcargs=setenv bootargs console=${console},${baudrate} " \
-		"root=${mmcroot}\0" \
+		"root=PARTUUID=${uuid} rootwait rw\0" \
 	"loadbootscript=" \
 		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
 	"bootscript=echo Running bootscript from mmc ...; " \
@@ -68,6 +68,7 @@
 	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
 	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
 	"mmcboot=echo Booting from mmc ...; " \
+		"run finduuid; " \
 		"run mmcargs; " \
 		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
 			"if run loadfdt; then " \
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision
  2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
  2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
  2017-11-22 13:15 ` [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location Fabio Estevam
@ 2017-11-22 14:00 ` Stefano Babic
  2017-11-23  9:08 ` Lukasz Majewski
  2017-11-27  9:15 ` Stefano Babic
  4 siblings, 0 replies; 11+ messages in thread
From: Stefano Babic @ 2017-11-22 14:00 UTC (permalink / raw)
  To: u-boot

Hi Fabio,

On 22/11/2017 14:15, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> NXP development boards based on i.MX6/i.MX7 contain the board
> revision information stored in the fuses.
> 

This is a good idea.

> 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.estevam@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

ACK. And maybe this can be used by other boards, too, instead of
reinvent the wheel any time :-)

> @@ -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();
> +
> +	return rev;
> +}
> +#endif
> diff --git a/board/freescale/mx6sabreauto/mx6sabreauto.c b/board/freescale/mx6sabreauto/mx6sabreauto.c
> index bdeb5f7..ced254a 100644
> --- a/board/freescale/mx6sabreauto/mx6sabreauto.c
> +++ b/board/freescale/mx6sabreauto/mx6sabreauto.c
> @@ -397,39 +397,9 @@ int board_eth_init(bd_t *bis)
>  	return cpu_eth_init(bis);
>  }
>  
> -#define BOARD_REV_B  0x200
> -#define BOARD_REV_A  0x100
> -
> -static int mx6sabre_rev(void)
> -{
> -	/*
> -	 * Get Board ID information from OCOTP_GP1[15:8]
> -	 * i.MX6Q ARD RevA: 0x01
> -	 * i.MX6Q ARD RevB: 0x02
> -	 */
> -	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;
> -	int reg = readl(&fuse->gp1);
> -	int ret;
> -
> -	switch (reg >> 8 & 0x0F) {
> -	case 0x02:
> -		ret = BOARD_REV_B;
> -		break;
> -	case 0x01:
> -	default:
> -		ret = BOARD_REV_A;
> -		break;
> -	}
> -
> -	return ret;
> -}
> -
>  u32 get_board_rev(void)
>  {
> -	int rev = mx6sabre_rev();
> +	int rev = nxp_board_rev();
>  
>  	return (get_cpu_rev() & ~(0xF << 8)) | rev;
>  }
> @@ -703,20 +673,7 @@ int board_late_init(void)
>  
>  int checkboard(void)
>  {
> -	int rev = mx6sabre_rev();
> -	char *revname;
> -
> -	switch (rev) {
> -	case BOARD_REV_B:
> -		revname = "B";
> -		break;
> -	case BOARD_REV_A:
> -	default:
> -		revname = "A";
> -		break;
> -	}
> -
> -	printf("Board: MX6Q-Sabreauto rev%s\n", revname);
> +	printf("Board: MX6Q-Sabreauto rev%s\n", nxp_board_rev_string());
>  
>  	return 0;
>  }
> diff --git a/configs/mx6sabreauto_defconfig b/configs/mx6sabreauto_defconfig
> index 418a836..215700b 100644
> --- a/configs/mx6sabreauto_defconfig
> +++ b/configs/mx6sabreauto_defconfig
> @@ -8,6 +8,7 @@ CONFIG_SPL_MMC_SUPPORT=y
>  CONFIG_SPL_SERIAL_SUPPORT=y
>  CONFIG_SPL_LIBDISK_SUPPORT=y
>  CONFIG_SPL_WATCHDOG_SUPPORT=y
> +CONFIG_NXP_BOARD_REVISION=y
>  CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
>  # CONFIG_CONSOLE_MUX is not set
>  CONFIG_SYS_CONSOLE_IS_IN_ENV=y
> 

Reviewed-by: Stefano Babic <sbabic@denx.de>

Best regards,
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: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board
  2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
@ 2017-11-22 14:01   ` Stefano Babic
  2017-11-23  9:08   ` Lukasz Majewski
  1 sibling, 0 replies; 11+ messages in thread
From: Stefano Babic @ 2017-11-22 14:01 UTC (permalink / raw)
  To: u-boot

On 22/11/2017 14:15, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> Currently only imx6sx-sdb.dtb is loaded, but if revA board is used the
> correct dtb is imx6sx-sdb-reva.dtb, so make this possible.
> 
> While at it, remove an extra 'mmc dev'.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
>  arch/arm/mach-imx/mx6/Kconfig               |  1 +
>  board/freescale/mx6sxsabresd/mx6sxsabresd.c | 16 +++++++++++++++-
>  configs/mx6sxsabresd_defconfig              |  1 +
>  include/configs/mx6sxsabresd.h              |  8 ++++++--
>  4 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig
> index 6f5a92a..52d9984 100644
> --- a/arch/arm/mach-imx/mx6/Kconfig
> +++ b/arch/arm/mach-imx/mx6/Kconfig
> @@ -266,6 +266,7 @@ config TARGET_MX6SLLEVK
>  
>  config TARGET_MX6SXSABRESD
>  	bool "mx6sxsabresd"
> +	select BOARD_LATE_INIT
>  	select MX6SX
>  	select SUPPORT_SPL
>  	select DM
> diff --git a/board/freescale/mx6sxsabresd/mx6sxsabresd.c b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> index 2aeef61..8a918a5 100644
> --- a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> +++ b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> @@ -540,9 +540,23 @@ int board_init(void)
>  	return 0;
>  }
>  
> +static bool is_reva(void)
> +{
> +	return (nxp_board_rev() == 1);
> +}
> +
> +int board_late_init(void)
> +{
> +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +	if (is_reva())
> +		env_set("board_rev", "REVA");
> +#endif
> +	return 0;
> +}
> +
>  int checkboard(void)
>  {
> -	puts("Board: MX6SX SABRE SDB\n");
> +	printf("Board: MX6SX SABRE SDB rev%s\n", nxp_board_rev_string());
>  
>  	return 0;
>  }
> diff --git a/configs/mx6sxsabresd_defconfig b/configs/mx6sxsabresd_defconfig
> index c4eb7ca..ac36a18 100644
> --- a/configs/mx6sxsabresd_defconfig
> +++ b/configs/mx6sxsabresd_defconfig
> @@ -2,6 +2,7 @@ CONFIG_ARM=y
>  CONFIG_ARCH_MX6=y
>  CONFIG_TARGET_MX6SXSABRESD=y
>  # CONFIG_CMD_BMODE is not set
> +CONFIG_NXP_BOARD_REVISION=y
>  CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6sxsabresd/imximage.cfg"
>  # CONFIG_CONSOLE_MUX is not set
>  CONFIG_SYS_CONSOLE_IS_IN_ENV=y
> diff --git a/include/configs/mx6sxsabresd.h b/include/configs/mx6sxsabresd.h
> index 5ef78a7..85b8601 100644
> --- a/include/configs/mx6sxsabresd.h
> +++ b/include/configs/mx6sxsabresd.h
> @@ -43,6 +43,7 @@
>  #define UPDATE_M4_ENV ""
>  #endif
>  
> +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
>  #define CONFIG_EXTRA_ENV_SETTINGS \
>  	UPDATE_M4_ENV \
>  	"script=boot.scr\0" \
> @@ -104,10 +105,13 @@
>  			"fi; " \
>  		"else " \
>  			"bootz; " \
> -		"fi;\0"
> +		"fi;\0" \
> +	"findfdt="\
> +		"if test test $board_rev = REVA ; then " \
> +			"setenv fdt_file imx6sx-sdb-reva.dtb; fi; " \
>  
>  #define CONFIG_BOOTCOMMAND \
> -	   "mmc dev ${mmcdev};" \
> +	   "run findfdt; " \
>  	   "mmc dev ${mmcdev}; if mmc rescan; then " \
>  		   "if run loadbootscript; then " \
>  			   "run bootscript; " \
> 

Reviewed-by: Stefano Babic <sbabic@denx.de>

Best regards,
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: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location
  2017-11-22 13:15 ` [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location Fabio Estevam
@ 2017-11-22 14:01   ` Stefano Babic
  2017-11-23  9:08   ` Lukasz Majewski
  1 sibling, 0 replies; 11+ messages in thread
From: Stefano Babic @ 2017-11-22 14:01 UTC (permalink / raw)
  To: u-boot

On 22/11/2017 14:15, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> mx6sxsabresd can run different kernel versions, such as NXP 4.1 or mainline.
>     
> Currently the rootfs location is passed via mmcblk number and the
> problem with this approach is that the mmcblk number for the SD
> card changes depending on the kernel version.
>     
> In order to avoid such issue, use the UUID method to specify the
> rootfs location.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
>  configs/mx6sxsabresd_defconfig | 1 +
>  include/configs/mx6sxsabresd.h | 5 +++--
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/configs/mx6sxsabresd_defconfig b/configs/mx6sxsabresd_defconfig
> index ac36a18..b707322 100644
> --- a/configs/mx6sxsabresd_defconfig
> +++ b/configs/mx6sxsabresd_defconfig
> @@ -12,6 +12,7 @@ CONFIG_CMD_BOOTZ=y
>  CONFIG_CMD_GPIO=y
>  CONFIG_CMD_I2C=y
>  CONFIG_CMD_MMC=y
> +CONFIG_CMD_PART=y
>  CONFIG_CMD_PCI=y
>  CONFIG_CMD_USB=y
>  # CONFIG_CMD_SETEXPR is not set
> diff --git a/include/configs/mx6sxsabresd.h b/include/configs/mx6sxsabresd.h
> index 85b8601..906e677 100644
> --- a/include/configs/mx6sxsabresd.h
> +++ b/include/configs/mx6sxsabresd.h
> @@ -58,9 +58,9 @@
>  	"videomode=video=ctfb:x:800,y:480,depth:24,pclk:29850,le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0\0" \
>  	"mmcdev=2\0" \
>  	"mmcpart=1\0" \
> -	"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
> +	"finduuid=part uuid mmc 2:2 uuid\0" \
>  	"mmcargs=setenv bootargs console=${console},${baudrate} " \
> -		"root=${mmcroot}\0" \
> +		"root=PARTUUID=${uuid} rootwait rw\0" \
>  	"loadbootscript=" \
>  		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
>  	"bootscript=echo Running bootscript from mmc ...; " \
> @@ -68,6 +68,7 @@
>  	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
>  	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
>  	"mmcboot=echo Booting from mmc ...; " \
> +		"run finduuid; " \
>  		"run mmcargs; " \
>  		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
>  			"if run loadfdt; then " \
> 

Reviewed-by: Stefano Babic <sbabic@denx.de>

Best regards,
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: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location
  2017-11-22 13:15 ` [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location Fabio Estevam
  2017-11-22 14:01   ` Stefano Babic
@ 2017-11-23  9:08   ` Lukasz Majewski
  1 sibling, 0 replies; 11+ messages in thread
From: Lukasz Majewski @ 2017-11-23  9:08 UTC (permalink / raw)
  To: u-boot

Hi Fabio,

> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> mx6sxsabresd can run different kernel versions, such as NXP 4.1 or
> mainline. 
> Currently the rootfs location is passed via mmcblk number and the
> problem with this approach is that the mmcblk number for the SD
> card changes depending on the kernel version.
>     
> In order to avoid such issue, use the UUID method to specify the
> rootfs location.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
>  configs/mx6sxsabresd_defconfig | 1 +
>  include/configs/mx6sxsabresd.h | 5 +++--
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/configs/mx6sxsabresd_defconfig
> b/configs/mx6sxsabresd_defconfig index ac36a18..b707322 100644
> --- a/configs/mx6sxsabresd_defconfig
> +++ b/configs/mx6sxsabresd_defconfig
> @@ -12,6 +12,7 @@ CONFIG_CMD_BOOTZ=y
>  CONFIG_CMD_GPIO=y
>  CONFIG_CMD_I2C=y
>  CONFIG_CMD_MMC=y
> +CONFIG_CMD_PART=y
>  CONFIG_CMD_PCI=y
>  CONFIG_CMD_USB=y
>  # CONFIG_CMD_SETEXPR is not set
> diff --git a/include/configs/mx6sxsabresd.h
> b/include/configs/mx6sxsabresd.h index 85b8601..906e677 100644
> --- a/include/configs/mx6sxsabresd.h
> +++ b/include/configs/mx6sxsabresd.h
> @@ -58,9 +58,9 @@
>  	"videomode=video=ctfb:x:800,y:480,depth:24,pclk:29850,le:89,ri:164,up:23,lo:10,hs:10,vs:10,sync:0,vmode:0\0"
> \ "mmcdev=2\0" \
>  	"mmcpart=1\0" \
> -	"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
> +	"finduuid=part uuid mmc 2:2 uuid\0" \
>  	"mmcargs=setenv bootargs console=${console},${baudrate} " \
> -		"root=${mmcroot}\0" \
> +		"root=PARTUUID=${uuid} rootwait rw\0" \
>  	"loadbootscript=" \
>  		"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr}
> ${script};\0" \ "bootscript=echo Running bootscript from mmc ...; " \
> @@ -68,6 +68,7 @@
>  	"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr}
> ${image}\0" \ "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr}
> ${fdt_file}\0" \ "mmcboot=echo Booting from mmc ...; " \
> +		"run finduuid; " \
>  		"run mmcargs; " \
>  		"if test ${boot_fdt} = yes || test ${boot_fdt} =
> try; then " \ "if run loadfdt; then " \

Reviewed-by: Lukasz Majewski <lukma@denx.de>

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171123/479f33a4/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board
  2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
  2017-11-22 14:01   ` Stefano Babic
@ 2017-11-23  9:08   ` Lukasz Majewski
  1 sibling, 0 replies; 11+ messages in thread
From: Lukasz Majewski @ 2017-11-23  9:08 UTC (permalink / raw)
  To: u-boot

On Wed, 22 Nov 2017 11:15:27 -0200
Fabio Estevam <festevam@gmail.com> wrote:

> From: Fabio Estevam <fabio.estevam@nxp.com>
> 
> Currently only imx6sx-sdb.dtb is loaded, but if revA board is used the
> correct dtb is imx6sx-sdb-reva.dtb, so make this possible.
> 
> While at it, remove an extra 'mmc dev'.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
> ---
>  arch/arm/mach-imx/mx6/Kconfig               |  1 +
>  board/freescale/mx6sxsabresd/mx6sxsabresd.c | 16 +++++++++++++++-
>  configs/mx6sxsabresd_defconfig              |  1 +
>  include/configs/mx6sxsabresd.h              |  8 ++++++--
>  4 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/mx6/Kconfig
> b/arch/arm/mach-imx/mx6/Kconfig index 6f5a92a..52d9984 100644
> --- a/arch/arm/mach-imx/mx6/Kconfig
> +++ b/arch/arm/mach-imx/mx6/Kconfig
> @@ -266,6 +266,7 @@ config TARGET_MX6SLLEVK
>  
>  config TARGET_MX6SXSABRESD
>  	bool "mx6sxsabresd"
> +	select BOARD_LATE_INIT
>  	select MX6SX
>  	select SUPPORT_SPL
>  	select DM
> diff --git a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> b/board/freescale/mx6sxsabresd/mx6sxsabresd.c index 2aeef61..8a918a5
> 100644 --- a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> +++ b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
> @@ -540,9 +540,23 @@ int board_init(void)
>  	return 0;
>  }
>  
> +static bool is_reva(void)
> +{
> +	return (nxp_board_rev() == 1);
> +}
> +
> +int board_late_init(void)
> +{
> +#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
> +	if (is_reva())
> +		env_set("board_rev", "REVA");
> +#endif
> +	return 0;
> +}
> +
>  int checkboard(void)
>  {
> -	puts("Board: MX6SX SABRE SDB\n");
> +	printf("Board: MX6SX SABRE SDB rev%s\n",
> nxp_board_rev_string()); 
>  	return 0;
>  }
> diff --git a/configs/mx6sxsabresd_defconfig
> b/configs/mx6sxsabresd_defconfig index c4eb7ca..ac36a18 100644
> --- a/configs/mx6sxsabresd_defconfig
> +++ b/configs/mx6sxsabresd_defconfig
> @@ -2,6 +2,7 @@ CONFIG_ARM=y
>  CONFIG_ARCH_MX6=y
>  CONFIG_TARGET_MX6SXSABRESD=y
>  # CONFIG_CMD_BMODE is not set
> +CONFIG_NXP_BOARD_REVISION=y
>  CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6sxsabresd/imximage.cfg"
>  # CONFIG_CONSOLE_MUX is not set
>  CONFIG_SYS_CONSOLE_IS_IN_ENV=y
> diff --git a/include/configs/mx6sxsabresd.h
> b/include/configs/mx6sxsabresd.h index 5ef78a7..85b8601 100644
> --- a/include/configs/mx6sxsabresd.h
> +++ b/include/configs/mx6sxsabresd.h
> @@ -43,6 +43,7 @@
>  #define UPDATE_M4_ENV ""
>  #endif
>  
> +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
>  #define CONFIG_EXTRA_ENV_SETTINGS \
>  	UPDATE_M4_ENV \
>  	"script=boot.scr\0" \
> @@ -104,10 +105,13 @@
>  			"fi; " \
>  		"else " \
>  			"bootz; " \
> -		"fi;\0"
> +		"fi;\0" \
> +	"findfdt="\
> +		"if test test $board_rev = REVA ; then " \
> +			"setenv fdt_file imx6sx-sdb-reva.dtb; fi; " \
>  
>  #define CONFIG_BOOTCOMMAND \
> -	   "mmc dev ${mmcdev};" \
> +	   "run findfdt; " \
>  	   "mmc dev ${mmcdev}; if mmc rescan; then " \
>  		   "if run loadbootscript; then " \
>  			   "run bootscript; " \

Reviewed-by: Lukasz Majewski <lukma@denx.de>

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171123/d58dc009/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision
  2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
                   ` (2 preceding siblings ...)
  2017-11-22 14:00 ` [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Stefano Babic
@ 2017-11-23  9:08 ` Lukasz Majewski
  2017-11-27  9:15 ` Stefano Babic
  4 siblings, 0 replies; 11+ messages in thread
From: Lukasz Majewski @ 2017-11-23  9:08 UTC (permalink / raw)
  To: u-boot

On Wed, 22 Nov 2017 11:15:26 -0200
Fabio Estevam <festevam@gmail.com> wrote:

> From: Fabio Estevam <fabio.estevam@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.estevam@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();
> +
> +	return rev;
> +}
> +#endif
> diff --git a/board/freescale/mx6sabreauto/mx6sabreauto.c
> b/board/freescale/mx6sabreauto/mx6sabreauto.c index bdeb5f7..ced254a
> 100644 --- a/board/freescale/mx6sabreauto/mx6sabreauto.c
> +++ b/board/freescale/mx6sabreauto/mx6sabreauto.c
> @@ -397,39 +397,9 @@ int board_eth_init(bd_t *bis)
>  	return cpu_eth_init(bis);
>  }
>  
> -#define BOARD_REV_B  0x200
> -#define BOARD_REV_A  0x100
> -
> -static int mx6sabre_rev(void)
> -{
> -	/*
> -	 * Get Board ID information from OCOTP_GP1[15:8]
> -	 * i.MX6Q ARD RevA: 0x01
> -	 * i.MX6Q ARD RevB: 0x02
> -	 */
> -	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;
> -	int reg = readl(&fuse->gp1);
> -	int ret;
> -
> -	switch (reg >> 8 & 0x0F) {
> -	case 0x02:
> -		ret = BOARD_REV_B;
> -		break;
> -	case 0x01:
> -	default:
> -		ret = BOARD_REV_A;
> -		break;
> -	}
> -
> -	return ret;
> -}
> -
>  u32 get_board_rev(void)
>  {
> -	int rev = mx6sabre_rev();
> +	int rev = nxp_board_rev();
>  
>  	return (get_cpu_rev() & ~(0xF << 8)) | rev;
>  }
> @@ -703,20 +673,7 @@ int board_late_init(void)
>  
>  int checkboard(void)
>  {
> -	int rev = mx6sabre_rev();
> -	char *revname;
> -
> -	switch (rev) {
> -	case BOARD_REV_B:
> -		revname = "B";
> -		break;
> -	case BOARD_REV_A:
> -	default:
> -		revname = "A";
> -		break;
> -	}
> -
> -	printf("Board: MX6Q-Sabreauto rev%s\n", revname);
> +	printf("Board: MX6Q-Sabreauto rev%s\n",
> nxp_board_rev_string()); 
>  	return 0;
>  }
> diff --git a/configs/mx6sabreauto_defconfig
> b/configs/mx6sabreauto_defconfig index 418a836..215700b 100644
> --- a/configs/mx6sabreauto_defconfig
> +++ b/configs/mx6sabreauto_defconfig
> @@ -8,6 +8,7 @@ CONFIG_SPL_MMC_SUPPORT=y
>  CONFIG_SPL_SERIAL_SUPPORT=y
>  CONFIG_SPL_LIBDISK_SUPPORT=y
>  CONFIG_SPL_WATCHDOG_SUPPORT=y
> +CONFIG_NXP_BOARD_REVISION=y
>  CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
>  # CONFIG_CONSOLE_MUX is not set
>  CONFIG_SYS_CONSOLE_IS_IN_ENV=y

Reviewed-by: Lukasz Majewski <lukma@denx.de>

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171123/def0e992/attachment.sig>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision
  2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
                   ` (3 preceding siblings ...)
  2017-11-23  9:08 ` Lukasz Majewski
@ 2017-11-27  9:15 ` Stefano Babic
  2017-11-27 10:28   ` Fabio Estevam
  4 siblings, 1 reply; 11+ messages in thread
From: Stefano Babic @ 2017-11-27  9:15 UTC (permalink / raw)
  To: u-boot

Hi Fabio,

On 22/11/2017 14:15, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@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.estevam@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: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision
  2017-11-27  9:15 ` Stefano Babic
@ 2017-11-27 10:28   ` Fabio Estevam
  0 siblings, 0 replies; 11+ messages in thread
From: Fabio Estevam @ 2017-11-27 10:28 UTC (permalink / raw)
  To: u-boot

Hi Stefano,

On Mon, Nov 27, 2017 at 7:15 AM, Stefano Babic <sbabic@denx.de> wrote:

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

I will fix and resend.

Thanks

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-11-27 10:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-22 13:15 [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Fabio Estevam
2017-11-22 13:15 ` [U-Boot] [PATCH 2/3] mx6sxsabresd: Load the correct dtb for revA board Fabio Estevam
2017-11-22 14:01   ` Stefano Babic
2017-11-23  9:08   ` Lukasz Majewski
2017-11-22 13:15 ` [U-Boot] [PATCH 3/3] mx6sxsabresd: Use PARTUUID to specify the rootfs location Fabio Estevam
2017-11-22 14:01   ` Stefano Babic
2017-11-23  9:08   ` Lukasz Majewski
2017-11-22 14:00 ` [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision Stefano Babic
2017-11-23  9:08 ` Lukasz Majewski
2017-11-27  9:15 ` Stefano Babic
2017-11-27 10:28   ` Fabio Estevam

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.