Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 47388
b: refs/heads/master
c: a2cfe81
h: refs/heads/master
v: v3
  • Loading branch information
Robert Hancock authored and Jeff Garzik committed Feb 9, 2007
1 parent 5a267c0 commit f15c8b6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 382a6652e91b34d5480cfc0ed840c196650493d4
refs/heads/master: a2cfe81a59eea45a3f9afb4f652f7619982eac62
41 changes: 39 additions & 2 deletions trunk/drivers/ata/sata_nv.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,22 +512,47 @@ static void nv_adma_register_mode(struct ata_port *ap)
{
struct nv_adma_port_priv *pp = ap->private_data;
void __iomem *mmio = pp->ctl_block;
u16 tmp;
u16 tmp, status;
int count = 0;

if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
return;

status = readw(mmio + NV_ADMA_STAT);
while(!(status & NV_ADMA_STAT_IDLE) && count < 20) {
ndelay(50);
status = readw(mmio + NV_ADMA_STAT);
count++;
}
if(count == 20)
ata_port_printk(ap, KERN_WARNING,
"timeout waiting for ADMA IDLE, stat=0x%hx\n",
status);

tmp = readw(mmio + NV_ADMA_CTL);
writew(tmp & ~NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);

count = 0;
status = readw(mmio + NV_ADMA_STAT);
while(!(status & NV_ADMA_STAT_LEGACY) && count < 20) {
ndelay(50);
status = readw(mmio + NV_ADMA_STAT);
count++;
}
if(count == 20)
ata_port_printk(ap, KERN_WARNING,
"timeout waiting for ADMA LEGACY, stat=0x%hx\n",
status);

pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
}

static void nv_adma_mode(struct ata_port *ap)
{
struct nv_adma_port_priv *pp = ap->private_data;
void __iomem *mmio = pp->ctl_block;
u16 tmp;
u16 tmp, status;
int count = 0;

if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE))
return;
Expand All @@ -537,6 +562,18 @@ static void nv_adma_mode(struct ata_port *ap)
tmp = readw(mmio + NV_ADMA_CTL);
writew(tmp | NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);

status = readw(mmio + NV_ADMA_STAT);
while(((status & NV_ADMA_STAT_LEGACY) ||
!(status & NV_ADMA_STAT_IDLE)) && count < 20) {
ndelay(50);
status = readw(mmio + NV_ADMA_STAT);
count++;
}
if(count == 20)
ata_port_printk(ap, KERN_WARNING,
"timeout waiting for ADMA LEGACY clear and IDLE, stat=0x%hx\n",
status);

pp->flags &= ~NV_ADMA_PORT_REGISTER_MODE;
}

Expand Down

0 comments on commit f15c8b6

Please sign in to comment.