[LinuxBIOS] [BUILDROM] Add support for the AMD SimNow (TM) simulator

Myles Watson myles at pel.cs.byu.edu
Fri Nov 9 20:46:41 CET 2007


On 11/9/07, Jordan Crouse <jordan.crouse at 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 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

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;
>
>




More information about the coreboot mailing list