On 11/9/07, Jordan Crouse jordan.crouse@amd.com wrote:
By popular request, this is a patch to buildrom adding support for the AMD SimNow simulator. Basically, it patches LinuxBIOS to work around a few SimNow related quirks that are currently in the public version of SimNow. The quirks themselves have been reported, and hopefully will be fixed in future releases.
What is SimNow, and why does it rock, you might ask? SimNow (TM) is a processor simulator that we have developed at AMD. Its a great way to simulate the processor / chipset boot process and develop LinuxBIOS and payloads, because it features an integrated debugger, and its easy to fix when you brick the thing (just hit reset). There is a public version here:
http://developer.amd.com/simnow.jsp
For the more commercial customers out there, there is also a NDA version that has support for more processors (contact your friendly AMD representative for more information). I'll put this information on the wiki as well, for posterity.
Myles and other SimNow users - let me know if this works.
It doesn't work for me yet. 1. It still resets (I comment out the actual soft reset, not the needs_reset calculation when I do it) 2. You modify generic-linuxbios.mk instead of a specific one for the target (see my earlier patch) 3. I'd like it if it depended on either serengeti-cheetah config option (also in the earlier patch)
I also commented inline with the patch if it's more clear.
I haven't run into the other issues (beside the reset), so I don't know how to test them.
Thanks, Myles
Thanks, Jordan
[BUILDROM] Add support for the AMD SimNow (TM) simulator
Add a build option and a patch against LinuxBIOS to allow the Serengeti-Cheetah platform to come up on its emulated self in the SimNow simulator.
Signed-off-by: Jordan Crouse jordan.crouse@amd.com
Index: buildrom-devel/config/platforms/Config.in
--- buildrom-devel.orig/config/platforms/Config.in +++ buildrom-devel/config/platforms/Config.in @@ -81,4 +81,13 @@ config PLATFORM_SERENGETI_CHEETAH depends VENDOR_AMD select PLATFORM endchoice
+config SIMNOW
bool "Build for the AMD SimNow (TM) emulator"
depends PLATFORM_SERENGETI_CHEETAH
How about: + depends PLATFORM_SERENGETI_CHEETAH | PLATFORM_SERENGETI_CHEETAH_64 To let mine use the same option
default n
help
Say 'y' here to patch the build to work on an
emulated platform in the AMD SimNow (TM) simulator
endmenu Index: buildrom-devel/packages/linuxbios/generic-linuxbios.mk
Should modify specific linuxbios.mk file
===================================================================
--- buildrom-devel.orig/packages/linuxbios/generic-linuxbios.mk +++ buildrom-devel/packages/linuxbios/generic-linuxbios.mk @@ -21,6 +21,10 @@ endif
LINUXBIOS_PATCHES += $(PACKAGE_DIR)/linuxbios/patches/s-c-buildrom-payload.patch
+ifeq ($(CONFIG_SIMNOW),y) +LINUXBIOS_PATCHES += $(PACKAGE_DIR)/linuxbios/patches/simnow.patch +endif
include $(PACKAGE_DIR)/linuxbios/linuxbios.inc
$(SOURCE_DIR)/$(LINUXBIOS_TARBALL): Index: buildrom-devel/packages/linuxbios/patches/simnow.patch =================================================================== --- /dev/null +++ buildrom-devel/packages/linuxbios/patches/simnow.patch @@ -0,0 +1,59 @@ +Index: svn/src/northbridge/amd/amdk8/raminit_f_dqs.c +=================================================================== +--- svn.orig/src/northbridge/amd/amdk8/raminit_f_dqs.c ++++ svn/src/northbridge/amd/amdk8/raminit_f_dqs.c +@@ -1987,6 +1987,16 @@ static inline void train_ram_on_node(uns
struct sys_info *sysinfox = ((CONFIG_LB_MEM_TOPK<<10) - DCACHE_RAM_GLOBAL_VAR_SIZE);
wait_till_sysinfo_in_ram(); // use pci to get it
++ /* In SimNow, when we get to this point, CAR is disabled, so ++ * our stack pointer points to never-never land, andjust it. ++ */ ++ ++ __asm__ volatile ( ++ "subl %0, %%ebp\n\t" ++ "subl %0, %%esp\n\t" ++ ::"a"( (DCACHE_RAM_BASE + DCACHE_RAM_SIZE)- (CONFIG_LB_MEM_TOPK<<10) ) ++ ); ++
if(sysinfox->mem_trained[nodeid] == 0x80) {
#if 0
sysinfo->tom_k = sysinfox->tom_k;
+Index: svn/src/mainboard/amd/serengeti_cheetah/Options.lb +=================================================================== +--- svn.orig/src/mainboard/amd/serengeti_cheetah/Options.lb ++++ svn/src/mainboard/amd/serengeti_cheetah/Options.lb +@@ -218,7 +218,7 @@ default CONFIG_USE_INIT=0
- ##
- ## for rev F training on AP purpose
- ##
+-default CONFIG_AP_CODE_IN_CAR=1 ++default CONFIG_AP_CODE_IN_CAR=0
- default MEM_TRAIN_SEQ=1
- default WAIT_BEFORE_CPUS_INIT=1
+Index: svn/src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c +=================================================================== +--- svn.orig/src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c ++++ svn/src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c +@@ -338,16 +338,18 @@ void real_main(unsigned long bist, unsig
}
- #endif
+-#if 1
needs_reset = optimize_link_coherent_ht();
++#if 0 ++ /* On SimNow, this causes issues - remove it for now */
needs_reset |= optimize_link_incoherent_ht(sysinfo);
++#endif
// fidvid change will issue one LDTSTOP and the HT change will be effective too
if (needs_reset) {
print_info("ht reset -\r\n");
This is the line I comment out
soft_reset_x(sysinfo->sbbusn, sysinfo->sbdn);
}
+-#endif ++
allow_all_aps_stop(bsp_apicid);
//It's the time to set ctrl in sysinfo now;