[LinuxBIOS] [BUILDROM] Add support for the AMD SimNow (TM) simulator
Jordan Crouse
jordan.crouse at amd.com
Fri Nov 9 19:46:17 CET 2007
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.
Thanks,
Jordan
-------------- next part --------------
[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 at 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
+ 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
===================================================================
--- 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");
+ soft_reset_x(sysinfo->sbbusn, sysinfo->sbdn);
+ }
+-#endif
++
+ allow_all_aps_stop(bsp_apicid);
+
+ //It's the time to set ctrl in sysinfo now;
More information about the coreboot
mailing list