Source
x
printf("ATAPI_ISSUE: Error (no IRQ) before sending ccb dev %d status 0x%02x\n",
// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2000-2011
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*/
/* nothing */
/* nothing */
/* Current offset for IDE0 / IDE1 bus access */
ulong ide_bus_offset[CONFIG_SYS_IDE_MAXBUS] = {
CONFIG_SYS_ATA_IDE0_OFFSET,
CONFIG_SYS_ATA_IDE1_OFFSET,
};
static int ide_bus_ok[CONFIG_SYS_IDE_MAXBUS];
struct blk_desc ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE];
/* 2 sec timeout */
/* 7 sec timeout (5 sec seems to work...) */
/* 5 sec spin-up timeout */
extern void ide_set_reset(int idereset);
static void ide_reset(void)
{
int i;
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 */
/* the reset signal shall be asserted for et least 25 us */
udelay(25);
WATCHDOG_RESET();
/* de-assert RESET signal */
ide_set_reset(0);
/* wait 250 ms */
for (i = 0; i < 250; ++i)
udelay(1000);
}
/* dummy */
/* CONFIG_IDE_RESET */
/*
* Wait until Busy bit is off, or timeout (in ms)
* Return last status
*/
static uchar ide_wait(int dev, ulong t)
{
ulong delay = 10 * t; /* poll every 100 us */
uchar c;
while ((c = ide_inb(dev, ATA_STATUS)) & ATA_STAT_BUSY) {
udelay(100);
if (delay-- == 0)
break;
}
return c;
}