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:
parent
1729cd8574
commit
7b14f08f45
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue