diff -Naur linux-2.4.25-libata5/drivers/scsi/ata_piix.c linux-2.4.25-libata5-ich6r/drivers/scsi/ata_piix.c --- linux-2.4.25-libata5/drivers/scsi/ata_piix.c 2004-03-04 19:19:12.000000000 -0500 +++ linux-2.4.25-libata5-ich6r/drivers/scsi/ata_piix.c 2004-03-04 19:14:53.000000000 -0500 @@ -45,6 +45,7 @@ ich5_pata = 0, ich5_sata = 1, piix4_pata = 2, + ich6r_sata = 3, }; static int piix_init_one (struct pci_dev *pdev, @@ -83,8 +84,10 @@ { 0x8086, 0x2651, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich5_sata }, { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich5_sata }, - + PCI_CLASS_STORAGE_IDE << 8, 0xffff00, ich6r_sata }, + { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, + PCI_CLASS_STORAGE_RAID << 8, 0xffff00, ich6r_sata }, + { } /* terminate list */ }; @@ -188,6 +191,17 @@ .udma_mask = ATA_UDMA_MASK_40C, /* FIXME: cbl det */ .port_ops = &piix_pata_ops, }, + + /* ich6r_sata */ + { + .sht = &piix_sht, + .host_flags = ATA_FLAG_SATA | PIIX_FLAG_COMBINED | + ATA_FLAG_SRST | ATA_FLAG_SLAVE_POSS, + .pio_mask = 0x03, /* pio3-4 */ + .udma_mask = 0x7f, /* udma0-6 ; FIXME */ + .port_ops = &piix_sata_ops, + }, + }; static struct pci_bits piix_enable_bits[] = { @@ -342,13 +356,15 @@ } /* if port enabled but no device, disable port and exit */ + /* if (!have_dev) { piix_sata_port_disable(ap); printk(KERN_INFO "ata%u: SATA port has no device. disabling.\n", ap->id); return; } - + */ + ap->cbl = ATA_CBL_SATA; ata_port_probe(ap); diff -Naur linux-2.4.25-libata5/drivers/scsi/libata-core.c linux-2.4.25-libata5-ich6r/drivers/scsi/libata-core.c --- linux-2.4.25-libata5/drivers/scsi/libata-core.c 2004-03-04 19:19:12.000000000 -0500 +++ linux-2.4.25-libata5-ich6r/drivers/scsi/libata-core.c 2004-03-04 19:15:04.000000000 -0500 @@ -3104,6 +3104,9 @@ legacy_mode = (1 << 3); } + if ((pdev->class >> 8) == PCI_CLASS_STORAGE_RAID) + legacy_mode = 0; + /* FIXME... */ if ((!legacy_mode) && (n_ports > 1)) { printk(KERN_ERR "ata: BUG: native mode, n_ports > 1\n");