summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTang Yuantian <Yuantian.Tang@nxp.com>2016-11-21 10:24:20 +0800
committerTom Rini <trini@konsulko.com>2016-11-28 19:49:47 -0500
commitaa6ab905b2833ea74ec92fc9d40d6245ff294a07 (patch)
tree71ab726c714b0f6fc0614dc3df29b7ae6c6d283b
parent333ee16d042076669b36328dc06765a78c0676eb (diff)
downloadu-boot-imx-aa6ab905b2833ea74ec92fc9d40d6245ff294a07.zip
u-boot-imx-aa6ab905b2833ea74ec92fc9d40d6245ff294a07.tar.gz
u-boot-imx-aa6ab905b2833ea74ec92fc9d40d6245ff294a07.tar.bz2
sata: fix sata command can not being executed bug
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>
-rw-r--r--cmd/sata.c9
-rw-r--r--common/sata.c8
2 files changed, 11 insertions, 6 deletions
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")));