Discussion:
Problem detecting Sil3124 SATA controllers off of Sandy Bridge northbridge-connected PCIe slots
(too old to reply)
Steve Polyack
2012-08-02 14:22:09 UTC
Permalink
Hi,

We're having some trouble with detection of a couple of Sil3124 SATA
controller cards on newer motherboard and processor combos.
Specifically, we're running a Supermicro X9SCM-F motherboard (latest
BIOS) and Intel E3-1220v2 CPU.

What we're seeing:
- Syba Sil3124 PCIe cards are only being detected when installed in PCIe
Slot 4
-- The motherboard documentation shows that this is the only slot
connected to the Intel C202/204 chipset on the motherboard
-- Slots 5, 6, and 7 are connected to the integrated northbridge on the
Ivy Bridge CPU
(there is no slot 1, 2, or 3)

FreeBSD won't detect even a single Sil3124 card installed in PCIe slot
5, 6, or 7. If we put an Intel Dual-port NIC in either of one of these
slots, it is detected just fine.

I've attached a verbose dmesg.boot from this box running FreeBSD
9.0-RELEASE. We've also tried 8.1-RELEASE, 8.2-RELEASE, and 9.1-BETA1
with the same results. Booting with ACPI disabled results in a kernel
panic during the boot process.

I'd greatly appreciate any help or suggestions on this matter. We've
already tried just about every BIOS option on the board.

Steve Polyack
John Baldwin
2012-08-02 18:52:30 UTC
Permalink
Post by Steve Polyack
Hi,
We're having some trouble with detection of a couple of Sil3124 SATA
controller cards on newer motherboard and processor combos.
Specifically, we're running a Supermicro X9SCM-F motherboard (latest
BIOS) and Intel E3-1220v2 CPU.
- Syba Sil3124 PCIe cards are only being detected when installed in PCIe
Slot 4
-- The motherboard documentation shows that this is the only slot
connected to the Intel C202/204 chipset on the motherboard
-- Slots 5, 6, and 7 are connected to the integrated northbridge on the
Ivy Bridge CPU
(there is no slot 1, 2, or 3)
FreeBSD won't detect even a single Sil3124 card installed in PCIe slot
5, 6, or 7. If we put an Intel Dual-port NIC in either of one of these
slots, it is detected just fine.
I've attached a verbose dmesg.boot from this box running FreeBSD
9.0-RELEASE. We've also tried 8.1-RELEASE, 8.2-RELEASE, and 9.1-BETA1
with the same results. Booting with ACPI disabled results in a kernel
panic during the boot process.
I'd greatly appreciate any help or suggestions on this matter. We've
already tried just about every BIOS option on the board.
Does the device show up in pciconf -l output?
--
John Baldwin
Steve Polyack
2012-08-02 20:36:30 UTC
Permalink
Post by John Baldwin
Post by Steve Polyack
Hi,
We're having some trouble with detection of a couple of Sil3124 SATA
controller cards on newer motherboard and processor combos.
Specifically, we're running a Supermicro X9SCM-F motherboard (latest
BIOS) and Intel E3-1220v2 CPU.
- Syba Sil3124 PCIe cards are only being detected when installed in PCIe
Slot 4
-- The motherboard documentation shows that this is the only slot
connected to the Intel C202/204 chipset on the motherboard
-- Slots 5, 6, and 7 are connected to the integrated northbridge on the
Ivy Bridge CPU
(there is no slot 1, 2, or 3)
FreeBSD won't detect even a single Sil3124 card installed in PCIe slot
5, 6, or 7. If we put an Intel Dual-port NIC in either of one of these
slots, it is detected just fine.
I've attached a verbose dmesg.boot from this box running FreeBSD
9.0-RELEASE. We've also tried 8.1-RELEASE, 8.2-RELEASE, and 9.1-BETA1
with the same results. Booting with ACPI disabled results in a kernel
panic during the boot process.
I'd greatly appreciate any help or suggestions on this matter. We've
already tried just about every BIOS option on the board.
Does the device show up in pciconf -l output?
The device itself does NOT show up in pciconf -l output. However, I ran
pciconf on two different boots, once with and once without the card
installed in one of the non-probed slots. I noticed that the following
"Ivy Bridge PCI Express Root Port" showed up when the card was installed:
+***@pci0:0:1:1: class=0x060400 card=0x062415d9 chip=0x01558086
rev=0x09 hdr=0x01
+ vendor = 'Intel Corporation'
+ device = 'Ivy Bridge PCI Express Root Port'
+ class = bridge
+ subclass = PCI-PCI
+ cap 0d[88] = PCI Bridge card=0x062415d9
+ cap 01[80] = powerspec 3 supports D0 D3 current D0
+ cap 05[90] = MSI supports 1 message
+ cap 10[a0] = PCI-Express 2 root port max data 128(128) link x1(x8)
+ ecap 0002[100] = VC 1 max VC0
+ ecap 0005[140] = unknown 1
+ ecap 0019[d94] = unknown 1

