ACPI: Allocate S3 resume backup in CBMEM earlier

These allocations are not really part of write_tables() and the move
opens possibilities to use CBMEM instead of SPI Flash to restore some
parts of system state after S3 resume.

Change-Id: I0c36bcee3f1da525af077fc1d18677ee85097e4d
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/7097
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@google.com>
This commit is contained in:
Kyösti Mälkki 2014-10-16 20:58:47 +03:00
parent 1729cd8574
commit 7b14f08f45
4 changed files with 20 additions and 10 deletions

View File

@ -878,6 +878,23 @@ void acpi_fail_wakeup(void)
acpi_slp_type = 0; acpi_slp_type = 0;
} }
void acpi_prepare_resume_backup(void)
{
if (!acpi_s3_resume_allowed())
return;
/* Let's prepare the ACPI S3 Resume area now already, so we can rely on
* it being there during reboot time. We don't need the pointer, nor
* the result right now. If it fails, ACPI resume will be disabled.
*/
if (HIGH_MEMORY_SAVE)
cbmem_add(CBMEM_ID_RESUME, HIGH_MEMORY_SAVE);
if (HIGH_MEMORY_SCRATCH)
cbmem_add(CBMEM_ID_RESUME_SCRATCH, HIGH_MEMORY_SCRATCH);
}
static acpi_rsdp_t *valid_rsdp(acpi_rsdp_t *rsdp) static acpi_rsdp_t *valid_rsdp(acpi_rsdp_t *rsdp)
{ {
if (strncmp((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) if (strncmp((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0)

View File

@ -196,16 +196,6 @@ void write_tables(void)
post_code(0x9e); post_code(0x9e);
/* Let's prepare the ACPI S3 Resume area now already, so we can rely on
* it begin there during reboot time. We don't need the pointer, nor
* the result right now. If it fails, ACPI resume will be disabled.
*/
if (HIGH_MEMORY_SAVE && acpi_s3_resume_allowed())
cbmem_add(CBMEM_ID_RESUME, HIGH_MEMORY_SAVE);
if (HIGH_MEMORY_SCRATCH && acpi_s3_resume_allowed())
cbmem_add(CBMEM_ID_RESUME_SCRATCH, HIGH_MEMORY_SCRATCH);
#define MAX_COREBOOT_TABLE_SIZE (32 * 1024) #define MAX_COREBOOT_TABLE_SIZE (32 * 1024)
post_code(0x9d); post_code(0x9d);

View File

@ -569,6 +569,7 @@ int acpi_is_wakeup_early(void);
void acpi_fail_wakeup(void); void acpi_fail_wakeup(void);
void acpi_resume(void *wake_vec); void acpi_resume(void *wake_vec);
void acpi_prepare_resume_backup(void);
void __attribute__((weak)) mainboard_suspend_resume(void); void __attribute__((weak)) mainboard_suspend_resume(void);
void *acpi_find_wakeup_vector(void); void *acpi_find_wakeup_vector(void);
void *acpi_get_wakeup_rsdp(void); void *acpi_get_wakeup_rsdp(void);

View File

@ -197,6 +197,8 @@ static boot_state_t bs_os_resume_check(void *arg)
boot_states[BS_OS_RESUME].arg = wake_vector; boot_states[BS_OS_RESUME].arg = wake_vector;
return BS_OS_RESUME; return BS_OS_RESUME;
} }
acpi_prepare_resume_backup();
#endif #endif
timestamp_add_now(TS_CBMEM_POST); timestamp_add_now(TS_CBMEM_POST);