diff -cur ata.ORG/ata-chipset.c ata/ata-chipset.c --- ata.ORG/ata-chipset.c 2007-12-14 10:20:28.000000000 +0900 +++ ata/ata-chipset.c 2007-12-14 13:41:16.000000000 +0900 @@ -1346,6 +1346,7 @@ { ATA_ATI_IXP400_S1, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, { ATA_ATI_IXP400_S2, 0x00, SIIMEMIO, 0, ATA_SA150, "IXP400" }, { ATA_ATI_IXP600, 0x00, 0, 0, ATA_UDMA6, "IXP600" }, + { ATA_ATI_IXP600_S1, 0x00, 0, 0, ATA_SA300, "IXP600" }, { ATA_ATI_IXP700, 0x00, 0, 0, ATA_UDMA6, "IXP700" }, { 0, 0, 0, 0, 0, 0}}; @@ -1372,8 +1373,19 @@ /* IXP600 & IXP700 only have 1 PATA channel */ if ((ctlr->chip->chipid == ATA_ATI_IXP600) || - (ctlr->chip->chipid == ATA_ATI_IXP700)) + (ctlr->chip->chipid == ATA_ATI_IXP700)) { ctlr->channels = 1; + } + else if (ctlr->chip->chipid == ATA_ATI_IXP600_S1) { + ctlr->r_type2 = SYS_RES_MEMORY; + ctlr->r_rid2 = PCIR_BAR(5); + if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, + &ctlr->r_rid2, RF_ACTIVE))) { + return ata_ahci_chipinit(dev); + } + else + return ENXIO; + } ctlr->setmode = ata_ati_setmode; return 0; diff -cur ata.ORG/ata-pci.h ata/ata-pci.h --- ata.ORG/ata-pci.h 2007-11-22 16:50:36.000000000 +0900 +++ ata/ata-pci.h 2007-12-14 13:36:44.000000000 +0900 @@ -103,6 +103,7 @@ #define ATA_ATI_IXP400 0x43761002 #define ATA_ATI_IXP400_S1 0x43791002 #define ATA_ATI_IXP400_S2 0x437a1002 +#define ATA_ATI_IXP600_S1 0x43801002 #define ATA_ATI_IXP600 0x438c1002 #define ATA_ATI_IXP700 0x439c1002