patch for review: ATI SB600 SATA AHCI

Volker volker at vwsoft.com
Sat Jan 19 19:13:55 PST 2008


Hi!

I've done the following local changes to get the ATA controller being
correctly detected and initialized as an AHCI controller on an HP
6715b notebook using ATI SB-600 chipset. With stock kernel, the ATA
controller is being recognized as a generic ATA controller and devices
being driven in UDMA-33 mode.

With the following patch, the controller is being initialized in AHCI
mode and devices being set to SATA-150/300 mode.

atapci0: <ATI IXP600 SATA300 controller> port
0x9000-0x9007,0x9008-0x900b,0x9010-0x9017,0x5018-0x501b,0x5020-0x502f
mem 0xd0609000-0xd06093ff irq 16 at device 18.0 on pci0
atapci0: Reserved 0x10 bytes for rid 0x20 type 4 at 0x5020
atapci0: Reserved 0x400 bytes for rid 0x24 type 3 at 0xd0609000
atapci0: [MPSAFE]
atapci0: [ITHREAD]
atapci0: AHCI Version 01.10 controller with 4 ports detected

%atacontrol mode ad4
current mode = SATA150


My patch has been tested on RELENG_7 as of 2008-01-19. Please review,
check and test if possible. Should work on 8-CURRENT, too.

If nobody complains until tuesday (2008-01-22), I'll file a PR for
that patch.

Volker

--- sys/dev/ata/ata-chipset.c.orig      2008-01-20 03:22:37.000000000
+0100
+++ sys/dev/ata/ata-chipset.c   2008-01-20 03:30:03.000000000 +0100
@@ -1348,6 +1348,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,     AHCI, ATA_SA300, "IXP600" },
      { ATA_ATI_IXP700,    0x00, 0,        0, ATA_UDMA6, "IXP700" },
      { 0, 0, 0, 0, 0, 0}};

@@ -1360,7 +1361,10 @@
     if (ctlr->chip->cfg1 & SIIMEMIO)
        ctlr->chipinit = ata_sii_chipinit;
     else
-       ctlr->chipinit = ata_ati_chipinit;
+       if (ctlr->chip->cfg2 & AHCI)
+               ctlr->chipinit = ata_ahci_chipinit;
+       else
+               ctlr->chipinit = ata_ati_chipinit;
     return 0;
 }

--- sys/dev/ata/ata-pci.h.orig  2008-01-20 03:22:28.000000000 +0100
+++ sys/dev/ata/ata-pci.h       2008-01-20 03:23:56.000000000 +0100
@@ -104,6 +104,7 @@
 #define ATA_ATI_IXP400_S1       0x43791002
 #define ATA_ATI_IXP400_S2       0x437a1002
 #define ATA_ATI_IXP600          0x438c1002
+#define ATA_ATI_IXP600_S1       0x43801002
 #define ATA_ATI_IXP700          0x439c1002

 #define ATA_CENATEK_ID          0x16ca


More information about the freebsd-current mailing list