Dear coreboot folks,
working on the ASRock E350M1 and trying to find out why the PCI devices 0:15.0 to 0:15.2 are not enabled, I am looking into the setup of the General Purpose Ports (GPP).
In short, setting `SB_GPP_UNHIDE_PORTS` to `TRUE`, coreboot (based on commit f91c8f29),
commit f91c8f290b2a723d1bda9a5dd7d668390672317e Author: Jens Rottmann JRottmann@LiPPERTembedded.de Date: Fri Mar 1 19:01:00 2013 +0100
FrontRunner/Toucan-AF: work around AGESA RAM init crashing on reboot
SeaBIOS 1.7.1 and GRUB 2 load fine, but then booting Debian Sid/unstable with Linux 3.2.39 686 PAE kernel
linux-image-3.2.0-4-686-pae 3.2.39-2
Linux hangs after printing the following error message.
pci 0000:00:15.0: can't handle 64-bit address space for bridge
See [1] and [2].
A 64-bit Linux kernel 3.3.6 (Grml 2012.05 [3]) hangs too.
[ 0.000000] Linux version 3.3.0-2-grml-amd64 (Debian 3.3.6-1+grml.1) (team@grml.org) (gcc version 4.6.3 (Debian 4.6.3-5) ) #1 SMP Mon May 14 19:06:58 UTC 2012 [ 0.000000] Command line: initrd=/boot/grml64full_testing/initrd.img boot=live apm=power-off vga=791 nomce toram=grml64-full_testing.squashfs live-media-path=/live/grml64-full_testing/ boot=live bootid=8aa1383f-8bcd-472a-9a1a-e6e944a4bf80 console=ttyS0,115200n8 console=tty1 BOOT_IMAGE=/boot/grml64full_testing/vmlinuz […] [ 0.332027] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.336160] [Firmware Bug]: ACPI: no secondary bus range in _CRS [ 0.340055] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.344192] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] [ 0.348026] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] [ 0.352025] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.356028] pci_root PNP0A03:00: host bridge window [mem 0xe0000000-0xffffffff] [ 0.360112] PCI host bridge to bus 0000:00 [ 0.364030] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7] [ 0.368026] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff] [ 0.372026] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff] [ 0.376026] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xffffffff] [ 0.385186] pci 0000:00:14.4: PCI bridge to [bus 01-01] (subtractive decode) [ 0.388134] pci 0000:00:15.0: PCI bridge to [bus 02-02]
and then just hangs. Looking at the following working log, the PCI devices are not found.
With coreboot-4.0-2441-gbdca153
commit bdca15337bc9337f399b43290dc74cb598c5ec4d Author: Nico Huber nico.huber@secunet.com Date: Mon May 21 14:01:52 2012 +0200
libpayload: Remove orphaned delay from USB mass storage
the Linux kernel ring buffer contains the following.
$ uname -a Linux myhostname 3.2.0-4-686-pae #1 SMP Debian 3.2.39-2 i686 GNU/Linux $ dmesg […] [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.2.0-4-686-pae root=/dev/mapper/bla-root ro rdinitrd=/sbin/bootchartd initcall_debug printk.time=y init=/sbin/bootchartd drm_kms_helper.poll=0 drm.debug=0x06 quiet noisapnp […] [ 0.175212] calling acpi_pci_root_init+0x0/0x26 @ 1 [ 0.175217] HEST: Table parsing has been initialized. [ 0.175224] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.175324] [Firmware Bug]: ACPI: no secondary bus range in _CRS [ 0.175343] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.175538] pci_root PNP0A03:00: host bridge window [io 0x0000-0x0cf7] [ 0.175543] pci_root PNP0A03:00: host bridge window [io 0x0d00-0xffff] [ 0.175548] pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.175553] pci_root PNP0A03:00: host bridge window [mem 0xe0000000-0xffffffff] [ 0.175575] pci 0000:00:00.0: [1022:1510] type 0 class 0x000600 [ 0.175637] pci 0000:00:01.0: [1002:9802] type 0 class 0x000300 [ 0.175654] pci 0000:00:01.0: reg 10: [mem 0xe0000000-0xefffffff pref] [ 0.175665] pci 0000:00:01.0: reg 14: [io 0x1000-0x10ff] [ 0.175676] pci 0000:00:01.0: reg 18: [mem 0xf0000000-0xf003ffff] [ 0.175741] pci 0000:00:01.0: supports D1 D2 [ 0.175768] pci 0000:00:01.1: [1002:1314] type 0 class 0x000403 [ 0.175783] pci 0000:00:01.1: reg 10: [mem 0xf0040000-0xf0043fff] [ 0.175859] pci 0000:00:01.1: supports D1 D2 [ 0.176022] pci 0000:00:11.0: [1002:4390] type 0 class 0x000101 [ 0.176050] pci 0000:00:11.0: reg 10: [io 0x1410-0x1417] [ 0.176065] pci 0000:00:11.0: reg 14: [io 0x1420-0x1423] [ 0.176080] pci 0000:00:11.0: reg 18: [io 0x1418-0x141f] [ 0.176094] pci 0000:00:11.0: reg 1c: [io 0x1424-0x1427] [ 0.176108] pci 0000:00:11.0: reg 20: [io 0x1400-0x140f] [ 0.176123] pci 0000:00:11.0: reg 24: [mem 0xf004b000-0xf004b3ff] [ 0.176153] pci 0000:00:11.0: set SATA to AHCI mode [ 0.176222] pci 0000:00:12.0: [1002:4397] type 0 class 0x000c03 [ 0.176242] pci 0000:00:12.0: reg 10: [mem 0xf0048000-0xf0048fff] [ 0.176343] pci 0000:00:12.2: [1002:4396] type 0 class 0x000c03 [ 0.176371] pci 0000:00:12.2: reg 10: [mem 0xf004b400-0xf004b4ff] [ 0.176483] pci 0000:00:12.2: supports D1 D2 [ 0.176487] pci 0000:00:12.2: PME# supported from D0 D1 D2 D3hot [ 0.176522] pci 0000:00:13.0: [1002:4397] type 0 class 0x000c03 [ 0.176543] pci 0000:00:13.0: reg 10: [mem 0xf0049000-0xf0049fff] [ 0.176643] pci 0000:00:13.2: [1002:4396] type 0 class 0x000c03 [ 0.176671] pci 0000:00:13.2: reg 10: [mem 0xf004b500-0xf004b5ff] [ 0.176783] pci 0000:00:13.2: supports D1 D2 [ 0.176787] pci 0000:00:13.2: PME# supported from D0 D1 D2 D3hot [ 0.176821] pci 0000:00:14.0: [1002:4385] type 0 class 0x000c05 [ 0.176932] pci 0000:00:14.2: [1002:4383] type 0 class 0x000403 [ 0.176963] pci 0000:00:14.2: reg 10: [mem 0xf0044000-0xf0047fff 64bit] [ 0.177053] pci 0000:00:14.2: PME# supported from D0 D3hot D3cold [ 0.177077] pci 0000:00:14.3: [1002:439d] type 0 class 0x000601 [ 0.177184] pci 0000:00:14.4: [1002:4384] type 1 class 0x000604 [ 0.177246] pci 0000:00:14.5: [1002:4399] type 0 class 0x000c03 [ 0.177266] pci 0000:00:14.5: reg 10: [mem 0xf004a000-0xf004afff] [ 0.177369] pci 0000:00:15.0: [1002:43a0] type 1 class 0x000604 [ 0.177479] pci 0000:00:15.0: supports D1 D2 [ 0.177518] pci 0000:00:15.1: [1002:43a1] type 1 class 0x000604 [ 0.177627] pci 0000:00:15.1: supports D1 D2 [ 0.177671] pci 0000:00:18.0: [1022:1700] type 0 class 0x000600 [ 0.177723] pci 0000:00:18.1: [1022:1701] type 0 class 0x000600 [ 0.177771] pci 0000:00:18.2: [1022:1702] type 0 class 0x000600 [ 0.177821] pci 0000:00:18.3: [1022:1703] type 0 class 0x000600 [ 0.177884] pci 0000:00:18.4: [1022:1704] type 0 class 0x000600 [ 0.177931] pci 0000:00:18.5: [1022:1718] type 0 class 0x000600 [ 0.177979] pci 0000:00:18.6: [1022:1716] type 0 class 0x000600 [ 0.178026] pci 0000:00:18.7: [1022:1719] type 0 class 0x000600 [ 0.178225] pci 0000:00:14.4: PCI bridge to [bus 01-01] (subtractive decode) [ 0.178240] pci 0000:00:14.4: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.178246] pci 0000:00:14.4: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.178251] pci 0000:00:14.4: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.178256] pci 0000:00:14.4: bridge window [mem 0xe0000000-0xffffffff] (subtractive decode) [ 0.178266] pci 0000:00:15.0: bridge configuration invalid ([bus 00-00]), reconfiguring [ 0.178277] pci 0000:00:15.1: bridge configuration invalid ([bus 00-00]), reconfiguring [ 0.178363] pci 0000:00:15.0: PCI bridge to [bus 02-ff] [ 0.178477] pci 0000:03:00.0: [10ec:8168] type 0 class 0x000200 [ 0.178502] pci 0000:03:00.0: reg 10: [io 0x0000-0x00ff] [ 0.178542] pci 0000:03:00.0: reg 18: [mem 0x00000000-0x00000fff 64bit pref] [ 0.178569] pci 0000:03:00.0: reg 20: [mem 0x00000000-0x00003fff 64bit pref] [ 0.178674] pci 0000:03:00.0: supports D1 D2 [ 0.178678] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.184152] pci 0000:00:15.1: PCI bridge to [bus 03-ff] [ 0.184183] pci_bus 0000:00: on NUMA node 0 [ 0.184197] ACPI: PCI Interrupt Routing Table [_SB_.PCI0._PRT] [ 0.184567] ACPI: PCI Interrupt Routing Table [_SB_.PCI0.AGPB._PRT] [ 0.184633] ACPI: PCI Interrupt Routing Table [_SB_.PCI0.PE20._PRT] [ 0.184689] ACPI: PCI Interrupt Routing Table [_SB_.PCI0.PE21._PRT] [ 0.184751] ACPI: PCI Interrupt Routing Table [_SB_.PCI0.PIBR._PRT] [ 0.184922] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.184929] pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d [ 0.184933] ACPI _OSC control for PCIe not granted, disabling ASPM [ 0.194987] initcall acpi_pci_root_init+0x0/0x26 returned 0 after 19532 usecs [ 0.194995] calling acpi_pci_link_init+0x0/0x36 @ 1 [ 0.195153] ACPI: PCI Interrupt Link [INTA] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.195378] ACPI: PCI Interrupt Link [INTB] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.195530] ACPI: PCI Interrupt Link [INTC] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.195683] ACPI: PCI Interrupt Link [INTD] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.195833] ACPI: PCI Interrupt Link [INTE] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.195983] ACPI: PCI Interrupt Link [INTF] (IRQs 9) *0 [ 0.196143] ACPI: PCI Interrupt Link [INTG] (IRQs 3 4 5 7 10 11 12 15) *0 [ 0.196293] ACPI: PCI Interrupt Link [INTH] (IRQs 3 4 5 7 10 11 12 15) *0 […]
The option/define `SB_GPP_UNHIDE_PORTS` was introduced in [4]
commit f3b0500050050e4f103e42fdcf111af232fa874b Author: Kerry Sheh shekairui@gmail.com Date: Wed Oct 12 12:06:23 2011 +0800
SB800: Hide unused gpp ports
Add configure option SB_GPP_UNHIDE_PORTS for mainboard to hide/unhide the unused sb800 gpp ports. Certain gpp port should be hidden, if no device was detected and hotplug feature is disabled for such port. Hidden unused ports makes lspci -vvv get more accurate information under Linux. Test on avalue/eax-785e mainboard.
Change-Id: I1d7df0f2ab6ad69b1b99b8bf046411ae7cdb09c0 Signed-off-by: Kerry Sheh kerry.she@amd.com Signed-off-by: Kerry Sheh shekairui@gmail.com Reviewed-on: http://review.coreboot.org/207 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi patrick@georgi-clan.de
and strangely the defaults for all boards were set from `TRUE` to `FALSE`. I guess that it worked with `TRUE` beforehand, so I do not know what happened in the meantime.
The option is only used in `Gpp.c`.
$ more src/vendorcode/amd/cimx/sb800/Gpp.c […] if ( pConfig->GppUnhidePorts == FALSE ) { if ((abValue & 0xF0) == 0) { abValue = BIT8; // if all ports are empty set GPP_RESET } else if ((abValue & 0xE0) != 0 && (abValue & 0x10) == 0) { abValue |= BIT4; // PortA should always be visible whenever other ports are exist }
// Update GPP_Portx_Enable (abcfg:0xC0[7:5]) writeAlink (SB_ABCFG_REGC0 | (UINT32) (ABCFG << 29), abValue); } […]
Could you please try setting
#define SB_GPP_UNHIDE_PORTS TRUE
in AMD Persimmon or some other SB800 board and see how it goes?
Any other ideas are appreciated too.
Thanks,
Paul
[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers... [2] https://patchwork.kernel.org/patch/1051462/ • not committed [3] http://grml.org/download/ • Go to »Older releases«. [4] http://review.coreboot.org/207