Package: kernel Version: 2.6.18-3-486 Severity: serious Tags: patch Etch The driver for ati sb600 IDE controller has bugs. It doesn't set the PATA in proper DMA mode.
When use 40-pin cable for PATA disk, sometimes, bad CRC makes the system fail to boot with kernel panic. The kernel will report: ... hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown ide0: reset: success hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC } ide: failed opcode was: unknown ide0: reset: success .... Here is the patch to fix it: --- drivers/ide/pci/atiixp.c.orig 2007-02-15 13:12:43.000000000 +0800 +++ drivers/ide/pci/atiixp.c 2007-02-15 13:12:43.000000000 +0800 @@ -289,8 +289,11 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) { + u8 udma_mode = 0; + u8 ch = hwif->channel; + struct pci_dev *pdev = hwif->pci_dev; if (!hwif->irq) - hwif->irq = hwif->channel ? 15 : 14; + hwif->irq = ch ? 15 : 14; hwif->autodma = 0; hwif->tuneproc = &atiixp_tuneproc; @@ -306,8 +309,11 @@ hwif->mwdma_mask = 0x06; hwif->swdma_mask = 0x04; - /* FIXME: proper cable detection needed */ - hwif->udma_four = 1; + pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); + if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40) + hwif->udma_four = 1; + else + hwif->udma_four = 0; hwif->ide_dma_host_on = &atiixp_ide_dma_host_on; hwif->ide_dma_host_off = &atiixp_ide_dma_host_off; hwif->ide_dma_check = &atiixp_dma_check PS: the patches also have been accepted by kernel.org. Could you kindly add it to Etch before the final Etch release? Thanks! Regards, Wolke