diff --git a/cmd/sata.c b/cmd/sata.c index d18b5233e6..f56622acc2 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 88f08c95ec..42ff5c7755 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")));