All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH V2 1/4] imx: mx7dsabresd: move mmc_get_env_devno to soc code
@ 2015-12-17  4:43 Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards Peng Fan
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Peng Fan @ 2015-12-17  4:43 UTC (permalink / raw)
  To: u-boot

Move mmc_get_env_devno to soc.c
Introduce a weak function board_mmc_get_env_devno. Different
boards can implement this according to sdhc controller which
is used by the board.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
---

Changes V2:
 new patch. mx7dsabresd implemented mmc_get_env_devno. So need to
 refactor it for patch 2/4

 arch/arm/cpu/armv7/mx7/soc.c              | 19 +++++++++++++++++++
 board/freescale/mx7dsabresd/mx7dsabresd.c | 18 ++++--------------
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/arch/arm/cpu/armv7/mx7/soc.c b/arch/arm/cpu/armv7/mx7/soc.c
index c777922..d0891ea 100644
--- a/arch/arm/cpu/armv7/mx7/soc.c
+++ b/arch/arm/cpu/armv7/mx7/soc.c
@@ -268,6 +268,25 @@ enum boot_device get_boot_device(void)
 	return boot_dev;
 }
 
+__weak int board_mmc_get_env_devno(int devno)
+{
+	return CONFIG_SYS_MMC_ENV_DEV;
+}
+
+int mmc_get_env_devno(void)
+{
+	struct bootrom_sw_info **p =
+		(struct bootrom_sw_info **)ROM_SW_INFO_ADDR;
+	int devno = (*p)->boot_dev_instance;
+	u8 boot_type = (*p)->boot_dev_type;
+
+	/* If not boot from sd/mmc, use default value */
+	if ((boot_type != BOOT_TYPE_SD) && (boot_type != BOOT_TYPE_MMC))
+		return CONFIG_SYS_MMC_ENV_DEV;
+
+	return board_mmc_get_env_devno(devno);
+}
+
 void s_init(void)
 {
 #if !defined CONFIG_SPL_BUILD
diff --git a/board/freescale/mx7dsabresd/mx7dsabresd.c b/board/freescale/mx7dsabresd/mx7dsabresd.c
index f8ae973..12327c2 100644
--- a/board/freescale/mx7dsabresd/mx7dsabresd.c
+++ b/board/freescale/mx7dsabresd/mx7dsabresd.c
@@ -293,22 +293,12 @@ static struct fsl_esdhc_cfg usdhc_cfg[3] = {
 	{USDHC3_BASE_ADDR},
 };
 
-static int mmc_get_env_devno(void)
+int board_mmc_get_env_devno(int devno)
 {
-	struct bootrom_sw_info **p =
-		(struct bootrom_sw_info **)ROM_SW_INFO_ADDR;
+	if (devno == 2)
+		devno--;
 
-	u8 boot_type = (*p)->boot_dev_type;
-	u8 dev_no = (*p)->boot_dev_instance;
-
-	/* If not boot from sd/mmc, use default value */
-	if ((boot_type != BOOT_TYPE_SD) && (boot_type != BOOT_TYPE_MMC))
-		return CONFIG_SYS_MMC_ENV_DEV;
-
-	if (dev_no == 2)
-		dev_no--;
-
-	return dev_no;
+	return devno;
 }
 
 static int mmc_map_to_kernel_blk(int dev_no)
-- 
2.6.2

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

* [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards
  2015-12-17  4:43 [U-Boot] [PATCH V2 1/4] imx: mx7dsabresd: move mmc_get_env_devno to soc code Peng Fan
@ 2015-12-17  4:43 ` Peng Fan
  2016-02-02 19:46   ` Stefano Babic
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 3/4] imx: mx6: implement mmc_get_env_devno Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 4/4] imx: mx6: implement board_mmc_get_env_devno Peng Fan
  2 siblings, 1 reply; 7+ messages in thread
From: Peng Fan @ 2015-12-17  4:43 UTC (permalink / raw)
  To: u-boot

Some boards support booting from different SD card slots.
For example, mx6dpsabresd board supports booting from SD2,
SD3, EMMC4, using different boot switch. And the index
numbers are SD2(0), SD3(1), EMMC4(2).
But CONFIG_SYS_MMC_ENV_DEV is hardcoded to 1(for SD3), so when
booting from SD2(using 0), uboot complains "MMC: no card present",
since there is no card in SD3 slot.

