From 0e01c4841ddcd2216ab21d3f009024bfc8879908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= 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 ++-------------- src/northbridge/amd/pi/Makefile.inc | 2 +- src/northbridge/amd/pi/agesawrapper.c | 66 ++------------------------- src/northbridge/amd/pi/agesawrapper.h | 1 + 7 files changed, 88 insertions(+), 99 deletions(-) create mode 100644 src/northbridge/amd/agesa/acpi_tables.c 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) diff --git a/src/northbridge/amd/pi/Makefile.inc b/src/northbridge/amd/pi/Makefile.inc index a0bfe54bf1..c12c405098 100644 --- a/src/northbridge/amd/pi/Makefile.inc +++ b/src/northbridge/amd/pi/Makefile.inc @@ -23,7 +23,7 @@ romstage-y += agesawrapper.c ramstage-y += agesawrapper.c romstage-y += ../agesa/def_callouts.c -ramstage-y += ../agesa/def_callouts.c +ramstage-y += ../agesa/def_callouts.c ../agesa/acpi_tables.c romstage-y += ramtop.c ramstage-y += ramtop.c diff --git a/src/northbridge/amd/pi/agesawrapper.c b/src/northbridge/amd/pi/agesawrapper.c index cdff105755..4274d40b6c 100644 --- a/src/northbridge/amd/pi/agesawrapper.c +++ b/src/northbridge/amd/pi/agesawrapper.c @@ -28,20 +28,6 @@ void __attribute__((weak)) OemPostParams(AMD_POST_PARAMS *PostParams) {} #define FILECODE UNASSIGNED_FILE_FILECODE -#ifndef __PRE_RAM__ -/* ACPI table pointers returned by AmdInitLate */ -static void *DmiTable = NULL; -static void *AcpiPstate = NULL; -static void *AcpiSrat = NULL; -static void *AcpiSlit = NULL; - -static void *AcpiWheaMce = NULL; -static void *AcpiWheaCmc = NULL; -static void *AcpiAlib = NULL; -static void *AcpiIvrs = NULL; -static void *AcpiCrat = NULL; -#endif /* #ifndef __PRE_RAM__ */ - AGESA_STATUS agesawrapper_amdinitreset(void) { AGESA_STATUS status; @@ -223,34 +209,6 @@ AGESA_STATUS agesawrapper_amdinitenv(void) return status; } -#ifndef __PRE_RAM__ -VOID* agesawrapper_getlateinitptr (int pick) -{ - switch (pick) { - case PICK_DMI: - return DmiTable; - case PICK_PSTATE: - return AcpiPstate; - case PICK_SRAT: - return AcpiSrat; - case PICK_SLIT: - return AcpiSlit; - case PICK_WHEA_MCE: - return AcpiWheaMce; - case PICK_WHEA_CMC: - return AcpiWheaCmc; - case PICK_ALIB: - return AcpiAlib; - case PICK_IVRS: - return AcpiIvrs; - case PICK_CRAT: - return AcpiCrat; - default: - return NULL; - } -} -#endif /* #ifndef __PRE_RAM__ */ - AGESA_STATUS agesawrapper_amdinitmid(void) { AGESA_STATUS status; @@ -320,27 +278,9 @@ AGESA_STATUS agesawrapper_amdinitlate(void) ASSERT(Status == AGESA_SUCCESS); } - DmiTable = AmdLateParams->DmiTable; - AcpiPstate = AmdLateParams->AcpiPState; -#if IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00630F01) || IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_PI_00730F01) - AcpiSrat = AmdLateParams->AcpiSrat; - AcpiSlit = AmdLateParams->AcpiSlit; -#endif - - AcpiWheaMce = AmdLateParams->AcpiWheaMce; - AcpiWheaCmc = AmdLateParams->AcpiWheaCmc; - AcpiAlib = AmdLateParams->AcpiAlib; - AcpiIvrs = AmdLateParams->AcpiIvrs; - AcpiCrat = AmdLateParams->AcpiCrat; - - printk(BIOS_DEBUG, "DmiTable:%x, AcpiPstatein: %x, AcpiSrat:%x," - "AcpiSlit:%x, Mce:%x, Cmc:%x," - "Alib:%x, AcpiIvrs:%x in %s\n", - (unsigned int)DmiTable, (unsigned int)AcpiPstate, (unsigned int)AcpiSrat, - (unsigned int)AcpiSlit, (unsigned int)AcpiWheaMce, (unsigned int)AcpiWheaCmc, - (unsigned int)AcpiAlib, (unsigned int)AcpiIvrs, __func__); - - /* AmdReleaseStruct (&AmdParamStruct); */ + agesawrapper_setlateinitptr(AmdLateParams); + + /* No AmdReleaseStruct(&AmdParamStruct), we need AmdLateParams later. */ return Status; } #endif /* #ifndef __PRE_RAM__ */ diff --git a/src/northbridge/amd/pi/agesawrapper.h b/src/northbridge/amd/pi/agesawrapper.h index a6a05bb8b1..5cc3ab107f 100644 --- a/src/northbridge/amd/pi/agesawrapper.h +++ b/src/northbridge/amd/pi/agesawrapper.h @@ -39,6 +39,7 @@ AGESA_STATUS agesawrapper_amdinitlate(void); AGESA_STATUS agesawrapper_amdinitpost(void); AGESA_STATUS agesawrapper_amdinitmid(void); AGESA_STATUS agesawrapper_amdreadeventlog(UINT8 HeapStatus); +void agesawrapper_setlateinitptr (void *Late); void *agesawrapper_getlateinitptr(int pick); AGESA_STATUS agesawrapper_amdlaterunaptask(UINT32 Func, UINTN Data, void *ConfigPtr); AGESA_STATUS agesawrapper_amdS3Save(void); -- cgit v1.2.3