From 9e81540b85c6d06c7c3c63447b92f09590f032d1 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Tue, 13 Sep 2016 12:31:57 -0500 Subject: soc/intel/apollolake: initialize GNVS structure to 0 The code was not previously initializing the GNVS structure to all 0's in the ACPI write tables path. Fix this and also rearrange the ordering of updating the fields to only handle the chip_info specific bits till last such that most of the structure is filled in prior to bailing out in the case of a bad devicetree. Change-Id: I7bdb305c6b87dac96af35b0c3b7524a17ce53962 Signed-off-by: Aaron Durbin Reviewed-on: https://review.coreboot.org/16597 Reviewed-by: Duncan Laurie Reviewed-by: Furquan Shaikh Tested-by: build bot (Jenkins) Reviewed-by: Andrey Petrov Reviewed-by: Shaunak Saha Reviewed-by: Paul Menzel --- src/soc/intel/apollolake/acpi.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/soc/intel') diff --git a/src/soc/intel/apollolake/acpi.c b/src/soc/intel/apollolake/acpi.c index 4f4276ad72..1ca04fd3fe 100644 --- a/src/soc/intel/apollolake/acpi.c +++ b/src/soc/intel/apollolake/acpi.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "chip.h" #define CSTATE_RES(address_space, width, offset, address) \ @@ -151,11 +152,8 @@ static void acpi_create_gnvs(struct global_nvs_t *gnvs) struct soc_intel_apollolake_config *cfg; struct device *dev = NB_DEV_ROOT; - if (!dev || !dev->chip_info) { - printk(BIOS_ERR, "BUG! Could not find SOC devicetree config\n"); - return; - } - cfg = dev->chip_info; + /* Clear out GNVS. */ + memset(gnvs, 0, sizeof(*gnvs)); if (IS_ENABLED(CONFIG_CONSOLE_CBMEM)) gnvs->cbmc = (uintptr_t)cbmem_find(CBMEM_ID_CONSOLE); @@ -166,11 +164,17 @@ static void acpi_create_gnvs(struct global_nvs_t *gnvs) gnvs->chromeos.vbt2 = ACTIVE_ECFW_RO; } - /* Enable DPTF based on mainboard configuration */ - gnvs->dpte = cfg->dptf_enable; - /* Set unknown wake source */ gnvs->pm1i = ~0ULL; + + if (!dev || !dev->chip_info) { + printk(BIOS_ERR, "BUG! Could not find SOC devicetree config\n"); + return; + } + cfg = dev->chip_info; + + /* Enable DPTF based on mainboard configuration */ + gnvs->dpte = cfg->dptf_enable; } /* Save wake source information for calculating ACPI _SWS values */ -- cgit v1.2.3