This patch introduces a weak function which still returns
CONFIG_SYS_MMC_ENV_DEV to avoid break other boards. Then
different boards can implement mmc_get_env_devno to read
env from the correct sd/emmc.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tim Harvey <tharvey@gateworks.com>
Cc: Hans de Goede <hdegoede@redhat.com>
---

Changes V2:
 none.

 common/env_mmc.c | 22 ++++++++++++++--------
 include/mmc.h    |  1 +
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/common/env_mmc.c b/common/env_mmc.c
index 9639822..857e20c 100644
--- a/common/env_mmc.c
+++ b/common/env_mmc.c
@@ -63,6 +63,11 @@ int env_init(void)
 	return 0;
 }
 
+__weak int mmc_get_env_devno(void)
+{
+	return CONFIG_SYS_MMC_ENV_DEV;
+}
+
 #ifdef CONFIG_SYS_MMC_ENV_PART
 __weak uint mmc_get_env_part(struct mmc *mmc)
 {
@@ -72,7 +77,7 @@ __weak uint mmc_get_env_part(struct mmc *mmc)
 static int mmc_set_env_part(struct mmc *mmc)
 {
 	uint part = mmc_get_env_part(mmc);
-	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	int dev = mmc_get_env_devno();
 	int ret = 0;
 
 #ifdef CONFIG_SPL_BUILD
@@ -108,7 +113,7 @@ static const char *init_mmc_for_env(struct mmc *mmc)
 static void fini_mmc_for_env(struct mmc *mmc)
 {
 #ifdef CONFIG_SYS_MMC_ENV_PART
-	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	int dev = mmc_get_env_devno();
 
 #ifdef CONFIG_SPL_BUILD
 	dev = 0;
@@ -127,7 +132,7 @@ static inline int write_env(struct mmc *mmc, unsigned long size,
 	blk_start	= ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len;
 	blk_cnt		= ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len;
 
-	n = mmc->block_dev.block_write(CONFIG_SYS_MMC_ENV_DEV, blk_start,
+	n = mmc->block_dev.block_write(mmc_get_env_devno(), blk_start,
 					blk_cnt, (u_char *)buffer);
 
 	return (n == blk_cnt) ? 0 : -1;
@@ -140,7 +145,8 @@ static unsigned char env_flags;
 int saveenv(void)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
-	struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
+	int mmc_env_devno = mmc_get_env_devno();
+	struct mmc *mmc = find_mmc_device(mmc_env_devno);
 	u32	offset;
 	int	ret, copy = 0;
 	const char *errmsg;
@@ -168,7 +174,7 @@ int saveenv(void)
 	}
 
 	printf("Writing to %sMMC(%d)... ", copy ? "redundant " : "",
-	       CONFIG_SYS_MMC_ENV_DEV);
+	       mmc_env_devno);
 	if (write_env(mmc, CONFIG_ENV_SIZE, offset, (u_char *)env_new)) {
 		puts("failed\n");
 		ret = 1;
@@ -192,7 +198,7 @@ static inline int read_env(struct mmc *mmc, unsigned long size,
 			   unsigned long offset, const void *buffer)
 {
 	uint blk_start, blk_cnt, n;
-	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	int dev = mmc_get_env_devno();
 
 #ifdef CONFIG_SPL_BUILD
 	dev = 0;
@@ -216,7 +222,7 @@ void env_relocate_spec(void)
 	int crc1_ok = 0, crc2_ok = 0;
 	env_t *ep;
 	int ret;
-	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	int dev = mmc_get_env_devno();
 	const char *errmsg = NULL;
 
 	ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env1, 1);
@@ -302,7 +308,7 @@ void env_relocate_spec(void)
 	struct mmc *mmc;
 	u32 offset;
 	int ret;
-	int dev = CONFIG_SYS_MMC_ENV_DEV;
+	int dev = mmc_get_env_devno();
 	const char *errmsg;
 
 #ifdef CONFIG_SPL_BUILD
diff --git a/include/mmc.h b/include/mmc.h
index cda9a19..e70aedb 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -475,6 +475,7 @@ void board_mmc_power_init(void);
 int board_mmc_init(bd_t *bis);
 int cpu_mmc_init(bd_t *bis);
 int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
+int mmc_get_env_devno(void);
 
 struct pci_device_id;
 
-- 
2.6.2

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

* [U-Boot] [PATCH V2 3/4] imx: mx6: implement mmc_get_env_devno
  2015-12-17  4:43 [U-Boot] [PATCH V2 1/4] imx: mx7dsabresd: move mmc_get_env_devno to soc code Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards Peng Fan
@ 2015-12-17  4:43 ` Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 4/4] imx: mx6: implement board_mmc_get_env_devno Peng Fan
  2 siblings, 0 replies; 7+ messages in thread
From: Peng Fan @ 2015-12-17  4:43 UTC (permalink / raw)
  To: u-boot

Implement mmc_get_env_devno, devno can be got from smbr1 of SRC.
Introduce a weak function board_mmc_get_env_devno, different
boards can implement it according to different sdhc controllers
that used by the board.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
---

Changes V2:
 move mmc_get_env_devno into soc.c

 arch/arm/cpu/armv7/mx6/soc.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index bf5ae8c..fd383f2 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -349,6 +349,36 @@ int arch_cpu_init(void)
 	return 0;
 }
 
+__weak int board_mmc_get_env_devno(int devno)
+{
+	return CONFIG_SYS_MMC_ENV_DEV;
+}
+
+int mmc_get_env_devno(void)
+{
+	struct src *src_regs = (struct src *)SRC_BASE_ADDR;
+	u32 soc_sbmr = readl(&src_regs->sbmr1);
+	u32 bootsel;
+	int devno;
+
+	/*
+	 * Refer to
+	 * "i.MX 6Dual/6Quad Applications Processor Reference Manual"
+	 * Chapter "8.5.3.1 Expansion Device eFUSE Configuration"
+	 * i.MX6SL/SX/UL has same layout.
+	 */
+	bootsel = (soc_sbmr & 0x000000FF) >> 6;
+
+	/* If not boot from sd/mmc, use default value */
+	if (bootsel != 1)
+		return CONFIG_SYS_MMC_ENV_DEV;
+
+	/* BOOT_CFG2[3] and BOOT_CFG2[4] */
+	devno = (soc_sbmr & 0x00001800) >> 11;
+
+	return board_mmc_get_env_devno(devno);
+}
+
 int board_postclk_init(void)
 {
 	set_ldo_voltage(LDO_SOC, 1175);	/* Set VDDSOC to 1.175V */
-- 
2.6.2

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

* [U-Boot] [PATCH V2 4/4] imx: mx6: implement board_mmc_get_env_devno
  2015-12-17  4:43 [U-Boot] [PATCH V2 1/4] imx: mx7dsabresd: move mmc_get_env_devno to soc code Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards Peng Fan
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 3/4] imx: mx6: implement mmc_get_env_devno Peng Fan
@ 2015-12-17  4:43 ` Peng Fan
  2 siblings, 0 replies; 7+ messages in thread
From: Peng Fan @ 2015-12-17  4:43 UTC (permalink / raw)
  To: u-boot

Implement board_mmc_get_env_devno for the boards.

Following is examples:
SD1/SD2/SD3: return devno;
SD2/SD3: return devno - 1;
SD2/SD4: if (devno == 2), return dev - 2; return dev - 1;

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
---

Changes V2:
 implement board_mmc_get_env_devno in different board files.

 board/freescale/mx6qarm2/mx6qarm2.c         | 5 +++++
 board/freescale/mx6sabresd/mx6sabresd.c     | 5 +++++
 board/freescale/mx6slevk/mx6slevk.c         | 5 +++++
 board/freescale/mx6sxsabresd/mx6sxsabresd.c | 5 +++++
 4 files changed, 20 insertions(+)

diff --git a/board/freescale/mx6qarm2/mx6qarm2.c b/board/freescale/mx6qarm2/mx6qarm2.c
index 98ccdb7..aa87ba9 100644
--- a/board/freescale/mx6qarm2/mx6qarm2.c
+++ b/board/freescale/mx6qarm2/mx6qarm2.c
@@ -110,6 +110,11 @@ struct fsl_esdhc_cfg usdhc_cfg[2] = {
 	{USDHC4_BASE_ADDR},
 };
 
+int board_mmc_get_env_devno(int devno)
+{
+	return devno - 2;
+}
+
 int board_mmc_getcd(struct mmc *mmc)
 {
 	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
index 581c9d5..6128462 100644
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -234,6 +234,11 @@ struct fsl_esdhc_cfg usdhc_cfg[3] = {
 #define USDHC2_CD_GPIO	IMX_GPIO_NR(2, 2)
 #define USDHC3_CD_GPIO	IMX_GPIO_NR(2, 0)
 
+int board_mmc_get_env_devno(int devno)
+{
+	return devno - 1;
+}
+
 int board_mmc_getcd(struct mmc *mmc)
 {
 	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
diff --git a/board/freescale/mx6slevk/mx6slevk.c b/board/freescale/mx6slevk/mx6slevk.c
index 5eab4b5..84573f5 100644
--- a/board/freescale/mx6slevk/mx6slevk.c
+++ b/board/freescale/mx6slevk/mx6slevk.c
@@ -170,6 +170,11 @@ static struct fsl_esdhc_cfg usdhc_cfg[3] = {
 	{USDHC3_BASE_ADDR, 0, 4},
 };
 
+int board_mmc_get_env_devno(int devno)
+{
+	return devno;
+}
+
 int board_mmc_getcd(struct mmc *mmc)
 {
 	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
diff --git a/board/freescale/mx6sxsabresd/mx6sxsabresd.c b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
index 3ee4662..78f0151 100644
--- a/board/freescale/mx6sxsabresd/mx6sxsabresd.c
+++ b/board/freescale/mx6sxsabresd/mx6sxsabresd.c
@@ -309,6 +309,11 @@ static struct fsl_esdhc_cfg usdhc_cfg[3] = {
 #define USDHC3_PWR_GPIO	IMX_GPIO_NR(2, 11)
 #define USDHC4_CD_GPIO	IMX_GPIO_NR(6, 21)
 
+int board_mmc_get_env_devno(int devno)
+{
+	return devno - 1;
+}
+
 int board_mmc_getcd(struct mmc *mmc)
 {
 	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
-- 
2.6.2

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

* [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards
  2015-12-17  4:43 ` [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards Peng Fan
@ 2016-02-02 19:46   ` Stefano Babic
  2016-02-03  1:01     ` Peng Fan
  0 siblings, 1 reply; 7+ messages in thread
From: Stefano Babic @ 2016-02-02 19:46 UTC (permalink / raw)
  To: u-boot

Hi Peng,

On 17/12/2015 05:43, Peng Fan wrote:
> Some boards support booting from different SD card slots.
> For example, mx6dpsabresd board supports booting from SD2,
> SD3, EMMC4, using different boot switch. And the index
> numbers are SD2(0), SD3(1), EMMC4(2).
> But CONFIG_SYS_MMC_ENV_DEV is hardcoded to 1(for SD3), so when
> booting from SD2(using 0), uboot complains "MMC: no card present",
> since there is no card in SD3 slot.
> 
> This patch introduces a weak function which still returns
> CONFIG_SYS_MMC_ENV_DEV to avoid break other boards. Then
> different boards can implement mmc_get_env_devno to read
> env from the correct sd/emmc.
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Tim Harvey <tharvey@gateworks.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> ---
> 

Tom sets this patch as deferred - then applying the rest of the series
makes no sense. Patchset should be rechecked later after next release.

Best regards,
Stefano Babic
> Changes V2:
>  none.
> 
>  common/env_mmc.c | 22 ++++++++++++++--------
>  include/mmc.h    |  1 +
>  2 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/common/env_mmc.c b/common/env_mmc.c
> index 9639822..857e20c 100644
> --- a/common/env_mmc.c
> +++ b/common/env_mmc.c
> @@ -63,6 +63,11 @@ int env_init(void)
>  	return 0;
>  }
>  
> +__weak int mmc_get_env_devno(void)
> +{
> +	return CONFIG_SYS_MMC_ENV_DEV;
> +}
> +
>  #ifdef CONFIG_SYS_MMC_ENV_PART
>  __weak uint mmc_get_env_part(struct mmc *mmc)
>  {
> @@ -72,7 +77,7 @@ __weak uint mmc_get_env_part(struct mmc *mmc)
>  static int mmc_set_env_part(struct mmc *mmc)
>  {
>  	uint part = mmc_get_env_part(mmc);
> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	int dev = mmc_get_env_devno();
>  	int ret = 0;
>  
>  #ifdef CONFIG_SPL_BUILD
> @@ -108,7 +113,7 @@ static const char *init_mmc_for_env(struct mmc *mmc)
>  static void fini_mmc_for_env(struct mmc *mmc)
>  {
>  #ifdef CONFIG_SYS_MMC_ENV_PART
> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	int dev = mmc_get_env_devno();
>  
>  #ifdef CONFIG_SPL_BUILD
>  	dev = 0;
> @@ -127,7 +132,7 @@ static inline int write_env(struct mmc *mmc, unsigned long size,
>  	blk_start	= ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len;
>  	blk_cnt		= ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len;
>  
> -	n = mmc->block_dev.block_write(CONFIG_SYS_MMC_ENV_DEV, blk_start,
> +	n = mmc->block_dev.block_write(mmc_get_env_devno(), blk_start,
>  					blk_cnt, (u_char *)buffer);
>  
>  	return (n == blk_cnt) ? 0 : -1;
> @@ -140,7 +145,8 @@ static unsigned char env_flags;
>  int saveenv(void)
>  {
>  	ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
> -	struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
> +	int mmc_env_devno = mmc_get_env_devno();
> +	struct mmc *mmc = find_mmc_device(mmc_env_devno);
>  	u32	offset;
>  	int	ret, copy = 0;
>  	const char *errmsg;
> @@ -168,7 +174,7 @@ int saveenv(void)
>  	}
>  
>  	printf("Writing to %sMMC(%d)... ", copy ? "redundant " : "",
> -	       CONFIG_SYS_MMC_ENV_DEV);
> +	       mmc_env_devno);
>  	if (write_env(mmc, CONFIG_ENV_SIZE, offset, (u_char *)env_new)) {
>  		puts("failed\n");
>  		ret = 1;
> @@ -192,7 +198,7 @@ static inline int read_env(struct mmc *mmc, unsigned long size,
>  			   unsigned long offset, const void *buffer)
>  {
>  	uint blk_start, blk_cnt, n;
> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	int dev = mmc_get_env_devno();
>  
>  #ifdef CONFIG_SPL_BUILD
>  	dev = 0;
> @@ -216,7 +222,7 @@ void env_relocate_spec(void)
>  	int crc1_ok = 0, crc2_ok = 0;
>  	env_t *ep;
>  	int ret;
> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	int dev = mmc_get_env_devno();
>  	const char *errmsg = NULL;
>  
>  	ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env1, 1);
> @@ -302,7 +308,7 @@ void env_relocate_spec(void)
>  	struct mmc *mmc;
>  	u32 offset;
>  	int ret;
> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
> +	int dev = mmc_get_env_devno();
>  	const char *errmsg;
>  
>  #ifdef CONFIG_SPL_BUILD
> diff --git a/include/mmc.h b/include/mmc.h
> index cda9a19..e70aedb 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -475,6 +475,7 @@ void board_mmc_power_init(void);
>  int board_mmc_init(bd_t *bis);
>  int cpu_mmc_init(bd_t *bis);
>  int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
> +int mmc_get_env_devno(void);
>  
>  struct pci_device_id;
>  
> 

-- 
=====================================================================
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] 7+ messages in thread

* [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards
  2016-02-02 19:46   ` Stefano Babic
@ 2016-02-03  1:01     ` Peng Fan
  2016-02-04  9:13       ` Stefano Babic
  0 siblings, 1 reply; 7+ messages in thread
From: Peng Fan @ 2016-02-03  1:01 UTC (permalink / raw)
  To: u-boot

Hi Stefano,

On Tue, Feb 02, 2016 at 08:46:09PM +0100, Stefano Babic wrote:
>Hi Peng,
>
>On 17/12/2015 05:43, Peng Fan wrote:
>> Some boards support booting from different SD card slots.
>> For example, mx6dpsabresd board supports booting from SD2,
>> SD3, EMMC4, using different boot switch. And the index
>> numbers are SD2(0), SD3(1), EMMC4(2).
>> But CONFIG_SYS_MMC_ENV_DEV is hardcoded to 1(for SD3), so when
>> booting from SD2(using 0), uboot complains "MMC: no card present",
>> since there is no card in SD3 slot.
>> 
>> This patch introduces a weak function which still returns
>> CONFIG_SYS_MMC_ENV_DEV to avoid break other boards. Then
>> different boards can implement mmc_get_env_devno to read
>> env from the correct sd/emmc.
>> 
>> Signed-off-by: Peng Fan <peng.fan@nxp.com>
>> Cc: Stefano Babic <sbabic@denx.de>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Tim Harvey <tharvey@gateworks.com>
>> Cc: Hans de Goede <hdegoede@redhat.com>
>> ---
>> 
>
>Tom sets this patch as deferred - then applying the rest of the series
>makes no sense. Patchset should be rechecked later after next release.

Could you please check these three patches. I may missed to use V3, but still used V2.
The three patches are new for the env no.

https://patchwork.ozlabs.org/patch/574586/
https://patchwork.ozlabs.org/patch/574587/
https://patchwork.ozlabs.org/patch/574588/

Thanks,
Peng

>
>Best regards,
>Stefano Babic
>> Changes V2:
>>  none.
>> 
>>  common/env_mmc.c | 22 ++++++++++++++--------
>>  include/mmc.h    |  1 +
>>  2 files changed, 15 insertions(+), 8 deletions(-)
>> 
>> diff --git a/common/env_mmc.c b/common/env_mmc.c
>> index 9639822..857e20c 100644
>> --- a/common/env_mmc.c
>> +++ b/common/env_mmc.c
>> @@ -63,6 +63,11 @@ int env_init(void)
>>  	return 0;
>>  }
>>  
>> +__weak int mmc_get_env_devno(void)
>> +{
>> +	return CONFIG_SYS_MMC_ENV_DEV;
>> +}
>> +
>>  #ifdef CONFIG_SYS_MMC_ENV_PART
>>  __weak uint mmc_get_env_part(struct mmc *mmc)
>>  {
>> @@ -72,7 +77,7 @@ __weak uint mmc_get_env_part(struct mmc *mmc)
>>  static int mmc_set_env_part(struct mmc *mmc)
>>  {
>>  	uint part = mmc_get_env_part(mmc);
>> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
>> +	int dev = mmc_get_env_devno();
>>  	int ret = 0;
>>  
>>  #ifdef CONFIG_SPL_BUILD
>> @@ -108,7 +113,7 @@ static const char *init_mmc_for_env(struct mmc *mmc)
>>  static void fini_mmc_for_env(struct mmc *mmc)
>>  {
>>  #ifdef CONFIG_SYS_MMC_ENV_PART
>> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
>> +	int dev = mmc_get_env_devno();
>>  
>>  #ifdef CONFIG_SPL_BUILD
>>  	dev = 0;
>> @@ -127,7 +132,7 @@ static inline int write_env(struct mmc *mmc, unsigned long size,
>>  	blk_start	= ALIGN(offset, mmc->write_bl_len) / mmc->write_bl_len;
>>  	blk_cnt		= ALIGN(size, mmc->write_bl_len) / mmc->write_bl_len;
>>  
>> -	n = mmc->block_dev.block_write(CONFIG_SYS_MMC_ENV_DEV, blk_start,
>> +	n = mmc->block_dev.block_write(mmc_get_env_devno(), blk_start,
>>  					blk_cnt, (u_char *)buffer);
>>  
>>  	return (n == blk_cnt) ? 0 : -1;
>> @@ -140,7 +145,8 @@ static unsigned char env_flags;
>>  int saveenv(void)
>>  {
>>  	ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
>> -	struct mmc *mmc = find_mmc_device(CONFIG_SYS_MMC_ENV_DEV);
>> +	int mmc_env_devno = mmc_get_env_devno();
>> +	struct mmc *mmc = find_mmc_device(mmc_env_devno);
>>  	u32	offset;
>>  	int	ret, copy = 0;
>>  	const char *errmsg;
>> @@ -168,7 +174,7 @@ int saveenv(void)
>>  	}
>>  
>>  	printf("Writing to %sMMC(%d)... ", copy ? "redundant " : "",
>> -	       CONFIG_SYS_MMC_ENV_DEV);
>> +	       mmc_env_devno);
>>  	if (write_env(mmc, CONFIG_ENV_SIZE, offset, (u_char *)env_new)) {
>>  		puts("failed\n");
>>  		ret = 1;
>> @@ -192,7 +198,7 @@ static inline int read_env(struct mmc *mmc, unsigned long size,
>>  			   unsigned long offset, const void *buffer)
>>  {
>>  	uint blk_start, blk_cnt, n;
>> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
>> +	int dev = mmc_get_env_devno();
>>  
>>  #ifdef CONFIG_SPL_BUILD
>>  	dev = 0;
>> @@ -216,7 +222,7 @@ void env_relocate_spec(void)
>>  	int crc1_ok = 0, crc2_ok = 0;
>>  	env_t *ep;
>>  	int ret;
>> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
>> +	int dev = mmc_get_env_devno();
>>  	const char *errmsg = NULL;
>>  
>>  	ALLOC_CACHE_ALIGN_BUFFER(env_t, tmp_env1, 1);
>> @@ -302,7 +308,7 @@ void env_relocate_spec(void)
>>  	struct mmc *mmc;
>>  	u32 offset;
>>  	int ret;
>> -	int dev = CONFIG_SYS_MMC_ENV_DEV;
>> +	int dev = mmc_get_env_devno();
>>  	const char *errmsg;
>>  
>>  #ifdef CONFIG_SPL_BUILD
>> diff --git a/include/mmc.h b/include/mmc.h
>> index cda9a19..e70aedb 100644
>> --- a/include/mmc.h
>> +++ b/include/mmc.h
>> @@ -475,6 +475,7 @@ void board_mmc_power_init(void);
>>  int board_mmc_init(bd_t *bis);
>>  int cpu_mmc_init(bd_t *bis);
>>  int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr);
>> +int mmc_get_env_devno(void);
>>  
>>  struct pci_device_id;
>>  
>> 
>
>-- 
>=====================================================================
>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
>=====================================================================
>_______________________________________________
>U-Boot mailing list
>U-Boot at lists.denx.de
>http://lists.denx.de/mailman/listinfo/u-boot

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

* [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards
  2016-02-03  1:01     ` Peng Fan
@ 2016-02-04  9:13       ` Stefano Babic
  0 siblings, 0 replies; 7+ messages in thread
From: Stefano Babic @ 2016-02-04  9:13 UTC (permalink / raw)
  To: u-boot

Hi Peng,

On 03/02/2016 02:01, Peng Fan wrote:
> Hi Stefano,
> 
> On Tue, Feb 02, 2016 at 08:46:09PM +0100, Stefano Babic wrote:
>> Hi Peng,
>>
>> On 17/12/2015 05:43, Peng Fan wrote:
>>> Some boards support booting from different SD card slots.
>>> For example, mx6dpsabresd board supports booting from SD2,
>>> SD3, EMMC4, using different boot switch. And the index
>>> numbers are SD2(0), SD3(1), EMMC4(2).
>>> But CONFIG_SYS_MMC_ENV_DEV is hardcoded to 1(for SD3), so when
>>> booting from SD2(using 0), uboot complains "MMC: no card present",
>>> since there is no card in SD3 slot.
>>>
>>> This patch introduces a weak function which still returns
>>> CONFIG_SYS_MMC_ENV_DEV to avoid break other boards. Then
>>> different boards can implement mmc_get_env_devno to read
>>> env from the correct sd/emmc.
>>>
>>> Signed-off-by: Peng Fan <peng.fan@nxp.com>
>>> Cc: Stefano Babic <sbabic@denx.de>
>>> Cc: Simon Glass <sjg@chromium.org>
>>> Cc: Tim Harvey <tharvey@gateworks.com>
>>> Cc: Hans de Goede <hdegoede@redhat.com>
>>> ---
>>>
>>
>> Tom sets this patch as deferred - then applying the rest of the series
>> makes no sense. Patchset should be rechecked later after next release.
> 
> Could you please check these three patches. I may missed to use V3, but still used V2.
> The three patches are new for the env no.
> 
> https://patchwork.ozlabs.org/patch/574586/
> https://patchwork.ozlabs.org/patch/574587/
> https://patchwork.ozlabs.org/patch/574588/
> 

I have not tested, but they looks fine - I am picking them up before my PR.

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

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

end of thread, other threads:[~2016-02-04  9:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-17  4:43 [U-Boot] [PATCH V2 1/4] imx: mx7dsabresd: move mmc_get_env_devno to soc code Peng Fan
2015-12-17  4:43 ` [U-Boot] [PATCH V2 2/4] common: env_mmc: support loading env from different cards Peng Fan
2016-02-02 19:46   ` Stefano Babic
2016-02-03  1:01     ` Peng Fan
2016-02-04  9:13       ` Stefano Babic
2015-12-17  4:43 ` [U-Boot] [PATCH V2 3/4] imx: mx6: implement mmc_get_env_devno Peng Fan
2015-12-17  4:43 ` [U-Boot] [PATCH V2 4/4] imx: mx6: implement board_mmc_get_env_devno Peng Fan

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.