The previous Ivy Bridge Root Port still shows up, and shows the
following change:
- cap 10[a0] = PCI-Express 2 root port max data 256(256) link x1(x8)
+ cap 10[a0] = PCI-Express 2 root port max data 256(256) link x0(x8)

I also meant to note in my initial email that the Option ROM (RAID
setup, drive probing, etc.) shows up for the Sil3124 SATA card in any
slot. Even when the OS is unable to discover the card.

Thanks for the response,
Steve
John Baldwin
2012-08-02 21:00:48 UTC
Permalink
Post by Steve Polyack
Post by John Baldwin
Post by Steve Polyack
Hi,
We're having some trouble with detection of a couple of Sil3124 SATA
controller cards on newer motherboard and processor combos.
Specifically, we're running a Supermicro X9SCM-F motherboard (latest
BIOS) and Intel E3-1220v2 CPU.
- Syba Sil3124 PCIe cards are only being detected when installed in PCIe
Slot 4
-- The motherboard documentation shows that this is the only slot
connected to the Intel C202/204 chipset on the motherboard
-- Slots 5, 6, and 7 are connected to the integrated northbridge on the
Ivy Bridge CPU
(there is no slot 1, 2, or 3)
FreeBSD won't detect even a single Sil3124 card installed in PCIe slot
5, 6, or 7. If we put an Intel Dual-port NIC in either of one of these
slots, it is detected just fine.
I've attached a verbose dmesg.boot from this box running FreeBSD
9.0-RELEASE. We've also tried 8.1-RELEASE, 8.2-RELEASE, and 9.1-BETA1
with the same results. Booting with ACPI disabled results in a kernel
panic during the boot process.
I'd greatly appreciate any help or suggestions on this matter. We've
already tried just about every BIOS option on the board.
Does the device show up in pciconf -l output?
The device itself does NOT show up in pciconf -l output. However, I ran
pciconf on two different boots, once with and once without the card
installed in one of the non-probed slots. I noticed that the following
rev=0x09 hdr=0x01
+ vendor = 'Intel Corporation'
+ device = 'Ivy Bridge PCI Express Root Port'
+ class = bridge
+ subclass = PCI-PCI
+ cap 0d[88] = PCI Bridge card=0x062415d9
+ cap 01[80] = powerspec 3 supports D0 D3 current D0
+ cap 05[90] = MSI supports 1 message
+ cap 10[a0] = PCI-Express 2 root port max data 128(128) link x1(x8)
+ ecap 0002[100] = VC 1 max VC0
+ ecap 0005[140] = unknown 1
+ ecap 0019[d94] = unknown 1
Oh, now I see the problem. This isn't completely trivial to solve. :(

pcib3: <PCI-PCI bridge> at device 0.0 on pci2
pcib2: attempting to grow I/O port window for (0-0xfff,0x1000)
pcib3: failed to allocate initial I/O port window: 0-0xfff
pcib2: attempting to grow memory window for (0-0xfffff,0x100000)
pcib3: failed to allocate initial memory window: 0-0xfffff
pcib2: failed to allocate initial prefetch window (0-0xfffff,0x100000)
pcib2: attempting to grow memory window for (0-0xfffff,0x100000)
pcib3: failed to allocate initial prefetch window: 0-0xfffff
pcib3: domain 0
pcib3: secondary bus 0
pcib3: subordinate bus 0
pcib3: no prefetched decode

This bridge isn't configured by the BIOS, so we can't see any devices behind
it. I have some patches to start adding support for fixing that, but they are
incomplete (and I haven't touched them in months). Try this hack as a test:

Index: sys/dev/pci/pci_pci.c
===================================================================
--- pci_pci.c (revision 238992)
+++ pci_pci.c (working copy)
@@ -566,6 +566,13 @@ pcib_attach_common(device_t dev)
SYSCTL_ADD_UINT(sctx, SYSCTL_CHILDREN(soid), OID_AUTO, "subbus",
CTLFLAG_RD, &sc->subbus, 0, "Subordinate bus number");

+ if (device_get_unit(dev) == 3 && sc->secbus == 0 && sc->subbus == 0) {
+ pci_write_config(dev, PCIR_SUBBUS_1, 3, 1);
+ pci_write_config(dev, PCIR_SECBUS_1, 3, 1);
+ sc->secbus = 3;
+ sc->subbus = 3;
+ }
+
/*
* Quirk handling.
*/
--
John Baldwin
Loading...