9.0-RC1 no sata devices on N10/ICH7

I've installed FreeBSD on a Dell Dimension 510 with 1 IDE drive and 2x2tb SATA drives. FreeBSD only recognizes the IDE controller and doesn't show any information about my SATA disks.

The arch is amd64, running the GENERIC kernel.

Code:
atapci0@pci0:0:31:1:    class=0x01018a card=0x01d21028 chip=0x27df8086 rev=0x01 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = '82801G (ICH7 Family) IDE Controller'
    class      = mass storage
    subclass   = ATA
atapci1@pci0:0:31:2:    class=0x01018f card=0x01d21028 chip=0x27c08086 rev=0x01 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'N10/ICH7 Family SATA IDE Controller'
    class      = mass storage

Code:
atapci1: <Intel ICH7 SATA300 controller> port 0xfe00-0xfe07,0xfe10-0xfe13,0xfe20-0xfe27,0xfe30-0xfe33,0xfea0-0xfeaf irq 20 at device 31.2 on pci0

Is there something I can do to use my SATA controller on 9.0-RC1? It worked fine on 8.2-RELEASE. Thank you very much.
 
Correction: it seems to detect the SATA controller but can't detect the disks.

From what I've found about the base ICH7 controller it doesn't support AHCI mode.
 
I am going to transfer the disks to another computer so I won't be able to test the device soon until I get another SATA disk. Meanwhile I would also add that the BIOS doesn't offer the option to switch SATA operation modes (the only option it gives me is to attribute the controller to the integrated RAID or the system bios).
 
That's strange, as my NM10 board works fine in both legacy ATA and AHCI modes. May be there is some difference in controller initialization done by BIOS. Could you try to build custom kernel with following patch and send new verbose dmesg. I hope it should shed some light on the problem.
Code:
--- ata-sata.c  (revision 226962)
+++ ata-sata.c  (working copy)
@@ -158,6 +158,7 @@
     if (quick) {
        if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val))
            return (0);
+device_printf(dev, "CONTROL1: %08x\n", val);
        if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) {
            ata_sata_scr_write(ch, port, ATA_SCONTROL,
                ATA_SC_DET_IDLE | ((ch->pm_level > 0) ? 0 :
@@ -180,6 +181,7 @@
            ata_udelay(100);
            if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val))
                goto fail;
+device_printf(dev, "CONTROL2: %08x\n", val);
            if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_RESET)
                break;
        }
@@ -192,6 +194,7 @@
            ata_udelay(100);
            if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val))
                goto fail;
+device_printf(dev, "CONTROL3: %08x\n", val);
            if ((val & ATA_SC_DET_MASK) == 0)
                return ata_sata_connect(ch, port, 0);
        }
 
Back
Top