|
@@ -435,8 +435,8 @@ static int sil24_softreset(struct ata_port *ap, int verbose,
|
|
|
struct sil24_port_priv *pp = ap->private_data;
|
|
|
struct sil24_prb *prb = &pp->cmd_block[0].ata.prb;
|
|
|
dma_addr_t paddr = pp->cmd_block_dma;
|
|
|
+ unsigned long timeout = jiffies + ATA_TMOUT_BOOT * HZ;
|
|
|
u32 irq_enable, irq_stat;
|
|
|
- int cnt;
|
|
|
|
|
|
DPRINTK("ENTER\n");
|
|
|
|
|
@@ -461,7 +461,7 @@ static int sil24_softreset(struct ata_port *ap, int verbose,
|
|
|
|
|
|
writel((u32)paddr, port + PORT_CMD_ACTIVATE);
|
|
|
|
|
|
- for (cnt = 0; cnt < 100; cnt++) {
|
|
|
+ do {
|
|
|
irq_stat = readl(port + PORT_IRQ_STAT);
|
|
|
writel(irq_stat, port + PORT_IRQ_STAT); /* clear irq */
|
|
|
|
|
@@ -469,8 +469,8 @@ static int sil24_softreset(struct ata_port *ap, int verbose,
|
|
|
if (irq_stat & (PORT_IRQ_COMPLETE | PORT_IRQ_ERROR))
|
|
|
break;
|
|
|
|
|
|
- msleep(1);
|
|
|
- }
|
|
|
+ msleep(100);
|
|
|
+ } while (time_before(jiffies, timeout));
|
|
|
|
|
|
/* restore IRQs */
|
|
|
writel(irq_enable, port + PORT_IRQ_ENABLE_SET);
|