From 3ce0360592f036ce586a49db84146d435a23e662 Mon Sep 17 00:00:00 2001 From: Marshall Dawson Date: Fri, 3 May 2019 10:20:44 -0600 Subject: soc/amd/common: Rework block/acpi The halt.c file relies on the ACPI register block in the AcpiMmio range. This register block is consistent across AMD device generations, so to prepare for moving additional stoneyridge support to this directory by changing the file name and add a Kconfig symbol to control the build. BUG=b:131682806 Change-Id: I2f7442dd78bced7f69b0416a8cd751291f82151f Signed-off-by: Marshall Dawson Reviewed-on: https://review.coreboot.org/c/coreboot/+/32654 Reviewed-by: Furquan Shaikh Reviewed-by: Richard Spiegel Tested-by: build bot (Jenkins) --- src/soc/amd/common/block/acpi/Kconfig | 6 ++++++ src/soc/amd/common/block/acpi/Makefile.inc | 4 ++-- src/soc/amd/common/block/acpi/acpi.c | 33 ++++++++++++++++++++++++++++++ src/soc/amd/common/block/acpi/halt.c | 33 ------------------------------ src/soc/amd/stoneyridge/Kconfig | 1 + 5 files changed, 42 insertions(+), 35 deletions(-) create mode 100644 src/soc/amd/common/block/acpi/Kconfig create mode 100644 src/soc/amd/common/block/acpi/acpi.c delete mode 100644 src/soc/amd/common/block/acpi/halt.c (limited to 'src') diff --git a/src/soc/amd/common/block/acpi/Kconfig b/src/soc/amd/common/block/acpi/Kconfig new file mode 100644 index 0000000000..2b87f186fb --- /dev/null +++ b/src/soc/amd/common/block/acpi/Kconfig @@ -0,0 +1,6 @@ +config SOC_AMD_COMMON_BLOCK_ACPI + bool + depends on SOC_AMD_COMMON_BLOCK_ACPIMMIO + default n + help + Select this option to use the AcpiMmio ACPI registers. diff --git a/src/soc/amd/common/block/acpi/Makefile.inc b/src/soc/amd/common/block/acpi/Makefile.inc index b67eadab8f..1320849fc3 100644 --- a/src/soc/amd/common/block/acpi/Makefile.inc +++ b/src/soc/amd/common/block/acpi/Makefile.inc @@ -1,2 +1,2 @@ -ramstage-y += halt.c -smm-y += halt.c +ramstage-$(CONFIG_SOC_AMD_COMMON_BLOCK_ACPI) += acpi.c +smm-$(CONFIG_SOC_AMD_COMMON_BLOCK_ACPI) += acpi.c diff --git a/src/soc/amd/common/block/acpi/acpi.c b/src/soc/amd/common/block/acpi/acpi.c new file mode 100644 index 0000000000..200b3c12f5 --- /dev/null +++ b/src/soc/amd/common/block/acpi/acpi.c @@ -0,0 +1,33 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2018 Google Inc. + * + * 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 +#include +#include + +void poweroff(void) +{ + acpi_write32(MMIO_ACPI_PM1_CNT_BLK, + (SLP_TYP_S5 << SLP_TYP_SHIFT) | SLP_EN); + + /* + * Setting SLP_TYP_S5 in PM1 triggers SLP_SMI, which is handled by SMM + * to transition to S5 state. If halt is called in SMM, then it prevents + * the SMI handler from being triggered and system never enters S5. + */ + if (!ENV_SMM) + halt(); +} diff --git a/src/soc/amd/common/block/acpi/halt.c b/src/soc/amd/common/block/acpi/halt.c deleted file mode 100644 index 200b3c12f5..0000000000 --- a/src/soc/amd/common/block/acpi/halt.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2018 Google Inc. - * - * 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 -#include -#include - -void poweroff(void) -{ - acpi_write32(MMIO_ACPI_PM1_CNT_BLK, - (SLP_TYP_S5 << SLP_TYP_SHIFT) | SLP_EN); - - /* - * Setting SLP_TYP_S5 in PM1 triggers SLP_SMI, which is handled by SMM - * to transition to S5 state. If halt is called in SMM, then it prevents - * the SMI handler from being triggered and system never enters S5. - */ - if (!ENV_SMM) - halt(); -} diff --git a/src/soc/amd/stoneyridge/Kconfig b/src/soc/amd/stoneyridge/Kconfig index ef7a7ae33f..ed9aaf05ba 100644 --- a/src/soc/amd/stoneyridge/Kconfig +++ b/src/soc/amd/stoneyridge/Kconfig @@ -48,6 +48,7 @@ config CPU_SPECIFIC_OPTIONS select SOC_AMD_COMMON_BLOCK select SOC_AMD_COMMON_BLOCK_ACPIMMIO select SOC_AMD_COMMON_BLOCK_BANKED_GPIOS + select SOC_AMD_COMMON_BLOCK_ACPI select SOC_AMD_COMMON_BLOCK_LPC select SOC_AMD_COMMON_BLOCK_PCI select SOC_AMD_COMMON_BLOCK_PI -- cgit v1.2.3