diff -rupN linux-2.6.26/drivers/ata/sata_promise.c linux-2.6.26.sata_promise-limit-sataii-to-1.5Gbps/drivers/ata/sata_promise.c --- linux-2.6.26/drivers/ata/sata_promise.c 2008-07-14 10:22:36.000000000 +0200 +++ linux-2.6.26.sata_promise-limit-sataii-to-1.5Gbps/drivers/ata/sata_promise.c 2008-07-14 10:31:03.000000000 +0200 @@ -345,6 +345,18 @@ static int pdc_sata_port_start(struct at writel(tmp, sata_mmio + PDC_PHYMODE4); } + /* hack SControl to limit speed to 1.5Gbps */ + if (ap->flags & PDC_FLAG_GEN_II) { + void __iomem *mmio = (void __iomem *) ap->ioaddr.scr_addr; + unsigned int tmp1, tmp2; + + tmp1 = readl(mmio + 0x008); + tmp2 = (tmp1 & 0xffffff00) | 0x00000011; + writel(tmp2, mmio + 0x008); + readl(mmio + 0x008); /* flush */ + printk("%s(port %u): adjusted SControl from 0x%08x to 0x%08x\n", __FUNCTION__, ap->port_no, tmp1, tmp2); + } + return 0; }