mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
These changes implement a fixed Geode LX Cache As Ram that allows a
return from disable_car. - Move the cache as ram memory to 0x80000 instead of 0xc8000, as the C range is really tricky to get right :-) - Modify the geode disable_car to ensure the cache is flushed to ram on the wbinvd. With these changes, I get a payload loaded. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@546 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
5638456d16
commit
888063b4af
2 changed files with 15 additions and 2 deletions
|
@ -22,6 +22,7 @@
|
|||
#include <lib.h>
|
||||
#include <msr.h>
|
||||
#include <amd_geodelx.h>
|
||||
#include <console.h>
|
||||
|
||||
static const struct msrinit msr_table[] = {
|
||||
/* Setup access to cache under 1MB. */
|
||||
|
@ -59,5 +60,12 @@ void disable_car(void)
|
|||
for (i = 0; i < ARRAY_SIZE(msr_table); i++)
|
||||
wrmsr(msr_table[i].msrnum, msr_table[i].msr);
|
||||
|
||||
__asm__("wbinvd\n");
|
||||
/* OK, here is the theory: we should be able to copy
|
||||
* the data back over itself, and the wbinvd should then
|
||||
* flush to memory. Let's see.
|
||||
*/
|
||||
__asm__ __volatile__("cld; rep movsl" ::"D" (DCACHE_RAM_BASE), "S" (DCACHE_RAM_BASE), "c" (DCACHE_RAM_SIZE/4): "memory");
|
||||
__asm__ __volatile__ ("wbinvd\n");
|
||||
banner(BIOS_DEBUG, "Disable_car: done wbinvd");
|
||||
banner(BIOS_DEBUG, "disable_car: done");
|
||||
}
|
||||
|
|
|
@ -566,7 +566,12 @@
|
|||
|
||||
/* ------------------------ */
|
||||
#define DCACHE_RAM_SIZE 0x08000
|
||||
#define DCACHE_RAM_BASE 0xc8000
|
||||
#define DCACHE_RAM_BASE 0x80000
|
||||
/* This is where the DCache will be mapped and be used as stack. It would be
|
||||
* cool if it was the same base as LinuxBIOS normal stack.
|
||||
*/
|
||||
#define LX_STACK_BASE DCACHE_RAM_BASE
|
||||
#define LX_STACK_END LX_STACK_BASE + (DCACHE_RAM_SIZE - 4)
|
||||
/* This is where the DCache will be mapped and be used as stack. It would be
|
||||
* cool if it was the same base as LinuxBIOS normal stack.
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue