[coreboot] SB800: Linux hangs with `#define SB_GPP_UNHIDE_PORTS TRUE`

Paul Menzel paulepanter at users.sourceforge.net
Mon Mar 4 01:05:09 CET 2013


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 at 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 at 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 at 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 at 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 at amd.com>
            Signed-off-by: Kerry Sheh <shekairui at gmail.com>
            Reviewed-on: http://review.coreboot.org/207
            Tested-by: build bot (Jenkins)
            Reviewed-by: Patrick Georgi <patrick at 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/pci/probe.c?id=939de1d69c5fb0da0cfe05a1a7c981421cf876f7#n401
[2] https://patchwork.kernel.org/patch/1051462/
    • not committed
[3] http://grml.org/download/
    • Go to »Older releases«.
[4] http://review.coreboot.org/207
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20130304/a989f40f/attachment-0001.sig>


More information about the coreboot mailing list