diff mbox

[U-Boot] sata: fix sata command can not being executed bug

Message ID 1479695060-27892-1-git-send-email-yuantian.tang@nxp.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

tang yuantian Nov. 21, 2016, 2:24 a.m. UTC
From: Tang Yuantian <Yuantian.Tang@nxp.com>

Commit d97dc8a0 separated the non-command code into its own file
which caused variable sata_curr_device can not be set to a correct
value.

Before commit d97dc8a0, variable sata_curr_device can be set
correctly in sata_initialize().
After commit d97dc8a0, sata_initialize() is moved out to its own file.
Accordingly, variable sata_curr_device is removed from sata_initialize()
too. This caused sata_curr_device never gets a chance to be set properly
which prevent other commands from being executed.

This patch sets variable sata_curr_device properly.

Fixes: d97dc8a0 (dm: sata: Separate the non-command code into its
 own file)

Signed-off-by: Tang Yuantian <yuantian.tang@nxp.com>
---
v3:
  - refine the commit message
v2:
  - refined this patch and updated the commit title and message

 cmd/sata.c    | 9 ++++++---
 common/sata.c | 8 +++++---
 2 files changed, 11 insertions(+), 6 deletions(-)

Comments

Simon Glass Nov. 24, 2016, 2:20 a.m. UTC | #1
On 20 November 2016 at 19:24,  <yuantian.tang@nxp.com> wrote:
> From: Tang Yuantian <Yuantian.Tang@nxp.com>
>
> Commit d97dc8a0 separated the non-command code into its own file
> which caused variable sata_curr_device can not be set to a correct
> value.
>
> Before commit d97dc8a0, variable sata_curr_device can be set
> correctly in sata_initialize().
> After commit d97dc8a0, sata_initialize() is moved out to its own file.
> Accordingly, variable sata_curr_device is removed from sata_initialize()
> too. This caused sata_curr_device never gets a chance to be set properly
> which prevent other commands from being executed.
>
> This patch sets variable sata_curr_device properly.
>
> Fixes: d97dc8a0 (dm: sata: Separate the non-command code into its
>  own file)
>
> Signed-off-by: Tang Yuantian <yuantian.tang@nxp.com>
> ---
> v3:
>   - refine the commit message
> v2:
>   - refined this patch and updated the commit title and message
>
>  cmd/sata.c    | 9 ++++++---
>  common/sata.c | 8 +++++---
>  2 files changed, 11 insertions(+), 6 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Tom Rini Nov. 29, 2016, 1:06 a.m. UTC | #2
On Mon, Nov 21, 2016 at 10:24:20AM +0800, tang yuantian wrote:

> From: Tang Yuantian <Yuantian.Tang@nxp.com>
> 
> Commit d97dc8a0 separated the non-command code into its own file
> which caused variable sata_curr_device can not be set to a correct
> value.
> 
> Before commit d97dc8a0, variable sata_curr_device can be set
> correctly in sata_initialize().
> After commit d97dc8a0, sata_initialize() is moved out to its own file.
> Accordingly, variable sata_curr_device is removed from sata_initialize()
> too. This caused sata_curr_device never gets a chance to be set properly
> which prevent other commands from being executed.
> 
> This patch sets variable sata_curr_device properly.
> 
> Fixes: d97dc8a0 (dm: sata: Separate the non-command code into its
>  own file)
> 
> Signed-off-by: Tang Yuantian <yuantian.tang@nxp.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/cmd/sata.c b/cmd/sata.c
index d18b523..f56622a 100644
--- a/cmd/sata.c
+++ b/cmd/sata.c
@@ -32,9 +32,12 @@  static int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	}
 
 	/* If the user has not yet run `sata init`, do it now */
-	if (sata_curr_device == -1)
-		if (sata_initialize())
-			return 1;
+	if (sata_curr_device == -1) {
+		rc = sata_initialize();
+		if (rc == -1)
+			return rc;
+		sata_curr_device = rc;
+	}
 
 	switch (argc) {
 	case 0:
diff --git a/common/sata.c b/common/sata.c
index 88f08c9..42ff5c7 100644
--- a/common/sata.c
+++ b/common/sata.c
@@ -51,7 +51,7 @@  static unsigned long sata_bwrite(struct blk_desc *block_dev, lbaint_t start,
 
 int __sata_initialize(void)
 {
-	int rc;
+	int rc, ret = -1;
 	int i;
 
 	for (i = 0; i < CONFIG_SYS_SATA_MAX_DEVICE; i++) {
@@ -71,12 +71,14 @@  int __sata_initialize(void)
 		if (!rc) {
 			rc = scan_sata(i);
 			if (!rc && sata_dev_desc[i].lba > 0 &&
-			    sata_dev_desc[i].blksz > 0)
+			    sata_dev_desc[i].blksz > 0) {
 				part_init(&sata_dev_desc[i]);
+				ret = i;
+			}
 		}
 	}
 
-	return rc;
+	return ret;
 }
 int sata_initialize(void) __attribute__((weak, alias("__sata_initialize")));