|
@@ -1034,14 +1034,15 @@ static int nv_adma_port_start(struct ata_port *ap)
|
|
|
|
|
|
/* clear GO for register mode, enable interrupt */
|
|
/* clear GO for register mode, enable interrupt */
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
- writew( (tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN, mmio + NV_ADMA_CTL);
|
|
|
|
|
|
+ writew( (tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
|
|
|
|
+ NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
|
|
|
|
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
udelay(1);
|
|
udelay(1);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -1093,14 +1094,15 @@ static int nv_adma_port_resume(struct ata_port *ap)
|
|
|
|
|
|
/* clear GO for register mode, enable interrupt */
|
|
/* clear GO for register mode, enable interrupt */
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
- writew((tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN, mmio + NV_ADMA_CTL);
|
|
|
|
|
|
+ writew( (tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
|
|
|
|
+ NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
|
|
|
|
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
udelay(1);
|
|
udelay(1);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -1491,10 +1493,10 @@ static void nv_adma_error_handler(struct ata_port *ap)
|
|
/* Reset channel */
|
|
/* Reset channel */
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
tmp = readw(mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
udelay(1);
|
|
udelay(1);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
|
|
- readl( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
|
|
|
|
+ readw( mmio + NV_ADMA_CTL ); /* flush posted write */
|
|
}
|
|
}
|
|
|
|
|
|
ata_bmdma_drive_eh(ap, ata_std_prereset, ata_std_softreset,
|
|
ata_bmdma_drive_eh(ap, ata_std_prereset, ata_std_softreset,
|