sata: fix sata command can not being executed bug
authorTang Yuantian <Yuantian.Tang@nxp.com>
Mon, 21 Nov 2016 02:24:20 +0000 (10:24 +0800)
committerTom Rini <trini@konsulko.com>
Tue, 29 Nov 2016 00:49:47 +0000 (19:49 -0500)
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>
cmd/sata.c
common/sata.c

index d18b5233e6aa973457f29893c22d8463d825ecaa..f56622acc2ccb794d947b7e2b8c9dd85cf3f4306 100644 (file)
@@ -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:
index 88f08c95eca46249143b3898189bcfc846cfc0e6..42ff5c7755a64d466965c81b75632a88fdb6f0f9 100644 (file)
@@ -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")));