2 #include "cpu/amd/car/disable_cache_as_ram.c"
4 #include "cpu/amd/car/clear_1m_ram.c"
6 static inline void print_debug_pcar(const char *strval, uint32_t val)
9 printk_debug("%s%08x\r\n", strval, val);
11 print_debug(strval); print_debug_hex32(val); print_debug("\r\n");
17 static void post_cache_as_ram(unsigned cpu_reset)
23 /* Check value of esp to verify if we have enough rom for stack in Cache as RAM */
29 print_debug_pcar("v_esp=", v_esp);
33 print_debug_pcar("cpu_reset = ",cpu_reset);
36 print_debug("Clearing initial memory region: ");
38 print_debug("No cache as ram now - ");
40 /* store cpu_reset to ebx */
46 disable_cache_as_ram();
48 if(cpu_reset==0) { // cpu_reset don't need to clear it
54 for(i=0;i<0x800000;i++) {
60 /* set new esp */ /* before _RAMBASE */
63 ::"a"( (DCACHE_RAM_BASE + DCACHE_RAM_SIZE)- _RAMBASE )
67 unsigned new_cpu_reset;
69 /* get back cpu_reset from ebx */
75 print_debug("Use Ram as Stack now - "); /* but We can not go back any more, we lost old stack data in cache as ram*/
77 if(new_cpu_reset==0) {
78 print_debug("done\r\n");
84 print_debug_pcar("new_cpu_reset = ", new_cpu_reset);
87 /*copy and execute linuxbios_ram */
88 copy_and_run(new_cpu_reset);
89 /* We will not return */
92 print_debug("should not be here -\r\n");