diff options
-rw-r--r-- | drivers/ata/sata_promise.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index 8daf5d67dfe2..a2778cf016bc 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -280,6 +280,7 @@ static struct pci_driver pdc_ata_pci_driver = { | |||
280 | static int pdc_port_start(struct ata_port *ap) | 280 | static int pdc_port_start(struct ata_port *ap) |
281 | { | 281 | { |
282 | struct device *dev = ap->host->dev; | 282 | struct device *dev = ap->host->dev; |
283 | struct pdc_host_priv *hp = ap->host->private_data; | ||
283 | struct pdc_port_priv *pp; | 284 | struct pdc_port_priv *pp; |
284 | int rc; | 285 | int rc; |
285 | 286 | ||
@@ -301,6 +302,16 @@ static int pdc_port_start(struct ata_port *ap) | |||
301 | 302 | ||
302 | ap->private_data = pp; | 303 | ap->private_data = pp; |
303 | 304 | ||
305 | /* fix up PHYMODE4 align timing */ | ||
306 | if ((hp->flags & PDC_FLAG_GEN_II) && sata_scr_valid(ap)) { | ||
307 | void __iomem *mmio = (void __iomem *) ap->ioaddr.scr_addr; | ||
308 | unsigned int tmp; | ||
309 | |||
310 | tmp = readl(mmio + 0x014); | ||
311 | tmp = (tmp & ~3) | 1; /* set bits 1:0 = 0:1 */ | ||
312 | writel(tmp, mmio + 0x014); | ||
313 | } | ||
314 | |||
304 | return 0; | 315 | return 0; |
305 | 316 | ||
306 | err_out_kfree: | 317 | err_out_kfree: |