From 43d260745a13dfefb2b03a6edbe9c109ab7ad2ee Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Thu, 14 Mar 2024 08:32:13 +0100 Subject: [PATCH] soc/intel/xeon_sp: Drop uncore_fill_ssdt Let ACPI DSDT figure out by itself if a stack is enabled. Allows to drop uncore_fill_ssdt() on all platforms. TEST=intel/archercity CRB Change-Id: Ib9051d608147f2de228509ff6b13871ca3183979 Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/coreboot/+/81273 Reviewed-by: Shuo Liu Tested-by: build bot (Jenkins) Reviewed-by: Arthur Heymans --- src/soc/intel/xeon_sp/cpx/soc_acpi.c | 4 -- src/soc/intel/xeon_sp/include/soc/acpi.h | 1 - src/soc/intel/xeon_sp/skx/soc_acpi.c | 4 -- src/soc/intel/xeon_sp/spr/acpi/cxl_resource.asl | 16 +++++-- src/soc/intel/xeon_sp/spr/acpi/iiostack.asl | 2 - src/soc/intel/xeon_sp/spr/acpi/pci_resource.asl | 14 +++++- src/soc/intel/xeon_sp/spr/soc_acpi.c | 64 ------------------------- src/soc/intel/xeon_sp/uncore.c | 3 -- 8 files changed, 25 insertions(+), 83 deletions(-) diff --git a/src/soc/intel/xeon_sp/cpx/soc_acpi.c b/src/soc/intel/xeon_sp/cpx/soc_acpi.c index b2d6d79412..1434fbfce5 100644 --- a/src/soc/intel/xeon_sp/cpx/soc_acpi.c +++ b/src/soc/intel/xeon_sp/cpx/soc_acpi.c @@ -41,10 +41,6 @@ void soc_fill_fadt(acpi_fadt_t *fadt) fadt->flags &= ~(ACPI_FADT_SEALED_CASE | ACPI_FADT_S4_RTC_WAKE); } -void uncore_fill_ssdt(const struct device *device) -{ -} - /* TODO: See if we can use the common generate_p_state_entries */ void soc_power_states_generation(int core, int cores_per_package) { diff --git a/src/soc/intel/xeon_sp/include/soc/acpi.h b/src/soc/intel/xeon_sp/include/soc/acpi.h index afccfe4a53..882c22638e 100644 --- a/src/soc/intel/xeon_sp/include/soc/acpi.h +++ b/src/soc/intel/xeon_sp/include/soc/acpi.h @@ -23,7 +23,6 @@ typedef struct { unsigned long northbridge_write_acpi_tables(const struct device *device, unsigned long current, struct acpi_rsdp *rsdp); -void uncore_fill_ssdt(const struct device *device); unsigned long xeonsp_acpi_create_madt_lapics(unsigned long current); unsigned long acpi_fill_cedt(unsigned long current); unsigned long acpi_fill_hmat(unsigned long current); diff --git a/src/soc/intel/xeon_sp/skx/soc_acpi.c b/src/soc/intel/xeon_sp/skx/soc_acpi.c index b98e9989a6..30e14d31de 100644 --- a/src/soc/intel/xeon_sp/skx/soc_acpi.c +++ b/src/soc/intel/xeon_sp/skx/soc_acpi.c @@ -54,10 +54,6 @@ void soc_fill_fadt(acpi_fadt_t *fadt) fill_fadt_extended_pm_io(fadt); } -void uncore_fill_ssdt(const struct device *device) -{ -} - void soc_power_states_generation(int core, int cores_per_package) { } diff --git a/src/soc/intel/xeon_sp/spr/acpi/cxl_resource.asl b/src/soc/intel/xeon_sp/spr/acpi/cxl_resource.asl index 80b3da2bc9..553ca9d8f7 100644 --- a/src/soc/intel/xeon_sp/spr/acpi/cxl_resource.asl +++ b/src/soc/intel/xeon_sp/spr/acpi/cxl_resource.asl @@ -17,10 +17,20 @@ Device (IIO_DEVICE_NAME(DEVPREFIX, SOCKET, STACK)) EisaId ("PNP0A03") /* PCI Bus */ }) Name (_UID, IIO_DEVICE_UID(DEVPREFIX, SOCKET, STACK)) - External (\_SB.IIO_DEVICE_NAME(STPREFIX, SOCKET, STACK)) - Method (_STA, 0, NotSerialized) // _STA: Status + Method (_STA, 0, NotSerialized) { - Return (\_SB.IIO_DEVICE_NAME(STPREFIX, SOCKET, STACK)) + /* + * _CRS is being generated by SSDT for available stacks only and + * when missing the stack isn't available. + */ + If (CondRefOf (_CRS)) + { + Return (0xf) + } + Else + { + Return (0) + } } Method (_PRT, 0, NotSerialized) { diff --git a/src/soc/intel/xeon_sp/spr/acpi/iiostack.asl b/src/soc/intel/xeon_sp/spr/acpi/iiostack.asl index 552f4c028a..5c3d7ead52 100644 --- a/src/soc/intel/xeon_sp/spr/acpi/iiostack.asl +++ b/src/soc/intel/xeon_sp/spr/acpi/iiostack.asl @@ -3,8 +3,6 @@ /* ***** PCI Stacks **** */ #undef DEVPREFIX #define DEVPREFIX PC -#undef STPREFIX -#define STPREFIX ST #undef PRTID #define PRTID AR00 diff --git a/src/soc/intel/xeon_sp/spr/acpi/pci_resource.asl b/src/soc/intel/xeon_sp/spr/acpi/pci_resource.asl index c65b699d6d..fdb599ec47 100644 --- a/src/soc/intel/xeon_sp/spr/acpi/pci_resource.asl +++ b/src/soc/intel/xeon_sp/spr/acpi/pci_resource.asl @@ -13,10 +13,20 @@ Device (IIO_DEVICE_NAME(DEVPREFIX, SOCKET, STACK)) Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) Name (_UID, IIO_DEVICE_UID(DEVPREFIX, SOCKET, STACK)) - External (\_SB.IIO_DEVICE_NAME(STPREFIX, SOCKET, STACK)) Method (_STA, 0, NotSerialized) { - Return (\_SB.IIO_DEVICE_NAME(STPREFIX, SOCKET, STACK)) + /* + * _CRS is being generated by SSDT for available stacks only and + * when missing the stack isn't available. + */ + If (CondRefOf (_CRS)) + { + Return (0xf) + } + Else + { + Return (0) + } } Method (_PRT, 0, NotSerialized) { diff --git a/src/soc/intel/xeon_sp/spr/soc_acpi.c b/src/soc/intel/xeon_sp/spr/soc_acpi.c index 0b6e491fc0..607ee6c36d 100644 --- a/src/soc/intel/xeon_sp/spr/soc_acpi.c +++ b/src/soc/intel/xeon_sp/spr/soc_acpi.c @@ -53,70 +53,6 @@ void soc_fill_fadt(acpi_fadt_t *fadt) fill_fadt_extended_pm_io(fadt); } -/* - * Add a DSDT ACPI Name field for STACK enable setting. - * This is retrieved by the device _STA defined in iiostack.asl - */ -static void create_dsdt_stack_sta(uint8_t socket, uint8_t stack, bool stack_enabled) -{ - char stack_sta[16]; - snprintf(stack_sta, sizeof(stack_sta), "ST%d%X", socket, stack); - - if (!stack_enabled) - acpigen_write_name_integer(stack_sta, ACPI_STATUS_DEVICE_ALL_OFF); - else - acpigen_write_name_integer(stack_sta, ACPI_STATUS_DEVICE_ALL_ON); -} - -void uncore_fill_ssdt(const struct device *device) -{ - bool stack_enabled; - - /* Only add RTxx entries once. */ - if (device->upstream->secondary != 0) - return; - - /* - Write stack scope - this needs to match RP ACPI scopes. - Stacks 0 (TYPE_UBOX_IIO) - Scope: PC, ResourceTemplate: P0RS - Stacks 1 .. 5 (TYPE_UBOX_IIO) - Scope: PC & CX, ResourceTemplate: RBRS - Stacks 8 .. B (TYPE_DINO) - Scope: DI for DINO, ResourceTemplate: RBRS - Scope: CP for CPM (i.e., QAT), ResourceTemplate: RBRS - Scope: HQ for HQM (i.e., DLB), ResourceTemplate: RBRS - Stacks D .. E (TYPE_UBOX) - Scope: UC<0..1> for UBOX[1-2], ResourceTemplate: UNRS - */ - - printk(BIOS_DEBUG, "%s device: %s\n", __func__, dev_path(device)); - - /* The _CSR generation must match SPR iiostack.asl. */ - const IIO_UDS *hob = get_iio_uds(); - /* Iterate over CONFIG_MAX_SOCKET to keep ASL templates and DSDT injection in sync */ - for (uint8_t socket = 0; socket < CONFIG_MAX_SOCKET; ++socket) { - for (int stack = 0; stack < MAX_LOGIC_IIO_STACK; ++stack) { - const STACK_RES *ri = - &hob->PlatformData.IIO_resource[socket].StackRes[stack]; - - stack_enabled = soc_cpu_is_enabled(socket) && - ri->Personality < TYPE_RESERVED; - - printk(BIOS_DEBUG, "%s processing socket: %d, stack: %d, type: %d\n", - __func__, socket, stack, ri->Personality); - - if (stack <= IioStack5) { // TYPE_UBOX_IIO - create_dsdt_stack_sta(socket, stack, stack_enabled); - } else if (stack >= IioStack8 && stack <= IioStack11) { // TYPE_DINO - create_dsdt_stack_sta(socket, stack, stack_enabled); - } else if (stack == IioStack13) { // TYPE_UBOX - create_dsdt_stack_sta(socket, stack, stack_enabled); - } - } - } -} - /* TODO: See if we can use the common generate_p_state_entries */ void soc_power_states_generation(int core, int cores_per_package) { diff --git a/src/soc/intel/xeon_sp/uncore.c b/src/soc/intel/xeon_sp/uncore.c index 952ca4db70..0eaff0626f 100644 --- a/src/soc/intel/xeon_sp/uncore.c +++ b/src/soc/intel/xeon_sp/uncore.c @@ -369,9 +369,6 @@ static struct device_operations mmapvtd_ops = { .enable_resources = pci_dev_enable_resources, .init = mmapvtd_init, .ops_pci = &soc_pci_ops, -#if CONFIG(HAVE_ACPI_TABLES) - .acpi_fill_ssdt = uncore_fill_ssdt, -#endif }; static const unsigned short mmapvtd_ids[] = { -- 2.11.4.GIT