diff mbox

[U-Boot,1/3] cmd_mmc: add force_init parameter to init_mmc_device()

Message ID 1400873087-20921-1-git-send-email-swarren@wwwdotorg.org
State Accepted
Delegated to: Pantelis Antoniou
Headers show

Commit Message

Stephen Warren May 23, 2014, 7:24 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

This allows callers to inject mmc->has_init = 0 between finding the
MMC device, and calling mmc_init(), which forces mmc_init() to rescan
the HW. Future changes will use this feature.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---

 common/cmd_mmc.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

Comments

Stephen Warren May 30, 2014, 9:12 p.m. UTC | #1
On 05/23/2014 01:24 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> This allows callers to inject mmc->has_init = 0 between finding the
> MMC device, and calling mmc_init(), which forces mmc_init() to rescan
> the HW. Future changes will use this feature.

Pantelis, does this series look good?
Jaehoon Chung June 2, 2014, 4:59 a.m. UTC | #2
Hi, Stephen.

Your patch-set looks good to me.

Acked-by: Jaehoon Chung <jh80.chung@samsung.com>

If card didn't insert, can we display the other log instead of the below log?

#mmc rescan
#mmc dev 1
"Card did not respond to voltage select!"

Best Regards,
Jaehoon Chung

On 05/31/2014 06:12 AM, Stephen Warren wrote:
> On 05/23/2014 01:24 PM, Stephen Warren wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> This allows callers to inject mmc->has_init = 0 between finding the
>> MMC device, and calling mmc_init(), which forces mmc_init() to rescan
>> the HW. Future changes will use this feature.
> 
> Pantelis, does this series look good?
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
Stephen Warren June 2, 2014, 3:50 p.m. UTC | #3
On 06/01/2014 10:59 PM, Jaehoon Chung wrote:
> Hi, Stephen.
> 
> Your patch-set looks good to me.
> 
> Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
> 
> If card didn't insert, can we display the other log instead of the below log?
> 
> #mmc rescan
> #mmc dev 1
> "Card did not respond to voltage select!"

Some SD slots have a "card detect" GPIO or similar, so it might be
possible to do that. Of course, not all slots have that, and I don't
know how to differentiate "card not present" from "command timed out".
Is there a defined way to do that?
Stephen Warren June 10, 2014, 4:01 p.m. UTC | #4
On 05/30/2014 03:12 PM, Stephen Warren wrote:
> On 05/23/2014 01:24 PM, Stephen Warren wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> This allows callers to inject mmc->has_init = 0 between finding the
>> MMC device, and calling mmc_init(), which forces mmc_init() to rescan
>> the HW. Future changes will use this feature.
> 
> Pantelis, does this series look good?

Any comments?
Pantelis Antoniou June 12, 2014, 11:28 a.m. UTC | #5
Hi Stephen,

On May 23, 2014, at 10:24 PM, Stephen Warren wrote:

