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:
@@ -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")
|
||||
|
Reference in New Issue
Block a user