[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