Yes, but it’s unclear how this works on AMD.
SPI flashes on Intel platforms are memory-mapped to 16MB, so BIOS region cannot overlap that region (but if you use upper 16MB for IFD/ME/GBE and lower 16MB for BIOS regions, that works fine).
PSP definitely supports A/B recovery scheme, but I don’t know how this works or relates to x86_64 firmware without documentation. When I try to allocate more than 16MB coreboot can’t find CBFS so this is either a bug in coreboot, or AMD is also memory-mapped.
Another possibility is of course a bug in OpenSIL, Phoenix PoC is in such a terrible state that the more we work on this (my coworker stepped up to help), the more bugs we find.
For example, we finally found and fixed the issue with missing APIC, we now have both (NBIO and FCH) APICs present:
[DEBUG] CPU_CLUSTER: 0 init finished in 1230 msecs
[DEBUG] DOMAIN: 00000000 init
[DEBUG] IOAPIC: Initializing IOAPIC at fd180000
[DEBUG] IOAPIC: ID = 0x01
[DEBUG] IOAPIC: 32 interrupts
[DEBUG] IOAPIC: Clearing IOAPIC at fd180000
[DEBUG] DOMAIN: 00000000 init finished in 16 msecs
[DEBUG] PCI: 00:00:01.0 init finished in 0 msecs
[DEBUG] PCI: 00:00:02.0 init finished in 0 msecs
[DEBUG] PCI: 00:00:03.0 init finished in 0 msecs
[DEBUG] PCI: 00:00:04.0 init finished in 0 msecs
[DEBUG] PCI: 00:00:08.0 init finished in 0 msecs
[DEBUG] PCI: 00:00:14.3 init
[DEBUG] RTC Init
[DEBUG] IOAPIC: Initializing IOAPIC at fec00000
[DEBUG] IOAPIC: ID = 0x00
[DEBUG] IOAPIC: 24 interrupts
[DEBUG] IOAPIC: Clearing IOAPIC at fec00000
[DEBUG] IOAPIC: Bootstrap Processor Local APIC = 0x00
[DEBUG] PCI: 00:00:14.3 init finished in 24 msecs
[DEBUG] PCI: 00:00:14.6 init finished in 0 msecs
[DEBUG] PCI: 00:01:00.0 init finished in 0 msecs
[DEBUG] PCI: 00:02:00.0 init finished in 0 msecs
[DEBUG] PCI: 00:03:00.0 init finished in 0 msecs
[DEBUG] PCI: 00:03:00.1 init finished in 0 msecs
[DEBUG] PCI: 00:03:00.2 init finished in 0 msecs
[DEBUG] PCI: 00:03:00.6 init finished in 0 msecs
[DEBUG] PCI: 00:04:00.0 init finished in 0 msecs
[DEBUG] PCI: 00:05:00.0 init finished in 0 msecs
[INFO ] Devices initialized
[…]
ACPI Debug: “PCI: _SB.INTA._STA: 000000000000001F, Disabled”
ACPI Debug: “PCI: _SB.INTA._PRS => APIC”
ACPI Debug: “PCI: _SB.INTA._CRS APIC: 000000000000001F”
ACPI: PCI: Interrupt link INTA configured for IRQ 0
ACPI: PCI: Interrupt link INTA disabled
ACPI Debug: “PCI: _SB.INTA._DIS APIC”
ACPI Debug: “PCI: _SB.INTB._STA: 000000000000001F, Disabled”
ACPI Debug: “PCI: _SB.INTB._PRS => APIC”
ACPI Debug: “PCI: _SB.INTB._CRS APIC: 000000000000001F”
ACPI: PCI: Interrupt link INTB configured for IRQ 0
ACPI: PCI: Interrupt link INTB disabled
ACPI Debug: “PCI: _SB.INTB._DIS APIC”
ACPI Debug: “PCI: _SB.INTC._STA: 000000000000001F, Disabled”
ACPI Debug: “PCI: _SB.INTC._PRS => APIC”
ACPI Debug: “PCI: _SB.INTC._CRS APIC: 000000000000001F”
ACPI: PCI: Interrupt link INTC configured for IRQ 0
ACPI: PCI: Interrupt link INTC disabled
ACPI Debug: “PCI: _SB.INTC._DIS APIC”
ACPI Debug: “PCI: _SB.INTD._STA: 000000000000001F, Disabled”
ACPI Debug: “PCI: _SB.INTD._PRS => APIC”
ACPI Debug: “PCI: _SB.INTD._CRS APIC: 000000000000001F”
ACPI: PCI: Interrupt link INTD configured for IRQ 0
ACPI: PCI: Interrupt link INTD disabled
ACPI Debug: “PCI: _SB.INTD._DIS APIC”
ACPI Debug: “PCI: _SB.INTE._STA: 0000000000000014, Enabled”
ACPI Debug: “PCI: _SB.INTE._PRS => APIC”
ACPI Debug: “PCI: _SB.INTE._CRS APIC: 0000000000000014”
ACPI: PCI: Interrupt link INTE configured for IRQ 20
ACPI Debug: “PCI: _SB.INTE._DIS APIC”
ACPI Debug: “PCI: _SB.INTF._STA: 0000000000000015, Enabled”
ACPI Debug: “PCI: _SB.INTF._PRS => APIC”
ACPI Debug: “PCI: _SB.INTF._CRS APIC: 0000000000000015”
ACPI: PCI: Interrupt link INTF configured for IRQ 21
ACPI Debug: “PCI: _SB.INTF._DIS APIC”
ACPI Debug: “PCI: _SB.INTG._STA: 0000000000000016, Enabled”
ACPI Debug: “PCI: _SB.INTG._PRS => APIC”
ACPI Debug: “PCI: _SB.INTG._CRS APIC: 0000000000000016”
ACPI: PCI: Interrupt link INTG configured for IRQ 22
ACPI Debug: “PCI: _SB.INTG._DIS APIC”
ACPI Debug: “PCI: _SB.INTH._STA: 0000000000000017, Enabled”
ACPI Debug: “PCI: _SB.INTH._PRS => APIC”
ACPI Debug: “PCI: _SB.INTH._CRS APIC: 0000000000000017”
ACPI: PCI: Interrupt link INTH configured for IRQ 23
ACPI Debug: “PCI: _SB.INTH._DIS APIC”
However, Linux hangs while initializing the USB controller:
pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]
pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]
pci_bus 0000:00: resource 6 [mem 0xf0000000-0xfebfffff window]
pci_bus 0000:00: resource 7 [mem 0x8a0000000-0xfffcffffffff window]
pci_bus 0000:00: resource 8 [mem 0x000a0000-0x000bffff window]
pci_bus 0000:01: resource 1 [mem 0xf0300000-0xf03fffff]
pci_bus 0000:01: resource 2 [mem 0xf0200000-0xf02fffff 64bit pref]
pci_bus 0000:02: resource 1 [mem 0xf0400000-0xf04fffff]
pci_bus 0000:06: resource 0 [io 0x2000-0x2fff]
pci_bus 0000:06: resource 1 [mem 0xf0600000-0xf07fffff]
pci_bus 0000:06: resource 2 [mem 0x8b0a00000-0x8b0bfffff 64bit pref]
pci_bus 0000:07: resource 0 [io 0x3000-0x3fff]
pci_bus 0000:07: resource 1 [mem 0xf0800000-0xf09fffff]
pci_bus 0000:07: resource 2 [mem 0x8b0c00000-0x8b0dfffff 64bit pref]
pci_bus 0000:03: resource 0 [io 0x1000-0x1fff]
pci_bus 0000:03: resource 1 [mem 0xf0000000-0xf01fffff]
pci_bus 0000:03: resource 2 [mem 0x8a0000000-0x8b09fffff 64bit pref]
pci_bus 0000:04: resource 1 [mem 0xf0a00000-0xf0afffff]
pci_bus 0000:04: resource 2 [mem 0x8b0e00000-0x8b0efffff 64bit pref]
pci_bus 0000:05: resource 1 [mem 0xf0b00000-0xf0cfffff]
pci 0000:03:00.1: D0 power state depends on 0000:03:00.0
pci 0000:00:08.3: enabling device (0000 → 0002)
pci 0000:05:00.3: enabling device (0000 → 0002)
W: g.applet.interface.uart: 9074 frames dropped due to frame/parity errors
W: g.applet.interface.uart: 12174 frames dropped due to frame/parity errors
W: g.applet.interface.uart: 12174 frames dropped due to frame/parity errors
W: g.applet.interface.uart: 12174 frames dropped due to frame/parity errors
You would think that you would be able to simply disable USB controller for now but… no, because OpenSIL ignores configuration passed to it and brings the controller up anyway. That’s not even factoring all issues with sconfig etc.
If I had to summarize this project in one meme, it would be: