mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 07:31:15 +00:00
ide: Move ide_init() into probing
At present the code does ide_init() as a separate operation, then calls device_probe() to copy over the information. We can call ide_init() from probe just as easily. The only difference is that using 'ide init' twice will do nothing. However it already fails to copy over the new data in that case, so the effect is the same. For now, unbind the block devices and remove the IDE device, which causes the bus to be probed again. Later patches will fix this up fully, so that all blk_desc data is copied across. Since ide_reset() is only called from ide_init(), there is no need to init the ide_dev_desc[] array. This is already done at the end of ide_init() so drop this code. The call to uclass_first_device() is now within the probe() function of the same device, so does nothing. Drop it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
00a79f21c1
commit
80778f505c
4 changed files with 27 additions and 11 deletions
22
cmd/ide.c
22
cmd/ide.c
|
@ -10,12 +10,15 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <blk.h>
|
#include <blk.h>
|
||||||
|
#include <dm.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <image.h>
|
#include <image.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <dm/device-internal.h>
|
||||||
|
#include <dm/uclass-internal.h>
|
||||||
|
|
||||||
#include <ide.h>
|
#include <ide.h>
|
||||||
#include <ata.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 (argc == 2) {
|
||||||
if (strncmp(argv[1], "res", 3) == 0) {
|
if (strncmp(argv[1], "res", 3) == 0) {
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
puts("\nReset IDE: ");
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,8 +58,6 @@ static void ide_reset(void)
|
||||||
|
|
||||||
for (i = 0; i < CONFIG_SYS_IDE_MAXBUS; ++i)
|
for (i = 0; i < CONFIG_SYS_IDE_MAXBUS; ++i)
|
||||||
ide_bus_ok[i] = 0;
|
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 */
|
ide_set_reset(1); /* assert reset */
|
||||||
|
|
||||||
|
@ -689,9 +687,8 @@ __weak unsigned char ide_inb(int dev, int port)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_init(void)
|
static void ide_init(void)
|
||||||
{
|
{
|
||||||
struct udevice *dev;
|
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
int i, bus;
|
int i, bus;
|
||||||
|
|
||||||
|
@ -764,8 +761,6 @@ void ide_init(void)
|
||||||
dev_print(&ide_dev_desc[i]);
|
dev_print(&ide_dev_desc[i]);
|
||||||
}
|
}
|
||||||
schedule();
|
schedule();
|
||||||
|
|
||||||
uclass_first_device(UCLASS_IDE, &dev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__weak void ide_input_swap_data(int dev, ulong *sect_buf, int words)
|
__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)
|
static int ide_bootdev_hunt(struct bootdev_hunter *info, bool show)
|
||||||
{
|
{
|
||||||
ide_init();
|
struct udevice *dev;
|
||||||
|
|
||||||
|
uclass_first_device(UCLASS_IDE, &dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1104,6 +1101,8 @@ static int ide_probe(struct udevice *udev)
|
||||||
int i;
|
int i;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
ide_init();
|
||||||
|
|
||||||
for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
|
for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
|
||||||
if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
|
if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
|
||||||
sprintf(name, "blk#%d", i);
|
sprintf(name, "blk#%d", i);
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
* Function Prototypes
|
* Function Prototypes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ide_init(void);
|
|
||||||
struct blk_desc;
|
struct blk_desc;
|
||||||
struct udevice;
|
struct udevice;
|
||||||
ulong ide_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
|
ulong ide_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt,
|
||||||
|
|
|
@ -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("Hunting with: simple_bus");
|
||||||
ut_assert_nextline("Found 2 extension board(s).");
|
ut_assert_nextline("Found 2 extension board(s).");
|
||||||
ut_assert_nextline("Hunting with: ide");
|
ut_assert_nextline("Hunting with: ide");
|
||||||
ut_assert_nextline("Bus 0: not available ");
|
|
||||||
|
|
||||||
/* mmc hunter has already been used so should not run again */
|
/* 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 */
|
/* now try a different priority, verbosely */
|
||||||
ut_assertok(bootdev_hunt_prio(BOOTDEVP_5_SCAN_SLOW, true));
|
ut_assertok(bootdev_hunt_prio(BOOTDEVP_5_SCAN_SLOW, true));
|
||||||
ut_assert_nextline("Hunting with: ide");
|
ut_assert_nextline("Hunting with: ide");
|
||||||
ut_assert_nextline("Bus 0: not available ");
|
|
||||||
ut_assert_nextline("Hunting with: usb");
|
ut_assert_nextline("Hunting with: usb");
|
||||||
ut_assert_nextline(
|
ut_assert_nextline(
|
||||||
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");
|
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");
|
||||||
|
|
Loading…
Reference in a new issue