> From: Stephen Warren <swarren@nvidia.com>
> 
> This allows callers to inject mmc->has_init = 0 between finding the
> MMC device, and calling mmc_init(), which forces mmc_init() to rescan
> the HW. Future changes will use this feature.
> 
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> 
> common/cmd_mmc.c | 26 ++++++++++++++------------
> 1 file changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
> index 9e6a26fe62a2..6741ebee3bca 100644
> --- a/common/cmd_mmc.c
> +++ b/common/cmd_mmc.c
> @@ -92,7 +92,7 @@ static void print_mmcinfo(struct mmc *mmc)
> 
> 	printf("Bus Width: %d-bit\n", mmc->bus_width);
> }
> -static struct mmc *init_mmc_device(int dev)
> +static struct mmc *init_mmc_device(int dev, bool force_init)
> {
> 	struct mmc *mmc;
> 	mmc = find_mmc_device(dev);
> @@ -100,6 +100,8 @@ static struct mmc *init_mmc_device(int dev)
> 		printf("no mmc device at slot %x\n", dev);
> 		return NULL;
> 	}
> +	if (force_init)
> +		mmc->has_init = 0;
> 	if (mmc_init(mmc))
> 		return NULL;
> 	return mmc;
> @@ -117,7 +119,7 @@ static int do_mmcinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> 		}
> 	}
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -247,7 +249,7 @@ static int do_mmcrpmb(cmd_tbl_t *cmdtp, int flag,
> 	if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
> 		return CMD_RET_SUCCESS;
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -292,7 +294,7 @@ static int do_mmc_read(cmd_tbl_t *cmdtp, int flag,
> 	blk = simple_strtoul(argv[2], NULL, 16);
> 	cnt = simple_strtoul(argv[3], NULL, 16);
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -320,7 +322,7 @@ static int do_mmc_write(cmd_tbl_t *cmdtp, int flag,
> 	blk = simple_strtoul(argv[2], NULL, 16);
> 	cnt = simple_strtoul(argv[3], NULL, 16);
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -348,7 +350,7 @@ static int do_mmc_erase(cmd_tbl_t *cmdtp, int flag,
> 	blk = simple_strtoul(argv[1], NULL, 16);
> 	cnt = simple_strtoul(argv[2], NULL, 16);
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -387,7 +389,7 @@ static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
> 	block_dev_desc_t *mmc_dev;
> 	struct mmc *mmc;
> 
> -	mmc = init_mmc_device(curr_device);
> +	mmc = init_mmc_device(curr_device, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -422,7 +424,7 @@ static int do_mmc_dev(cmd_tbl_t *cmdtp, int flag,
> 		return CMD_RET_USAGE;
> 	}
> 
> -	mmc = init_mmc_device(dev);
> +	mmc = init_mmc_device(dev, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -462,7 +464,7 @@ static int do_mmc_bootbus(cmd_tbl_t *cmdtp, int flag,
> 	reset = simple_strtoul(argv[3], NULL, 10);
> 	mode = simple_strtoul(argv[4], NULL, 10);
> 
> -	mmc = init_mmc_device(dev);
> +	mmc = init_mmc_device(dev, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -487,7 +489,7 @@ static int do_mmc_boot_resize(cmd_tbl_t *cmdtp, int flag,
> 	bootsize = simple_strtoul(argv[2], NULL, 10);
> 	rpmbsize = simple_strtoul(argv[3], NULL, 10);
> 
> -	mmc = init_mmc_device(dev);
> +	mmc = init_mmc_device(dev, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -520,7 +522,7 @@ static int do_mmc_partconf(cmd_tbl_t *cmdtp, int flag,
> 	part_num = simple_strtoul(argv[3], NULL, 10);
> 	access = simple_strtoul(argv[4], NULL, 10);
> 
> -	mmc = init_mmc_device(dev);
> +	mmc = init_mmc_device(dev, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> @@ -555,7 +557,7 @@ static int do_mmc_rst_func(cmd_tbl_t *cmdtp, int flag,
> 		return CMD_RET_USAGE;
> 	}
> 
> -	mmc = init_mmc_device(dev);
> +	mmc = init_mmc_device(dev, false);
> 	if (!mmc)
> 		return CMD_RET_FAILURE;
> 
> -- 
> 1.8.1.5
> 

Looks fine. I have a slight preference for not using bools in C code, but I see it's already creeping in the codebase.
I'll apply it as is, and if we have any complaints by people using really ancient compilers I'll convert to int.

Thanks, applied.

-- Pantelis

Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com>
diff mbox

Patch

diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index 9e6a26fe62a2..6741ebee3bca 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -92,7 +92,7 @@  static void print_mmcinfo(struct mmc *mmc)
 
 	printf("Bus Width: %d-bit\n", mmc->bus_width);
 }
-static struct mmc *init_mmc_device(int dev)
+static struct mmc *init_mmc_device(int dev, bool force_init)
 {
 	struct mmc *mmc;
 	mmc = find_mmc_device(dev);
@@ -100,6 +100,8 @@  static struct mmc *init_mmc_device(int dev)
 		printf("no mmc device at slot %x\n", dev);
 		return NULL;
 	}
+	if (force_init)
+		mmc->has_init = 0;
 	if (mmc_init(mmc))
 		return NULL;
 	return mmc;
@@ -117,7 +119,7 @@  static int do_mmcinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		}
 	}
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -247,7 +249,7 @@  static int do_mmcrpmb(cmd_tbl_t *cmdtp, int flag,
 	if (flag == CMD_FLAG_REPEAT && !cp->repeatable)
 		return CMD_RET_SUCCESS;
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -292,7 +294,7 @@  static int do_mmc_read(cmd_tbl_t *cmdtp, int flag,
 	blk = simple_strtoul(argv[2], NULL, 16);
 	cnt = simple_strtoul(argv[3], NULL, 16);
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -320,7 +322,7 @@  static int do_mmc_write(cmd_tbl_t *cmdtp, int flag,
 	blk = simple_strtoul(argv[2], NULL, 16);
 	cnt = simple_strtoul(argv[3], NULL, 16);
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -348,7 +350,7 @@  static int do_mmc_erase(cmd_tbl_t *cmdtp, int flag,
 	blk = simple_strtoul(argv[1], NULL, 16);
 	cnt = simple_strtoul(argv[2], NULL, 16);
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -387,7 +389,7 @@  static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
 	block_dev_desc_t *mmc_dev;
 	struct mmc *mmc;
 
-	mmc = init_mmc_device(curr_device);
+	mmc = init_mmc_device(curr_device, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -422,7 +424,7 @@  static int do_mmc_dev(cmd_tbl_t *cmdtp, int flag,
 		return CMD_RET_USAGE;
 	}
 
-	mmc = init_mmc_device(dev);
+	mmc = init_mmc_device(dev, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -462,7 +464,7 @@  static int do_mmc_bootbus(cmd_tbl_t *cmdtp, int flag,
 	reset = simple_strtoul(argv[3], NULL, 10);
 	mode = simple_strtoul(argv[4], NULL, 10);
 
-	mmc = init_mmc_device(dev);
+	mmc = init_mmc_device(dev, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -487,7 +489,7 @@  static int do_mmc_boot_resize(cmd_tbl_t *cmdtp, int flag,
 	bootsize = simple_strtoul(argv[2], NULL, 10);
 	rpmbsize = simple_strtoul(argv[3], NULL, 10);
 
-	mmc = init_mmc_device(dev);
+	mmc = init_mmc_device(dev, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -520,7 +522,7 @@  static int do_mmc_partconf(cmd_tbl_t *cmdtp, int flag,
 	part_num = simple_strtoul(argv[3], NULL, 10);
 	access = simple_strtoul(argv[4], NULL, 10);
 
-	mmc = init_mmc_device(dev);
+	mmc = init_mmc_device(dev, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;
 
@@ -555,7 +557,7 @@  static int do_mmc_rst_func(cmd_tbl_t *cmdtp, int flag,
 		return CMD_RET_USAGE;
 	}
 
-	mmc = init_mmc_device(dev);
+	mmc = init_mmc_device(dev, false);
 	if (!mmc)
 		return CMD_RET_FAILURE;