aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/ide.c22
-rw-r--r--drivers/block/ide.c13
-rw-r--r--include/ide.h1
-rw-r--r--test/boot/bootdev.c2
4 files changed, 27 insertions, 11 deletions
diff --git a/cmd/ide.c b/cmd/ide.c
index 6739f0b12d..ddc87d3a0b 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -10,12 +10,15 @@
#include <common.h>
#include <blk.h>
+#include <dm.h>
#include <config.h>
#include <watchdog.h>
#include <command.h>
#include <image.h>
#include <asm/byteorder.h>
#include <asm/io.h>
+#include <dm/device-internal.h>
+#include <dm/uclass-internal.h>
#include <ide.h>
#include <ata.h>
@@ -31,8 +34,25 @@ int do_ide(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
if (argc == 2) {
if (strncmp(argv[1], "res", 3) == 0) {
+ struct udevice *dev;
+ int ret;
+
puts("\nReset IDE: ");
- ide_init();
+ ret = uclass_find_first_device(UCLASS_IDE, &dev);
+ ret = device_remove(dev, DM_REMOVE_NORMAL);
+ if (!ret)
+ ret = device_chld_unbind(dev, NULL);
+ if (ret) {
+ printf("Cannot remove IDE (err=%dE)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+
+ ret = uclass_first_device_err(UCLASS_IDE, &dev);
+ if (ret) {
+ printf("Init failed (err=%dE)\n", ret);
+ return CMD_RET_FAILURE;
+ }
+
return 0;
}
}
diff --git a/drivers/block/ide.c b/drivers/block/ide.c
index 6f601bcf86..13770484b3 100644
--- a/drivers/block/ide.c
+++ b/drivers/block/ide.c
@@ -58,8 +58,6 @@ static void ide_reset(void)
for (i = 0; i < CONFIG_SYS_IDE_MAXBUS; ++i)
ide_bus_ok[i] = 0;
- for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; ++i)
- ide_dev_desc[i].type = DEV_TYPE_UNKNOWN;
ide_set_reset(1); /* assert reset */
@@ -689,9 +687,8 @@ __weak unsigned char ide_inb(int dev, int port)
return val;
}
-void ide_init(void)
+static void ide_init(void)
{
- struct udevice *dev;
unsigned char c;
int i, bus;
@@ -764,8 +761,6 @@ void ide_init(void)
dev_print(&ide_dev_desc[i]);
}
schedule();
-
- uclass_first_device(UCLASS_IDE, &dev);
}
__weak void ide_input_swap_data(int dev, ulong *sect_buf, int words)
@@ -1067,7 +1062,9 @@ static int ide_bootdev_bind(struct udevice *dev)
static int ide_bootdev_hunt(struct bootdev_hunter *info, bool show)
{
- ide_init();
+ struct udevice *dev;
+
+ uclass_first_device(UCLASS_IDE, &dev);
return 0;
}
@@ -1104,6 +1101,8 @@ static int ide_probe(struct udevice *udev)
int i;
int ret;
+ ide_init();
+
for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
sprintf(name, "blk#%d", i);
diff --git a/include/ide.h b/include/ide.h
index 457f275c61..3f36b4340d 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -15,7 +15,6 @@
* Function Prototypes
*/
-void ide_init(void);
struct blk_desc;
struct udevice;
ulong ide_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
diff --git a/test/boot/bootdev.c b/test/boot/bootdev.c
index 0899c78c2c..8cf3f30e0f 100644
--- a/test/boot/bootdev.c
+++ b/test/boot/bootdev.c
@@ -376,7 +376,6 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
ut_assert_nextline("Hunting with: simple_bus");
ut_assert_nextline("Found 2 extension board(s).");
ut_assert_nextline("Hunting with: ide");
- ut_assert_nextline("Bus 0: not available ");
/* mmc hunter has already been used so should not run again */
@@ -487,7 +486,6 @@ static int bootdev_test_hunt_prio(struct unit_test_state *uts)
/* now try a different priority, verbosely */
ut_assertok(bootdev_hunt_prio(BOOTDEVP_5_SCAN_SLOW, true));
ut_assert_nextline("Hunting with: ide");
- ut_assert_nextline("Bus 0: not available ");
ut_assert_nextline("Hunting with: usb");
ut_assert_nextline(
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");