arch/x86: Declare permanent_smi_handler()
Advertising SMI triggers in FADT is only valid if we exit with SMI installed. There has been some experiments to delay SMM installation to OS, yet there are new platforms that allow some configuration access only to be done inside SMM. Splitting static HAVE_SMI_HANDLER variable helps to manage cases where SMM might be both installed and cleared prior to entering payload. Change-Id: Iad92c4a180524e15199633693446a087787ad3a2 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/41910 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
c328a680de
commit
0a9e72e87e
|
@ -1019,6 +1019,13 @@ int acpi_get_sleep_type(void);
|
|||
/* Read and clear GPE status */
|
||||
int acpi_get_gpe(int gpe);
|
||||
|
||||
/* Once we enter payload, is SMI handler installed and capable of
|
||||
responding to APM_CNT Advanced Power Management Control commands. */
|
||||
static inline int permanent_smi_handler(void)
|
||||
{
|
||||
return CONFIG(HAVE_SMI_HANDLER);
|
||||
}
|
||||
|
||||
static inline int acpi_s3_resume_allowed(void)
|
||||
{
|
||||
return CONFIG(HAVE_ACPI_RESUME);
|
||||
|
|
|
@ -38,7 +38,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = ACPI_ENABLE;
|
||||
fadt->acpi_disable = ACPI_DISABLE;
|
||||
|
|
|
@ -43,7 +43,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = PM_MOBILE;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
/* Do not advertise SMI even if installed. */
|
||||
fadt->smi_cmd = 0;
|
||||
fadt->acpi_enable = 0;
|
||||
|
|
|
@ -26,7 +26,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = PM_MOBILE;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -26,7 +26,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = PM_MOBILE;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -26,7 +26,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = PM_MOBILE;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -107,7 +107,7 @@ void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = FADT_PM_PROFILE;
|
||||
fadt->sci_int = 9; /* IRQ 09 - ACPI SCI */
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -79,7 +79,7 @@ void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = FADT_PM_PROFILE;
|
||||
fadt->sci_int = 9; /* IRQ 09 - ACPI SCI */
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -129,7 +129,7 @@ void acpi_fill_in_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -133,7 +133,7 @@ void acpi_fill_in_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -185,7 +185,7 @@ void acpi_fill_in_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -101,7 +101,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -226,7 +226,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -148,7 +148,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->x_gpe1_blk.space_id = 1;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -340,7 +340,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
fadt->sci_int = acpi_sci_irq();
|
||||
|
||||
/* TODO: enabled SMM mode switch when SMM handlers are set up. */
|
||||
if (0 && CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (0 && permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -57,7 +57,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = FADT_PM_PROFILE;
|
||||
fadt->sci_int = 9; /* HUDSON - IRQ 09 - ACPI SCI */
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
|
||||
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
|
||||
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
|
||||
|
|
|
@ -49,7 +49,7 @@ void acpi_create_fadt(acpi_fadt_t * fadt, acpi_facs_t * facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = FADT_PM_PROFILE;
|
||||
fadt->sci_int = 9; /* HUDSON - IRQ 09 - ACPI SCI */
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = ACPI_SMI_CTL_PORT;
|
||||
fadt->acpi_enable = ACPI_SMI_CMD_ENABLE;
|
||||
fadt->acpi_disable = ACPI_SMI_CMD_DISABLE;
|
||||
|
|
|
@ -698,7 +698,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -36,7 +36,7 @@ void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt)
|
|||
fadt->preferred_pm_profile = 0; /* unspecified */
|
||||
fadt->sci_int = 9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
/* TODO: SMI handler is not implemented. */
|
||||
fadt->smi_cmd = 0x00;
|
||||
}
|
||||
|
|
|
@ -522,7 +522,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
fadt->reserved = 0;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -533,7 +533,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
fadt->reserved = 0;
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -592,7 +592,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
|
@ -741,7 +741,7 @@ void acpi_fill_fadt(acpi_fadt_t *fadt)
|
|||
|
||||
fadt->sci_int = 0x9;
|
||||
|
||||
if (CONFIG(HAVE_SMI_HANDLER)) {
|
||||
if (permanent_smi_handler()) {
|
||||
fadt->smi_cmd = APM_CNT;
|
||||
fadt->acpi_enable = APM_CNT_ACPI_ENABLE;
|
||||
fadt->acpi_disable = APM_CNT_ACPI_DISABLE;
|
||||
|
|
Loading…
Reference in New Issue