Peter Favrholdt writes:
> Hi,
>
> I've seen "intermittent problems" with Promise SATA300 TX4 controllers
> and Linux kernel 2.6.19 (through 2.6.20-rc2 with some additional
> patches).
>
> Sometimes the TX4 will loose a port - a reboot brings the drive back up
> again. I'm quite sure the harddrives are not at fault.
>
> I have experienced this using "plain vanilla" Linux 2.6.19.2 and
> 2.6.20.1. Today I have tested using Linux 2.6.21-rc2 with Mikael
> Petterson's patches (more on that further down).
>
> Yesterday (using 2.6.20.1) I could fail two out of four drives by doing:
> dd if=/dev/sda of=/dev/null bs=1M &
> dd if=/dev/sdb of=/dev/null bs=1M &
> dd if=/dev/sdc of=/dev/null bs=1M &
> dd if=/dev/sdd of=/dev/null bs=1M &
>
> sdd would fail first then after a while sdc, here is the dmesg output
> when sdd failed:
>
> [14895.092650] ata4.00: exception Emask 0x0 SAct 0x0 SErr 0x1380000
> action 0x2 frozen
SErr 0x01380000 would indicate:
transport state transmission error (bit 24)
CRC error (bit 21)
disparity error (bit 20) [whatever that is]
10b_to_8b decoding error (bit 19)
I.e., serious transmission issues.
> [52849.930755] pdc_error_intr: port_status 0x00001000 serror 0x00000000
> [52849.930880] ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2
> frozen
> [52849.930883] ata2.00: (port_status 0x00001000)
"host bus timeout error" (bit 12).
I wonder why SError was clear now.
> I would be very happy to help debug this issue. Any suggestions on what
> I should try next?
Well, at the moment I have only one possible cure: to forcibly
limit 3Gbps drives to 1.5Gbps operation, as the patch below does.
On one of my test machines (an old UltraSPARC), a SATA300 TX2plus
with a Seagate 3Gbps drive (don't have the model number handy),
will quickly experience "DMA S/G overrun" errors during an fsck
of a large but clean ext3 partition. With the patch below things
work solidly on that particular machine. OTOH, on another test
machine (a 440BX chipset Intel PIII), the same card/cable/disk
combination works flawlessly at 3Gbps. Mysterious.
/Mikael
--- linux-2.6.21-rc2/drivers/ata/sata_promise.c.~1~ 2007-03-06
22:17:21.000000000 +0100
+++ linux-2.6.21-rc2/drivers/ata/sata_promise.c 2007-03-06 23:21:36.000000000
+0100
@@ -378,6 +378,18 @@ static int pdc_port_start(struct ata_por
writel(tmp, mmio + 0x014);
}
+ /* hack SControl to limit speed to 1.5Gbps */
+ if ((hp->flags & PDC_FLAG_GEN_II) && sata_scr_valid(ap)) {
+ 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;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html