soc/amd/phoenix/chip: use common data fabric domain resource code

Use the new common AMD code that gets the usable non-fixed MMIO windows
from the data fabric MMIO decode registers and generate the PCI0 _CRS
ACPI code based on those regions. For a more detailed description see
the corresponding patch that changes the Picasso code to use this new
code. In contrast to the Picasso code, this change will drop the
unneeded _STA method inside the PCI0 scope which wasn't present in
Picasso's ACPI code before it got replaced by the SSDT that gets
generated by amd_pci_domain_fill_ssdt.

BUG=b:283495475
TEST=Myst still boots and both the coreboot console and the kernel show
the expected PCI MMIO ranges being used.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: I425876c4ef470574e00e123d36101641240c98cf
Reviewed-on: https://review.coreboot.org/c/coreboot/+/75559
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
This commit is contained in:
Felix Held 2023-05-31 16:23:38 +02:00
parent a4f4b0a922
commit 268dadbcc6
4 changed files with 4 additions and 63 deletions

View File

@ -47,6 +47,7 @@ config SOC_AMD_PHOENIX
select SOC_AMD_COMMON_BLOCK_BANKED_GPIOS select SOC_AMD_COMMON_BLOCK_BANKED_GPIOS
select SOC_AMD_COMMON_BLOCK_CPUFREQ_FAM17H_19H select SOC_AMD_COMMON_BLOCK_CPUFREQ_FAM17H_19H
select SOC_AMD_COMMON_BLOCK_DATA_FABRIC select SOC_AMD_COMMON_BLOCK_DATA_FABRIC
select SOC_AMD_COMMON_BLOCK_DATA_FABRIC_DOMAIN
select SOC_AMD_COMMON_BLOCK_ESPI_EXTENDED_DECODE_RANGES select SOC_AMD_COMMON_BLOCK_ESPI_EXTENDED_DECODE_RANGES
select SOC_AMD_COMMON_BLOCK_GRAPHICS # TODO: Check if this is still correct select SOC_AMD_COMMON_BLOCK_GRAPHICS # TODO: Check if this is still correct
select SOC_AMD_COMMON_BLOCK_HAS_ESPI select SOC_AMD_COMMON_BLOCK_HAS_ESPI

View File

@ -5,15 +5,6 @@
Device(PCI0) { Device(PCI0) {
Name(_HID, EISAID("PNP0A08")) /* PCI Express Root Bridge */ Name(_HID, EISAID("PNP0A08")) /* PCI Express Root Bridge */
Name(_CID, EISAID("PNP0A03")) /* PCI Root Bridge */ Name(_CID, EISAID("PNP0A03")) /* PCI Root Bridge */
External(TOM1, IntObj) /* Generated by root_complex.c */
Method(_BBN, 0, NotSerialized) {
Return(0) /* Bus number = 0 */
}
Method(_STA, 0, NotSerialized) {
Return(0x0f) /* Status is visible */
}
/* Operating System Capabilities Method */ /* Operating System Capabilities Method */
Method(_OSC, 4) { Method(_OSC, 4) {
@ -28,57 +19,6 @@ Device(PCI0) {
Return (Arg3) Return (Arg3)
} }
} }
Name(CRES, ResourceTemplate() {
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
0x0000, /* address granularity */
0x0000, /* range minimum */
0x00ff, /* range maximum */
0x0000, /* translation */
0x0100, /* length */
,, PSB0) /* ResourceSourceIndex, ResourceSource, DescriptorName */
IO(Decode16, 0x0cf8, 0x0cf8, 1, 8)
WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, /* address granularity */
0x0000, /* range minimum */
0x0cf7, /* range maximum */
0x0000, /* translation */
0x0cf8 /* length */
)
WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
0x0000, /* address granularity */
0x0d00, /* range minimum */
0xffff, /* range maximum */
0x0000, /* translation */
0xf300 /* length */
)
Memory32Fixed(READONLY, 0x000a0000, 0x00020000, VGAM) /* VGA memory space */
Memory32Fixed(READONLY, 0x000c0000, 0x00020000, EMM1) /* Assume C0000-E0000 empty */
/* memory space for PCI BARs below 4GB */
Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
})
Method(_CRS, 0) {
CreateDWordField(CRES, ^MMIO._BAS, MM1B)
CreateDWordField(CRES, ^MMIO._LEN, MM1L)
/* Declare memory between TOM1 and MMCONF as available for PCI MMIO. */
MM1B = TOM1
Local0 = CONFIG_ECAM_MMCONF_BASE_ADDRESS
Local0 -= TOM1
MM1L = Local0
CreateWordField(CRES, ^PSB0._MAX, BMAX)
CreateWordField(CRES, ^PSB0._LEN, BLEN)
BMAX = CONFIG_ECAM_MMCONF_BUS_NUMBER - 1
BLEN = CONFIG_ECAM_MMCONF_BUS_NUMBER
Return(CRES) /* note to change the Name buffer */
} /* end of Method(_SB.PCI0._CRS) */
/* 0:14.3 - LPC */ /* 0:14.3 - LPC */
#include <soc/amd/common/acpi/lpc.asl> #include <soc/amd/common/acpi/lpc.asl>

View File

@ -28,10 +28,11 @@ static const char *soc_acpi_name(const struct device *dev)
}; };
struct device_operations phoenix_pci_domain_ops = { struct device_operations phoenix_pci_domain_ops = {
.read_resources = pci_domain_read_resources, .read_resources = amd_pci_domain_read_resources,
.set_resources = pci_domain_set_resources, .set_resources = pci_domain_set_resources,
.scan_bus = pci_domain_scan_bus, .scan_bus = amd_pci_domain_scan_bus,
.acpi_name = soc_acpi_name, .acpi_name = soc_acpi_name,
.acpi_fill_ssdt = amd_pci_domain_fill_ssdt,
}; };
static void soc_init(void *chip_info) static void soc_init(void *chip_info)

View File

@ -220,7 +220,6 @@ static void acipgen_dptci(void)
static void root_complex_fill_ssdt(const struct device *device) static void root_complex_fill_ssdt(const struct device *device)
{ {
acpi_fill_root_complex_tom(device);
if (CONFIG(SOC_AMD_COMMON_BLOCK_ACPI_DPTC)) if (CONFIG(SOC_AMD_COMMON_BLOCK_ACPI_DPTC))
acipgen_dptci(); acipgen_dptci();
} }