From 0e01c4841ddcd2216ab21d3f009024bfc8879908 Mon Sep 17 00:00:00 2001 From: Kyösti Mälkki Date: Thu, 27 Jul 2017 06:15:02 +0300 Subject: AGESA: Use common handler for ACPI tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I2d6ab1026f1105f1fea97682442a169409248c39 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/20815 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin --- src/northbridge/amd/agesa/Makefile.inc | 2 +- src/northbridge/amd/agesa/acpi_tables.c | 76 ++++++++++++++++++++++++++++++++ src/northbridge/amd/agesa/agesa_helper.h | 3 ++ src/northbridge/amd/agesa/agesawrapper.c | 37 ++-------------- 4 files changed, 83 insertions(+), 35 deletions(-) create mode 100644 src/northbridge/amd/agesa/acpi_tables.c (limited to 'src/northbridge/amd/agesa') diff --git a/src/northbridge/amd/agesa/Makefile.inc b/src/northbridge/amd/agesa/Makefile.inc index 62a5df1628..fff6524076 100644 --- a/src/northbridge/amd/agesa/Makefile.inc +++ b/src/northbridge/amd/agesa/Makefile.inc @@ -24,7 +24,7 @@ subdirs-$(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_RL) += family15rl subdirs-$(CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY16_KB) += family16kb romstage-y += def_callouts.c agesawrapper.c eventlog.c -ramstage-y += def_callouts.c agesawrapper.c eventlog.c +ramstage-y += def_callouts.c agesawrapper.c eventlog.c acpi_tables.c romstage-y += oem_s3.c ramstage-y += oem_s3.c diff --git a/src/northbridge/amd/agesa/acpi_tables.c b/src/northbridge/amd/agesa/acpi_tables.c new file mode 100644 index 0000000000..7edf43b126 --- /dev/null +++ b/src/northbridge/amd/agesa/acpi_tables.c @@ -0,0 +1,76 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2011-2012 Advanced Micro Devices, Inc. + * Copyright (C) 2016 Kyösti Mälkki + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include + +#include "AGESA.h" + +/* Fields were removed from the structure and we cannot add them back + * without new builds of the binaryPI blobs. + */ +#if !IS_ENABLED(CONFIG_CPU_AMD_AGESA_BINARY_PI) || \ + IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00630F01) || \ + IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00730F01) + +#define HAS_ACPI_SRAT TRUE +#define HAS_ACPI_SLIT TRUE +#else +#define HAS_ACPI_SRAT FALSE +#define HAS_ACPI_SLIT FALSE +#endif + +/* We will reference AmdLateParams later to copy ACPI tables. */ +static AMD_LATE_PARAMS *AmdLateParams; + +void agesawrapper_setlateinitptr(void *Late) +{ + AmdLateParams = Late; +} + +void *agesawrapper_getlateinitptr(int pick) +{ + ASSERT(AmdLateParams != NULL); + + switch (pick) { + case PICK_DMI: + return AmdLateParams->DmiTable; + case PICK_PSTATE: + return AmdLateParams->AcpiPState; +#if HAS_ACPI_SRAT + case PICK_SRAT: + return AmdLateParams->AcpiSrat; +#endif +#if HAS_ACPI_SLIT + case PICK_SLIT: + return AmdLateParams->AcpiSlit; +#endif + case PICK_WHEA_MCE: + return AmdLateParams->AcpiWheaMce; + case PICK_WHEA_CMC: + return AmdLateParams->AcpiWheaCmc; + case PICK_ALIB: + return AmdLateParams->AcpiAlib; + case PICK_IVRS: + return AmdLateParams->AcpiIvrs; + case PICK_CRAT: + return AmdLateParams->AcpiCrat; + case PICK_CDIT: + return AmdLateParams->AcpiCdit; + default: + return NULL; + } + return NULL; +} diff --git a/src/northbridge/amd/agesa/agesa_helper.h b/src/northbridge/amd/agesa/agesa_helper.h index ee7ab92ddd..6b7275c6e1 100644 --- a/src/northbridge/amd/agesa/agesa_helper.h +++ b/src/northbridge/amd/agesa/agesa_helper.h @@ -27,8 +27,11 @@ enum { PICK_WHEA_CMC, /* WHEA CMV table */ PICK_ALIB, /* SACPI SSDT table with ALIB implementation */ PICK_IVRS, /* IOMMU ACPI IVRS(I/O Virtualization Reporting Structure) table */ + PICK_CRAT, /* Component Resource Affinity Table table */ + PICK_CDIT, /* Component Locality Distance Information table */ }; +void agesawrapper_setlateinitptr (void *Late); void *agesawrapper_getlateinitptr (int pick); void amd_initcpuio(void); diff --git a/src/northbridge/amd/agesa/agesawrapper.c b/src/northbridge/amd/agesa/agesawrapper.c index 6533a1f03f..8006a7f182 100644 --- a/src/northbridge/amd/agesa/agesawrapper.c +++ b/src/northbridge/amd/agesa/agesawrapper.c @@ -270,13 +270,11 @@ AGESA_STATUS agesawrapper_amdS3Save(void) return status; } -/* We will reference AmdLateParams later to copy ACPI tables. */ -static AMD_LATE_PARAMS *AmdLateParams = NULL; - AGESA_STATUS agesawrapper_amdinitlate(void) { AGESA_STATUS status; AMD_INTERFACE_PARAMS AmdParamStruct; + AMD_LATE_PARAMS *AmdLateParams; memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS)); @@ -298,41 +296,12 @@ AGESA_STATUS agesawrapper_amdinitlate(void) AGESA_EVENTLOG(status, &AmdLateParams->StdHeader); ASSERT(status == AGESA_SUCCESS); + agesawrapper_setlateinitptr(AmdLateParams); + /* No AmdReleaseStruct(&AmdParamStruct), we need AmdLateParams later. */ return status; } -void *agesawrapper_getlateinitptr(int pick) -{ - ASSERT(AmdLateParams != NULL); - - switch (pick) { - case PICK_DMI: - return AmdLateParams->DmiTable; - case PICK_PSTATE: - return AmdLateParams->AcpiPState; - case PICK_SRAT: - return AmdLateParams->AcpiSrat; - case PICK_SLIT: - return AmdLateParams->AcpiSlit; - case PICK_WHEA_MCE: - return AmdLateParams->AcpiWheaMce; - case PICK_WHEA_CMC: - return AmdLateParams->AcpiWheaCmc; - case PICK_ALIB: - return AmdLateParams->AcpiAlib; - case PICK_IVRS: -#if IS_ENABLED(CONFIG_CPU_AMD_AGESA_FAMILY14) - return NULL; -#else - return AmdLateParams->AcpiIvrs; -#endif - default: - return NULL; - } - return NULL; -} - #endif /* __PRE_RAM__ */ AGESA_STATUS agesawrapper_amdlaterunaptask(UINT32 Func, UINTN Data, VOID * ConfigPtr) -- cgit v1.2.3