-#ifdef __PRE_RAM__
- cbmem_toc = (struct cbmem_entry *)(get_top_of_ram() - HIGH_MEMORY_SIZE);
-#else
- cbmem_toc = bss_cbmem_toc;
-#endif
-
+ void *p;
+
+ /*
+ * This could be a restart, check if the section is there already. It
+ * is remotely possible that the dram contents persisted over the
+ * bootloader upgrade AND the same section now needs more room, but
+ * this is quite a remote possibility and it is ignored here.
+ */
+ p = cbmem_find(id);
+ if (p) {
+ printk(BIOS_NOTICE,
+ "CBMEM section %x: using existing location at %p.\n",
+ id, p);
+ return p;
+ }
+
+ cbmem_toc = get_cbmem_toc();
+