soc/intel/xeon_sp: Use common _CRS code generation
Drop SoC specific code and use generic implementation provided by pci_domain_fill_ssdt. TEST=Booted on IBM/SBP1 to Ubuntu 22.04. TEST=intel/archercity CRB Change-Id: I8b0bc2eb02569b5d74f8521d79e0af8fee880c80 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/80796 Reviewed-by: Shuo Liu <shuo.liu@intel.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
This commit is contained in:
parent
abc274474a
commit
e357ac3321
@ -1,5 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include <acpi/acpigen_pci.h>
|
||||
#include <assert.h>
|
||||
#include <console/console.h>
|
||||
#include <device/pci.h>
|
||||
@ -243,6 +244,7 @@ static struct device_operations iio_pcie_domain_ops = {
|
||||
#if CONFIG(HAVE_ACPI_TABLES)
|
||||
.acpi_name = soc_acpi_name,
|
||||
.write_acpi_tables = northbridge_write_acpi_tables,
|
||||
.acpi_fill_ssdt = pci_domain_fill_ssdt,
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -257,6 +259,7 @@ static struct device_operations ubox_pcie_domain_ops = {
|
||||
#if CONFIG(HAVE_ACPI_TABLES)
|
||||
.acpi_name = soc_acpi_name,
|
||||
.write_acpi_tables = northbridge_write_acpi_tables,
|
||||
.acpi_fill_ssdt = pci_domain_fill_ssdt,
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -348,6 +351,7 @@ static struct device_operations iio_cxl_domain_ops = {
|
||||
#if CONFIG(HAVE_ACPI_TABLES)
|
||||
.acpi_name = soc_acpi_name,
|
||||
.write_acpi_tables = northbridge_write_acpi_tables,
|
||||
.acpi_fill_ssdt = pci_domain_fill_ssdt,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <acpi/acpigen_pci.h>
|
||||
#include <arch/ioapic.h>
|
||||
#include <console/console.h>
|
||||
#include <console/debug.h>
|
||||
|
@ -43,72 +43,6 @@ void soc_fill_fadt(acpi_fadt_t *fadt)
|
||||
|
||||
void uncore_fill_ssdt(const struct device *device)
|
||||
{
|
||||
struct iiostack_resource stack_info = {0};
|
||||
|
||||
/* Only add RTxx entries once. */
|
||||
if (device->upstream->secondary != 0 || device->upstream->segment_group != 0)
|
||||
return;
|
||||
|
||||
get_iiostack_info(&stack_info);
|
||||
|
||||
for (uint8_t stack = 0; stack < stack_info.no_of_stacks; ++stack) {
|
||||
const STACK_RES *ri = &stack_info.res[stack];
|
||||
char rtname[16];
|
||||
|
||||
snprintf(rtname, sizeof(rtname), "\\_SB.PC%02x", stack);
|
||||
acpigen_write_scope(rtname);
|
||||
|
||||
acpigen_write_name("_CRS");
|
||||
printk(BIOS_DEBUG, "\tCreating ResourceTemplate %s for stack: %d\n",
|
||||
rtname, stack);
|
||||
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
/* bus resource */
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase, ri->BusLimit,
|
||||
0x0, (ri->BusLimit - ri->BusBase + 1));
|
||||
|
||||
/* additional io resources on socket 0 bus 0 */
|
||||
if (stack == 0) {
|
||||
/* ACPI 6.4.2.5 I/O Port Descriptor */
|
||||
acpigen_write_io16(0xCF8, 0xCFF, 0x1, 0x8, 1);
|
||||
|
||||
/* IO decode CF8-CFF */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x0000, 0x03AF, 0, 0x03B0);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03E0, 0x0CF7, 0, 0x0918);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03B0, 0x03BB, 0, 0x000C);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03C0, 0x03DF, 0, 0x0020);
|
||||
}
|
||||
|
||||
/* IO resource */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, ri->PciResourceIoBase,
|
||||
ri->PciResourceIoLimit, 0x0,
|
||||
(ri->PciResourceIoLimit - ri->PciResourceIoBase + 1));
|
||||
|
||||
/* additional mem32 resources on socket 0 bus 0 */
|
||||
if (stack == 0) {
|
||||
acpigen_resource_dword(0, 0xc, 3, 0, VGA_MMIO_BASE,
|
||||
VGA_MMIO_LIMIT, 0x0, VGA_MMIO_SIZE);
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, SPI_BASE_ADDRESS,
|
||||
(SPI_BASE_ADDRESS + SPI_BASE_SIZE - 1), 0x0,
|
||||
SPI_BASE_SIZE);
|
||||
}
|
||||
|
||||
/* Mem32 resource */
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, ri->PciResourceMem32Base,
|
||||
ri->PciResourceMem32Limit, 0x0,
|
||||
(ri->PciResourceMem32Limit - ri->PciResourceMem32Base + 1));
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(0, 0xc, 1, 0, ri->PciResourceMem64Base,
|
||||
ri->PciResourceMem64Limit, 0x0,
|
||||
(ri->PciResourceMem64Limit - ri->PciResourceMem64Base + 1));
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
|
||||
/* Scope */
|
||||
acpigen_pop_len();
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: See if we can use the common generate_p_state_entries */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include <acpi/acpigen_pci.h>
|
||||
#include <cbfs.h>
|
||||
#include <console/console.h>
|
||||
#include <device/pci.h>
|
||||
|
@ -56,82 +56,6 @@ void soc_fill_fadt(acpi_fadt_t *fadt)
|
||||
|
||||
void uncore_fill_ssdt(const struct device *device)
|
||||
{
|
||||
const IIO_UDS *hob = get_iio_uds();
|
||||
|
||||
/* Only add RTxx entries once. */
|
||||
if (device->upstream->secondary != 0)
|
||||
return;
|
||||
|
||||
for (int socket = 0, iio = 0; iio < hob->PlatformData.numofIIO; ++socket) {
|
||||
if (!soc_cpu_is_enabled(socket))
|
||||
continue;
|
||||
iio++;
|
||||
IIO_RESOURCE_INSTANCE iio_resource =
|
||||
hob->PlatformData.IIO_resource[socket];
|
||||
for (int stack = 0; stack <= PSTACK2; ++stack) {
|
||||
const STACK_RES *ri = &iio_resource.StackRes[stack];
|
||||
char rtname[16];
|
||||
|
||||
snprintf(rtname, sizeof(rtname), "\\_SB.PC%02x", socket * MAX_IIO_STACK + stack);
|
||||
acpigen_write_scope(rtname);
|
||||
|
||||
acpigen_write_name("_CRS");
|
||||
|
||||
printk(BIOS_DEBUG, "\tCreating ResourceTemplate %s for socket: %d, stack: %d\n",
|
||||
rtname, socket, stack);
|
||||
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
/* bus resource */
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase, ri->BusLimit,
|
||||
0x0, (ri->BusLimit - ri->BusBase + 1));
|
||||
|
||||
// additional io resources on socket 0 bus 0
|
||||
if (socket == 0 && stack == 0) {
|
||||
/* ACPI 6.4.2.5 I/O Port Descriptor */
|
||||
acpigen_write_io16(0xCF8, 0xCFF, 0x1, 0x8, 1);
|
||||
|
||||
/* IO decode CF8-CFF */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x0000, 0x03AF,
|
||||
0, 0x03B0);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03E0, 0x0CF7,
|
||||
0, 0x0918);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03B0, 0x03BB,
|
||||
0, 0x000C);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03C0, 0x03DF,
|
||||
0, 0x0020);
|
||||
}
|
||||
|
||||
/* IO resource */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, ri->PciResourceIoBase,
|
||||
ri->PciResourceIoLimit, 0x0,
|
||||
(ri->PciResourceIoLimit - ri->PciResourceIoBase + 1));
|
||||
|
||||
// additional mem32 resources on socket 0 bus 0
|
||||
if (socket == 0 && stack == 0) {
|
||||
acpigen_resource_dword(0, 0xc, 3, 0, VGA_MMIO_BASE,
|
||||
VGA_MMIO_LIMIT, 0x0, VGA_MMIO_SIZE);
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, SPI_BASE_ADDRESS,
|
||||
(SPI_BASE_ADDRESS + SPI_BASE_SIZE - 1), 0x0,
|
||||
SPI_BASE_SIZE);
|
||||
}
|
||||
|
||||
/* Mem32 resource */
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, ri->PciResourceMem32Base,
|
||||
ri->PciResourceMem32Limit, 0x0,
|
||||
(ri->PciResourceMem32Limit - ri->PciResourceMem32Base + 1));
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(0, 0xc, 1, 0, ri->PciResourceMem64Base,
|
||||
ri->PciResourceMem64Limit, 0x0,
|
||||
(ri->PciResourceMem64Limit - ri->PciResourceMem64Base + 1));
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
|
||||
/* Scope */
|
||||
acpigen_pop_len();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void soc_power_states_generation(int core, int cores_per_package)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <acpi/acpigen_pci.h>
|
||||
#include <arch/ioapic.h>
|
||||
#include <console/console.h>
|
||||
#include <console/debug.h>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <acpi/acpigen_pci.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <console/console.h>
|
||||
@ -26,6 +26,7 @@ static struct device_operations ioat_domain_ops = {
|
||||
#if CONFIG(HAVE_ACPI_TABLES)
|
||||
.acpi_name = soc_acpi_name,
|
||||
.write_acpi_tables = northbridge_write_acpi_tables,
|
||||
.acpi_fill_ssdt = pci_domain_fill_ssdt,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -53,279 +53,11 @@ void soc_fill_fadt(acpi_fadt_t *fadt)
|
||||
fill_fadt_extended_pm_io(fadt);
|
||||
}
|
||||
|
||||
static void create_dsdt_iou_pci_resource(uint8_t socket, uint8_t stack, const STACK_RES *ri,
|
||||
bool stack_enabled)
|
||||
{
|
||||
/*
|
||||
Stacks 0 (TYPE_UBOX_IIO)
|
||||
Scope: PC<socket><stack>, ResourceTemplate: P0RS
|
||||
Stacks 1 .. 5 (TYPE_UBOX_IIO)
|
||||
Scope: PC<socket><stack>, ResourceTemplate: RBRS
|
||||
*/
|
||||
/* write _CRS scope */
|
||||
char tres[16];
|
||||
snprintf(tres, sizeof(tres), "\\_SB.PC%d%X", socket, stack);
|
||||
acpigen_write_scope(tres);
|
||||
acpigen_write_name("_CRS");
|
||||
|
||||
printk(BIOS_DEBUG, "\tCreating ResourceTemplate %s for socket: %d, stack: %d\n", tres,
|
||||
socket, stack);
|
||||
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
/* Bus Resource */
|
||||
if (stack_enabled) {
|
||||
/* For stack with CXL device, the PCIe bus resource is BusBase only. */
|
||||
if (is_iio_cxl_stack_res(ri))
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase, ri->BusBase, 0x0, 1);
|
||||
else
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase, ri->BusLimit, 0x0,
|
||||
(ri->BusLimit - ri->BusBase + 1));
|
||||
} else {
|
||||
acpigen_resource_word(2, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/* Additional IO resources on socket 0 bus 0 */
|
||||
if (socket == 0 && stack == 0) {
|
||||
/* ACPI 6.4.2.5 I/O Port Descriptor */
|
||||
acpigen_write_io16(0xCF8, 0xCFF, 0x1, 0x8, 1);
|
||||
|
||||
/* IO decode CF8-CFF */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x0000, 0x03AF, 0, 0x03B0);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03E0, 0x0CF7, 0, 0x0918);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03B0, 0x03BB, 0, 0x000C);
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, 0x03C0, 0x03DF, 0, 0x0020);
|
||||
}
|
||||
|
||||
/* IO resource */
|
||||
if (stack_enabled) {
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, ri->PciResourceIoBase,
|
||||
ri->PciResourceIoLimit, 0x0,
|
||||
(ri->PciResourceIoLimit - ri->PciResourceIoBase + 1));
|
||||
|
||||
/* Additional Mem32 resources on socket 0 bus 0 */
|
||||
if (socket == 0 && stack == 0) {
|
||||
acpigen_resource_dword(0, 0xc, 3, 0, VGA_MMIO_BASE,
|
||||
VGA_MMIO_LIMIT, 0x0, VGA_MMIO_SIZE);
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, SPI_BASE_ADDRESS,
|
||||
(SPI_BASE_ADDRESS + SPI_BASE_SIZE - 1), 0x0,
|
||||
SPI_BASE_SIZE);
|
||||
}
|
||||
|
||||
/* Mem32 resource */
|
||||
acpigen_resource_dword(
|
||||
0, 0xc, 1, 0, ri->PciResourceMem32Base, ri->PciResourceMem32Limit, 0x0,
|
||||
(ri->PciResourceMem32Limit - ri->PciResourceMem32Base + 1));
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(
|
||||
0, 0xc, 1, 0, ri->PciResourceMem64Base, ri->PciResourceMem64Limit, 0x0,
|
||||
(ri->PciResourceMem64Limit - ri->PciResourceMem64Base + 1));
|
||||
} else {
|
||||
/* Zeroed IO resource */
|
||||
acpigen_resource_word(1, 0, 3, 0, 0, 0, 0, 0);
|
||||
|
||||
/* Zeroed Mem32 resource */
|
||||
acpigen_resource_dword(0, 0, 1, 0, 0, 0, 0, 0);
|
||||
|
||||
/* Zeroed Mem64 resource */
|
||||
acpigen_resource_dword(0, 0, 1, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
acpigen_pop_len();
|
||||
}
|
||||
|
||||
static void create_dsdt_iou_cxl_resource(uint8_t socket, uint8_t stack, const STACK_RES *ri, bool stack_enabled)
|
||||
{
|
||||
/*
|
||||
Stacks 1 .. 5 (TYPE_UBOX_IIO)
|
||||
Scope: CX<socket><stack>, ResourceTemplate: RBRS
|
||||
*/
|
||||
/* write _CRS scope */
|
||||
char tres[16];
|
||||
snprintf(tres, sizeof(tres), "\\_SB.CX%d%X", socket, stack);
|
||||
acpigen_write_scope(tres);
|
||||
acpigen_write_name("_CRS");
|
||||
|
||||
printk(BIOS_DEBUG, "\tCreating ResourceTemplate %s for socket: %d, stack: %d\n", tres,
|
||||
socket, stack);
|
||||
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
if (stack_enabled) {
|
||||
/* bus resource, from (BusBase + 1) to BusLimit */
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase + 1, ri->BusLimit, 0x0,
|
||||
(ri->BusLimit - ri->BusBase));
|
||||
|
||||
/* IO resource */
|
||||
acpigen_resource_word(1, 0xc, 0x3, 0, ri->IoBase, ri->PciResourceIoBase - 1,
|
||||
0x0, ri->PciResourceIoBase - ri->IoBase);
|
||||
|
||||
/* Mem32 resource */
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, ri->Mmio32Base,
|
||||
ri->PciResourceMem32Base - 1, 0x0,
|
||||
ri->PciResourceMem32Base - ri->Mmio32Base);
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(0, 0xc, 1, 0, ri->Mmio64Base,
|
||||
ri->PciResourceMem64Base - 1, 0x0,
|
||||
ri->PciResourceMem64Base - ri->Mmio64Base);
|
||||
} else {
|
||||
/* bus resource, from (BusBase + 1) to BusLimit */
|
||||
acpigen_resource_word(2, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
/* IO resource */
|
||||
acpigen_resource_word(1, 0, 3, 0, 0, 0, 0, 0);
|
||||
|
||||
/* Mem32 resource */
|
||||
acpigen_resource_dword(0, 0, 1, 0, 0, 0, 0, 0);
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(0, 0, 1, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
acpigen_pop_len();
|
||||
}
|
||||
|
||||
static void create_dsdt_ioat_resource(uint8_t socket, uint8_t stack, const STACK_RES *ri, bool stack_enabled)
|
||||
{
|
||||
if (!stack_enabled)
|
||||
return;
|
||||
|
||||
/*
|
||||
Stacks 8 .. B (TYPE_DINO)
|
||||
Scope: DI<socket><stack> for DINO, ResourceTemplate: DT
|
||||
Scope: CP<socket><stack> for CPM (i.e., QAT), ResourceTemplate: MT
|
||||
Scope: HQ<socket><stack> for HQM (i.e., DLB), ResourceTemplate: HT
|
||||
*/
|
||||
|
||||
enum {
|
||||
DSDT_DINO = 0,
|
||||
DSDT_CPM,
|
||||
DSDT_HQM,
|
||||
DSDT_CPM1,
|
||||
DSDT_HQM1
|
||||
};
|
||||
uint8_t rlist[] = {DSDT_DINO, DSDT_CPM, DSDT_HQM, DSDT_CPM1, DSDT_HQM1};
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(rlist); ++i) {
|
||||
uint8_t bus_base, bus_limit;
|
||||
uint64_t mem64_base, mem64_limit;
|
||||
char tres[16];
|
||||
|
||||
/* Note, This allocates the resources in a different order than
|
||||
* coreboot (DINO base is last). This causes the kernel to
|
||||
* reallocate the DINO BARs.
|
||||
* TODO: Use the resource settings from coreboot */
|
||||
if (rlist[i] == DSDT_DINO) {
|
||||
bus_base = ri->BusBase;
|
||||
bus_limit = ri->BusBase;
|
||||
mem64_base = ri->PciResourceMem64Base + CPM_MMIO_SIZE + HQM_MMIO_SIZE
|
||||
+ CPM_MMIO_SIZE + HQM_MMIO_SIZE;
|
||||
mem64_limit = ri->PciResourceMem64Limit;
|
||||
snprintf(tres, sizeof(tres), "\\_SB.DI%d%X", socket, stack);
|
||||
} else if (rlist[i] == DSDT_CPM) {
|
||||
bus_base = ri->BusBase + CPM_BUS_OFFSET;
|
||||
bus_limit = bus_base + CPM_RESERVED_BUS;
|
||||
mem64_base = ri->PciResourceMem64Base;
|
||||
mem64_limit = mem64_base + CPM_MMIO_SIZE - 1;
|
||||
snprintf(tres, sizeof(tres), "\\_SB.PM%d%X", socket, stack);
|
||||
} else if (rlist[i] == DSDT_HQM) {
|
||||
bus_base = ri->BusBase + HQM_BUS_OFFSET;
|
||||
bus_limit = bus_base + HQM_RESERVED_BUS;
|
||||
mem64_base = ri->PciResourceMem64Base + CPM_MMIO_SIZE;
|
||||
mem64_limit = mem64_base + HQM_MMIO_SIZE - 1;
|
||||
snprintf(tres, sizeof(tres), "\\_SB.HQ%d%X", socket, stack);
|
||||
} else if (rlist[i] == DSDT_CPM1) {
|
||||
bus_base = ri->BusBase + CPM1_BUS_OFFSET;
|
||||
bus_limit = bus_base + CPM_RESERVED_BUS;
|
||||
mem64_base = ri->PciResourceMem64Base + CPM_MMIO_SIZE + HQM_MMIO_SIZE;
|
||||
mem64_limit = mem64_base + CPM_MMIO_SIZE - 1;
|
||||
snprintf(tres, sizeof(tres), "\\_SB.PN%d%X", socket, stack);
|
||||
} else {
|
||||
bus_base = ri->BusBase + HQM1_BUS_OFFSET;
|
||||
bus_limit = bus_base + HQM_RESERVED_BUS;
|
||||
mem64_base = ri->PciResourceMem64Base + CPM_MMIO_SIZE + HQM_MMIO_SIZE
|
||||
+ CPM_MMIO_SIZE;
|
||||
mem64_limit = mem64_base + HQM_MMIO_SIZE - 1;
|
||||
snprintf(tres, sizeof(tres), "\\_SB.HR%d%X", socket, stack);
|
||||
}
|
||||
|
||||
/* Note, some SKU doesn't provide CPM1 and HQM1 and owns smaller bus ranges
|
||||
accordingly*/
|
||||
if (bus_limit > ri->BusLimit)
|
||||
continue;
|
||||
|
||||
printk(BIOS_DEBUG,
|
||||
"\tCreating Dino ResourceTemplate %s for socket: %d, "
|
||||
"stack: %d\n bus_base:0x%x, bus_limit:0x%x\n",
|
||||
tres, socket, stack, bus_base, bus_limit);
|
||||
|
||||
acpigen_write_scope(tres);
|
||||
acpigen_write_name("_CRS");
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
acpigen_resource_word(2, 0xc, 0, 0, bus_base, bus_limit, 0x0,
|
||||
(bus_limit - bus_base + 1));
|
||||
|
||||
/* Mem32 resource */
|
||||
if (rlist[i] == DSDT_DINO)
|
||||
acpigen_resource_dword(0, 0xc, 1, 0, ri->PciResourceMem32Base,
|
||||
ri->PciResourceMem32Limit, 0x0,
|
||||
(ri->PciResourceMem32Limit
|
||||
- ri->PciResourceMem32Base + 1));
|
||||
|
||||
/* Mem64 resource */
|
||||
acpigen_resource_qword(0, 0xc, 1, 0, mem64_base, mem64_limit, 0,
|
||||
(mem64_limit - mem64_base + 1));
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
acpigen_pop_len();
|
||||
}
|
||||
}
|
||||
|
||||
static void create_dsdt_ubox_resource(uint8_t socket, uint8_t stack, const STACK_RES *ri, bool stack_enabled)
|
||||
{
|
||||
/*
|
||||
Stacks D .. E (TYPE_UBOX)
|
||||
Scope: UC/UD<socket><0..1> for UBOX[1-2], ResourceTemplate: UT/UU
|
||||
*/
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
char tres[16];
|
||||
/* write _CRS scope */
|
||||
if (i == 0)
|
||||
snprintf(tres, sizeof(tres), "\\_SB.UC%d%X", socket, stack);
|
||||
else
|
||||
snprintf(tres, sizeof(tres), "\\_SB.UD%d%X", socket, stack);
|
||||
|
||||
printk(BIOS_DEBUG, "\tCreating ResourceTemplate %s for socket: %d, stack: %d\n",
|
||||
tres, socket, stack);
|
||||
|
||||
acpigen_write_scope(tres);
|
||||
acpigen_write_name("_CRS");
|
||||
acpigen_write_resourcetemplate_header();
|
||||
|
||||
if (!stack_enabled)
|
||||
acpigen_resource_word(2, 0, 0, 0, 0, 0, 0, 0);
|
||||
else if (i == 0)
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase, ri->BusBase, 0x0, 1);
|
||||
else
|
||||
acpigen_resource_word(2, 0xc, 0, 0, ri->BusBase + 1, ri->BusBase + 1,
|
||||
0x0, 1);
|
||||
|
||||
acpigen_write_resourcetemplate_footer();
|
||||
acpigen_pop_len();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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, const STACK_RES *ri, bool stack_enabled)
|
||||
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);
|
||||
@ -375,17 +107,11 @@ void uncore_fill_ssdt(const struct device *device)
|
||||
__func__, socket, stack, ri->Personality);
|
||||
|
||||
if (stack <= IioStack5) { // TYPE_UBOX_IIO
|
||||
create_dsdt_iou_pci_resource(socket, stack, ri, stack_enabled);
|
||||
if (is_iio_cxl_stack_res(ri))
|
||||
create_dsdt_iou_cxl_resource(socket, stack, ri,
|
||||
stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, ri, stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, stack_enabled);
|
||||
} else if (stack >= IioStack8 && stack <= IioStack11) { // TYPE_DINO
|
||||
create_dsdt_ioat_resource(socket, stack, ri, stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, ri, stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, stack_enabled);
|
||||
} else if (stack == IioStack13) { // TYPE_UBOX
|
||||
create_dsdt_ubox_resource(socket, stack, ri, stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, ri, stack_enabled);
|
||||
create_dsdt_stack_sta(socket, stack, stack_enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user