CBMEM: Backup top_of_ram instead of cbmem_toc

AMD northbridges have a complex way to resolve top_of_ram.
Once it is resolved, it is stored in NVRAM to be used on resume.

TODO: Redesign these get_top_of_ram() functions from scratch.

Change-Id: I3cceb7e9b8b07620dacf138e99f98dc818c65341
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/3557
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@google.com>
This commit is contained in:
Kyösti Mälkki
2013-09-04 13:26:11 +03:00
parent c04afd6433
commit bc90e15d3f
15 changed files with 55 additions and 43 deletions

View File

@@ -40,9 +40,9 @@ int acpi_get_sleep_type(void)
}
#endif
void set_cbmem_toc(struct cbmem_entry *toc)
void backup_top_of_ram(uint64_t ramtop)
{
u32 dword = (u32) toc;
u32 dword = (u32) ramtop;
int nvram_pos = 0xf8, i; /* temp */
/* printk(BIOS_DEBUG, "dword=%x\n", dword); */
for (i = 0; i<4; i++) {
@@ -132,19 +132,22 @@ void hudson_enable(device_t dev)
}
}
struct cbmem_entry *get_cbmem_toc(void)
#if CONFIG_HAVE_ACPI_RESUME
unsigned long get_top_of_ram(void)
{
uint32_t xdata = 0;
int xnvram_pos = 0xf8, xi;
if (acpi_get_sleep_type() != 3)
return 0;
for (xi = 0; xi<4; xi++) {
outb(xnvram_pos, BIOSRAM_INDEX);
xdata &= ~(0xff << (xi * 8));
xdata |= inb(BIOSRAM_DATA) << (xi *8);
xnvram_pos++;
}
return (struct cbmem_entry *) xdata;
return (unsigned long) xdata;
}
#endif
struct chip_operations southbridge_amd_agesa_hudson_ops = {
CHIP_NAME("ATI HUDSON")