janitor task: unify and cleanup naming.
authorStefan Reinauer <stepan@coresystems.de>
Mon, 8 Feb 2010 12:20:50 +0000 (12:20 +0000)
committerStefan Reinauer <stepan@openbios.org>
Mon, 8 Feb 2010 12:20:50 +0000 (12:20 +0000)
cache_as_ram_auto.c and auto.c are both called "romstage.c" now.

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5092 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

303 files changed:
src/arch/i386/lib/console_print.c
src/cpu/amd/dualcore/amd_sibling.c
src/cpu/amd/model_10xxx/init_cpus.c
src/cpu/amd/sc520/raminit.c
src/mainboard/Makefile.k8_CAR.inc
src/mainboard/Makefile.k8_ck804.inc
src/mainboard/Makefile.romccboard.inc
src/mainboard/a-trend/atc-6220/auto.c [deleted file]
src/mainboard/a-trend/atc-6220/romstage.c [new file with mode: 0644]
src/mainboard/a-trend/atc-6240/auto.c [deleted file]
src/mainboard/a-trend/atc-6240/romstage.c [new file with mode: 0644]
src/mainboard/abit/be6-ii_v2_0/auto.c [deleted file]
src/mainboard/abit/be6-ii_v2_0/romstage.c [new file with mode: 0644]
src/mainboard/advantech/pcm-5820/auto.c [deleted file]
src/mainboard/advantech/pcm-5820/romstage.c [new file with mode: 0644]
src/mainboard/amd/db800/Makefile.inc
src/mainboard/amd/db800/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/db800/romstage.c [new file with mode: 0644]
src/mainboard/amd/dbm690t/Makefile.inc
src/mainboard/amd/dbm690t/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/dbm690t/romstage.c [new file with mode: 0644]
src/mainboard/amd/norwich/Makefile.inc
src/mainboard/amd/norwich/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/norwich/romstage.c [new file with mode: 0644]
src/mainboard/amd/pistachio/Makefile.inc
src/mainboard/amd/pistachio/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/pistachio/romstage.c [new file with mode: 0644]
src/mainboard/amd/rumba/auto.c [deleted file]
src/mainboard/amd/rumba/romstage.c [new file with mode: 0644]
src/mainboard/amd/serengeti_cheetah/Makefile.inc
src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/serengeti_cheetah/romstage.c [new file with mode: 0644]
src/mainboard/amd/serengeti_cheetah_fam10/Makefile.inc
src/mainboard/amd/serengeti_cheetah_fam10/cache_as_ram_auto.c [deleted file]
src/mainboard/amd/serengeti_cheetah_fam10/romstage.c [new file with mode: 0644]
src/mainboard/amd/serengeti_cheetah_fam10/spd_addr.h
src/mainboard/arima/hdama/cache_as_ram_auto.c [deleted file]
src/mainboard/arima/hdama/romstage.c [new file with mode: 0644]
src/mainboard/artecgroup/dbe61/Makefile.inc
src/mainboard/artecgroup/dbe61/cache_as_ram_auto.c [deleted file]
src/mainboard/artecgroup/dbe61/romstage.c [new file with mode: 0644]
src/mainboard/asi/mb_5blgp/auto.c [deleted file]
src/mainboard/asi/mb_5blgp/romstage.c [new file with mode: 0644]
src/mainboard/asi/mb_5blmp/auto.c [deleted file]
src/mainboard/asi/mb_5blmp/romstage.c [new file with mode: 0644]
src/mainboard/asus/a8n_e/Makefile.inc
src/mainboard/asus/a8n_e/cache_as_ram_auto.c [deleted file]
src/mainboard/asus/a8n_e/romstage.c [new file with mode: 0644]
src/mainboard/asus/a8v-e_se/Makefile.inc
src/mainboard/asus/a8v-e_se/cache_as_ram_auto.c [deleted file]
src/mainboard/asus/a8v-e_se/romstage.c [new file with mode: 0644]
src/mainboard/asus/m2v-mx_se/Makefile.inc
src/mainboard/asus/m2v-mx_se/cache_as_ram_auto.c [deleted file]
src/mainboard/asus/m2v-mx_se/romstage.c [new file with mode: 0644]
src/mainboard/asus/mew-am/auto.c [deleted file]
src/mainboard/asus/mew-am/romstage.c [new file with mode: 0644]
src/mainboard/asus/mew-vm/auto.c [deleted file]
src/mainboard/asus/mew-vm/romstage.c [new file with mode: 0644]
src/mainboard/asus/p2b-d/auto.c [deleted file]
src/mainboard/asus/p2b-d/romstage.c [new file with mode: 0644]
src/mainboard/asus/p2b-ds/auto.c [deleted file]
src/mainboard/asus/p2b-ds/romstage.c [new file with mode: 0644]
src/mainboard/asus/p2b-f/auto.c [deleted file]
src/mainboard/asus/p2b-f/romstage.c [new file with mode: 0644]
src/mainboard/asus/p2b/auto.c [deleted file]
src/mainboard/asus/p2b/romstage.c [new file with mode: 0644]
src/mainboard/asus/p3b-f/auto.c [deleted file]
src/mainboard/asus/p3b-f/romstage.c [new file with mode: 0644]
src/mainboard/axus/tc320/auto.c [deleted file]
src/mainboard/axus/tc320/romstage.c [new file with mode: 0644]
src/mainboard/azza/pt-6ibd/auto.c [deleted file]
src/mainboard/azza/pt-6ibd/romstage.c [new file with mode: 0644]
src/mainboard/bcom/winnet100/auto.c [deleted file]
src/mainboard/bcom/winnet100/romstage.c [new file with mode: 0644]
src/mainboard/bcom/winnetp680/Makefile.inc
src/mainboard/bcom/winnetp680/auto.c [deleted file]
src/mainboard/bcom/winnetp680/romstage.c [new file with mode: 0644]
src/mainboard/biostar/m6tba/auto.c [deleted file]
src/mainboard/biostar/m6tba/romstage.c [new file with mode: 0644]
src/mainboard/broadcom/blast/cache_as_ram_auto.c [deleted file]
src/mainboard/broadcom/blast/romstage.c [new file with mode: 0644]
src/mainboard/compaq/deskpro_en_sff_p600/auto.c [deleted file]
src/mainboard/compaq/deskpro_en_sff_p600/romstage.c [new file with mode: 0644]
src/mainboard/dell/s1850/auto.c [deleted file]
src/mainboard/dell/s1850/romstage.c [new file with mode: 0644]
src/mainboard/digitallogic/adl855pc/auto.c [deleted file]
src/mainboard/digitallogic/adl855pc/romstage.c [new file with mode: 0644]
src/mainboard/digitallogic/msm586seg/auto.c [deleted file]
src/mainboard/digitallogic/msm586seg/romstage.c [new file with mode: 0644]
src/mainboard/digitallogic/msm800sev/Makefile.inc
src/mainboard/digitallogic/msm800sev/auto.c [deleted file]
src/mainboard/digitallogic/msm800sev/cache_as_ram_auto.c [deleted file]
src/mainboard/digitallogic/msm800sev/romstage.c [new file with mode: 0644]
src/mainboard/eaglelion/5bcm/auto.c [deleted file]
src/mainboard/eaglelion/5bcm/romstage.c [new file with mode: 0644]
src/mainboard/emulation/qemu-x86/auto.c [deleted file]
src/mainboard/emulation/qemu-x86/romstage.c [new file with mode: 0644]
src/mainboard/gigabyte/ga-6bxc/auto.c [deleted file]
src/mainboard/gigabyte/ga-6bxc/romstage.c [new file with mode: 0644]
src/mainboard/gigabyte/ga_2761gxdk/Makefile.inc
src/mainboard/gigabyte/ga_2761gxdk/cache_as_ram_auto.c [deleted file]
src/mainboard/gigabyte/ga_2761gxdk/romstage.c [new file with mode: 0644]
src/mainboard/gigabyte/m57sli/Makefile.inc
src/mainboard/gigabyte/m57sli/cache_as_ram_auto.c [deleted file]
src/mainboard/gigabyte/m57sli/romstage.c [new file with mode: 0644]
src/mainboard/hp/dl145_g3/cache_as_ram_auto.c [deleted file]
src/mainboard/hp/dl145_g3/romstage.c [new file with mode: 0644]
src/mainboard/hp/e_vectra_p2706t/auto.c [deleted file]
src/mainboard/hp/e_vectra_p2706t/romstage.c [new file with mode: 0644]
src/mainboard/ibm/e325/cache_as_ram_auto.c [deleted file]
src/mainboard/ibm/e325/romstage.c [new file with mode: 0644]
src/mainboard/ibm/e326/cache_as_ram_auto.c [deleted file]
src/mainboard/ibm/e326/romstage.c [new file with mode: 0644]
src/mainboard/iei/juki-511p/auto.c [deleted file]
src/mainboard/iei/juki-511p/romstage.c [new file with mode: 0644]
src/mainboard/iei/nova4899r/auto.c [deleted file]
src/mainboard/iei/nova4899r/romstage.c [new file with mode: 0644]
src/mainboard/iei/pcisa-lx-800-r10/Makefile.inc
src/mainboard/iei/pcisa-lx-800-r10/cache_as_ram_auto.c [deleted file]
src/mainboard/iei/pcisa-lx-800-r10/romstage.c [new file with mode: 0644]
src/mainboard/intel/d945gclf/Makefile.inc
src/mainboard/intel/d945gclf/auto.c [deleted file]
src/mainboard/intel/d945gclf/romstage.c [new file with mode: 0644]
src/mainboard/intel/eagleheights/Makefile.inc
src/mainboard/intel/eagleheights/auto.c [deleted file]
src/mainboard/intel/eagleheights/romstage.c [new file with mode: 0644]
src/mainboard/intel/jarrell/auto.c [deleted file]
src/mainboard/intel/jarrell/romstage.c [new file with mode: 0644]
src/mainboard/intel/mtarvon/auto.c [deleted file]
src/mainboard/intel/mtarvon/romstage.c [new file with mode: 0644]
src/mainboard/intel/truxton/auto.c [deleted file]
src/mainboard/intel/truxton/romstage.c [new file with mode: 0644]
src/mainboard/intel/xe7501devkit/auto.c [deleted file]
src/mainboard/intel/xe7501devkit/romstage.c [new file with mode: 0644]
src/mainboard/iwill/dk8_htx/Makefile.inc
src/mainboard/iwill/dk8_htx/cache_as_ram_auto.c [deleted file]
src/mainboard/iwill/dk8_htx/romstage.c [new file with mode: 0644]
src/mainboard/iwill/dk8s2/cache_as_ram_auto.c [deleted file]
src/mainboard/iwill/dk8s2/romstage.c [new file with mode: 0644]
src/mainboard/iwill/dk8x/cache_as_ram_auto.c [deleted file]
src/mainboard/iwill/dk8x/romstage.c [new file with mode: 0644]
src/mainboard/jetway/j7f24/Makefile.inc
src/mainboard/jetway/j7f24/auto.c [deleted file]
src/mainboard/jetway/j7f24/romstage.c [new file with mode: 0644]
src/mainboard/kontron/986lcd-m/Makefile.inc
src/mainboard/kontron/986lcd-m/auto.c [deleted file]
src/mainboard/kontron/986lcd-m/romstage.c [new file with mode: 0644]
src/mainboard/kontron/kt690/Makefile.inc
src/mainboard/kontron/kt690/cache_as_ram_auto.c [deleted file]
src/mainboard/kontron/kt690/romstage.c [new file with mode: 0644]
src/mainboard/lippert/frontrunner/auto.c [deleted file]
src/mainboard/lippert/frontrunner/romstage.c [new file with mode: 0644]
src/mainboard/lippert/roadrunner-lx/Makefile.inc
src/mainboard/lippert/roadrunner-lx/cache_as_ram_auto.c [deleted file]
src/mainboard/lippert/roadrunner-lx/romstage.c [new file with mode: 0644]
src/mainboard/lippert/spacerunner-lx/Makefile.inc
src/mainboard/lippert/spacerunner-lx/cache_as_ram_auto.c [deleted file]
src/mainboard/lippert/spacerunner-lx/romstage.c [new file with mode: 0644]
src/mainboard/mitac/6513wu/auto.c [deleted file]
src/mainboard/mitac/6513wu/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms6119/auto.c [deleted file]
src/mainboard/msi/ms6119/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms6147/auto.c [deleted file]
src/mainboard/msi/ms6147/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms6156/auto.c [deleted file]
src/mainboard/msi/ms6156/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms6178/auto.c [deleted file]
src/mainboard/msi/ms6178/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms7135/cache_as_ram_auto.c [deleted file]
src/mainboard/msi/ms7135/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms7260/Makefile.inc
src/mainboard/msi/ms7260/cache_as_ram_auto.c [deleted file]
src/mainboard/msi/ms7260/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms9185/cache_as_ram_auto.c [deleted file]
src/mainboard/msi/ms9185/romstage.c [new file with mode: 0644]
src/mainboard/msi/ms9282/Makefile.inc
src/mainboard/msi/ms9282/cache_as_ram_auto.c [deleted file]
src/mainboard/msi/ms9282/romstage.c [new file with mode: 0644]
src/mainboard/nec/powermate2000/auto.c [deleted file]
src/mainboard/nec/powermate2000/romstage.c [new file with mode: 0644]
src/mainboard/newisys/khepri/cache_as_ram_auto.c [deleted file]
src/mainboard/newisys/khepri/romstage.c [new file with mode: 0644]
src/mainboard/nvidia/l1_2pvv/Makefile.inc
src/mainboard/nvidia/l1_2pvv/cache_as_ram_auto.c [deleted file]
src/mainboard/nvidia/l1_2pvv/romstage.c [new file with mode: 0644]
src/mainboard/olpc/btest/auto.c [deleted file]
src/mainboard/olpc/btest/romstage.c [new file with mode: 0644]
src/mainboard/olpc/rev_a/auto.c [deleted file]
src/mainboard/olpc/rev_a/romstage.c [new file with mode: 0644]
src/mainboard/pcengines/alix1c/Makefile.inc
src/mainboard/pcengines/alix1c/cache_as_ram_auto.c [deleted file]
src/mainboard/pcengines/alix1c/romstage.c [new file with mode: 0644]
src/mainboard/rca/rm4100/auto.c [deleted file]
src/mainboard/rca/rm4100/romstage.c [new file with mode: 0644]
src/mainboard/roda/rk886ex/Makefile.inc
src/mainboard/roda/rk886ex/auto.c [deleted file]
src/mainboard/roda/rk886ex/romstage.c [new file with mode: 0644]
src/mainboard/soyo/sy-6ba-plus-iii/auto.c [deleted file]
src/mainboard/soyo/sy-6ba-plus-iii/romstage.c [new file with mode: 0644]
src/mainboard/sunw/ultra40/cache_as_ram_auto.c [deleted file]
src/mainboard/sunw/ultra40/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/h8dme/Makefile.inc
src/mainboard/supermicro/h8dme/cache_as_ram_auto.c [deleted file]
src/mainboard/supermicro/h8dme/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/h8dmr/Makefile.inc
src/mainboard/supermicro/h8dmr/cache_as_ram_auto.c [deleted file]
src/mainboard/supermicro/h8dmr/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/h8dmr_fam10/Makefile.inc
src/mainboard/supermicro/h8dmr_fam10/cache_as_ram_auto.c [deleted file]
src/mainboard/supermicro/h8dmr_fam10/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/h8dmr_fam10/spd_addr.h
src/mainboard/supermicro/h8qme_fam10/Makefile.inc
src/mainboard/supermicro/h8qme_fam10/cache_as_ram_auto.c [deleted file]
src/mainboard/supermicro/h8qme_fam10/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/h8qme_fam10/spd_addr.h
src/mainboard/supermicro/x6dai_g/auto.c [deleted file]
src/mainboard/supermicro/x6dai_g/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/x6dhe_g/auto.c [deleted file]
src/mainboard/supermicro/x6dhe_g/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/x6dhe_g2/auto.c [deleted file]
src/mainboard/supermicro/x6dhe_g2/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/x6dhr_ig/auto.c [deleted file]
src/mainboard/supermicro/x6dhr_ig/romstage.c [new file with mode: 0644]
src/mainboard/supermicro/x6dhr_ig2/auto.c [deleted file]
src/mainboard/supermicro/x6dhr_ig2/romstage.c [new file with mode: 0644]
src/mainboard/technexion/tim5690/Makefile.inc
src/mainboard/technexion/tim5690/cache_as_ram_auto.c [deleted file]
src/mainboard/technexion/tim5690/romstage.c [new file with mode: 0644]
src/mainboard/technexion/tim8690/Makefile.inc
src/mainboard/technexion/tim8690/cache_as_ram_auto.c [deleted file]
src/mainboard/technexion/tim8690/romstage.c [new file with mode: 0644]
src/mainboard/technologic/ts5300/auto.c [deleted file]
src/mainboard/technologic/ts5300/romstage.c [new file with mode: 0644]
src/mainboard/televideo/tc7020/auto.c [deleted file]
src/mainboard/televideo/tc7020/romstage.c [new file with mode: 0644]
src/mainboard/thomson/ip1000/auto.c [deleted file]
src/mainboard/thomson/ip1000/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s1846/auto.c [deleted file]
src/mainboard/tyan/s1846/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2735/Makefile.inc
src/mainboard/tyan/s2735/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2735/reset.c
src/mainboard/tyan/s2735/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2850/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2850/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2875/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2875/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2880/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2880/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2881/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2881/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2882/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2882/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2885/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2885/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2891/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2891/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2892/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2892/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2895/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2895/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2912/Makefile.inc
src/mainboard/tyan/s2912/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2912/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2912_fam10/Makefile.inc
src/mainboard/tyan/s2912_fam10/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s2912_fam10/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s2912_fam10/spd_addr.h
src/mainboard/tyan/s4880/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s4880/romstage.c [new file with mode: 0644]
src/mainboard/tyan/s4882/cache_as_ram_auto.c [deleted file]
src/mainboard/tyan/s4882/romstage.c [new file with mode: 0644]
src/mainboard/via/epia-cn/auto.c [deleted file]
src/mainboard/via/epia-cn/romstage.c [new file with mode: 0644]
src/mainboard/via/epia-m/Makefile.inc
src/mainboard/via/epia-m/auto.c [deleted file]
src/mainboard/via/epia-m/romstage.c [new file with mode: 0644]
src/mainboard/via/epia-m700/Makefile.inc
src/mainboard/via/epia-m700/cache_as_ram_auto.c [deleted file]
src/mainboard/via/epia-m700/romstage.c [new file with mode: 0644]
src/mainboard/via/epia-n/Makefile.inc
src/mainboard/via/epia-n/auto.c [deleted file]
src/mainboard/via/epia-n/romstage.c [new file with mode: 0644]
src/mainboard/via/epia/Makefile.inc
src/mainboard/via/epia/auto.c [deleted file]
src/mainboard/via/epia/romstage.c [new file with mode: 0644]
src/mainboard/via/pc2500e/auto.c [deleted file]
src/mainboard/via/pc2500e/romstage.c [new file with mode: 0644]
src/mainboard/via/vt8454c/Makefile.inc
src/mainboard/via/vt8454c/auto.c [deleted file]
src/mainboard/via/vt8454c/romstage.c [new file with mode: 0644]
src/northbridge/amd/amdfam10/debug.c
src/northbridge/amd/amdk8/debug.c
src/northbridge/intel/e7501/debug.c
src/northbridge/intel/i855gme/debug.c
src/northbridge/intel/i855pm/debug.c
src/northbridge/intel/i945/raminit.c
src/northbridge/via/cx700/cx700_early_smbus.c
src/northbridge/via/vx800/examples/cache_as_ram_auto.c [deleted file]
src/northbridge/via/vx800/examples/romstage.c [new file with mode: 0644]
src/southbridge/intel/i82801gx/i82801gx.h
src/southbridge/intel/i82801gx/i82801gx_azalia.c
src/southbridge/via/vt8231/vt8231_ide.c

index 661dc41dcbce16f292f0e613787cd70fee9ed5e4..0aa540d153673b718160af45425351b1c9aad59e 100644 (file)
@@ -63,7 +63,7 @@ static void __console_tx_string(int loglevel, const char *str)
 }
 
 /* Actually this should say defined(__ROMCC__) but that define is explicitly
- * set in some auto.c files to trigger the simple device_t version to be used.
+ * set in some romstage.c files to trigger the simple device_t version to be used.
  * So __GNUCC__ does the right thing here.
  */
 #if defined (__ROMCC__)
index deaa78cef0057ece724f3f17b7274aab3e44f7a0..9001ec76a77af990a38a40380b110f5b03137c88 100644 (file)
@@ -78,7 +78,7 @@ unsigned get_apicid_base(unsigned ioapic_num)
        nb_cfg_54 = read_nb_cfg_54();
 
 #if 0
-       //it is for all e0 single core and nc_cfg_54 low is set, but in the auto.c stage we do not set that bit for it.
+       //it is for all e0 single core and nc_cfg_54 low is set, but in the romstage.c stage we do not set that bit for it.
        if(nb_cfg_54 && (!disable_siblings) && (siblings == 0)) {
                //we need to check if e0 single core is there
                int i;
@@ -109,7 +109,7 @@ unsigned get_apicid_base(unsigned ioapic_num)
 
        if((apicid_base+ioapic_num-1)>0xf) {
                // We need to enable APIC EXT ID
-               printk_info("if the IO APIC device doesn't support 256 apic id, \r\n you need to set CONFIG_ENABLE_APIC_EXT_ID in auto.c so you can spare 16 id for ioapic\r\n");
+               printk_info("if the IO APIC device doesn't support 256 apic id, \r\n you need to set CONFIG_ENABLE_APIC_EXT_ID in romstage.c so you can spare 16 id for ioapic\r\n");
                enable_apic_ext_id(nodes);
        }
        
index defbce2571f2c719f0f4a81c2144d115cf24a7cd..822e362a742d40ef85710f5aca6104b87ff884a3 100644 (file)
@@ -463,7 +463,7 @@ static void wait_all_core0_started(void)
  *  start the core0 in node, so it can generate HT packet to feature code.
  *
  * This function starts the AP nodes core0s. wait_all_core0_started() in
- * cache_as_ram_auto.c waits for all the AP to be finished before continuing
+ * romstage.c waits for all the AP to be finished before continuing
  * system init.
  */
 static void start_node(u8 node)
index d20280761d994d9b39736d4973477705c85f919b..f52e8fe622e2ef66b86cddb826de2897d2797c99 100644 (file)
@@ -89,7 +89,7 @@ void setupsc520(void)
        /* as per the book: */
        /* PAR register setup */
        /* set up the PAR registers as they are on the MSM586SEG */
-       /*    moved to auto.c by Stepan, Ron says: */
+       /*    moved to romstage.c by Stepan, Ron says: */
        /* NOTE: move this to mainboard.c ASAP */
        setup_pars();
   
index 35405f6f250d81db4f44b5f785fc64b59e920477..3152504e43d882f39ac1bcfb492bc67bcb53f210 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,8 +55,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.d
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
index 5c146b0ca0f6acac3d142dc7de6e27215f26e8ac..9472cf262b3d9051353e58ab3f449be85c3c46bf 100644 (file)
@@ -42,7 +42,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/ck804/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -60,8 +60,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.d
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
index c1462ae22eed1dc35e59d3cf5b2b794d37615d80..3d3bc24a6d318bfa2ca7075a9a88d18f1aa80b50 100644 (file)
@@ -42,7 +42,7 @@ endif
 ifeq ($(CONFIG_BIG_BOOTBLOCK),y)
 crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/failover.inc
 endif
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 ifeq ($(CONFIG_SSE),y)
 crt0s += $(src)/cpu/x86/sse_disable.inc
 endif
@@ -75,11 +75,11 @@ $(obj)/mainboard/$(MAINBOARDDIR)/failover.inc: $(obj)/romcc $(src)/arch/i386/lib
        $(obj)/romcc $(ROMCCFLAGS) --label-prefix=failover $(INCLUDES) $(src)/arch/i386/lib/failover.c -o $@
 
 ifeq ($(CONFIG_HAVE_OPTION_TABLE),y)
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(obj)/romcc $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h $(obj)/build.h
-       $(obj)/romcc $(ROMCCFLAGS) $(INCLUDES) $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(obj)/romcc $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h $(obj)/build.h
+       $(obj)/romcc $(ROMCCFLAGS) $(INCLUDES) $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
 else
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(obj)/romcc $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/build.h
-       $(obj)/romcc $(ROMCCFLAGS) $(INCLUDES) $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(obj)/romcc $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(obj)/romcc $(ROMCCFLAGS) $(INCLUDES) $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
 endif
 
 endif
diff --git a/src/mainboard/a-trend/atc-6220/auto.c b/src/mainboard/a-trend/atc-6220/auto.c
deleted file mode 100644 (file)
index 5fe11bc..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define __PRE_RAM__
-#define ASSEMBLY 1
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/a-trend/atc-6220/romstage.c b/src/mainboard/a-trend/atc-6220/romstage.c
new file mode 100644 (file)
index 0000000..5fe11bc
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define __PRE_RAM__
+#define ASSEMBLY 1
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/a-trend/atc-6240/auto.c b/src/mainboard/a-trend/atc-6240/auto.c
deleted file mode 100644 (file)
index 752f1a1..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define __PRE_RAM__
-#define ASSEMBLY 1
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83627HF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/a-trend/atc-6240/romstage.c b/src/mainboard/a-trend/atc-6240/romstage.c
new file mode 100644 (file)
index 0000000..752f1a1
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define __PRE_RAM__
+#define ASSEMBLY 1
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83627HF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/abit/be6-ii_v2_0/auto.c b/src/mainboard/abit/be6-ii_v2_0/auto.c
deleted file mode 100644 (file)
index bdd0ffe..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define __PRE_RAM__
-#define ASSEMBLY 1
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-/* FIXME: It's a Winbond W83977EF, actually. */
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-/* FIXME: It's a Winbond W83977EF, actually. */
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME: It's a Winbond W83977EF, actually. */
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge at 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/abit/be6-ii_v2_0/romstage.c b/src/mainboard/abit/be6-ii_v2_0/romstage.c
new file mode 100644 (file)
index 0000000..bdd0ffe
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define __PRE_RAM__
+#define ASSEMBLY 1
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+/* FIXME: It's a Winbond W83977EF, actually. */
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+/* FIXME: It's a Winbond W83977EF, actually. */
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME: It's a Winbond W83977EF, actually. */
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge at 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/advantech/pcm-5820/auto.c b/src/mainboard/advantech/pcm-5820/auto.c
deleted file mode 100644 (file)
index 6c9abe2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977f/w83977f_early_serial.c"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977F_SP1)
-
-static void main(unsigned long bist)
-{
-       w83977f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-       cs5530_enable_rom();
-       sdram_init();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/advantech/pcm-5820/romstage.c b/src/mainboard/advantech/pcm-5820/romstage.c
new file mode 100644 (file)
index 0000000..6c9abe2
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977f/w83977f_early_serial.c"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977F_SP1)
+
+static void main(unsigned long bist)
+{
+       w83977f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+       cs5530_enable_rom();
+       sdram_init();
+       /* ram_check(0, 640 * 1024); */
+}
index e8ed490c33a565bb27f445b4af6fe5b3036d372e..fd5ffffa2db87ac6765fc1545de1a0892c2eb1d6 100644 (file)
@@ -11,7 +11,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -21,8 +21,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/db800/cache_as_ram_auto.c b/src/mainboard/amd/db800/cache_as_ram_auto.c
deleted file mode 100644 (file)
index c18b0bb..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-#define POST_CODE(x) outb(x, 0x80)
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define ManualConf 0           /* Do automatic strapped PLL config */
-#define PLLMSRhi 0x00001490    /* Manual settings for the PLL */
-#define PLLMSRlo 0x02000030
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-struct msrinit {
-            u32 msrnum;
-            msr_t msr;
-      };
-
-static const struct msrinit msr_table[] = 
-{
-       {CPU_RCONF_DEFAULT, {.hi = 0x24fffc02,.lo = 0x1000A000}}, /* Setup access to cache under 1MB.
-                                                                  * Rom Properties: Write Serialize, WriteProtect.
-                                                                  * RomBase: 0xFFFC0
-                                                                  * SysTop to RomBase Properties: Write Serialize, Cache Disable.
-                                                                  * SysTop: 0x000A0 
-                                                                  * System Memory Properties:  (Write Back) */
-       {CPU_RCONF_A0_BF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xA0000-0xBFFFF : (Write Back) */
-       {CPU_RCONF_C0_DF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xC0000-0xDFFFF : (Write Back) */
-       {CPU_RCONF_E0_FF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xE0000-0xFFFFF : (Write Back) */
-       
-       /* Setup access to memory under 1MB. Note: VGA hole at 0xA0000-0xBFFFF */
-       {MSR_GLIU0_BASE1,   {.hi = 0x20000000,.lo = 0x000fff80}}, // 0x00000-0x7FFFF
-       {MSR_GLIU0_BASE2,   {.hi = 0x20000000,.lo = 0x080fffe0}}, // 0x80000-0x9FFFF
-       {MSR_GLIU0_SHADOW,  {.hi = 0x2000FFFF,.lo = 0xFFFF0003}}, // 0xC0000-0xFFFFF
-       {MSR_GLIU1_BASE1,   {.hi = 0x20000000,.lo = 0x000fff80}}, // 0x00000-0x7FFFF
-       {MSR_GLIU1_BASE2,   {.hi = 0x20000000,.lo = 0x080fffe0}}, // 0x80000-0x9FFFF
-       {MSR_GLIU1_SHADOW,  {.hi = 0x2000FFFF,.lo = 0xFFFF0003}}, // 0xC0000-0xFFFFF
-};
-
-
-static void msr_init(void)
-{
-  int i;
-       for (i = 0; i < ARRAY_SIZE(msr_table); i++)
-                           wrmsr(msr_table[i].msrnum, msr_table[i].msr);
-}
-
-static void mb_gpio_init(void)
-{
-       /* Early mainboard specific GPIO setup. */
-}
-
-void cache_as_ram_main(void)
-{
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* Note: must do this AFTER the early_setup! It is counting on some
-        * early MSR setup for CS5536.
-        */
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Check memory. */
-       /* ram_check(0x00000000, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
-       return;
-}
diff --git a/src/mainboard/amd/db800/romstage.c b/src/mainboard/amd/db800/romstage.c
new file mode 100644 (file)
index 0000000..c18b0bb
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+#define POST_CODE(x) outb(x, 0x80)
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define ManualConf 0           /* Do automatic strapped PLL config */
+#define PLLMSRhi 0x00001490    /* Manual settings for the PLL */
+#define PLLMSRlo 0x02000030
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+struct msrinit {
+            u32 msrnum;
+            msr_t msr;
+      };
+
+static const struct msrinit msr_table[] = 
+{
+       {CPU_RCONF_DEFAULT, {.hi = 0x24fffc02,.lo = 0x1000A000}}, /* Setup access to cache under 1MB.
+                                                                  * Rom Properties: Write Serialize, WriteProtect.
+                                                                  * RomBase: 0xFFFC0
+                                                                  * SysTop to RomBase Properties: Write Serialize, Cache Disable.
+                                                                  * SysTop: 0x000A0 
+                                                                  * System Memory Properties:  (Write Back) */
+       {CPU_RCONF_A0_BF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xA0000-0xBFFFF : (Write Back) */
+       {CPU_RCONF_C0_DF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xC0000-0xDFFFF : (Write Back) */
+       {CPU_RCONF_E0_FF,   {.hi = 0x00000000,.lo = 0x00000000}}, /* 0xE0000-0xFFFFF : (Write Back) */
+       
+       /* Setup access to memory under 1MB. Note: VGA hole at 0xA0000-0xBFFFF */
+       {MSR_GLIU0_BASE1,   {.hi = 0x20000000,.lo = 0x000fff80}}, // 0x00000-0x7FFFF
+       {MSR_GLIU0_BASE2,   {.hi = 0x20000000,.lo = 0x080fffe0}}, // 0x80000-0x9FFFF
+       {MSR_GLIU0_SHADOW,  {.hi = 0x2000FFFF,.lo = 0xFFFF0003}}, // 0xC0000-0xFFFFF
+       {MSR_GLIU1_BASE1,   {.hi = 0x20000000,.lo = 0x000fff80}}, // 0x00000-0x7FFFF
+       {MSR_GLIU1_BASE2,   {.hi = 0x20000000,.lo = 0x080fffe0}}, // 0x80000-0x9FFFF
+       {MSR_GLIU1_SHADOW,  {.hi = 0x2000FFFF,.lo = 0xFFFF0003}}, // 0xC0000-0xFFFFF
+};
+
+
+static void msr_init(void)
+{
+  int i;
+       for (i = 0; i < ARRAY_SIZE(msr_table); i++)
+                           wrmsr(msr_table[i].msrnum, msr_table[i].msr);
+}
+
+static void mb_gpio_init(void)
+{
+       /* Early mainboard specific GPIO setup. */
+}
+
+void cache_as_ram_main(void)
+{
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* Note: must do this AFTER the early_setup! It is counting on some
+        * early MSR setup for CS5536.
+        */
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Check memory. */
+       /* ram_check(0x00000000, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
+       return;
+}
index 968e4d64aa7c4097ca6a69835f8d384ceb3852b5..7a4a1691e77a32d10d9dd23fa51f3ef4b264906f 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,8 +55,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/acpi/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/dbm690t/cache_as_ram_auto.c b/src/mainboard/amd/dbm690t/cache_as_ram_auto.c
deleted file mode 100644 (file)
index c83759b..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define K8_SET_FIDVID 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define RC0 (6<<8)
-#define RC1 (7<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-
-#define ICS951462_ADDRESS      0x69
-#define SMBUS_HUB 0x71
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#define post_code(x) outb(x, 0x80)
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#include "southbridge/amd/rs690/rs690_early_setup.c"
-#include "southbridge/amd/sb600/sb600_early_setup.c"
-
-/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-/* called in raminit_f.c */
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-/*called in raminit_f.c */
-static inline int spd_read_byte(u32 device, u32 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* Is this a cpu only reset? Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) {       /* RTC already inited */
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       /* sb600_lpc_port80(); */
-       sb600_pci_port80();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-normal_image:
-       post_code(0x23);
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
-
-fallback_image:
-       post_code(0x25);
-}
-#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
-       int needs_reset = 0;
-       u32 bsp_apicid = 0;
-       msr_t msr;
-       struct cpuid_result cpuid1;
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       enable_rs690_dev8();
-       sb600_lpc_init();
-
-       /* it8712f_enable_serial does not use its 1st parameter. */
-       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
-
-       setup_dbm690t_resource_map();
-
-       setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched */
-       wait_all_core0_started();
-       start_other_cores();
-#endif
-       wait_all_aps_started(bsp_apicid);
-
-       ht_setup_chains_x(sysinfo);
-
-       /* run _early_setup before soft-reset. */
-       rs690_early_setup();
-       sb600_early_setup();
-
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-               /* Read FIDVID_STATUS */
-               msr=rdmsr(0xc0010042);
-               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-               enable_fid_change();
-               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-               init_fidvid_bsp(bsp_apicid);
-
-               /* show final fid and vid */
-               msr=rdmsr(0xc0010042);
-               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-       } else {
-               printk_debug("Changing FIDVID not supported\n");
-       }
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       rs690_htinit();
-       printk_debug("needs_reset=0x%x\n", needs_reset);
-
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now; */
-       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
-                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       rs690_before_pci_init();
-       sb600_before_pci_init();
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/amd/dbm690t/romstage.c b/src/mainboard/amd/dbm690t/romstage.c
new file mode 100644 (file)
index 0000000..c83759b
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define K8_SET_FIDVID 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define RC0 (6<<8)
+#define RC1 (7<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+
+#define ICS951462_ADDRESS      0x69
+#define SMBUS_HUB 0x71
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#define post_code(x) outb(x, 0x80)
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#include "southbridge/amd/rs690/rs690_early_setup.c"
+#include "southbridge/amd/sb600/sb600_early_setup.c"
+
+/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+/* called in raminit_f.c */
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+/*called in raminit_f.c */
+static inline int spd_read_byte(u32 device, u32 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* Is this a cpu only reset? Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) {       /* RTC already inited */
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       /* sb600_lpc_port80(); */
+       sb600_pci_port80();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+normal_image:
+       post_code(0x23);
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
+
+fallback_image:
+       post_code(0x25);
+}
+#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
+       int needs_reset = 0;
+       u32 bsp_apicid = 0;
+       msr_t msr;
+       struct cpuid_result cpuid1;
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       enable_rs690_dev8();
+       sb600_lpc_init();
+
+       /* it8712f_enable_serial does not use its 1st parameter. */
+       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
+
+       setup_dbm690t_resource_map();
+
+       setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched */
+       wait_all_core0_started();
+       start_other_cores();
+#endif
+       wait_all_aps_started(bsp_apicid);
+
+       ht_setup_chains_x(sysinfo);
+
+       /* run _early_setup before soft-reset. */
+       rs690_early_setup();
+       sb600_early_setup();
+
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+               /* Read FIDVID_STATUS */
+               msr=rdmsr(0xc0010042);
+               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+               enable_fid_change();
+               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+               init_fidvid_bsp(bsp_apicid);
+
+               /* show final fid and vid */
+               msr=rdmsr(0xc0010042);
+               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+       } else {
+               printk_debug("Changing FIDVID not supported\n");
+       }
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       rs690_htinit();
+       printk_debug("needs_reset=0x%x\n", needs_reset);
+
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now; */
+       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
+                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       rs690_before_pci_init();
+       sb600_before_pci_init();
+
+       post_cache_as_ram();
+}
index f101f22d4ecbe18a8d3e8f6ce537104ec2d389d9..0e4b263223b6ea639ec4eec47e3e59e0fb714d3f 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/norwich/cache_as_ram_auto.c b/src/mainboard/amd/norwich/cache_as_ram_auto.c
deleted file mode 100644 (file)
index fc7e96b..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define ManualConf 0           /* Do automatic strapped PLL config */
-#define PLLMSRhi 0x00001490    /* manual settings for the PLL */
-#define PLLMSRlo 0x02000030
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-
-       /* Setup access to the cache for under 1MB. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x1000A000;    /* 0-A0000 write back */
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x0;           /* write back */
-       msr.lo = 0x0;
-       wrmsr(CPU_RCONF_A0_BF, msr);
-       wrmsr(CPU_RCONF_C0_DF, msr);
-       wrmsr(CPU_RCONF_E0_FF, msr);
-
-       /* Setup access to the cache for under 640K. Note MC not setup yet. */
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU0 + 0x21, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU1 + 0x21, msr);
-}
-
-static void mb_gpio_init(void)
-{
-       /* Early mainboard specific GPIO setup. */
-}
-
-void cache_as_ram_main(void)
-{
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* Note: must do this AFTER the early_setup! It is counting on some
-        * early MSR setup for CS5536.
-        */
-       /* cs5536_disable_internal_uart: disable them for now, set them
-        * up later...
-        */
-       /* If debug. real setup done in chipset init via Config.lb. */
-       cs5536_setup_onchipuart();
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Check memory. */
-       /* ram_check(0x00000000, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
-       return;
-}
diff --git a/src/mainboard/amd/norwich/romstage.c b/src/mainboard/amd/norwich/romstage.c
new file mode 100644 (file)
index 0000000..fc7e96b
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define ManualConf 0           /* Do automatic strapped PLL config */
+#define PLLMSRhi 0x00001490    /* manual settings for the PLL */
+#define PLLMSRlo 0x02000030
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+
+       /* Setup access to the cache for under 1MB. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x1000A000;    /* 0-A0000 write back */
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x0;           /* write back */
+       msr.lo = 0x0;
+       wrmsr(CPU_RCONF_A0_BF, msr);
+       wrmsr(CPU_RCONF_C0_DF, msr);
+       wrmsr(CPU_RCONF_E0_FF, msr);
+
+       /* Setup access to the cache for under 640K. Note MC not setup yet. */
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU0 + 0x21, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU1 + 0x21, msr);
+}
+
+static void mb_gpio_init(void)
+{
+       /* Early mainboard specific GPIO setup. */
+}
+
+void cache_as_ram_main(void)
+{
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* Note: must do this AFTER the early_setup! It is counting on some
+        * early MSR setup for CS5536.
+        */
+       /* cs5536_disable_internal_uart: disable them for now, set them
+        * up later...
+        */
+       /* If debug. real setup done in chipset init via Config.lb. */
+       cs5536_setup_onchipuart();
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Check memory. */
+       /* ram_check(0x00000000, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
+       return;
+}
index dda9ecf0441cd2b726d0494d6863301f449bd4d8..482dfff7248d4227527db3790d5b05bbfc163532 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,8 +55,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/acpi/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/pistachio/cache_as_ram_auto.c b/src/mainboard/amd/pistachio/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 2e5c4a0..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define K8_SET_FIDVID 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#define post_code(x) outb(x, 0x80)
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#include "southbridge/amd/rs690/rs690_early_setup.c"
-#include "southbridge/amd/sb600/sb600_early_setup.c"
-
-/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-/* called in raminit_f.c */
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-/*called in raminit_f.c */
-static inline int spd_read_byte(u32 device, u32 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* Is this a cpu only reset? Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) {       /* RTC already inited */
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       sb600_lpc_port80();
-       /* sb600_pci_port80(); */
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-      normal_image:
-       post_code(0x01);
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx));        /* inputs */
-
-      fallback_image:
-       post_code(0x02);
-}
-#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
-       int needs_reset = 0;
-       u32 bsp_apicid = 0;
-       msr_t msr;
-       struct cpuid_result cpuid1;
-       struct sys_info *sysinfo =
-           (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE -
-                               CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       enable_rs690_dev8();
-       sb600_lpc_init();
-
-       /* Pistachio used a FPGA to enable serial debug instead of a SIO
-        * and it doens't require any special setup. */
-       uart_init();
-       console_init();
-
-       post_code(0x03);
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
-
-       setup_pistachio_resource_map();
-
-       setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched */
-       wait_all_core0_started();
-       start_other_cores();
-#endif
-       wait_all_aps_started(bsp_apicid);
-
-       /* it will set up chains and store link pair for optimization later,
-        * it will init sblnk and sbbusn, nodes, sbdn */
-       ht_setup_chains_x(sysinfo);
-
-       /* run _early_setup before soft-reset. */
-       rs690_early_setup();
-       sb600_early_setup();
-
-       post_code(0x04);
-
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-               /* Read FIDVID_STATUS */
-               msr=rdmsr(0xc0010042);
-               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-               enable_fid_change();
-               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-               init_fidvid_bsp(bsp_apicid);
-
-               /* show final fid and vid */
-               msr=rdmsr(0xc0010042);
-               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-       } else {
-               printk_debug("Changing FIDVID not supported\n");
-       }
-
-       post_code(0x05);
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       rs690_htinit();
-       printk_debug("needs_reset=0x%x\n", needs_reset);
-
-       post_code(0x06);
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now; */
-       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
-                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       post_code(0x07);
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_code(0x08);
-
-       rs690_before_pci_init();
-       sb600_before_pci_init();
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/amd/pistachio/romstage.c b/src/mainboard/amd/pistachio/romstage.c
new file mode 100644 (file)
index 0000000..2e5c4a0
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define K8_SET_FIDVID 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#define post_code(x) outb(x, 0x80)
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#include "southbridge/amd/rs690/rs690_early_setup.c"
+#include "southbridge/amd/sb600/sb600_early_setup.c"
+
+/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+/* called in raminit_f.c */
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+/*called in raminit_f.c */
+static inline int spd_read_byte(u32 device, u32 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* Is this a cpu only reset? Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) {       /* RTC already inited */
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       sb600_lpc_port80();
+       /* sb600_pci_port80(); */
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+      normal_image:
+       post_code(0x01);
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx));        /* inputs */
+
+      fallback_image:
+       post_code(0x02);
+}
+#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
+       int needs_reset = 0;
+       u32 bsp_apicid = 0;
+       msr_t msr;
+       struct cpuid_result cpuid1;
+       struct sys_info *sysinfo =
+           (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE -
+                               CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       enable_rs690_dev8();
+       sb600_lpc_init();
+
+       /* Pistachio used a FPGA to enable serial debug instead of a SIO
+        * and it doens't require any special setup. */
+       uart_init();
+       console_init();
+
+       post_code(0x03);
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
+
+       setup_pistachio_resource_map();
+
+       setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched */
+       wait_all_core0_started();
+       start_other_cores();
+#endif
+       wait_all_aps_started(bsp_apicid);
+
+       /* it will set up chains and store link pair for optimization later,
+        * it will init sblnk and sbbusn, nodes, sbdn */
+       ht_setup_chains_x(sysinfo);
+
+       /* run _early_setup before soft-reset. */
+       rs690_early_setup();
+       sb600_early_setup();
+
+       post_code(0x04);
+
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+               /* Read FIDVID_STATUS */
+               msr=rdmsr(0xc0010042);
+               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+               enable_fid_change();
+               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+               init_fidvid_bsp(bsp_apicid);
+
+               /* show final fid and vid */
+               msr=rdmsr(0xc0010042);
+               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+       } else {
+               printk_debug("Changing FIDVID not supported\n");
+       }
+
+       post_code(0x05);
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       rs690_htinit();
+       printk_debug("needs_reset=0x%x\n", needs_reset);
+
+       post_code(0x06);
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now; */
+       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
+                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       post_code(0x07);
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_code(0x08);
+
+       rs690_before_pci_init();
+       sb600_before_pci_init();
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/amd/rumba/auto.c b/src/mainboard/amd/rumba/auto.c
deleted file mode 100644 (file)
index 1dce425..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/gx2def.h>
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/gx2/raminit.h"
-
-static inline unsigned int fls(unsigned int x)
-{
-        int r;
-
-        __asm__("bsfl %1,%0\n\t"
-                "jnz 1f\n\t"
-                "movl $32,%0\n"
-                "1:" : "=r" (r) : "g" (x));
-        return r;
-}
-
-static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
-{
-       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
-        *                      component Banks (byte 17) * module banks, side (byte 5) *
-        *                      width in bits (byte 6,7)
-        *                    = Density per side (byte 31) * number of sides (byte 5) */
-       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
-       msr_t msr;
-       unsigned char module_banks, val;
-
-       msr = rdmsr(MC_CF07_DATA);
-
-       /* get module banks (sides) per dimm, SPD byte 5 */
-       module_banks = spd_read_byte(0xA0, 5);
-       if (module_banks < 1 || module_banks > 2)
-               print_err("Module banks per dimm\r\n");
-       module_banks >>= 1;
-       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
-       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
-
-       /* get component banks per module bank, SPD byte 17 */
-       val = spd_read_byte(0xA0, 17);
-       if (val < 2 || val > 4)
-               print_err("Component banks per module bank\r\n");
-       val >>= 2;
-       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
-
-       /* get the module bank density, SPD byte 31  */
-       val = spd_read_byte(0xA0, 31);
-       val = fls(val);
-       val <<= module_banks;
-       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
-
-       /* page size = 2^col address */
-       val = spd_read_byte(0xA0, 4);
-       val -= 7;
-       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
-
-       print_debug("computed msr.hi ");
-       print_debug_hex32(msr.hi);
-       print_debug("\r\n");
-
-       msr.lo = 0x00003000;
-       wrmsr(MC_CF07_DATA, msr);
-
-       msr = rdmsr(0x20000019);
-       msr.hi = 0x18000108;
-       msr.lo = 0x696332a3;
-       wrmsr(0x20000019, msr);         
-
-}
-
-#include "northbridge/amd/gx2/raminit.c"
-#include "lib/generic_sdram.c"
-
-#define PLLMSRhi 0x00001490
-#define PLLMSRlo 0x02000030
-#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
-#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
-#include "northbridge/amd/gx2/pll_reset.c"
-#include "cpu/amd/model_gx2/cpureginit.c"
-#include "cpu/amd/model_gx2/syspreinit.c"
-static void msr_init(void)
-{
-       /* total physical memory */
-       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
-
-       /* traditional memory 0kB-512kB, 512kB-1MB */
-       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
-
-        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
-
-       /* put code in northbridge[init].c here */
-}
-
-
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-
-       SystemPreInit();
-       
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       cs5536_early_setup();
-
-       pll_reset();
-
-       cpuRegInit();
-       print_err("done cpuRegInit\n");
-       
-       sdram_initialize(1, memctrl);
-
-       msr_init();
-
-       /* Check all of memory */
-       //ram_check(0x00000000, 640*1024);
-}
diff --git a/src/mainboard/amd/rumba/romstage.c b/src/mainboard/amd/rumba/romstage.c
new file mode 100644 (file)
index 0000000..1dce425
--- /dev/null
@@ -0,0 +1,148 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/gx2def.h>
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/gx2/raminit.h"
+
+static inline unsigned int fls(unsigned int x)
+{
+        int r;
+
+        __asm__("bsfl %1,%0\n\t"
+                "jnz 1f\n\t"
+                "movl $32,%0\n"
+                "1:" : "=r" (r) : "g" (x));
+        return r;
+}
+
+static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
+{
+       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
+        *                      component Banks (byte 17) * module banks, side (byte 5) *
+        *                      width in bits (byte 6,7)
+        *                    = Density per side (byte 31) * number of sides (byte 5) */
+       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
+       msr_t msr;
+       unsigned char module_banks, val;
+
+       msr = rdmsr(MC_CF07_DATA);
+
+       /* get module banks (sides) per dimm, SPD byte 5 */
+       module_banks = spd_read_byte(0xA0, 5);
+       if (module_banks < 1 || module_banks > 2)
+               print_err("Module banks per dimm\r\n");
+       module_banks >>= 1;
+       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
+       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
+
+       /* get component banks per module bank, SPD byte 17 */
+       val = spd_read_byte(0xA0, 17);
+       if (val < 2 || val > 4)
+               print_err("Component banks per module bank\r\n");
+       val >>= 2;
+       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
+
+       /* get the module bank density, SPD byte 31  */
+       val = spd_read_byte(0xA0, 31);
+       val = fls(val);
+       val <<= module_banks;
+       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
+
+       /* page size = 2^col address */
+       val = spd_read_byte(0xA0, 4);
+       val -= 7;
+       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
+
+       print_debug("computed msr.hi ");
+       print_debug_hex32(msr.hi);
+       print_debug("\r\n");
+
+       msr.lo = 0x00003000;
+       wrmsr(MC_CF07_DATA, msr);
+
+       msr = rdmsr(0x20000019);
+       msr.hi = 0x18000108;
+       msr.lo = 0x696332a3;
+       wrmsr(0x20000019, msr);         
+
+}
+
+#include "northbridge/amd/gx2/raminit.c"
+#include "lib/generic_sdram.c"
+
+#define PLLMSRhi 0x00001490
+#define PLLMSRlo 0x02000030
+#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
+#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
+#include "northbridge/amd/gx2/pll_reset.c"
+#include "cpu/amd/model_gx2/cpureginit.c"
+#include "cpu/amd/model_gx2/syspreinit.c"
+static void msr_init(void)
+{
+       /* total physical memory */
+       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
+
+       /* traditional memory 0kB-512kB, 512kB-1MB */
+       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
+
+        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
+
+       /* put code in northbridge[init].c here */
+}
+
+
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl [] = {
+               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
+       };
+
+       SystemPreInit();
+       
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       cs5536_early_setup();
+
+       pll_reset();
+
+       cpuRegInit();
+       print_err("done cpuRegInit\n");
+       
+       sdram_initialize(1, memctrl);
+
+       msr_init();
+
+       /* Check all of memory */
+       //ram_check(0x00000000, 640*1024);
+}
index e6f3488e8dc7afc4ccf44285bae463d602806455..2a21650933ec87834bb50ca5bf68ef1e498e840c 100644 (file)
@@ -44,7 +44,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -76,8 +76,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pc
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' $(obj)/pci4.hex
        mv $(obj)/pci4.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c b/src/mainboard/amd/serengeti_cheetah/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 2626f80..0000000
+++ /dev/null
@@ -1,399 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1 
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-//#define K8_ALLOCATE_IO_RANGE 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-
-#if 0 
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#endif
-
-
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "cpu/x86/bist.h"
-
-#include "lib/delay.c"
-
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-       //GPIO on amd8111 to enable MEMRST ????
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_HUB 0x18
-        int ret,i;
-        unsigned device=(ctrl->channel0[0])>>8;
-        /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
-        i=2;
-        do {
-                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
-        } while ((ret!=0) && (i-->0));
-
-        smbus_write_byte(SMBUS_HUB, 0x03, 0);
-}
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_HUB 0x18
-        int ret, i;
-        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
-        i=2;
-        do {
-                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
-                print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
-        } while ((ret!=0) && (i-->0));
-        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
-        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
-}
-#endif
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define RC0 ((1<<0)<<8)
-#define RC1 ((1<<1)<<8)
-#define RC2 ((1<<2)<<8)
-#define RC3 ((1<<3)<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-       unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the rom access for 4M */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-                       //first node
-                        RC0|DIMM0, RC0|DIMM2, 0, 0,
-                        RC0|DIMM1, RC0|DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       //second node
-                        RC1|DIMM0, RC1|DIMM2, RC1|DIMM4, RC1|DIMM6,
-                        RC1|DIMM1, RC1|DIMM3, RC1|DIMM5, RC1|DIMM7,
-#endif
-#if CONFIG_MAX_PHYSICAL_CPUS > 2
-                        // third node
-                        RC2|DIMM0, RC2|DIMM2, 0, 0,
-                        RC2|DIMM1, RC2|DIMM3, 0, 0,
-                        // four node
-                        RC3|DIMM0, RC3|DIMM2, RC3|DIMM4, RC3|DIMM6,
-                        RC3|DIMM1, RC3|DIMM3, RC3|DIMM5, RC3|DIMM7,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (void*)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-#if K8_SET_FIDVID == 1
-       struct cpuid_result cpuid1;
-#endif
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-//     post_code(0x32);
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        setup_mb_resource_map();
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case) 
-        */
-        start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       
-       /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if 0
-       //it your CPU min fid is 1G, you can change HT to 1G and FID to max one time.
-        needs_reset = optimize_link_coherent_ht();
-        needs_reset |= optimize_link_incoherent_ht(sysinfo);
-#endif
-
-#if K8_SET_FIDVID == 1
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-        {
-               /* Read FIDVID_STATUS */
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
-
-        }
-
-       } else {
-               print_debug("Changing FIDVID not supported\n");
-       }
-
-#endif
-
-#if 1
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       int i;
-       for(i=0;i<4;i++) {
-               activate_spd_rom(&cpu[i]);
-               dump_smbus_registers();
-       }
-#endif
-
-#if 0
-        for(i=1;i<256;i<<=1) {
-                change_i2c_mux(i);
-                dump_smbus_registers();
-        }
-#endif
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-#if 0
-        print_pci_devices();
-#endif
-
-#if 0
-//        dump_pci_devices();
-        dump_pci_device_index_wait(PCI_DEV(0, 0x18, 2), 0x98);
-       dump_pci_device_index_wait(PCI_DEV(0, 0x19, 2), 0x98);
-#endif
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-#endif
diff --git a/src/mainboard/amd/serengeti_cheetah/romstage.c b/src/mainboard/amd/serengeti_cheetah/romstage.c
new file mode 100644 (file)
index 0000000..2626f80
--- /dev/null
@@ -0,0 +1,399 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1 
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+//#define K8_ALLOCATE_IO_RANGE 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+
+#if 0 
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#endif
+
+
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "cpu/x86/bist.h"
+
+#include "lib/delay.c"
+
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+       //GPIO on amd8111 to enable MEMRST ????
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_HUB 0x18
+        int ret,i;
+        unsigned device=(ctrl->channel0[0])>>8;
+        /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
+        i=2;
+        do {
+                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
+        } while ((ret!=0) && (i-->0));
+
+        smbus_write_byte(SMBUS_HUB, 0x03, 0);
+}
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_HUB 0x18
+        int ret, i;
+        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
+        i=2;
+        do {
+                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
+                print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
+        } while ((ret!=0) && (i-->0));
+        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
+        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
+}
+#endif
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define RC0 ((1<<0)<<8)
+#define RC1 ((1<<1)<<8)
+#define RC2 ((1<<2)<<8)
+#define RC3 ((1<<3)<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+       unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the rom access for 4M */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+                       //first node
+                        RC0|DIMM0, RC0|DIMM2, 0, 0,
+                        RC0|DIMM1, RC0|DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       //second node
+                        RC1|DIMM0, RC1|DIMM2, RC1|DIMM4, RC1|DIMM6,
+                        RC1|DIMM1, RC1|DIMM3, RC1|DIMM5, RC1|DIMM7,
+#endif
+#if CONFIG_MAX_PHYSICAL_CPUS > 2
+                        // third node
+                        RC2|DIMM0, RC2|DIMM2, 0, 0,
+                        RC2|DIMM1, RC2|DIMM3, 0, 0,
+                        // four node
+                        RC3|DIMM0, RC3|DIMM2, RC3|DIMM4, RC3|DIMM6,
+                        RC3|DIMM1, RC3|DIMM3, RC3|DIMM5, RC3|DIMM7,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (void*)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+#if K8_SET_FIDVID == 1
+       struct cpuid_result cpuid1;
+#endif
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+//     post_code(0x32);
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        setup_mb_resource_map();
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case) 
+        */
+        start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       
+       /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if 0
+       //it your CPU min fid is 1G, you can change HT to 1G and FID to max one time.
+        needs_reset = optimize_link_coherent_ht();
+        needs_reset |= optimize_link_incoherent_ht(sysinfo);
+#endif
+
+#if K8_SET_FIDVID == 1
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+        {
+               /* Read FIDVID_STATUS */
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
+
+        }
+
+       } else {
+               print_debug("Changing FIDVID not supported\n");
+       }
+
+#endif
+
+#if 1
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       int i;
+       for(i=0;i<4;i++) {
+               activate_spd_rom(&cpu[i]);
+               dump_smbus_registers();
+       }
+#endif
+
+#if 0
+        for(i=1;i<256;i<<=1) {
+                change_i2c_mux(i);
+                dump_smbus_registers();
+        }
+#endif
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+#if 0
+        print_pci_devices();
+#endif
+
+#if 0
+//        dump_pci_devices();
+        dump_pci_device_index_wait(PCI_DEV(0, 0x18, 2), 0x98);
+       dump_pci_device_index_wait(PCI_DEV(0, 0x19, 2), 0x98);
+#endif
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+#endif
index afc1da4d858b4238bec400f23c6bf13aa4566fb2..619e53a1cc48abb68d0946d9355a13fd160a2a0d 100644 (file)
@@ -43,7 +43,7 @@ initobj-y += crt0.o
 # FIXME in $(top)/Makefile
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -78,8 +78,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/ssdt5.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pc
        perl -pi -e 's/AmlCode/AmlCode_ssdt5/g' $(obj)/mainboard/$(MAINBOARDDIR)/pci5.hex
        mv $(obj)/mainboard/$(MAINBOARDDIR)/pci5.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/cache_as_ram_auto.c b/src/mainboard/amd/serengeti_cheetah_fam10/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 0b136ec..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define SYSTEM_TYPE 0  /* SERVER */
-//#define SYSTEM_TYPE 1        /* DESKTOP */
-//#define SYSTEM_TYPE 2        /* MOBILE */
-
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 1
-
-#define DEBUG_SMBUS 1
-
-#define SET_NB_CFG_54 1
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-#define FAM10_SCAN_PCI_BUS 0
-#define FAM10_ALLOCATE_IO_RANGE 0
-
-//used by init_cpus and fidvid
-#define FAM10_SET_FIDVID 1
-#define FAM10_SET_FIDVID_CORE_RANGE 0
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-/* FIXME: Use console.c post_code function */
-static void post_code(u8 value) {
-       outb(value, 0x80);
-}
-
-#if (CONFIG_USE_FAILOVER_IMAGE == 0)
-#include "arch/i386/lib/console.c"
-#include "pc80/serial.c"
-#include "lib/ramtest.c"
-#include <cpu/amd/model_10xxx_rev.h>
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdfam10/raminit.h"
-#include "northbridge/amd/amdfam10/amdfam10.h"
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdfam10/reset_test.c"
-
-#include <console/loglevel.h>
-void die(const char *msg);
-int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
-#define printk_emerg(fmt, arg...)   do_printk(BIOS_EMERG   ,fmt, ##arg)
-#include "cpu/x86/bist.h"
-
-
-#if (CONFIG_USE_FAILOVER_IMAGE == 0)
-
-#include "northbridge/amd/amdfam10/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "northbridge/amd/amdfam10/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-       //GPIO on amd8111 to enable MEMRST ????
-       outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16); // REVC_MEMRST_EN=1
-       outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-
-static void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_HUB 0x18
-       int ret,i;
-       u8 device = ctrl->spd_switch_addr;
-
-       printk_debug("switch i2c to : %02x for node %02x \n", device, ctrl->node_id);
-
-       /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
-       i=2;
-       do {
-               ret = smbus_write_byte(SMBUS_HUB, 0x01, (1<<(device & 0x7)));
-       } while ((ret!=0) && (i-->0));
-       smbus_write_byte(SMBUS_HUB, 0x03, 0);
-}
-
-
-static int spd_read_byte(u32 device, u32 address)
-{
-       int result;
-       result = smbus_read_byte(device, address);
-       return result;
-}
-
-#include "northbridge/amd/amdfam10/amdfam10.h"
-#include "northbridge/amd/amdht/ht_wrapper.c"
-
-#include "include/cpu/x86/mem.h"
-#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
-#include "northbridge/amd/amdfam10/raminit_amdmct.c"
-#include "northbridge/amd/amdfam10/amdfam10_pci.c"
-
-#include "resourcemap.c"
-#include "cpu/amd/quadcore/quadcore.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_10xxx/init_cpus.c"
-#include "cpu/amd/model_10xxx/fidvid.c"
-
-#endif /* (CONFIG_USE_FAILOVER_IMAGE == 0) */
-
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdfam10/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       int last_boot_normal_flag = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_flag) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       /* mov bsp to bus 0xff when > 8 nodes */
-       set_bsp_node_CHtExtNodeCfgEn();
-       enumerate_ht_chain();
-
-       /* Setup the rom access for 4M */
-       amd8111_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_flag) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
-
-normal_image:
-       __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               );
-
-fallback_image:
- #if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               )
- #endif
-       ;
-}
-#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1)) */
-
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-//FIXME: I think that there is a hole here with the real_main() logic realmain is inside a CONFIG_USE_FAILOVER_IMAGE=0.
-#if CONFIG_HAVE_FAILOVER_BOOT==1
- #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
- #else
-       real_main(bist, cpu_init_detectedx);
- #endif
-#else
- #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
- #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-
-#if (CONFIG_USE_FAILOVER_IMAGE==0)
-#include "spd_addr.h"
-#include "cpu/amd/microcode/microcode.c"
-#include "cpu/amd/model_10xxx/update_microcode.c"
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-       u32 bsp_apicid = 0;
-       u32 val;
-       msr_t msr;
-
-       post_code(0x30);
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo); /* mmconf is inited in init_cpus */
-               /* All cores run this but the BSP(node0,core0) is the only core that returns. */
-       }
-
-       post_code(0x32);
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       printk_debug("\n");
-
-//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       // Load MPB
-       val = cpuid_eax(1);
-       printk_debug("BSP Family_Model: %08x \n", val);
-       printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
-       printk_debug("bsp_apicid = %02x \n", bsp_apicid);
-       printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
-
-       /* Setup sysinfo defaults */
-       set_sysinfo_in_ram(0);
-
-       update_microcode(val);
-       post_code(0x33);
-
-       cpuSetAMDMSR();
-       post_code(0x34);
-
-       amd_ht_init(sysinfo);
-       post_code(0x35);
-
-       /* Setup nodes PCI space and start core 0 AP init. */
-       finalize_node_setup(sysinfo);
-
-       /* Setup any mainboard PCI settings etc. */
-       setup_mb_resource_map();
-       post_code(0x36);
-
-       /* wait for all the APs core0 started by finalize_node_setup. */
-       /* FIXME: A bunch of cores are going to start output to serial at once.
-          It would be nice to fixup prink spinlocks for ROM XIP mode.
-          I think it could be done by putting the spinlock flag in the cache
-          of the BSP located right after sysinfo.
-        */
-       wait_all_core0_started();
-
- #if CONFIG_LOGICAL_CPUS==1
-       /* Core0 on each node is configured. Now setup any additional cores. */
-       printk_debug("start_other_cores()\n");
-       start_other_cores();
-       post_code(0x37);
-       wait_all_other_cores_started(bsp_apicid);
- #endif
-
-       post_code(0x38);
-
- #if FAM10_SET_FIDVID == 1
-       msr = rdmsr(0xc0010071);
-       printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-
-       /* FIXME: The sb fid change may survive the warm reset and only
-          need to be done once.*/
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-       post_code(0x39);
-
-       if (!warm_reset_detect(0)) {                    // BSP is node 0
-               init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
-       } else {
-               init_fidvid_stage2(bsp_apicid, 0);      // BSP is node 0
-       }
-
-       post_code(0x3A);
-
-       /* show final fid and vid */
-       msr=rdmsr(0xc0010071);
-       printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
- #endif
-
-
-       /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
-       if (!warm_reset_detect(0)) {
-               print_info("...WARM RESET...\n\n\n");
-               soft_reset_x(sysinfo->sbbusn, sysinfo->sbdn);
-               die("After soft_reset_x - shouldn't see this message!!!\n");
-       }
-
-       post_code(0x3B);
-
-
-       /* FIXME:  Move this to chipset init.
-       enable cf9 for hard reset */
-       print_debug("enable_cf9_x()\n");
-       enable_cf9_x(sysinfo->sbbusn, sysinfo->sbdn);
-       post_code(0x3C);
-
-       /* It's the time to set ctrl in sysinfo now; */
-       printk_debug("fill_mem_ctrl()\n");
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       post_code(0x3D);
-
-
-       printk_debug("enable_smbus()\n");
-       enable_smbus();
-       post_code(0x3E);
-
-
-       memreset_setup();
-       post_code(0x40);
-
-//     die("Die Before MCT init.");
-
-       printk_debug("raminit_amdmct()\n");
-       raminit_amdmct(sysinfo);
-       post_code(0x41);
-
-
-/*
-       dump_pci_device_range(PCI_DEV(0, 0x18, 0), 0, 0x200);
-       dump_pci_device_range(PCI_DEV(0, 0x18, 1), 0, 0x200);
-       dump_pci_device_range(PCI_DEV(0, 0x18, 2), 0, 0x200);
-       dump_pci_device_range(PCI_DEV(0, 0x18, 3), 0, 0x200);
-*/
-
-//     ram_check(0x00200000, 0x00200000 + (640 * 1024));
-//     ram_check(0x40200000, 0x40200000 + (640 * 1024));
-
-
-//     die("After MCT init before CAR disabled.");
-
-       post_code(0x42);
-       printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
-       post_cache_as_ram();    // BSP switch stack to ram, copy then execute LB.
-       post_code(0x43);        // Should never see this post code.
-
-
-}
-
-
-#endif /* CONFIG_USE_FAILOVER_IMAGE==0 */
diff --git a/src/mainboard/amd/serengeti_cheetah_fam10/romstage.c b/src/mainboard/amd/serengeti_cheetah_fam10/romstage.c
new file mode 100644 (file)
index 0000000..0b136ec
--- /dev/null
@@ -0,0 +1,383 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define SYSTEM_TYPE 0  /* SERVER */
+//#define SYSTEM_TYPE 1        /* DESKTOP */
+//#define SYSTEM_TYPE 2        /* MOBILE */
+
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 1
+
+#define DEBUG_SMBUS 1
+
+#define SET_NB_CFG_54 1
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+#define FAM10_SCAN_PCI_BUS 0
+#define FAM10_ALLOCATE_IO_RANGE 0
+
+//used by init_cpus and fidvid
+#define FAM10_SET_FIDVID 1
+#define FAM10_SET_FIDVID_CORE_RANGE 0
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+/* FIXME: Use console.c post_code function */
+static void post_code(u8 value) {
+       outb(value, 0x80);
+}
+
+#if (CONFIG_USE_FAILOVER_IMAGE == 0)
+#include "arch/i386/lib/console.c"
+#include "pc80/serial.c"
+#include "lib/ramtest.c"
+#include <cpu/amd/model_10xxx_rev.h>
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdfam10/raminit.h"
+#include "northbridge/amd/amdfam10/amdfam10.h"
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdfam10/reset_test.c"
+
+#include <console/loglevel.h>
+void die(const char *msg);
+int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
+#define printk_emerg(fmt, arg...)   do_printk(BIOS_EMERG   ,fmt, ##arg)
+#include "cpu/x86/bist.h"
+
+
+#if (CONFIG_USE_FAILOVER_IMAGE == 0)
+
+#include "northbridge/amd/amdfam10/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "northbridge/amd/amdfam10/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+       //GPIO on amd8111 to enable MEMRST ????
+       outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16); // REVC_MEMRST_EN=1
+       outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+
+static void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_HUB 0x18
+       int ret,i;
+       u8 device = ctrl->spd_switch_addr;
+
+       printk_debug("switch i2c to : %02x for node %02x \n", device, ctrl->node_id);
+
+       /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
+       i=2;
+       do {
+               ret = smbus_write_byte(SMBUS_HUB, 0x01, (1<<(device & 0x7)));
+       } while ((ret!=0) && (i-->0));
+       smbus_write_byte(SMBUS_HUB, 0x03, 0);
+}
+
+
+static int spd_read_byte(u32 device, u32 address)
+{
+       int result;
+       result = smbus_read_byte(device, address);
+       return result;
+}
+
+#include "northbridge/amd/amdfam10/amdfam10.h"
+#include "northbridge/amd/amdht/ht_wrapper.c"
+
+#include "include/cpu/x86/mem.h"
+#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
+#include "northbridge/amd/amdfam10/raminit_amdmct.c"
+#include "northbridge/amd/amdfam10/amdfam10_pci.c"
+
+#include "resourcemap.c"
+#include "cpu/amd/quadcore/quadcore.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_10xxx/init_cpus.c"
+#include "cpu/amd/model_10xxx/fidvid.c"
+
+#endif /* (CONFIG_USE_FAILOVER_IMAGE == 0) */
+
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdfam10/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       int last_boot_normal_flag = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_flag) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       /* mov bsp to bus 0xff when > 8 nodes */
+       set_bsp_node_CHtExtNodeCfgEn();
+       enumerate_ht_chain();
+
+       /* Setup the rom access for 4M */
+       amd8111_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_flag) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+
+normal_image:
+       __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               );
+
+fallback_image:
+ #if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               )
+ #endif
+       ;
+}
+#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1)) */
+
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+//FIXME: I think that there is a hole here with the real_main() logic realmain is inside a CONFIG_USE_FAILOVER_IMAGE=0.
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+ #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+ #else
+       real_main(bist, cpu_init_detectedx);
+ #endif
+#else
+ #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+ #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+
+#if (CONFIG_USE_FAILOVER_IMAGE==0)
+#include "spd_addr.h"
+#include "cpu/amd/microcode/microcode.c"
+#include "cpu/amd/model_10xxx/update_microcode.c"
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+       u32 bsp_apicid = 0;
+       u32 val;
+       msr_t msr;
+
+       post_code(0x30);
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo); /* mmconf is inited in init_cpus */
+               /* All cores run this but the BSP(node0,core0) is the only core that returns. */
+       }
+
+       post_code(0x32);
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       printk_debug("\n");
+
+//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       // Load MPB
+       val = cpuid_eax(1);
+       printk_debug("BSP Family_Model: %08x \n", val);
+       printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
+       printk_debug("bsp_apicid = %02x \n", bsp_apicid);
+       printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
+
+       /* Setup sysinfo defaults */
+       set_sysinfo_in_ram(0);
+
+       update_microcode(val);
+       post_code(0x33);
+
+       cpuSetAMDMSR();
+       post_code(0x34);
+
+       amd_ht_init(sysinfo);
+       post_code(0x35);
+
+       /* Setup nodes PCI space and start core 0 AP init. */
+       finalize_node_setup(sysinfo);
+
+       /* Setup any mainboard PCI settings etc. */
+       setup_mb_resource_map();
+       post_code(0x36);
+
+       /* wait for all the APs core0 started by finalize_node_setup. */
+       /* FIXME: A bunch of cores are going to start output to serial at once.
+          It would be nice to fixup prink spinlocks for ROM XIP mode.
+          I think it could be done by putting the spinlock flag in the cache
+          of the BSP located right after sysinfo.
+        */
+       wait_all_core0_started();
+
+ #if CONFIG_LOGICAL_CPUS==1
+       /* Core0 on each node is configured. Now setup any additional cores. */
+       printk_debug("start_other_cores()\n");
+       start_other_cores();
+       post_code(0x37);
+       wait_all_other_cores_started(bsp_apicid);
+ #endif
+
+       post_code(0x38);
+
+ #if FAM10_SET_FIDVID == 1
+       msr = rdmsr(0xc0010071);
+       printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+
+       /* FIXME: The sb fid change may survive the warm reset and only
+          need to be done once.*/
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+       post_code(0x39);
+
+       if (!warm_reset_detect(0)) {                    // BSP is node 0
+               init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
+       } else {
+               init_fidvid_stage2(bsp_apicid, 0);      // BSP is node 0
+       }
+
+       post_code(0x3A);
+
+       /* show final fid and vid */
+       msr=rdmsr(0xc0010071);
+       printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+ #endif
+
+
+       /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
+       if (!warm_reset_detect(0)) {
+               print_info("...WARM RESET...\n\n\n");
+               soft_reset_x(sysinfo->sbbusn, sysinfo->sbdn);
+               die("After soft_reset_x - shouldn't see this message!!!\n");
+       }
+
+       post_code(0x3B);
+
+
+       /* FIXME:  Move this to chipset init.
+       enable cf9 for hard reset */
+       print_debug("enable_cf9_x()\n");
+       enable_cf9_x(sysinfo->sbbusn, sysinfo->sbdn);
+       post_code(0x3C);
+
+       /* It's the time to set ctrl in sysinfo now; */
+       printk_debug("fill_mem_ctrl()\n");
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       post_code(0x3D);
+
+
+       printk_debug("enable_smbus()\n");
+       enable_smbus();
+       post_code(0x3E);
+
+
+       memreset_setup();
+       post_code(0x40);
+
+//     die("Die Before MCT init.");
+
+       printk_debug("raminit_amdmct()\n");
+       raminit_amdmct(sysinfo);
+       post_code(0x41);
+
+
+/*
+       dump_pci_device_range(PCI_DEV(0, 0x18, 0), 0, 0x200);
+       dump_pci_device_range(PCI_DEV(0, 0x18, 1), 0, 0x200);
+       dump_pci_device_range(PCI_DEV(0, 0x18, 2), 0, 0x200);
+       dump_pci_device_range(PCI_DEV(0, 0x18, 3), 0, 0x200);
+*/
+
+//     ram_check(0x00200000, 0x00200000 + (640 * 1024));
+//     ram_check(0x40200000, 0x40200000 + (640 * 1024));
+
+
+//     die("After MCT init before CAR disabled.");
+
+       post_code(0x42);
+       printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
+       post_cache_as_ram();    // BSP switch stack to ram, copy then execute LB.
+       post_code(0x43);        // Should never see this post code.
+
+
+}
+
+
+#endif /* CONFIG_USE_FAILOVER_IMAGE==0 */
index 5f246ec3e88ea78446ffefb06fc2c6b69dafa8ff..c0e552a3fcf03e3fa5f9b25a83abf2630d0950e5 100644 (file)
@@ -19,7 +19,7 @@
 
 /**
  * This file defines the SPD addresses for the mainboard. Must be included in
- * cache_as_ram_auto.c
+ * romstage.c
  */
 
 #define RC00 0
diff --git a/src/mainboard/arima/hdama/cache_as_ram_auto.c b/src/mainboard/arima/hdama/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 19c4c6b..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/nsc/pc87360/pc87360_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87360_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-/*
- * GPIO28 of 8111 will control H0_MEMRESET_L
- * GPIO29 of 8111 will control H1_MEMRESET_L
- */
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-       else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               udelay(90);
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define FIRST_CPU  1
-#define SECOND_CPU 1
-#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       amd8111_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
- normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               : /* outputs */
-               : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
-               );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       int needs_reset;
-       unsigned bsp_apicid = 0;
-       struct mem_controller ctrl[8];
-       unsigned nodes;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-       }
-
-       pc87360_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       setup_default_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       /* This is needed to be able to call udelay().  It could be moved to
-        * memreset_setup, since udelay is called in memreset. */
-       init_timer();
-
-       // automatically set that for you, but you might meet tight space
-       needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-               }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-
-       sdram_initialize(nodes, ctrl);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/arima/hdama/romstage.c b/src/mainboard/arima/hdama/romstage.c
new file mode 100644 (file)
index 0000000..19c4c6b
--- /dev/null
@@ -0,0 +1,217 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/nsc/pc87360/pc87360_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87360_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+/*
+ * GPIO28 of 8111 will control H0_MEMRESET_L
+ * GPIO29 of 8111 will control H1_MEMRESET_L
+ */
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+       else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               udelay(90);
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define FIRST_CPU  1
+#define SECOND_CPU 1
+#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       amd8111_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+ normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               : /* outputs */
+               : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
+               );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       int needs_reset;
+       unsigned bsp_apicid = 0;
+       struct mem_controller ctrl[8];
+       unsigned nodes;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+       }
+
+       pc87360_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       setup_default_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       /* This is needed to be able to call udelay().  It could be moved to
+        * memreset_setup, since udelay is called in memreset. */
+       init_timer();
+
+       // automatically set that for you, but you might meet tight space
+       needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+               }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+
+       sdram_initialize(nodes, ctrl);
+
+       post_cache_as_ram();
+}
index 6f3a239f400a38e4b5fab9c3d402ee80839e7b44..843cf9a8ee4926ba9301f62ff9f2fae64fc4902e 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/artecgroup/dbe61/cache_as_ram_auto.c b/src/mainboard/artecgroup/dbe61/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 0b3721a..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-#include "spd_table.h"
-
-
-#define POST_CODE(x) outb(x, 0x80)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-
-static int spd_read_byte(unsigned device, unsigned address)
-{
-       int i;
-
-       if (device == DIMM0){
-               for (i=0; i < (ARRAY_SIZE(spd_table)); i++){
-                       if (spd_table[i].address == address){
-                               return spd_table[i].data;
-                       }
-               }
-       }
-
-       /* returns 0xFF on any failures */
-       return 0xFF;
-}
-
-#define ManualConf 0           /* Do automatic strapped PLL config */
-/* CPU and GLIU mult/div 500/266*/
-#define PLLMSRhi 0x0000039C /* 33MHz PCI, 0x000003DD for 66MHz PCI */
-/* Hold Count - how long we will sit in reset */
-#define PLLMSRlo 0x00DE6000
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-       /* Setup access to the cache for under 1MB. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x1000A000;    /* 0-A0000 write back */
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x0;           /* write back */
-       msr.lo = 0x0;
-       wrmsr(CPU_RCONF_A0_BF, msr);
-       wrmsr(CPU_RCONF_C0_DF, msr);
-       wrmsr(CPU_RCONF_E0_FF, msr);
-
-       /* Setup access to the cache for under 640K. Note MC not setup yet. */
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU0 + 0x21, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU1 + 0x21, msr);
-
-}
-
-static void mb_gpio_init(void)
-{
-       /* Early mainboard specific GPIO setup */
-}
-
-static void cs5536_setup_onchipuart2(void)
-{
-       msr_t msr;
-
-       /* GPIO4 - UART2_TX */
-       /* Set: Output Enable  (0x4) */
-       outl(GPIOL_4_SET, GPIO_IO_BASE + GPIOL_OUTPUT_ENABLE);
-       /* Set: OUTAUX1 Select (0x10) */
-       outl(GPIOL_4_SET, GPIO_IO_BASE + GPIOL_OUT_AUX1_SELECT);
-       /* GPIO4 - UART2_RX */
-       /* Set: Input Enable   (0x20) */
-       outl(GPIOL_3_SET, GPIO_IO_BASE + GPIOL_INPUT_ENABLE);
-       /* Set: INAUX1 Select  (0x34) */
-       outl(GPIOL_3_SET, GPIO_IO_BASE + GPIOL_IN_AUX1_SELECT);
-
-       /* Set: GPIO 3 + 3 Pull Up  (0x18) */
-       outl(GPIOL_3_SET | GPIOL_4_SET, GPIO_IO_BASE + GPIOL_PULLUP_ENABLE);
-
-       /* set address to 3F8 */
-       msr = rdmsr(MDD_LEG_IO);
-       msr.lo |= 0x7 << 20;
-       wrmsr(MDD_LEG_IO, msr);
-
-       /* Bit 1 = DEVEN (device enable)
-        * Bit 4 = EN_BANKS (allow access to the upper banks
-        */
-       msr.lo = (1 << 4) | (1 << 1);
-       msr.hi = 0;
-
-       /* enable COM2 */
-       wrmsr(MDD_UART2_CONF, msr);
-}
-
-void cache_as_ram_main(void)
-{
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* NOTE: must do this AFTER the early_setup!
-        * it is counting on some early MSR setup
-        * for cs5536
-        */
-       /* cs5536_disable_internal_uart  disable them. Set them up now... */
-       cs5536_setup_onchipuart2(); /* dbe61 uses UART2 as COM1 */
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Dump memory configuratation */
-       /*{
-       msr_t msr;
-       msr = rdmsr(MC_CF07_DATA);
-       print_debug("MC_CF07_DATA: ");
-       print_debug_hex32(MC_CF07_DATA);
-       print_debug(" value is: ");
-       print_debug_hex32(msr.hi);
-       print_debug(":");
-       print_debug_hex32(msr.lo);
-       print_debug(" \n");
-
-       msr = rdmsr(MC_CF1017_DATA);
-       print_debug("MC_CF1017_DATA: ");
-       print_debug_hex32(MC_CF1017_DATA);
-       print_debug(" value is: ");
-       print_debug_hex32(msr.hi);
-       print_debug(":");
-       print_debug_hex32(msr.lo);
-       print_debug(" \n");
-
-       msr = rdmsr(MC_CF8F_DATA);
-       print_debug("MC_CF8F_DATA: ");
-       print_debug_hex32(MC_CF8F_DATA);
-       print_debug(" value is: ");
-       print_debug_hex32(msr.hi);
-       print_debug(":");
-       print_debug_hex32(msr.lo);
-       msr = rdmsr(MC_CF8F_DATA);
-       print_debug(" \n");
-       }*/
-
-       /* Check memory. */
-       /* ram_check(0x00000000, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot */
-       return;
-}
diff --git a/src/mainboard/artecgroup/dbe61/romstage.c b/src/mainboard/artecgroup/dbe61/romstage.c
new file mode 100644 (file)
index 0000000..0b3721a
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+#include "spd_table.h"
+
+
+#define POST_CODE(x) outb(x, 0x80)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+
+static int spd_read_byte(unsigned device, unsigned address)
+{
+       int i;
+
+       if (device == DIMM0){
+               for (i=0; i < (ARRAY_SIZE(spd_table)); i++){
+                       if (spd_table[i].address == address){
+                               return spd_table[i].data;
+                       }
+               }
+       }
+
+       /* returns 0xFF on any failures */
+       return 0xFF;
+}
+
+#define ManualConf 0           /* Do automatic strapped PLL config */
+/* CPU and GLIU mult/div 500/266*/
+#define PLLMSRhi 0x0000039C /* 33MHz PCI, 0x000003DD for 66MHz PCI */
+/* Hold Count - how long we will sit in reset */
+#define PLLMSRlo 0x00DE6000
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+       /* Setup access to the cache for under 1MB. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x1000A000;    /* 0-A0000 write back */
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x0;           /* write back */
+       msr.lo = 0x0;
+       wrmsr(CPU_RCONF_A0_BF, msr);
+       wrmsr(CPU_RCONF_C0_DF, msr);
+       wrmsr(CPU_RCONF_E0_FF, msr);
+
+       /* Setup access to the cache for under 640K. Note MC not setup yet. */
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU0 + 0x21, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU1 + 0x21, msr);
+
+}
+
+static void mb_gpio_init(void)
+{
+       /* Early mainboard specific GPIO setup */
+}
+
+static void cs5536_setup_onchipuart2(void)
+{
+       msr_t msr;
+
+       /* GPIO4 - UART2_TX */
+       /* Set: Output Enable  (0x4) */
+       outl(GPIOL_4_SET, GPIO_IO_BASE + GPIOL_OUTPUT_ENABLE);
+       /* Set: OUTAUX1 Select (0x10) */
+       outl(GPIOL_4_SET, GPIO_IO_BASE + GPIOL_OUT_AUX1_SELECT);
+       /* GPIO4 - UART2_RX */
+       /* Set: Input Enable   (0x20) */
+       outl(GPIOL_3_SET, GPIO_IO_BASE + GPIOL_INPUT_ENABLE);
+       /* Set: INAUX1 Select  (0x34) */
+       outl(GPIOL_3_SET, GPIO_IO_BASE + GPIOL_IN_AUX1_SELECT);
+
+       /* Set: GPIO 3 + 3 Pull Up  (0x18) */
+       outl(GPIOL_3_SET | GPIOL_4_SET, GPIO_IO_BASE + GPIOL_PULLUP_ENABLE);
+
+       /* set address to 3F8 */
+       msr = rdmsr(MDD_LEG_IO);
+       msr.lo |= 0x7 << 20;
+       wrmsr(MDD_LEG_IO, msr);
+
+       /* Bit 1 = DEVEN (device enable)
+        * Bit 4 = EN_BANKS (allow access to the upper banks
+        */
+       msr.lo = (1 << 4) | (1 << 1);
+       msr.hi = 0;
+
+       /* enable COM2 */
+       wrmsr(MDD_UART2_CONF, msr);
+}
+
+void cache_as_ram_main(void)
+{
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* NOTE: must do this AFTER the early_setup!
+        * it is counting on some early MSR setup
+        * for cs5536
+        */
+       /* cs5536_disable_internal_uart  disable them. Set them up now... */
+       cs5536_setup_onchipuart2(); /* dbe61 uses UART2 as COM1 */
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Dump memory configuratation */
+       /*{
+       msr_t msr;
+       msr = rdmsr(MC_CF07_DATA);
+       print_debug("MC_CF07_DATA: ");
+       print_debug_hex32(MC_CF07_DATA);
+       print_debug(" value is: ");
+       print_debug_hex32(msr.hi);
+       print_debug(":");
+       print_debug_hex32(msr.lo);
+       print_debug(" \n");
+
+       msr = rdmsr(MC_CF1017_DATA);
+       print_debug("MC_CF1017_DATA: ");
+       print_debug_hex32(MC_CF1017_DATA);
+       print_debug(" value is: ");
+       print_debug_hex32(msr.hi);
+       print_debug(":");
+       print_debug_hex32(msr.lo);
+       print_debug(" \n");
+
+       msr = rdmsr(MC_CF8F_DATA);
+       print_debug("MC_CF8F_DATA: ");
+       print_debug_hex32(MC_CF8F_DATA);
+       print_debug(" value is: ");
+       print_debug_hex32(msr.hi);
+       print_debug(":");
+       print_debug_hex32(msr.lo);
+       msr = rdmsr(MC_CF8F_DATA);
+       print_debug(" \n");
+       }*/
+
+       /* Check memory. */
+       /* ram_check(0x00000000, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot */
+       return;
+}
diff --git a/src/mainboard/asi/mb_5blgp/auto.c b/src/mainboard/asi/mb_5blgp/auto.c
deleted file mode 100644 (file)
index b4b82fc..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "cpu/x86/bist.h"
-#include "superio/nsc/pc87351/pc87351_early_serial.c"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87351_SP1)
-
-static void main(unsigned long bist)
-{
-       pc87351_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-       cs5530_enable_rom();
-       sdram_init();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asi/mb_5blgp/romstage.c b/src/mainboard/asi/mb_5blgp/romstage.c
new file mode 100644 (file)
index 0000000..b4b82fc
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "cpu/x86/bist.h"
+#include "superio/nsc/pc87351/pc87351_early_serial.c"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87351_SP1)
+
+static void main(unsigned long bist)
+{
+       pc87351_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+       cs5530_enable_rom();
+       sdram_init();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asi/mb_5blmp/auto.c b/src/mainboard/asi/mb_5blmp/auto.c
deleted file mode 100644 (file)
index 96e91c0..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "superio/nsc/pc87351/pc87351_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87351_SP1)
-
-static void main(unsigned long bist)
-{
-       /* Initialize the serial console. */
-       pc87351_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       cs5530_enable_rom();
-
-       /* Initialize RAM. */
-       sdram_init();
-
-       /* Check whether RAM works. */
-       /* ram_check(0x00000000, 0x4000); */
-}
diff --git a/src/mainboard/asi/mb_5blmp/romstage.c b/src/mainboard/asi/mb_5blmp/romstage.c
new file mode 100644 (file)
index 0000000..96e91c0
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "superio/nsc/pc87351/pc87351_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87351_SP1)
+
+static void main(unsigned long bist)
+{
+       /* Initialize the serial console. */
+       pc87351_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       cs5530_enable_rom();
+
+       /* Initialize RAM. */
+       sdram_init();
+
+       /* Check whether RAM works. */
+       /* ram_check(0x00000000, 0x4000); */
+}
index bf0157620a0218bb0a787392033574246257b89d..8bcaea7ac4e8cbb0709d9cba68b02ff1b5f51769 100644 (file)
@@ -35,7 +35,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -67,8 +67,8 @@ $(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' pci4.hex
        mv pci4.hex ssdt4.c
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/asus/a8n_e/cache_as_ram_auto.c b/src/mainboard/asus/a8n_e/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 8e0ba29..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
- * Copyright (C) 2007 Philipp Degler <pdegler@rumms.uni-mannheim.de>
- * (Thanks to LSRA University of Mannheim for their support)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-/* Used by it8712f_enable_serial(). */
-#define SERIAL_DEV PNP_DEV(0x2e, IT8712F_SP1)
-
-/* Used by raminit. */
-#define QRANK_DIMM_SUPPORT 1
-
-/* Turn this on for SMBus debugging output. */
-#define DEBUG_SMBUS 0
-
-#if CONFIG_LOGICAL_CPUS == 1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-
-/* Used by ck894_early_setup(). */
-#define CK804_NUM 1
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "cpu/amd/dualcore/dualcore.c"
-
-static void memreset_setup(void)
-{
-       /* Nothing to do. */
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       /* Nothing to do. */
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* Nothing to do. */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "lib/generic_sdram.c"
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-#include "southbridge/nvidia/ck804/ck804_early_setup.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#endif /* CONFIG_USE_FAILOVER_IMAGE */
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) \
-       || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       /* Subject decoding */
-       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b, byte);
-
-       /* LPC Positive Decode 0 */
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0);
-       dword |= (1 << 0) | (1 << 1);   /* Serial 0, Serial 1 */
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a CPU only reset? Or is this a secondary CPU? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the ck804 */
-       ck804_enable_rom();
-
-       /* Is this a deliberate reset by the BIOS? */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-
-       /* This is the primary CPU. How should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-
-normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               :                                       /* outputs */
-               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
-               );
-
-fallback_image:
-
-#if CONFIG_HAVE_FAILOVER_BOOT == 1
-       __asm__ volatile ("jmp __fallback_image"
-               :                                       /* outputs */
-               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
-               )
-#endif
-       ;
-}
-
-#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) ... */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT == 1
-#if CONFIG_USE_FAILOVER_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#else
-       real_main(bist, cpu_init_detectedx);
-#endif
-#else
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
-               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
-               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
-#endif
-       };
-
-       int needs_reset;
-       unsigned nodes, bsp_apicid = 0;
-       struct mem_controller ctrl[8];
-
-       if (bist == 0)
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-
-       it8712f_24mhz_clkin();
-       it8712f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x18, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched. */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       needs_reset |= ht_setup_chains_x();
-       needs_reset |= ck804_early_setup_x();
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-       /* It's the time to set ctrl now. */
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       dump_spd_registers(&ctrl[0]);
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-#if 0
-       print_pci_devices();
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-}
-#endif /* CONFIG_USE_FAILOVER_IMAGE */
diff --git a/src/mainboard/asus/a8n_e/romstage.c b/src/mainboard/asus/a8n_e/romstage.c
new file mode 100644 (file)
index 0000000..8e0ba29
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
+ * Copyright (C) 2007 Philipp Degler <pdegler@rumms.uni-mannheim.de>
+ * (Thanks to LSRA University of Mannheim for their support)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+/* Used by it8712f_enable_serial(). */
+#define SERIAL_DEV PNP_DEV(0x2e, IT8712F_SP1)
+
+/* Used by raminit. */
+#define QRANK_DIMM_SUPPORT 1
+
+/* Turn this on for SMBus debugging output. */
+#define DEBUG_SMBUS 0
+
+#if CONFIG_LOGICAL_CPUS == 1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+
+/* Used by ck894_early_setup(). */
+#define CK804_NUM 1
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "cpu/amd/dualcore/dualcore.c"
+
+static void memreset_setup(void)
+{
+       /* Nothing to do. */
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       /* Nothing to do. */
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* Nothing to do. */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "lib/generic_sdram.c"
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+#include "southbridge/nvidia/ck804/ck804_early_setup.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#endif /* CONFIG_USE_FAILOVER_IMAGE */
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) \
+       || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       /* Subject decoding */
+       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b, byte);
+
+       /* LPC Positive Decode 0 */
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0);
+       dword |= (1 << 0) | (1 << 1);   /* Serial 0, Serial 1 */
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a CPU only reset? Or is this a secondary CPU? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the ck804 */
+       ck804_enable_rom();
+
+       /* Is this a deliberate reset by the BIOS? */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+
+       /* This is the primary CPU. How should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+
+normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               :                                       /* outputs */
+               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
+               );
+
+fallback_image:
+
+#if CONFIG_HAVE_FAILOVER_BOOT == 1
+       __asm__ volatile ("jmp __fallback_image"
+               :                                       /* outputs */
+               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
+               )
+#endif
+       ;
+}
+
+#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) ... */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT == 1
+#if CONFIG_USE_FAILOVER_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#else
+       real_main(bist, cpu_init_detectedx);
+#endif
+#else
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
+               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
+               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
+#endif
+       };
+
+       int needs_reset;
+       unsigned nodes, bsp_apicid = 0;
+       struct mem_controller ctrl[8];
+
+       if (bist == 0)
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+
+       it8712f_24mhz_clkin();
+       it8712f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x18, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched. */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       needs_reset |= ht_setup_chains_x();
+       needs_reset |= ck804_early_setup_x();
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+       /* It's the time to set ctrl now. */
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       dump_spd_registers(&ctrl[0]);
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+#if 0
+       print_pci_devices();
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+}
+#endif /* CONFIG_USE_FAILOVER_IMAGE */
index 8f829badfe2bb70633ac003e678007a3e7728123..8900722a50c9042dc01ebae3651ce6da136bf988 100644 (file)
@@ -16,7 +16,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -34,8 +34,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/asus/a8v-e_se/cache_as_ram_auto.c b/src/mainboard/asus/a8v-e_se/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 4ec3aee..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 AMD
- * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
- * Copyright (C) 2006 MSI
- * (Written by Bingxun Shi <bingxunshi@gmail.com> for MSI)
- * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz> 
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-unsigned int get_sbdn(unsigned bus);
-
-/* Used by raminit. */
-#define QRANK_DIMM_SUPPORT 1
-
-/* Used by init_cpus and fidvid */
-#define K8_SET_FIDVID 1
-
-/* If we want to wait for core1 done before DQS training, set it to 0. */
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-/* #define DEBUG_SMBUS 1 */
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
-#define GPIO_DEV PNP_DEV(0x2e, W83627EHG_GPIO_SUSLED)
-#define ACPI_DEV PNP_DEV(0x2e, W83627EHG_ACPI)
-#define RTC_DEV PNP_DEV(0x2e, W83627EHG_RTC)
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-void soft_reset(void)
-{
-       uint8_t tmp;
-
-       set_bios_reset();
-       print_debug("soft reset \r\n");
-
-       /* PCI reset */
-       tmp = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x4f);
-       tmp |= 0x01;
-       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x4f, tmp);
-
-       while (1) {
-               /* daisy daisy ... */
-               hlt();
-       }
-}
-
-#define K8_4RANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/dualcore/dualcore.c"
-#include "southbridge/via/k8t890/k8t890_early_car.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_fxx/init_cpus.c"
-#include "cpu/amd/model_fxx/fidvid.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-
-void hard_reset(void)
-{
-       print_info("NO HARD RESET. FIX ME!\n");
-}
-
-unsigned int get_sbdn(unsigned bus)
-{
-       device_t dev;
-
-       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
-                                       PCI_DEVICE_ID_VIA_VT8237R_LPC), bus);
-       return (dev >> 15) & 0x1f;
-}
-
-void sio_init(void)
-{
-       u8 reg;
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       /* We have 24MHz input. */
-       reg = pnp_read_config(SERIAL_DEV, 0x24);
-       pnp_write_config(SERIAL_DEV, 0x24, (reg & ~0x40));
-       /* We have GPIO for KB/MS pin. */
-       reg = pnp_read_config(SERIAL_DEV, 0x2a);
-       pnp_write_config(SERIAL_DEV, 0x2a, (reg | 1));
-       /* We have all RESTOUT and even some reserved bits, too. */
-       reg = pnp_read_config(SERIAL_DEV, 0x2c);
-       pnp_write_config(SERIAL_DEV, 0x2c, (reg | 0xf0));
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-       pnp_enter_ext_func_mode(ACPI_DEV);
-       pnp_set_logical_device(ACPI_DEV);
-       /*
-        * Set the delay rising time from PWROK_LP to PWROK_ST to
-        * 300 - 600ms, and 0 to vice versa.
-        */
-       reg = pnp_read_config(ACPI_DEV, 0xe6);
-       pnp_write_config(ACPI_DEV, 0xe6, (reg & 0xf0));
-       /* 1 Use external suspend clock source 32.768KHz. Undocumented?? */
-       reg = pnp_read_config(ACPI_DEV, 0xe4);
-       pnp_write_config(ACPI_DEV, 0xe4, (reg | 0x10));
-       pnp_exit_ext_func_mode(ACPI_DEV);
-
-       pnp_enter_ext_func_mode(GPIO_DEV);
-       pnp_set_logical_device(GPIO_DEV);
-       /* Set memory voltage to 2.75V, vcore offset + 100mV, 1.5V chipset voltage. */
-       pnp_write_config(GPIO_DEV, 0x30, 0x09); /* Enable GPIO 2 & GPIO 5. */
-       pnp_write_config(GPIO_DEV, 0xe2, 0x00); /* No inversion */
-       pnp_write_config(GPIO_DEV, 0xe5, 0x00); /* No inversion */
-       pnp_write_config(GPIO_DEV, 0xe3, 0x03); /* 0000 0011, 0=output 1=input */
-       pnp_write_config(GPIO_DEV, 0xe0, 0xde); /* 1101 1110, 0=output 1=input */
-       pnp_write_config(GPIO_DEV, 0xe1, 0x01); /* Set output val. */
-       pnp_write_config(GPIO_DEV, 0xe4, 0xb4); /* Set output val (1011 0100). */
-       pnp_exit_ext_func_mode(GPIO_DEV);
-}
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* unsigned last_boot_normal_x = last_boot_normal(); */
-       /* FIXME */
-       unsigned last_boot_normal_x = 1;
-
-       sio_init();
-       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       enable_rom_decode();
-
-       print_info("now booting... fallback\r\n");
-
-       /* Is this a CPU only reset? Or is this a secondary CPU? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x)
-                       goto normal_image;
-               else
-                       goto fallback_image;
-       }
-
-       /* Nothing special needs to be done to find bus 0. */
-       /* Allow the HT devices to be found. */
-       enumerate_ht_chain();
-
-       /* Is this a deliberate reset by the BIOS? */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary CPU, how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-
-normal_image:
-       /* print_info("JMP normal image\r\n"); */
-
-       __asm__ __volatile__("jmp __normal_image":
-                            :"a" (bist), "b" (cpu_init_detectedx));
-
-fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
-               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
-               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
-#endif
-       };
-       unsigned bsp_apicid = 0;
-       int needs_reset = 0;
-       struct sys_info *sysinfo =
-           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-       char *p;
-
-       sio_init();
-       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       enable_rom_decode();
-
-       print_info("now booting... real_main\r\n");
-
-       if (bist == 0)
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       setup_default_resource_map();
-       setup_coherent_ht_domain();
-       wait_all_core0_started();
-
-       print_info("now booting... Core0 started\r\n");
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched. */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       init_timer();
-       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       needs_reset |= k8t890_early_setup_ht();
-
-       if (needs_reset) {
-               print_debug("ht reset -\r\n");
-               soft_reset();
-       }
-
-       /* the HT settings needs to be OK, because link freq chnage may cause HT disconnect */
-       enable_fid_change();
-       init_fidvid_bsp(bsp_apicid);
-
-       /* Stop the APs so we can start them later in init. */
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now. */
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-       memreset_setup();
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/asus/a8v-e_se/romstage.c b/src/mainboard/asus/a8v-e_se/romstage.c
new file mode 100644 (file)
index 0000000..4ec3aee
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 AMD
+ * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
+ * Copyright (C) 2006 MSI
+ * (Written by Bingxun Shi <bingxunshi@gmail.com> for MSI)
+ * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz> 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+unsigned int get_sbdn(unsigned bus);
+
+/* Used by raminit. */
+#define QRANK_DIMM_SUPPORT 1
+
+/* Used by init_cpus and fidvid */
+#define K8_SET_FIDVID 1
+
+/* If we want to wait for core1 done before DQS training, set it to 0. */
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+/* #define DEBUG_SMBUS 1 */
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
+#define GPIO_DEV PNP_DEV(0x2e, W83627EHG_GPIO_SUSLED)
+#define ACPI_DEV PNP_DEV(0x2e, W83627EHG_ACPI)
+#define RTC_DEV PNP_DEV(0x2e, W83627EHG_RTC)
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+void soft_reset(void)
+{
+       uint8_t tmp;
+
+       set_bios_reset();
+       print_debug("soft reset \r\n");
+
+       /* PCI reset */
+       tmp = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x4f);
+       tmp |= 0x01;
+       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x4f, tmp);
+
+       while (1) {
+               /* daisy daisy ... */
+               hlt();
+       }
+}
+
+#define K8_4RANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/dualcore/dualcore.c"
+#include "southbridge/via/k8t890/k8t890_early_car.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_fxx/init_cpus.c"
+#include "cpu/amd/model_fxx/fidvid.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+
+void hard_reset(void)
+{
+       print_info("NO HARD RESET. FIX ME!\n");
+}
+
+unsigned int get_sbdn(unsigned bus)
+{
+       device_t dev;
+
+       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
+                                       PCI_DEVICE_ID_VIA_VT8237R_LPC), bus);
+       return (dev >> 15) & 0x1f;
+}
+
+void sio_init(void)
+{
+       u8 reg;
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       /* We have 24MHz input. */
+       reg = pnp_read_config(SERIAL_DEV, 0x24);
+       pnp_write_config(SERIAL_DEV, 0x24, (reg & ~0x40));
+       /* We have GPIO for KB/MS pin. */
+       reg = pnp_read_config(SERIAL_DEV, 0x2a);
+       pnp_write_config(SERIAL_DEV, 0x2a, (reg | 1));
+       /* We have all RESTOUT and even some reserved bits, too. */
+       reg = pnp_read_config(SERIAL_DEV, 0x2c);
+       pnp_write_config(SERIAL_DEV, 0x2c, (reg | 0xf0));
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+       pnp_enter_ext_func_mode(ACPI_DEV);
+       pnp_set_logical_device(ACPI_DEV);
+       /*
+        * Set the delay rising time from PWROK_LP to PWROK_ST to
+        * 300 - 600ms, and 0 to vice versa.
+        */
+       reg = pnp_read_config(ACPI_DEV, 0xe6);
+       pnp_write_config(ACPI_DEV, 0xe6, (reg & 0xf0));
+       /* 1 Use external suspend clock source 32.768KHz. Undocumented?? */
+       reg = pnp_read_config(ACPI_DEV, 0xe4);
+       pnp_write_config(ACPI_DEV, 0xe4, (reg | 0x10));
+       pnp_exit_ext_func_mode(ACPI_DEV);
+
+       pnp_enter_ext_func_mode(GPIO_DEV);
+       pnp_set_logical_device(GPIO_DEV);
+       /* Set memory voltage to 2.75V, vcore offset + 100mV, 1.5V chipset voltage. */
+       pnp_write_config(GPIO_DEV, 0x30, 0x09); /* Enable GPIO 2 & GPIO 5. */
+       pnp_write_config(GPIO_DEV, 0xe2, 0x00); /* No inversion */
+       pnp_write_config(GPIO_DEV, 0xe5, 0x00); /* No inversion */
+       pnp_write_config(GPIO_DEV, 0xe3, 0x03); /* 0000 0011, 0=output 1=input */
+       pnp_write_config(GPIO_DEV, 0xe0, 0xde); /* 1101 1110, 0=output 1=input */
+       pnp_write_config(GPIO_DEV, 0xe1, 0x01); /* Set output val. */
+       pnp_write_config(GPIO_DEV, 0xe4, 0xb4); /* Set output val (1011 0100). */
+       pnp_exit_ext_func_mode(GPIO_DEV);
+}
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* unsigned last_boot_normal_x = last_boot_normal(); */
+       /* FIXME */
+       unsigned last_boot_normal_x = 1;
+
+       sio_init();
+       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       enable_rom_decode();
+
+       print_info("now booting... fallback\r\n");
+
+       /* Is this a CPU only reset? Or is this a secondary CPU? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x)
+                       goto normal_image;
+               else
+                       goto fallback_image;
+       }
+
+       /* Nothing special needs to be done to find bus 0. */
+       /* Allow the HT devices to be found. */
+       enumerate_ht_chain();
+
+       /* Is this a deliberate reset by the BIOS? */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary CPU, how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+
+normal_image:
+       /* print_info("JMP normal image\r\n"); */
+
+       __asm__ __volatile__("jmp __normal_image":
+                            :"a" (bist), "b" (cpu_init_detectedx));
+
+fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
+               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
+               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
+#endif
+       };
+       unsigned bsp_apicid = 0;
+       int needs_reset = 0;
+       struct sys_info *sysinfo =
+           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+       char *p;
+
+       sio_init();
+       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       enable_rom_decode();
+
+       print_info("now booting... real_main\r\n");
+
+       if (bist == 0)
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       setup_default_resource_map();
+       setup_coherent_ht_domain();
+       wait_all_core0_started();
+
+       print_info("now booting... Core0 started\r\n");
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched. */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       init_timer();
+       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       needs_reset |= k8t890_early_setup_ht();
+
+       if (needs_reset) {
+               print_debug("ht reset -\r\n");
+               soft_reset();
+       }
+
+       /* the HT settings needs to be OK, because link freq chnage may cause HT disconnect */
+       enable_fid_change();
+       init_fidvid_bsp(bsp_apicid);
+
+       /* Stop the APs so we can start them later in init. */
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now. */
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+       memreset_setup();
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+       post_cache_as_ram();
+}
index 8cd9af91a3b0999be0894423e75236454ca224e8..d703a3256ee4ac951d0fc2d3671c59cb8f5d4e29 100644 (file)
@@ -32,7 +32,7 @@ initobj-y += crt0.o
 # FIXME in $(top)/Makefile
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -46,8 +46,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/asus/m2v-mx_se/cache_as_ram_auto.c b/src/mainboard/asus/m2v-mx_se/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 13101b0..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 AMD
- * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
- * Copyright (C) 2006 MSI
- * (Written by Bingxun Shi <bingxunshi@gmail.com> for MSI)
- * Copyright (C) 2008 Rudolf Marek <r.marek@assembler.cz> 
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-unsigned int get_sbdn(unsigned bus);
-
-/* Used by raminit. */
-#define QRANK_DIMM_SUPPORT 1
-
-/* Used by init_cpus and fidvid */
-#define K8_SET_FIDVID 1
-
-/* If we want to wait for core1 done before DQS training, set it to 0. */
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-/* #define DEBUG_SMBUS 1 */
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/amd/mtrr.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, IT8712F_SP1)
-#define WATCHDOG_DEV PNP_DEV(0x2e, IT8712F_GPIO)
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-#define K8_4RANK_DIMM_SUPPORT 1
-
-
-#include "southbridge/via/k8t890/k8t890_early_car.c"
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/dualcore/dualcore.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#define SB_VFSMAF 0
-
-/* this function might fail on some K8 CPUs with errata #181 */
-static void ldtstop_sb(void)
-{
-       print_debug("toggle LDTSTP#\r\n");
-       u8 reg = inb (VT8237R_ACPI_IO_BASE + 0x5c);
-       reg = reg ^ (1 << 0);
-       outb(reg, VT8237R_ACPI_IO_BASE + 0x5c);
-       reg = inb(VT8237R_ACPI_IO_BASE + 0x15);
-       print_debug("done\r\n");
-}
-
-
-#include "cpu/amd/model_fxx/fidvid.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-
-#warning No hard_reset implemented for this board!
-void hard_reset(void)
-{
-       print_info("NO HARD RESET. FIX ME!\n");
-}
-
-void soft_reset(void)
-{
-       uint8_t tmp;
-
-       set_bios_reset();
-       print_debug("soft reset \r\n");
-
-       /* PCI reset */
-       tmp = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x4f);
-       tmp |= 0x01;
-       /* FIXME from S3 set bit1 to disable USB reset VT8237A/S */
-       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x4f, tmp);
-
-       while (1) {
-               /* daisy daisy ... */
-               hlt();
-       }
-}
-
-unsigned int get_sbdn(unsigned bus)
-{
-       device_t dev;
-
-       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
-                                       PCI_DEVICE_ID_VIA_VT8237R_LPC), bus);
-       return (dev >> 15) & 0x1f;
-}
-
-void sio_init(void)
-{
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       msr_t msr;
-       static const uint16_t spd_addr[] = {
-               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
-               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
-               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
-#endif
-       };
-       unsigned bsp_apicid = 0;
-       int needs_reset = 0;
-       struct sys_info *sysinfo =
-           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-       char *p;
-       u8 reg;
-
-       sio_init();
-       it8712f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       it8712f_kill_watchdog();
-       it8712f_enable_3vsbsw();
-       uart_init();
-       console_init();
-       enable_rom_decode();
-
-       print_info("now booting... real_main\r\n");
-
-
-       if (bist == 0)
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-       setup_default_resource_map();
-       setup_coherent_ht_domain();
-       wait_all_core0_started();
-
-       print_info("now booting... Core0 started\r\n");
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched. */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       init_timer();
-       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
-
-       needs_reset = optimize_link_coherent_ht();
-       print_debug_hex8(needs_reset);
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       print_debug_hex8(needs_reset);
-       needs_reset |= k8t890_early_setup_ht();
-       print_debug_hex8(needs_reset);
-
-       vt8237_early_network_init(NULL);
-       vt8237_early_spi_init();
-
-       if (needs_reset) {
-               print_debug_hex8(needs_reset);
-
-               print_debug("Xht reset -\r\n");
-               soft_reset();
-               print_debug("NO reset\r\n");
-
-       }
-
-
-       /* the HT settings needs to be OK, because link freq chnage may cause HT disconnect */
-       /* allow LDT STOP asserts */
-       vt8237_sb_enable_fid_vid();
-
-       enable_fid_change();
-       print_debug("after enable_fid_change\r\n");
-
-       init_fidvid_bsp(bsp_apicid);
-
-       /* Stop the APs so we can start them later in init. */
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now. */
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       enable_smbus();
-       memreset_setup();
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/asus/m2v-mx_se/romstage.c b/src/mainboard/asus/m2v-mx_se/romstage.c
new file mode 100644 (file)
index 0000000..13101b0
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 AMD
+ * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
+ * Copyright (C) 2006 MSI
+ * (Written by Bingxun Shi <bingxunshi@gmail.com> for MSI)
+ * Copyright (C) 2008 Rudolf Marek <r.marek@assembler.cz> 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+unsigned int get_sbdn(unsigned bus);
+
+/* Used by raminit. */
+#define QRANK_DIMM_SUPPORT 1
+
+/* Used by init_cpus and fidvid */
+#define K8_SET_FIDVID 1
+
+/* If we want to wait for core1 done before DQS training, set it to 0. */
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+/* #define DEBUG_SMBUS 1 */
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/amd/mtrr.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, IT8712F_SP1)
+#define WATCHDOG_DEV PNP_DEV(0x2e, IT8712F_GPIO)
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+#define K8_4RANK_DIMM_SUPPORT 1
+
+
+#include "southbridge/via/k8t890/k8t890_early_car.c"
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/dualcore/dualcore.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#define SB_VFSMAF 0
+
+/* this function might fail on some K8 CPUs with errata #181 */
+static void ldtstop_sb(void)
+{
+       print_debug("toggle LDTSTP#\r\n");
+       u8 reg = inb (VT8237R_ACPI_IO_BASE + 0x5c);
+       reg = reg ^ (1 << 0);
+       outb(reg, VT8237R_ACPI_IO_BASE + 0x5c);
+       reg = inb(VT8237R_ACPI_IO_BASE + 0x15);
+       print_debug("done\r\n");
+}
+
+
+#include "cpu/amd/model_fxx/fidvid.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+
+#warning No hard_reset implemented for this board!
+void hard_reset(void)
+{
+       print_info("NO HARD RESET. FIX ME!\n");
+}
+
+void soft_reset(void)
+{
+       uint8_t tmp;
+
+       set_bios_reset();
+       print_debug("soft reset \r\n");
+
+       /* PCI reset */
+       tmp = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x4f);
+       tmp |= 0x01;
+       /* FIXME from S3 set bit1 to disable USB reset VT8237A/S */
+       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x4f, tmp);
+
+       while (1) {
+               /* daisy daisy ... */
+               hlt();
+       }
+}
+
+unsigned int get_sbdn(unsigned bus)
+{
+       device_t dev;
+
+       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
+                                       PCI_DEVICE_ID_VIA_VT8237R_LPC), bus);
+       return (dev >> 15) & 0x1f;
+}
+
+void sio_init(void)
+{
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       msr_t msr;
+       static const uint16_t spd_addr[] = {
+               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
+               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
+               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
+#endif
+       };
+       unsigned bsp_apicid = 0;
+       int needs_reset = 0;
+       struct sys_info *sysinfo =
+           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+       char *p;
+       u8 reg;
+
+       sio_init();
+       it8712f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       it8712f_kill_watchdog();
+       it8712f_enable_3vsbsw();
+       uart_init();
+       console_init();
+       enable_rom_decode();
+
+       print_info("now booting... real_main\r\n");
+
+
+       if (bist == 0)
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+       setup_default_resource_map();
+       setup_coherent_ht_domain();
+       wait_all_core0_started();
+
+       print_info("now booting... Core0 started\r\n");
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched. */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       init_timer();
+       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
+
+       needs_reset = optimize_link_coherent_ht();
+       print_debug_hex8(needs_reset);
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       print_debug_hex8(needs_reset);
+       needs_reset |= k8t890_early_setup_ht();
+       print_debug_hex8(needs_reset);
+
+       vt8237_early_network_init(NULL);
+       vt8237_early_spi_init();
+
+       if (needs_reset) {
+               print_debug_hex8(needs_reset);
+
+               print_debug("Xht reset -\r\n");
+               soft_reset();
+               print_debug("NO reset\r\n");
+
+       }
+
+
+       /* the HT settings needs to be OK, because link freq chnage may cause HT disconnect */
+       /* allow LDT STOP asserts */
+       vt8237_sb_enable_fid_vid();
+
+       enable_fid_change();
+       print_debug("after enable_fid_change\r\n");
+
+       init_fidvid_bsp(bsp_apicid);
+
+       /* Stop the APs so we can start them later in init. */
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now. */
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       enable_smbus();
+       memreset_setup();
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/asus/mew-am/auto.c b/src/mainboard/asus/mew-am/auto.c
deleted file mode 100644 (file)
index a7f74c4..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "northbridge/intel/i82810/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i82810/raminit.c"
-/* #include "northbridge/intel/i82810/debug.c" */
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/mew-am/romstage.c b/src/mainboard/asus/mew-am/romstage.c
new file mode 100644 (file)
index 0000000..a7f74c4
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "northbridge/intel/i82810/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i82810/raminit.c"
+/* #include "northbridge/intel/i82810/debug.c" */
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/mew-vm/auto.c b/src/mainboard/asus/mew-vm/auto.c
deleted file mode 100644 (file)
index d9473a5..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Corey Osgood <corey@slightlyhackish.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/smsc/lpc47b272/lpc47b272_early_serial.c"
-#include "northbridge/intel/i82810/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#define SERIAL_DEV PNP_DEV(0x2e, LPC47B272_SP1)
-
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "northbridge/intel/i82810/raminit.c"
-#include "northbridge/intel/i82810/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       lpc47b272_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       enable_smbus();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       /* dump_spd_registers(); */
-
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-
-       /* Check RAM. */
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/mew-vm/romstage.c b/src/mainboard/asus/mew-vm/romstage.c
new file mode 100644 (file)
index 0000000..d9473a5
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Corey Osgood <corey@slightlyhackish.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/smsc/lpc47b272/lpc47b272_early_serial.c"
+#include "northbridge/intel/i82810/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#define SERIAL_DEV PNP_DEV(0x2e, LPC47B272_SP1)
+
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "northbridge/intel/i82810/raminit.c"
+#include "northbridge/intel/i82810/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       lpc47b272_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       enable_smbus();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       /* dump_spd_registers(); */
+
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+
+       /* Check RAM. */
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/p2b-d/auto.c b/src/mainboard/asus/p2b-d/auto.c
deleted file mode 100644 (file)
index 0d928fe..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include <cpu/x86/lapic.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0) {
-               early_mtrr_init();
-               enable_lapic();         /* FIXME? */
-       }
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/p2b-d/romstage.c b/src/mainboard/asus/p2b-d/romstage.c
new file mode 100644 (file)
index 0000000..0d928fe
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include <cpu/x86/lapic.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0) {
+               early_mtrr_init();
+               enable_lapic();         /* FIXME? */
+       }
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/p2b-ds/auto.c b/src/mainboard/asus/p2b-ds/auto.c
deleted file mode 100644 (file)
index f011824..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include <cpu/x86/lapic.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0) {
-               early_mtrr_init();
-               enable_lapic();         /* FIXME? */
-       }
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/p2b-ds/romstage.c b/src/mainboard/asus/p2b-ds/romstage.c
new file mode 100644 (file)
index 0000000..f011824
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include <cpu/x86/lapic.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0) {
+               early_mtrr_init();
+               enable_lapic();         /* FIXME? */
+       }
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/p2b-f/auto.c b/src/mainboard/asus/p2b-f/auto.c
deleted file mode 100644 (file)
index e9cede4..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-/* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-/* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/p2b-f/romstage.c b/src/mainboard/asus/p2b-f/romstage.c
new file mode 100644 (file)
index 0000000..e9cede4
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+/* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+/* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME: The ASUS P2B-F has a Winbond W83977EF, actually. */
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/p2b/auto.c b/src/mainboard/asus/p2b/auto.c
deleted file mode 100644 (file)
index 62ac873..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge at 00:04.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/p2b/romstage.c b/src/mainboard/asus/p2b/romstage.c
new file mode 100644 (file)
index 0000000..62ac873
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge at 00:04.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/asus/p3b-f/auto.c b/src/mainboard/asus/p3b-f/auto.c
deleted file mode 100644 (file)
index 306b03f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-/* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-/* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/asus/p3b-f/romstage.c b/src/mainboard/asus/p3b-f/romstage.c
new file mode 100644 (file)
index 0000000..306b03f
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+/* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+/* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME: The ASUS P3B-F has a Winbond W83977EF, actually. */
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 4, 0)); /* ISA bridge is 00:04.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/axus/tc320/auto.c b/src/mainboard/axus/tc320/auto.c
deleted file mode 100644 (file)
index 9cbd13c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "superio/nsc/pc97317/pc97317_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
-
-static void main(unsigned long bist)
-{
-       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-       cs5530_enable_rom();
-       sdram_init();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/axus/tc320/romstage.c b/src/mainboard/axus/tc320/romstage.c
new file mode 100644 (file)
index 0000000..9cbd13c
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "superio/nsc/pc97317/pc97317_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
+
+static void main(unsigned long bist)
+{
+       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+       cs5530_enable_rom();
+       sdram_init();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/azza/pt-6ibd/auto.c b/src/mainboard/azza/pt-6ibd/auto.c
deleted file mode 100644 (file)
index 6f0b058..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-/* FIXME: It's a Winbond W83977EF, actually. */
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-/* FIXME: It's a Winbond W83977EF, actually. */
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME: It's a Winbond W83977EF, actually. */
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/azza/pt-6ibd/romstage.c b/src/mainboard/azza/pt-6ibd/romstage.c
new file mode 100644 (file)
index 0000000..6f0b058
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+/* FIXME: It's a Winbond W83977EF, actually. */
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+/* FIXME: It's a Winbond W83977EF, actually. */
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME: It's a Winbond W83977EF, actually. */
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/bcom/winnet100/auto.c b/src/mainboard/bcom/winnet100/auto.c
deleted file mode 100644 (file)
index 5c4bbe2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "superio/nsc/pc97317/pc97317_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
-
-static void main(unsigned long bist)
-{
-       /* Initialize the serial console. */
-       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       cs5530_enable_rom();
-
-       /* Initialize RAM. */
-       sdram_init();
-
-       /* Check whether RAM works. */
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/bcom/winnet100/romstage.c b/src/mainboard/bcom/winnet100/romstage.c
new file mode 100644 (file)
index 0000000..5c4bbe2
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "superio/nsc/pc97317/pc97317_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
+
+static void main(unsigned long bist)
+{
+       /* Initialize the serial console. */
+       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       cs5530_enable_rom();
+
+       /* Initialize RAM. */
+       sdram_init();
+
+       /* Check whether RAM works. */
+       /* ram_check(0, 640 * 1024); */
+}
index 1db65e26ed9ac3f74bff5017dec78e8d9156865a..5ae10f3276ccc65d7024da210e9ab8a8b4f2ef0d 100644 (file)
@@ -39,7 +39,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/fpu_enable.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 crt0s += $(src)/cpu/x86/mmx_disable.inc
 
 ifdef POST_EVALUATION
@@ -51,8 +51,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        iasl -p dsdt -tc $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        mv dsdt.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/bcom/winnetp680/auto.c b/src/mainboard/bcom/winnetp680/auto.c
deleted file mode 100644 (file)
index 254b168..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 VIA Technologies, Inc.
- * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cn700/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
-#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
-
-static void memreset_setup(void)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/cn700/raminit.c"
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-       u8 reg;
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
-       if (dev == PCI_DEV_INVALID)
-               die("Southbridge not found!!!\n");
-
-       /* bit=0 means enable function (per CX700 datasheet)
-        *   5 16.1 USB 2
-        *   4 16.0 USB 1
-        *   3 15.0 SATA and PATA
-        *   2 16.2 USB 3
-        *   1 16.4 USB EHCI
-        */
-       pci_write_config8(dev, 0x50, 0x80);
-
-       /* bit=1 means enable internal function (per CX700 datasheet)
-        *   3 Internal RTC
-        *   2 Internal PS2 Mouse
-        *   1 Internal KBC Configuration
-        *   0 Internal Keyboard Controller
-        */
-       pci_write_config8(dev, 0x51, 0x1d);
-}
-
-static const struct mem_controller ctrl = {
-       .d0f0 = 0x0000,
-       .d0f2 = 0x2000,
-       .d0f3 = 0x3000,
-       .d0f4 = 0x4000,
-       .d0f7 = 0x7000,
-       .d1f0 = 0x8000,
-       .channel0 = { 0x50 },
-};
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       device_t dev;
-
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
-
-       w83697hf_set_clksel_48(SERIAL_DEV);
-
-       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       print_spew("In auto.c:main()\r\n");
-
-       enable_smbus();
-       smbus_fixup(&ctrl);
-
-       if (bist == 0) {
-               print_debug("doing early_mtrr\r\n");
-               early_mtrr_init();
-       }
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       ddr_ram_setup(&ctrl);
-
-       /* ram_check(0, 640 * 1024); */
-
-       print_spew("Leaving auto.c:main()\r\n");
-}
diff --git a/src/mainboard/bcom/winnetp680/romstage.c b/src/mainboard/bcom/winnetp680/romstage.c
new file mode 100644 (file)
index 0000000..dd66d30
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 VIA Technologies, Inc.
+ * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cn700/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
+#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
+
+static void memreset_setup(void)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/cn700/raminit.c"
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+       u8 reg;
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
+       if (dev == PCI_DEV_INVALID)
+               die("Southbridge not found!!!\n");
+
+       /* bit=0 means enable function (per CX700 datasheet)
+        *   5 16.1 USB 2
+        *   4 16.0 USB 1
+        *   3 15.0 SATA and PATA
+        *   2 16.2 USB 3
+        *   1 16.4 USB EHCI
+        */
+       pci_write_config8(dev, 0x50, 0x80);
+
+       /* bit=1 means enable internal function (per CX700 datasheet)
+        *   3 Internal RTC
+        *   2 Internal PS2 Mouse
+        *   1 Internal KBC Configuration
+        *   0 Internal Keyboard Controller
+        */
+       pci_write_config8(dev, 0x51, 0x1d);
+}
+
+static const struct mem_controller ctrl = {
+       .d0f0 = 0x0000,
+       .d0f2 = 0x2000,
+       .d0f3 = 0x3000,
+       .d0f4 = 0x4000,
+       .d0f7 = 0x7000,
+       .d1f0 = 0x8000,
+       .channel0 = { 0x50 },
+};
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       device_t dev;
+
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
+
+       w83697hf_set_clksel_48(SERIAL_DEV);
+
+       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       print_spew("In romstage.c:main()\r\n");
+
+       enable_smbus();
+       smbus_fixup(&ctrl);
+
+       if (bist == 0) {
+               print_debug("doing early_mtrr\r\n");
+               early_mtrr_init();
+       }
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       ddr_ram_setup(&ctrl);
+
+       /* ram_check(0, 640 * 1024); */
+
+       print_spew("Leaving romstage.c:main()\r\n");
+}
diff --git a/src/mainboard/biostar/m6tba/auto.c b/src/mainboard/biostar/m6tba/auto.c
deleted file mode 100644 (file)
index 8234df1..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, SMSCSUPERIO_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-       enable_smbus();
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/biostar/m6tba/romstage.c b/src/mainboard/biostar/m6tba/romstage.c
new file mode 100644 (file)
index 0000000..8234df1
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, SMSCSUPERIO_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+       enable_smbus();
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/broadcom/blast/cache_as_ram_auto.c b/src/mainboard/broadcom/blast/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 6169841..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 0
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/nsc/pc87417/pc87417_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87417_SP1)
-#define RTC_DEV PNP_DEV(0x2e, PC87417_RTC)
-
-#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_HUB 0x71
-        int ret,i;
-        unsigned device=(ctrl->channel0[0])>>8;
-        smbus_send_byte(SMBUS_HUB, device);
-}
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_HUB 0x71
-       int ret;
-        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
-        ret = smbus_send_byte(SMBUS_HUB, device);
-        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
-}
-#endif
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define RC0 (6<<8)
-#define RC1 (7<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-
-        /* Is this a cpu only reset? Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {  
-                if (last_boot_normal()) { // RTC already inited
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        bcm5785_enable_rom();
-
-        bcm5785_enable_lpc();
-
-        //enable RTC
-        pc87417_enable_dev(RTC_DEV);
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal()) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-       ;
-}
-#endif /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               RC0|DIMM0, RC0|DIMM2, 0, 0,
-                RC0|DIMM1, RC0|DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                RC1|DIMM0, RC1|DIMM2, 0, 0,
-                RC1|DIMM1, RC1|DIMM3, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-       unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-//     post_code(0x32);
-
-       pc87417_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-//     post_code(0x33);
-       
-        uart_init();
-//     post_code(0x34);
-
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-        setup_blast_resource_map();
-       
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        wait_all_core0_started();
-        start_other_cores();
-#endif
-        wait_all_aps_started(bsp_apicid);
-
-        needs_reset |= ht_setup_chains_x();
-
-       bcm5785_early_setup();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0 
-        int i;
-        for(i=4;i<8;i++) {
-                change_i2c_mux(i);
-                dump_smbus_registers();
-        }
-#endif
-
-       memreset_setup();
-
-//     init_timer();
-
-       sdram_initialize(nodes, ctrl);
-
-#if 0
-        print_pci_devices();
-#endif
-
-#if 0
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/broadcom/blast/romstage.c b/src/mainboard/broadcom/blast/romstage.c
new file mode 100644 (file)
index 0000000..6169841
--- /dev/null
@@ -0,0 +1,267 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 0
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/nsc/pc87417/pc87417_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87417_SP1)
+#define RTC_DEV PNP_DEV(0x2e, PC87417_RTC)
+
+#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_HUB 0x71
+        int ret,i;
+        unsigned device=(ctrl->channel0[0])>>8;
+        smbus_send_byte(SMBUS_HUB, device);
+}
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_HUB 0x71
+       int ret;
+        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
+        ret = smbus_send_byte(SMBUS_HUB, device);
+        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
+}
+#endif
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define RC0 (6<<8)
+#define RC1 (7<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+
+        /* Is this a cpu only reset? Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {  
+                if (last_boot_normal()) { // RTC already inited
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        bcm5785_enable_rom();
+
+        bcm5785_enable_lpc();
+
+        //enable RTC
+        pc87417_enable_dev(RTC_DEV);
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal()) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+       ;
+}
+#endif /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               RC0|DIMM0, RC0|DIMM2, 0, 0,
+                RC0|DIMM1, RC0|DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                RC1|DIMM0, RC1|DIMM2, 0, 0,
+                RC1|DIMM1, RC1|DIMM3, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+       unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+//     post_code(0x32);
+
+       pc87417_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+//     post_code(0x33);
+       
+        uart_init();
+//     post_code(0x34);
+
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+        setup_blast_resource_map();
+       
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        wait_all_core0_started();
+        start_other_cores();
+#endif
+        wait_all_aps_started(bsp_apicid);
+
+        needs_reset |= ht_setup_chains_x();
+
+       bcm5785_early_setup();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0 
+        int i;
+        for(i=4;i<8;i++) {
+                change_i2c_mux(i);
+                dump_smbus_registers();
+        }
+#endif
+
+       memreset_setup();
+
+//     init_timer();
+
+       sdram_initialize(nodes, ctrl);
+
+#if 0
+        print_pci_devices();
+#endif
+
+#if 0
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/compaq/deskpro_en_sff_p600/auto.c b/src/mainboard/compaq/deskpro_en_sff_p600/auto.c
deleted file mode 100644 (file)
index c465c16..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-/* FIXME: This should be PC97307 (but it's buggy at the moment)! */
-#include "superio/nsc/pc97317/pc97317_early_serial.c"
-
-/* FIXME: This should be PC97307 (but it's buggy at the moment)! */
-#define SERIAL_DEV PNP_DEV(0x15c, PC97317_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME: Should be PC97307! */
-       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 14, 0)); /* ISA bridge is 00:14.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/compaq/deskpro_en_sff_p600/romstage.c b/src/mainboard/compaq/deskpro_en_sff_p600/romstage.c
new file mode 100644 (file)
index 0000000..c465c16
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+/* FIXME: This should be PC97307 (but it's buggy at the moment)! */
+#include "superio/nsc/pc97317/pc97317_early_serial.c"
+
+/* FIXME: This should be PC97307 (but it's buggy at the moment)! */
+#define SERIAL_DEV PNP_DEV(0x15c, PC97317_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME: Should be PC97307! */
+       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 14, 0)); /* ISA bridge is 00:14.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/dell/s1850/auto.c b/src/mainboard/dell/s1850/auto.c
deleted file mode 100644 (file)
index 5f62ce8..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/nsc/pc8374/pc8374_early_init.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "s1850_fixups.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC8374_SP1)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D0F0 | \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0808090a
-#define RECVENB_CONFIG  0x0808090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-/* this is very highly mainboard dependent, related to wiring */
-/* from factory BIOS via lspci */
-#define DIMM_MAP_LOGICAL 0x2841
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-/* IPMI garbage. This is all test stuff, if it really works we'll move it somewhere
- */
-
-#define nftransport  0xc
-
-#define OBF  0
-#define IBF 1
-
-#define ipmidata  0xca0
-#define ipmicsr  0xca4
-
-
-static inline void  ibfzero(void)
-{
-       while(inb(ipmicsr) &  (1<<IBF)) 
-               ;
-}
-static inline void  clearobf(void)
-{
-       (void) inb(ipmidata);
-}
-
-static inline void  waitobf(void)
-{
-       while((inb(ipmicsr) &  (1<<OBF)) == 0) 
-               ;
-}
-/* quite possibly the stupidest interface ever designed. */
-static inline void  first_cmd_byte(unsigned char byte)
-{
-       ibfzero();
-       clearobf();
-       outb(0x61, ipmicsr);
-       ibfzero();
-       clearobf();
-       outb(byte, ipmidata);
-}
-
-static inline void  next_cmd_byte(unsigned char byte)
-{
-
-       ibfzero();
-       clearobf();
-       outb(byte, ipmidata);
-}
-
-static inline void  last_cmd_byte(unsigned char byte)
-{
-       outb(0x62, ipmicsr);
-
-       ibfzero();
-       clearobf();
-       outb(byte,  ipmidata);
-}
-
-static inline void read_response_byte(void)
-{
-       int val = -1;
-       if ((inb(ipmicsr)>>6) != 1)
-               return;
-
-       ibfzero();
-       waitobf();
-       val = inb(ipmidata);
-       outb(0x68, ipmidata);
-
-       /* see if it is done */
-       if ((inb(ipmicsr)>>6) != 1){
-               /* wait for the dummy read. Which describes this protocol */
-               waitobf();
-               (void)inb(ipmidata);
-       }
-}
-
-static inline void ipmidelay(void)
-{
-       int i;
-       for(i = 0; i < 1000; i++) {
-               inb(0x80);
-       }
-}
-
-static inline void bmc_foad(void)
-{
-       unsigned char c;
-       /* be safe; make sure it is really ready */
-       while ((inb(ipmicsr)>>6)) {
-               outb(0x60, ipmicsr);
-               inb(ipmidata);
-       }
-       first_cmd_byte(nftransport << 2);
-       ipmidelay();
-       next_cmd_byte(0x12);
-       ipmidelay();
-       next_cmd_byte(2);
-       ipmidelay();
-       last_cmd_byte(3);
-       ipmidelay();
-}
-
-/* end IPMI garbage */
-
-static void main(unsigned long bist)
-{
-       u8 b;
-       u16 w;
-       u32 l;
-       int do_reset;
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       /* the wiring on this part is really messed up */
-                       /* this is my best guess so far */
-                       .channel0 = {(0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, (0xa<<3)|3, },
-                       .channel1 = {(0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, (0xa<<3)|7, },
-               }
-       };
-
-       /* superio setup */
-       /* observed from serialice */
-       static const u8 earlyinit[] = {
-               0x21, 0x11, 0x11,
-               0x22, 1, 1,
-               0x23, 05, 05,
-               0x24, 0x81, 0x81,
-               0x26, 0, 0,
-               0,
-       };
-
-       /* using SerialICE, we've seen this basic reset sequence on the dell. 
-        * we don't understand it as it uses undocumented registers, but
-        * we're going to clone it. 
-        */
-       /* enable a hidden device. */
-       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
-       b |= 0x8;
-       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
-
-       /* read-write lock in CMOS on LPC bridge on ICH5 */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd8, 4);
-
-       /* operate on undocumented device */
-       l = pci_read_config32(PCI_DEV(0, 0, 2), 0xa4);
-       l |= 0x1000;
-       pci_write_config32(PCI_DEV(0, 0, 2), 0xa4, l);
-
-       l = pci_read_config32(PCI_DEV(0, 0, 2), 0x9c);
-       l |= 0x8000;
-       pci_write_config32(PCI_DEV(0, 0, 2), 0x9c, l);
-
-       /* disable undocumented device */
-       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
-       b &= ~0x8;
-       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
-       
-       /* set up LPC bridge bits, some of which reply on undocumented
-        * registers
-        */
-       
-       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xd8);
-       b |= 4;
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd8, b);
-
-       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xd4);
-       b |= 2;
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, b);
-
-       /* ACPI base address */
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x40, 0x800);
-
-       /* Enable specific ACPI features */
-       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0x44);
-       b |= 0x10;
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x44, b);
-
-       /* ACPI control */
-       w = inw(0x868);
-       outw(w|0x800, 0x868);
-       w = inw(0x866);
-       outw(w|2, 0x866);
-
-#if 0 
-       /*seriaice shows
-       dell does this so leave it here so I don't forget 
-        */
-       /* SMBUS */
-       pci_write_config16(PCI_DEV(0, 0x1f, 3), 0x20, 0x08c0);
-
-       /* unknown */
-       b = inb(0x8c2);
-       outb(0xdf, 0x8c2);
-#endif
-
-       /* another device enable? */
-       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
-       b |= 2;
-       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
-       
-       /* ?? */
-       l = pci_read_config32(PCI_DEV(0, 8, 0), 0xc0);
-       do_reset = l & 0x8000000;
-       l |= 0x8000000;
-       pci_write_config32(PCI_DEV(0, 8, 0), 0xc0, l);
-
-       if (! do_reset) {
-               outb(2, 0xcf9);
-               outb(6, 0xcf9);
-       }
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       mainboard_set_ich5();
-       //bmc_foad();
-       pc8374_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-
-       /* stuff we seem to need */
-       pc8374_enable_dev(PNP_DEV(0x2e, PC8374_KBCK), 0);
-
-       /* GPIOs */
-       pc8374_enable_dev(PNP_DEV(0x2e, PC8374_GPIO), 0xc20);
-
-       /* keep this in mind.
-       SerialICE-hlp: outb 002e <= 23
-       SerialICE-hlp:  inb 002f => 05
-       SerialICE-hlp: outb 002f <= 05
-       SerialICE-hlp: outb 002e <= 24
-       SerialICE-hlp:  inb 002f => c1
-       SerialICE-hlp: outb 002f <= c1
-        */
-
-       /* Halt if there was a built in self test failure */
-//     report_bist_failure(bist);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing ich5?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 1
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-#if 1
-       show_dram_slots();
-#endif
-       disable_watchdogs();
-//     dump_ipmi_registers();
-       mainboard_set_e7520_leds();     
-//     memreset_setup();
-
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 0
-       dump_pci_devices();
-#endif
-#if 1
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-//     dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 1 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-//     ram_check(0x00100000, 0x01000000);
-       ram_check(0x00100000, 0x00100100);
-       /* check the first 1M in the 3rd Gig */
-//     ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/dell/s1850/romstage.c b/src/mainboard/dell/s1850/romstage.c
new file mode 100644 (file)
index 0000000..5f62ce8
--- /dev/null
@@ -0,0 +1,372 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/nsc/pc8374/pc8374_early_init.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "s1850_fixups.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC8374_SP1)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D0F0 | \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0808090a
+#define RECVENB_CONFIG  0x0808090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+/* this is very highly mainboard dependent, related to wiring */
+/* from factory BIOS via lspci */
+#define DIMM_MAP_LOGICAL 0x2841
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+/* IPMI garbage. This is all test stuff, if it really works we'll move it somewhere
+ */
+
+#define nftransport  0xc
+
+#define OBF  0
+#define IBF 1
+
+#define ipmidata  0xca0
+#define ipmicsr  0xca4
+
+
+static inline void  ibfzero(void)
+{
+       while(inb(ipmicsr) &  (1<<IBF)) 
+               ;
+}
+static inline void  clearobf(void)
+{
+       (void) inb(ipmidata);
+}
+
+static inline void  waitobf(void)
+{
+       while((inb(ipmicsr) &  (1<<OBF)) == 0) 
+               ;
+}
+/* quite possibly the stupidest interface ever designed. */
+static inline void  first_cmd_byte(unsigned char byte)
+{
+       ibfzero();
+       clearobf();
+       outb(0x61, ipmicsr);
+       ibfzero();
+       clearobf();
+       outb(byte, ipmidata);
+}
+
+static inline void  next_cmd_byte(unsigned char byte)
+{
+
+       ibfzero();
+       clearobf();
+       outb(byte, ipmidata);
+}
+
+static inline void  last_cmd_byte(unsigned char byte)
+{
+       outb(0x62, ipmicsr);
+
+       ibfzero();
+       clearobf();
+       outb(byte,  ipmidata);
+}
+
+static inline void read_response_byte(void)
+{
+       int val = -1;
+       if ((inb(ipmicsr)>>6) != 1)
+               return;
+
+       ibfzero();
+       waitobf();
+       val = inb(ipmidata);
+       outb(0x68, ipmidata);
+
+       /* see if it is done */
+       if ((inb(ipmicsr)>>6) != 1){
+               /* wait for the dummy read. Which describes this protocol */
+               waitobf();
+               (void)inb(ipmidata);
+       }
+}
+
+static inline void ipmidelay(void)
+{
+       int i;
+       for(i = 0; i < 1000; i++) {
+               inb(0x80);
+       }
+}
+
+static inline void bmc_foad(void)
+{
+       unsigned char c;
+       /* be safe; make sure it is really ready */
+       while ((inb(ipmicsr)>>6)) {
+               outb(0x60, ipmicsr);
+               inb(ipmidata);
+       }
+       first_cmd_byte(nftransport << 2);
+       ipmidelay();
+       next_cmd_byte(0x12);
+       ipmidelay();
+       next_cmd_byte(2);
+       ipmidelay();
+       last_cmd_byte(3);
+       ipmidelay();
+}
+
+/* end IPMI garbage */
+
+static void main(unsigned long bist)
+{
+       u8 b;
+       u16 w;
+       u32 l;
+       int do_reset;
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       /* the wiring on this part is really messed up */
+                       /* this is my best guess so far */
+                       .channel0 = {(0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, (0xa<<3)|3, },
+                       .channel1 = {(0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, (0xa<<3)|7, },
+               }
+       };
+
+       /* superio setup */
+       /* observed from serialice */
+       static const u8 earlyinit[] = {
+               0x21, 0x11, 0x11,
+               0x22, 1, 1,
+               0x23, 05, 05,
+               0x24, 0x81, 0x81,
+               0x26, 0, 0,
+               0,
+       };
+
+       /* using SerialICE, we've seen this basic reset sequence on the dell. 
+        * we don't understand it as it uses undocumented registers, but
+        * we're going to clone it. 
+        */
+       /* enable a hidden device. */
+       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
+       b |= 0x8;
+       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
+
+       /* read-write lock in CMOS on LPC bridge on ICH5 */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd8, 4);
+
+       /* operate on undocumented device */
+       l = pci_read_config32(PCI_DEV(0, 0, 2), 0xa4);
+       l |= 0x1000;
+       pci_write_config32(PCI_DEV(0, 0, 2), 0xa4, l);
+
+       l = pci_read_config32(PCI_DEV(0, 0, 2), 0x9c);
+       l |= 0x8000;
+       pci_write_config32(PCI_DEV(0, 0, 2), 0x9c, l);
+
+       /* disable undocumented device */
+       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
+       b &= ~0x8;
+       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
+       
+       /* set up LPC bridge bits, some of which reply on undocumented
+        * registers
+        */
+       
+       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xd8);
+       b |= 4;
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd8, b);
+
+       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xd4);
+       b |= 2;
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, b);
+
+       /* ACPI base address */
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x40, 0x800);
+
+       /* Enable specific ACPI features */
+       b= pci_read_config8(PCI_DEV(0, 0x1f, 0), 0x44);
+       b |= 0x10;
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x44, b);
+
+       /* ACPI control */
+       w = inw(0x868);
+       outw(w|0x800, 0x868);
+       w = inw(0x866);
+       outw(w|2, 0x866);
+
+#if 0 
+       /*seriaice shows
+       dell does this so leave it here so I don't forget 
+        */
+       /* SMBUS */
+       pci_write_config16(PCI_DEV(0, 0x1f, 3), 0x20, 0x08c0);
+
+       /* unknown */
+       b = inb(0x8c2);
+       outb(0xdf, 0x8c2);
+#endif
+
+       /* another device enable? */
+       b = pci_read_config8(PCI_DEV(0, 0, 0), 0xf4);
+       b |= 2;
+       pci_write_config8(PCI_DEV(0, 0, 0), 0xf4, b);
+       
+       /* ?? */
+       l = pci_read_config32(PCI_DEV(0, 8, 0), 0xc0);
+       do_reset = l & 0x8000000;
+       l |= 0x8000000;
+       pci_write_config32(PCI_DEV(0, 8, 0), 0xc0, l);
+
+       if (! do_reset) {
+               outb(2, 0xcf9);
+               outb(6, 0xcf9);
+       }
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       mainboard_set_ich5();
+       //bmc_foad();
+       pc8374_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+
+       /* stuff we seem to need */
+       pc8374_enable_dev(PNP_DEV(0x2e, PC8374_KBCK), 0);
+
+       /* GPIOs */
+       pc8374_enable_dev(PNP_DEV(0x2e, PC8374_GPIO), 0xc20);
+
+       /* keep this in mind.
+       SerialICE-hlp: outb 002e <= 23
+       SerialICE-hlp:  inb 002f => 05
+       SerialICE-hlp: outb 002f <= 05
+       SerialICE-hlp: outb 002e <= 24
+       SerialICE-hlp:  inb 002f => c1
+       SerialICE-hlp: outb 002f <= c1
+        */
+
+       /* Halt if there was a built in self test failure */
+//     report_bist_failure(bist);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing ich5?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 1
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+#if 1
+       show_dram_slots();
+#endif
+       disable_watchdogs();
+//     dump_ipmi_registers();
+       mainboard_set_e7520_leds();     
+//     memreset_setup();
+
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 0
+       dump_pci_devices();
+#endif
+#if 1
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+//     dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 1 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+//     ram_check(0x00100000, 0x01000000);
+       ram_check(0x00100000, 0x00100100);
+       /* check the first 1M in the 3rd Gig */
+//     ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/digitallogic/adl855pc/auto.c b/src/mainboard/digitallogic/adl855pc/auto.c
deleted file mode 100644 (file)
index cbd8bb0..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#define ASM_CONSOLE_LOGLEVEL 8
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#if 0
-#include <arch/smp/lapic.h>
-#endif
-#include <arch/hlt.h>
-//#include "option_table.h"
-#include <stdlib.h>
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801dbm/i82801dbm_early_smbus.c"
-#include "northbridge/intel/i855pm/raminit.h"
-
-#if 0
-#include "cpu/p6/apic_timer.c"
-#include "lib/delay.c"
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/intel/i855pm/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c" 
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-static void hard_reset(void)
-{
-        outb(0x0e, 0x0cf9);
-}
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-        /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i855pm/raminit.c"
-#include "northbridge/intel/i855pm/reset_test.c"
-#include "lib/generic_sdram.c"
-
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl[] = {
-               {
-                       .d0 = PCI_DEV(0, 0, 1),
-                       .channel0 = { (0xa<<3)|0, 0 },
-               },
-       };
-
-       if (bist == 0) {
-               early_mtrr_init();
-#if 0
-               enable_lapic();
-               init_timer();
-#endif
-       }
-        
-        w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       
-
-#if 0
-       print_pci_devices();
-#endif
-
-       if(!bios_reset_detected()) {
-               enable_smbus();
-#if 0
-       dump_spd_registers(&memctrl[0]);
-       //              dump_smbus_registers();
-#endif
-
-
-               memreset_setup();
-
-               sdram_initialize(ARRAY_SIZE(memctrl), memctrl);
-
-       } 
-#if 0
-       else {
-                       /* clear memory 1meg */
-        __asm__ volatile(
-                "1: \n\t"
-                "movl %0, %%fs:(%1)\n\t"
-                "addl $4,%1\n\t"
-                "subl $4,%2\n\t"
-                "jnz 1b\n\t"
-                :
-                : "a" (0), "D" (0), "c" (1024*1024)
-                ); 
-       
-       }
-#endif
-
-#if 0
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0, 0));
-#endif
-
-/*
-#if  0
-       ram_check(0x00000000, msr.lo+(msr.hi<<32));
-#else
-#if 0
-       // Check 16MB of memory @ 0
-       ram_check(0x00000000, 0x01000000);
-#else
-       // Check 16MB of memory @ 2GB 
-       ram_check(0x80000000, 0x81000000);
-#endif
-#endif
-*/
-}
diff --git a/src/mainboard/digitallogic/adl855pc/romstage.c b/src/mainboard/digitallogic/adl855pc/romstage.c
new file mode 100644 (file)
index 0000000..cbd8bb0
--- /dev/null
@@ -0,0 +1,143 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#define ASM_CONSOLE_LOGLEVEL 8
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#if 0
+#include <arch/smp/lapic.h>
+#endif
+#include <arch/hlt.h>
+//#include "option_table.h"
+#include <stdlib.h>
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801dbm/i82801dbm_early_smbus.c"
+#include "northbridge/intel/i855pm/raminit.h"
+
+#if 0
+#include "cpu/p6/apic_timer.c"
+#include "lib/delay.c"
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/intel/i855pm/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c" 
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+static void hard_reset(void)
+{
+        outb(0x0e, 0x0cf9);
+}
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+        /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i855pm/raminit.c"
+#include "northbridge/intel/i855pm/reset_test.c"
+#include "lib/generic_sdram.c"
+
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl[] = {
+               {
+                       .d0 = PCI_DEV(0, 0, 1),
+                       .channel0 = { (0xa<<3)|0, 0 },
+               },
+       };
+
+       if (bist == 0) {
+               early_mtrr_init();
+#if 0
+               enable_lapic();
+               init_timer();
+#endif
+       }
+        
+        w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       
+
+#if 0
+       print_pci_devices();
+#endif
+
+       if(!bios_reset_detected()) {
+               enable_smbus();
+#if 0
+       dump_spd_registers(&memctrl[0]);
+       //              dump_smbus_registers();
+#endif
+
+
+               memreset_setup();
+
+               sdram_initialize(ARRAY_SIZE(memctrl), memctrl);
+
+       } 
+#if 0
+       else {
+                       /* clear memory 1meg */
+        __asm__ volatile(
+                "1: \n\t"
+                "movl %0, %%fs:(%1)\n\t"
+                "addl $4,%1\n\t"
+                "subl $4,%2\n\t"
+                "jnz 1b\n\t"
+                :
+                : "a" (0), "D" (0), "c" (1024*1024)
+                ); 
+       
+       }
+#endif
+
+#if 0
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0, 0));
+#endif
+
+/*
+#if  0
+       ram_check(0x00000000, msr.lo+(msr.hi<<32));
+#else
+#if 0
+       // Check 16MB of memory @ 0
+       ram_check(0x00000000, 0x01000000);
+#else
+       // Check 16MB of memory @ 2GB 
+       ram_check(0x80000000, 0x81000000);
+#endif
+#endif
+*/
+}
diff --git a/src/mainboard/digitallogic/msm586seg/auto.c b/src/mainboard/digitallogic/msm586seg/auto.c
deleted file mode 100644 (file)
index 8f1756b..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#define ASM_CONSOLE_LOGLEVEL 8
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-//#include "lib/delay.c"
-
-void setup_pars(void)
-{
-       volatile unsigned long *par;
-       /* as per the book: */
-       /* PAR register setup */
-        /* set up the PAR registers as they are on the MSM586SEG */
-        par = (unsigned long *) 0xfffef088;
-
-        /* NOTE: move this to mainboard.c ASAP */
-        *par++ = 0x607c00a0; /*PAR0: PCI:Base 0xa0000; size 0x1f000:*/
-        *par++ = 0x480400d8; /*PAR1: GP BUS MEM:CS2:Base 0xd8, size 0x4:*/
-        *par++ = 0x340100ea; /*PAR2: GP BUS IO:CS5:Base 0xea, size 0x1:*/
-        *par++ = 0x380701f0; /*PAR3: GP BUS IO:CS6:Base 0x1f0, size 0x7:*/
-        *par++ = 0x3c0003f6; /*PAR4: GP BUS IO:CS7:Base 0x3f6, size 0x0:*/
-        *par++ = 0x35ff0400; /*PAR5: GP BUS IO:CS5:Base 0x400, size 0xff:*/
-        *par++ = 0x35ff0600; /*PAR6: GP BUS IO:CS5:Base 0x600, size 0xff:*/
-        *par++ = 0x35ff0800; /*PAR7: GP BUS IO:CS5:Base 0x800, size 0xff:*/
-        *par++ = 0x35ff0a00; /*PAR8: GP BUS IO:CS5:Base 0xa00, size 0xff:*/
-        *par++ = 0x35ff0e00; /*PAR9: GP BUS IO:CS5:Base 0xe00, size 0xff:*/
-        *par++ = 0x34fb0104; /*PAR10: GP BUS IO:CS5:Base 0x104, size 0xfb:*/
-        *par++ = 0x35af0200; /*PAR11: GP BUS IO:CS5:Base 0x200, size 0xaf:*/
-        *par++ = 0x341f03e0; /*PAR12: GP BUS IO:CS5:Base 0x3e0, size 0x1f:*/
-        *par++ = 0xe41c00c0; /*PAR13: SDRAM:code:cache:nowrite:Base 0xc0000, size 0x7000:*/
-        *par++ = 0x545c00c8; /*PAR14: GP BUS MEM:CS5:Base 0xc8, size 0x5c:*/
-        *par++ = 0x8a020200; /*PAR15: BOOTCS:code:nocache:write:Base 0x2000000, size 0x80000:*/
-}
-
-#include "cpu/amd/sc520/raminit.c"
-
-typedef void (*lj)(void);
-
-
-
-struct mem_controller {
-       int i;
-};
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-        /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-//     return smbus_read_byte(device, address);
-}
-
-//#include "lib/generic_sdram.c"
-
-static inline void dumpmem(void){
-  int i, j;
-  unsigned char *l;
-  unsigned char c;
-
-  for(i = 0x4000; i < 0x5000; i += 16) {
-    print_err_hex32(i); print_err(":");
-    for(j = 0; j < 16; j++) {
-      l = (unsigned char *)i + j;
-      c = *l;
-      print_err_hex8(c);
-      print_err(" ");
-    }
-    print_err("\r\n");
-  }
-}
-
-
-static inline void irqinit(void){
-       volatile unsigned char *cp;
-#if 0
-/* these values taken from the msm board itself.
- * and they cause the board to not even come out of calibrating_delay_loop
- * if you can believe it. Our problem right now is no IDE or serial interrupts
- * So we'll try to put interrupts in, one at a time. IDE first. 
- */
-       cp = (volatile unsigned char *) 0xfffefd00;
-       *cp =  0x11;
-       cp = (volatile unsigned char *) 0xfffefd02;
-       *cp =  0x02;
-       cp = (volatile unsigned char *) 0xfffefd03;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd04;
-       *cp =  0xf7;
-       cp = (volatile unsigned char *) 0xfffefd08;
-       *cp =  0xf7;
-       cp = (volatile unsigned char *) 0xfffefd0a;
-       *cp =  0x8b;
-       cp = (volatile unsigned char *) 0xfffefd10;
-       *cp =  0x18;
-       cp = (volatile unsigned char *) 0xfffefd14;
-       *cp =  0x09;
-       cp = (volatile unsigned char *) 0xfffefd18;
-       *cp =  0x88;
-       cp = (volatile unsigned char *) 0xfffefd1a;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd1b;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd1c;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd20;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd21;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd22;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd28;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd29;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd30;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd31;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd32;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd33;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd40;
-       *cp =  0x10;
-       cp = (volatile unsigned char *) 0xfffefd41;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd42;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd43;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd44;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd45;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd46;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd50;
-       *cp =  0x37;
-       cp = (volatile unsigned char *) 0xfffefd51;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd52;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd53;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd54;
-       *cp =  0x37;
-       cp = (volatile unsigned char *) 0xfffefd55;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd56;
-       *cp =  0x37;
-       cp = (volatile unsigned char *) 0xfffefd57;
-       *cp =  0x00;
-       cp = (volatile unsigned char *) 0xfffefd58;
-       *cp =  0xff;
-       cp = (volatile unsigned char *) 0xfffefd59;
-       *cp =  0xff;
-       cp = (volatile unsigned char *) 0xfffefd5a;
-       *cp =  0xff;
-#endif
-#if 0
-       /* this fails too */
-       /* IDE only ... */
-       cp = (volatile unsigned char *) 0xfffefd56;
-       *cp =  0xe;
-#endif
-}
-
-
-
-static void main(unsigned long bist)
-{
-    volatile int i;
-    for(i = 0; i < 100; i++)
-      ;
-
-
-        setupsc520();
-       irqinit();
-        uart_init();
-        console_init();
-               for(i = 0; i < 100; i++)
-         print_err("fill usart\r\n");
-               //              while(1)
-               print_err("HI THERE!\r\n");
-               //                      sizemem();
-       staticmem();
-       print_err("c60 is "); print_err_hex16(*(unsigned short *)0xfffefc60); 
-       print_err("\n");
-                       
-       //                      while(1)
-       print_err("STATIC MEM DONE\r\n");
-       outb(0xee, 0x80);
-       print_err("loop forever ...\n");
-
-
-#if 0
-
-       /* clear memory 1meg */
-        __asm__ volatile(
-                        "1: \n\t"
-                        "movl %0, %%fs:(%1)\n\t"
-                        "addl $4,%1\n\t"
-                        "subl $4,%2\n\t"
-                        "jnz 1b\n\t"
-                        :
-                        : "a" (0), "D" (0), "c" (1024*1024)
-                        ); 
-       
-       
-#endif
-       
-#if 0
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0, 0));
-#endif
-       
-#if 0
-       print_err("RAM CHECK!\r\n");
-       // Check 16MB of memory @ 0
-       ram_check(0x00000000, 0x01000000);
-#endif
-#if 0
-       print_err("RAM CHECK for 32 MB!\r\n");
-       // Check 32MB of memory @ 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-#if 1
-       {
-         volatile unsigned char *src = (unsigned char *) 0x2000000 + 0x60000;
-         volatile unsigned char *dst = (unsigned char *) 0x4000; 
-         for(i = 0; i < 0x20000; i++) {
-           /*
-             print_err("Set dst "); print_err_hex32((unsigned long) dst); 
-             print_err(" to "); print_err_hex32(*src); print_err("\r\n");
-           */
-           *dst = *src;
-           //print_err(" dst is now "); print_err_hex32(*dst); print_err("\r\n");
-           dst++, src++;
-           outb((unsigned char)i, 0x80);
-         }
-       }
-       dumpmem();
-       outb(0, 0x80);
-       print_err("loop forever\r\n");
-       outb(0xdd, 0x80);
-        __asm__ volatile(
-                        "movl %0, %%edi\n\t"
-                        "jmp *%%edi\n\t"
-                        :
-                        : "a" (0x4000)
-                        ); 
-       
-       print_err("Oh dear, I'm afraid it didn't work...\r\n");
-       
-       while(1);
-#endif
-}
-
diff --git a/src/mainboard/digitallogic/msm586seg/romstage.c b/src/mainboard/digitallogic/msm586seg/romstage.c
new file mode 100644 (file)
index 0000000..8f1756b
--- /dev/null
@@ -0,0 +1,281 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#define ASM_CONSOLE_LOGLEVEL 8
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+//#include "lib/delay.c"
+
+void setup_pars(void)
+{
+       volatile unsigned long *par;
+       /* as per the book: */
+       /* PAR register setup */
+        /* set up the PAR registers as they are on the MSM586SEG */
+        par = (unsigned long *) 0xfffef088;
+
+        /* NOTE: move this to mainboard.c ASAP */
+        *par++ = 0x607c00a0; /*PAR0: PCI:Base 0xa0000; size 0x1f000:*/
+        *par++ = 0x480400d8; /*PAR1: GP BUS MEM:CS2:Base 0xd8, size 0x4:*/
+        *par++ = 0x340100ea; /*PAR2: GP BUS IO:CS5:Base 0xea, size 0x1:*/
+        *par++ = 0x380701f0; /*PAR3: GP BUS IO:CS6:Base 0x1f0, size 0x7:*/
+        *par++ = 0x3c0003f6; /*PAR4: GP BUS IO:CS7:Base 0x3f6, size 0x0:*/
+        *par++ = 0x35ff0400; /*PAR5: GP BUS IO:CS5:Base 0x400, size 0xff:*/
+        *par++ = 0x35ff0600; /*PAR6: GP BUS IO:CS5:Base 0x600, size 0xff:*/
+        *par++ = 0x35ff0800; /*PAR7: GP BUS IO:CS5:Base 0x800, size 0xff:*/
+        *par++ = 0x35ff0a00; /*PAR8: GP BUS IO:CS5:Base 0xa00, size 0xff:*/
+        *par++ = 0x35ff0e00; /*PAR9: GP BUS IO:CS5:Base 0xe00, size 0xff:*/
+        *par++ = 0x34fb0104; /*PAR10: GP BUS IO:CS5:Base 0x104, size 0xfb:*/
+        *par++ = 0x35af0200; /*PAR11: GP BUS IO:CS5:Base 0x200, size 0xaf:*/
+        *par++ = 0x341f03e0; /*PAR12: GP BUS IO:CS5:Base 0x3e0, size 0x1f:*/
+        *par++ = 0xe41c00c0; /*PAR13: SDRAM:code:cache:nowrite:Base 0xc0000, size 0x7000:*/
+        *par++ = 0x545c00c8; /*PAR14: GP BUS MEM:CS5:Base 0xc8, size 0x5c:*/
+        *par++ = 0x8a020200; /*PAR15: BOOTCS:code:nocache:write:Base 0x2000000, size 0x80000:*/
+}
+
+#include "cpu/amd/sc520/raminit.c"
+
+typedef void (*lj)(void);
+
+
+
+struct mem_controller {
+       int i;
+};
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+        /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+//     return smbus_read_byte(device, address);
+}
+
+//#include "lib/generic_sdram.c"
+
+static inline void dumpmem(void){
+  int i, j;
+  unsigned char *l;
+  unsigned char c;
+
+  for(i = 0x4000; i < 0x5000; i += 16) {
+    print_err_hex32(i); print_err(":");
+    for(j = 0; j < 16; j++) {
+      l = (unsigned char *)i + j;
+      c = *l;
+      print_err_hex8(c);
+      print_err(" ");
+    }
+    print_err("\r\n");
+  }
+}
+
+
+static inline void irqinit(void){
+       volatile unsigned char *cp;
+#if 0
+/* these values taken from the msm board itself.
+ * and they cause the board to not even come out of calibrating_delay_loop
+ * if you can believe it. Our problem right now is no IDE or serial interrupts
+ * So we'll try to put interrupts in, one at a time. IDE first. 
+ */
+       cp = (volatile unsigned char *) 0xfffefd00;
+       *cp =  0x11;
+       cp = (volatile unsigned char *) 0xfffefd02;
+       *cp =  0x02;
+       cp = (volatile unsigned char *) 0xfffefd03;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd04;
+       *cp =  0xf7;
+       cp = (volatile unsigned char *) 0xfffefd08;
+       *cp =  0xf7;
+       cp = (volatile unsigned char *) 0xfffefd0a;
+       *cp =  0x8b;
+       cp = (volatile unsigned char *) 0xfffefd10;
+       *cp =  0x18;
+       cp = (volatile unsigned char *) 0xfffefd14;
+       *cp =  0x09;
+       cp = (volatile unsigned char *) 0xfffefd18;
+       *cp =  0x88;
+       cp = (volatile unsigned char *) 0xfffefd1a;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd1b;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd1c;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd20;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd21;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd22;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd28;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd29;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd30;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd31;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd32;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd33;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd40;
+       *cp =  0x10;
+       cp = (volatile unsigned char *) 0xfffefd41;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd42;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd43;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd44;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd45;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd46;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd50;
+       *cp =  0x37;
+       cp = (volatile unsigned char *) 0xfffefd51;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd52;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd53;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd54;
+       *cp =  0x37;
+       cp = (volatile unsigned char *) 0xfffefd55;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd56;
+       *cp =  0x37;
+       cp = (volatile unsigned char *) 0xfffefd57;
+       *cp =  0x00;
+       cp = (volatile unsigned char *) 0xfffefd58;
+       *cp =  0xff;
+       cp = (volatile unsigned char *) 0xfffefd59;
+       *cp =  0xff;
+       cp = (volatile unsigned char *) 0xfffefd5a;
+       *cp =  0xff;
+#endif
+#if 0
+       /* this fails too */
+       /* IDE only ... */
+       cp = (volatile unsigned char *) 0xfffefd56;
+       *cp =  0xe;
+#endif
+}
+
+
+
+static void main(unsigned long bist)
+{
+    volatile int i;
+    for(i = 0; i < 100; i++)
+      ;
+
+
+        setupsc520();
+       irqinit();
+        uart_init();
+        console_init();
+               for(i = 0; i < 100; i++)
+         print_err("fill usart\r\n");
+               //              while(1)
+               print_err("HI THERE!\r\n");
+               //                      sizemem();
+       staticmem();
+       print_err("c60 is "); print_err_hex16(*(unsigned short *)0xfffefc60); 
+       print_err("\n");
+                       
+       //                      while(1)
+       print_err("STATIC MEM DONE\r\n");
+       outb(0xee, 0x80);
+       print_err("loop forever ...\n");
+
+
+#if 0
+
+       /* clear memory 1meg */
+        __asm__ volatile(
+                        "1: \n\t"
+                        "movl %0, %%fs:(%1)\n\t"
+                        "addl $4,%1\n\t"
+                        "subl $4,%2\n\t"
+                        "jnz 1b\n\t"
+                        :
+                        : "a" (0), "D" (0), "c" (1024*1024)
+                        ); 
+       
+       
+#endif
+       
+#if 0
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0, 0));
+#endif
+       
+#if 0
+       print_err("RAM CHECK!\r\n");
+       // Check 16MB of memory @ 0
+       ram_check(0x00000000, 0x01000000);
+#endif
+#if 0
+       print_err("RAM CHECK for 32 MB!\r\n");
+       // Check 32MB of memory @ 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+#if 1
+       {
+         volatile unsigned char *src = (unsigned char *) 0x2000000 + 0x60000;
+         volatile unsigned char *dst = (unsigned char *) 0x4000; 
+         for(i = 0; i < 0x20000; i++) {
+           /*
+             print_err("Set dst "); print_err_hex32((unsigned long) dst); 
+             print_err(" to "); print_err_hex32(*src); print_err("\r\n");
+           */
+           *dst = *src;
+           //print_err(" dst is now "); print_err_hex32(*dst); print_err("\r\n");
+           dst++, src++;
+           outb((unsigned char)i, 0x80);
+         }
+       }
+       dumpmem();
+       outb(0, 0x80);
+       print_err("loop forever\r\n");
+       outb(0xdd, 0x80);
+        __asm__ volatile(
+                        "movl %0, %%edi\n\t"
+                        "jmp *%%edi\n\t"
+                        :
+                        : "a" (0x4000)
+                        ); 
+       
+       print_err("Oh dear, I'm afraid it didn't work...\r\n");
+       
+       while(1);
+#endif
+}
+
index f101f22d4ecbe18a8d3e8f6ce537104ec2d389d9..0e4b263223b6ea639ec4eec47e3e59e0fb714d3f 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/digitallogic/msm800sev/auto.c b/src/mainboard/digitallogic/msm800sev/auto.c
deleted file mode 100644 (file)
index 29a5661..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-//#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-
-//#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/lx/raminit.h"
-
-static inline unsigned int fls(unsigned int x)
-{
-        int r;
-
-        __asm__("bsfl %1,%0\n\t"
-                "jnz 1f\n\t"
-                "movl $32,%0\n"
-                "1:" : "=r" (r) : "g" (x));
-        return r;
-}
-
-
-
-static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
-{
-       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
-        *                      component Banks (byte 17) * module banks, side (byte 5) *
-        *                      width in bits (byte 6,7)
-        *                    = Density per side (byte 31) * number of sides (byte 5) */
-       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
-       msr_t msr;
-       unsigned char module_banks, val;
-
-       
-       msr.hi = 0x10075012;
-       msr.lo = 0x00000040;
-       
-       wrmsr(MC_CF07_DATA, msr);               //GX3
-
-       /* timing and mode ... */
-
-       //msr = rdmsr(0x20000019);
-       
-       /* per standard bios settings */        
-/*
-       msr.hi = 0x18000108;
-       msr.lo = 
-                       (6<<28) |               // cas_lat
-                       (10<<24)|               // ref2act
-                       (7<<20)|                // act2pre
-                       (3<<16)|                // pre2act
-                       (3<<12)|                // act2cmd
-                       (2<<8)|                 // act2act
-                       (2<<6)|                 // dplwr
-                       (2<<4)|                 // dplrd
-                       (3);                    // dal
-       * the msr value reported by quanta is very, very different. 
-        * we will go with that value for now. 
-        *
-       //msr.lo = 0x286332a3;
-*/
-       //wrmsr(0x20000019, msr);       //GX3
-
-}
-
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-
-/* CPU and GLIU mult/div */
-#define PLLMSRhi 0x0000039C
-/* Hold Count - how long we will sit in reset */
-#define PLLMSRlo 0x00DE0000
-
-#include "northbridge/amd/lx/pll_reset.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-static void msr_init(void)
-{
-
-       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
-
-        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
-}
-
-       
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-
-       SystemPreInit();                        //GX3 OK
-
-       msr_init();                                     //GX3 OK
-
-       cs5536_early_setup();           //GX3 OK
-
-       /* NOTE: must do this AFTER the early_setup!
-        * it is counting on some early MSR setup
-        * for cs5536
-        */
-       cs5536_setup_onchipuart();      //GX3 OK
-
-       uart_init();                            //GX3 OK
-       console_init();                         //GX3 OK
-
-       pll_reset();                            //GX3 OK
-
-       cpuRegInit();                           //GX3 OK
-
-       print_err("done cpuRegInit\n");
-       
-       sdram_initialize(1, memctrl);   //GX3 OK almost
-       
-       /* Check all of memory */
-       //ram_check(0x00000000, 640*1024);
-}
diff --git a/src/mainboard/digitallogic/msm800sev/cache_as_ram_auto.c b/src/mainboard/digitallogic/msm800sev/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 70fa935..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-               return smbus_read_byte(device, address);
-}
-
-#define ManualConf 0           /* Do automatic strapped PLL config */
-#define PLLMSRhi 0x00001490 /* manual settings for the PLL */
-#define PLLMSRlo 0x02000030
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-       /* Setup access to the MC for under 1MB. Note MC not setup yet. */
-       msr.hi = 0x24fffc02;
-       msr.lo =  0x10010000;
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff00;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo =  0xfff00;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-}
-
-static void mb_gpio_init(void)
-{
-       /* Early mainboard specific GPIO setup */
-}
-
-void cache_as_ram_main(void)
-{
-       extern void RestartCAR();
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* NOTE: must do this AFTER the early_setup!
-        * it is counting on some early MSR setup
-        * for cs5536
-        */
-       cs5536_disable_internal_uart();
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Check all of memory */
-       ram_check(0x00000000, 640*1024);
-
-       /* Switch from Cache as RAM to real RAM */
-       /* There are two ways we could think about this.
-        1. If we are using the auto.inc ROMCC way, the stack is going to be re-setup in the code following this code.
-               Just wbinvd the stack to clear the cache tags. We don't care where the stack used to be.
-        2. This file is built as a normal .c -> .o and linked in etc. The stack might be used to return etc.
-               That means we care about what is in the stack. If we are smart we set the CAR stack to the same location
-               as the rest of coreboot. If that is the case we can just do a wbinvd. The stack will be written into real
-               RAM that is now setup and we continue like nothing happened. If the stack is located somewhere other than
-               where LB would like it, you need to write some code to do a copy from cache to RAM
-
-        We use method 1 on Norwich.
-       */
-       POST_CODE(0x02);
-       print_err("POST 02\n");
-       __asm__("wbinvd\n");
-       print_err("Past wbinvd\n");
-       /* we are finding the return does not work on this board. Explicitly call the label that is 
-        * after the call to us. This is gross, but sometimes at this level it is the only way out
-        */
-       void done_cache_as_ram_main(void);
-       done_cache_as_ram_main();
-}
diff --git a/src/mainboard/digitallogic/msm800sev/romstage.c b/src/mainboard/digitallogic/msm800sev/romstage.c
new file mode 100644 (file)
index 0000000..03f9fae
--- /dev/null
@@ -0,0 +1,120 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+               return smbus_read_byte(device, address);
+}
+
+#define ManualConf 0           /* Do automatic strapped PLL config */
+#define PLLMSRhi 0x00001490 /* manual settings for the PLL */
+#define PLLMSRlo 0x02000030
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+       /* Setup access to the MC for under 1MB. Note MC not setup yet. */
+       msr.hi = 0x24fffc02;
+       msr.lo =  0x10010000;
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff00;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo =  0xfff00;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+}
+
+static void mb_gpio_init(void)
+{
+       /* Early mainboard specific GPIO setup */
+}
+
+void cache_as_ram_main(void)
+{
+       extern void RestartCAR();
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl [] = {
+               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* NOTE: must do this AFTER the early_setup!
+        * it is counting on some early MSR setup
+        * for cs5536
+        */
+       cs5536_disable_internal_uart();
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Check all of memory */
+       ram_check(0x00000000, 640*1024);
+
+       /* Switch from Cache as RAM to real RAM */
+       /* There are two ways we could think about this.
+        1. If we are using the romstage.inc ROMCC way, the stack is going to be re-setup in the code following this code.
+               Just wbinvd the stack to clear the cache tags. We don't care where the stack used to be.
+        2. This file is built as a normal .c -> .o and linked in etc. The stack might be used to return etc.
+               That means we care about what is in the stack. If we are smart we set the CAR stack to the same location
+               as the rest of coreboot. If that is the case we can just do a wbinvd. The stack will be written into real
+               RAM that is now setup and we continue like nothing happened. If the stack is located somewhere other than
+               where LB would like it, you need to write some code to do a copy from cache to RAM
+
+        We use method 1 on Norwich.
+       */
+       POST_CODE(0x02);
+       print_err("POST 02\n");
+       __asm__("wbinvd\n");
+       print_err("Past wbinvd\n");
+       /* we are finding the return does not work on this board. Explicitly call the label that is 
+        * after the call to us. This is gross, but sometimes at this level it is the only way out
+        */
+       void done_cache_as_ram_main(void);
+       done_cache_as_ram_main();
+}
diff --git a/src/mainboard/eaglelion/5bcm/auto.c b/src/mainboard/eaglelion/5bcm/auto.c
deleted file mode 100644 (file)
index 22e7346..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-//#include "southbridge/intel/i440bx/i440bx_early_smbus.c"
-#include "superio/nsc/pc97317/pc97317_early_serial.c"
-//#include "northbridge/intel/i440bx/raminit.h"
-#include "cpu/x86/bist.h"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
-
-//#include "lib/delay.c"
-
-#include "northbridge/amd/gx1/raminit.c"
-
-static void main(unsigned long bist)
-{
-       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       
-       cs5530_enable_rom();
-
-       sdram_init();
-       
-       /* Check all of memory */
-#if 0
-       ram_check(0x00000000, msr.lo);
-#endif
-#if 0
-       static const struct {
-               unsigned long lo, hi;
-       } check_addrs[] = {
-               /* Check 16MB of memory @ 0*/
-               { 0x00000000, 0x01000000 },
-#if TOTAL_CPUS > 1
-               /* Check 16MB of memory @ 2GB */
-               { 0x80000000, 0x81000000 },
-#endif
-       };
-       int i;
-       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
-               ram_check(check_addrs[i].lo, check_addrs[i].hi);
-       }
-#endif
-}
diff --git a/src/mainboard/eaglelion/5bcm/romstage.c b/src/mainboard/eaglelion/5bcm/romstage.c
new file mode 100644 (file)
index 0000000..22e7346
--- /dev/null
@@ -0,0 +1,59 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+//#include "southbridge/intel/i440bx/i440bx_early_smbus.c"
+#include "superio/nsc/pc97317/pc97317_early_serial.c"
+//#include "northbridge/intel/i440bx/raminit.h"
+#include "cpu/x86/bist.h"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
+
+//#include "lib/delay.c"
+
+#include "northbridge/amd/gx1/raminit.c"
+
+static void main(unsigned long bist)
+{
+       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       
+       cs5530_enable_rom();
+
+       sdram_init();
+       
+       /* Check all of memory */
+#if 0
+       ram_check(0x00000000, msr.lo);
+#endif
+#if 0
+       static const struct {
+               unsigned long lo, hi;
+       } check_addrs[] = {
+               /* Check 16MB of memory @ 0*/
+               { 0x00000000, 0x01000000 },
+#if TOTAL_CPUS > 1
+               /* Check 16MB of memory @ 2GB */
+               { 0x80000000, 0x81000000 },
+#endif
+       };
+       int i;
+       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
+               ram_check(check_addrs[i].lo, check_addrs[i].hi);
+       }
+#endif
+}
diff --git a/src/mainboard/emulation/qemu-x86/auto.c b/src/mainboard/emulation/qemu-x86/auto.c
deleted file mode 100644 (file)
index 273f6b9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-
-static void main(void)
-{
-       /*      init_timer();*/
-       outb(5, 0x80);
-       
-       uart_init();
-       console_init();
-       
-       //print_pci_devices();
-       //dump_pci_devices();
-}
diff --git a/src/mainboard/emulation/qemu-x86/romstage.c b/src/mainboard/emulation/qemu-x86/romstage.c
new file mode 100644 (file)
index 0000000..273f6b9
--- /dev/null
@@ -0,0 +1,29 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+
+static void main(void)
+{
+       /*      init_timer();*/
+       outb(5, 0x80);
+       
+       uart_init();
+       console_init();
+       
+       //print_pci_devices();
+       //dump_pci_devices();
+}
diff --git a/src/mainboard/gigabyte/ga-6bxc/auto.c b/src/mainboard/gigabyte/ga-6bxc/auto.c
deleted file mode 100644 (file)
index 1b440a7..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/ite/it8671f/it8671f_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, IT8671F_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       it8671f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/gigabyte/ga-6bxc/romstage.c b/src/mainboard/gigabyte/ga-6bxc/romstage.c
new file mode 100644 (file)
index 0000000..1b440a7
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/ite/it8671f/it8671f_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, IT8671F_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       it8671f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
index c6355e6907c87b67b9fe92f99992de45c81f8934..5baea403437b6003c8704efab61e62b3d2cacaf4 100644 (file)
@@ -25,7 +25,7 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
@@ -35,7 +35,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -48,11 +48,11 @@ endif
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/gigabyte/ga_2761gxdk/cache_as_ram_auto.c b/src/mainboard/gigabyte/ga_2761gxdk/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 69e06bc..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- * Copyright (C) 2007 Silicon Integrated Systems Corp. (SiS)
- * Written by Morgan Tsai <my_tsai@sis.com> for SiS.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/sis/sis966/sis966_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "southbridge/sis/sis966/sis966_early_smbus.c"
-#include "southbridge/sis/sis966/sis966_enable_rom.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/ite/it8716f/it8716f_early_serial.c"
-#include "superio/ite/it8716f/it8716f_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
-
-#include "southbridge/sis/sis966/sis966_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define SIS966_NUM 1
-#define SIS966_USE_NIC 1
-#define SIS966_USE_AZA 1
-
-#define SIS966_PCI_E_X_0 0
-
-#define SIS966_MB_SETUP \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/sis/sis966/sis966_early_setup_ss.h"
-#include "southbridge/sis/sis966/sis966_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/sis/sis966/sis966_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-
-        byte = pci_read_config8(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20;
-        pci_write_config8(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0x7b, byte);
-
-        dword = pci_read_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa0, dword);
-
-        dword = pci_read_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa4);
-        dword |= (1<<16);
-        pci_write_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa4, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the sis966 */
-        sis966_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset = 0;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-        pnp_write_config(SERIAL_DEV, 0x23, 0);
-       it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-        setup_mb_resource_map();
-
-        uart_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-
-#if CONFIG_USBDEBUG_DIRECT
-       sis966_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-        console_init();
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-        setup_coherent_ht_domain(); // routing table and start other core0
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-         * So here need to make sure last core0 is started, esp for two way system,
-         * (there may be apic id conflicts in that case)
-         */
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-        enable_fid_change();
-
-        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-#endif
-
-        needs_reset |= optimize_link_coherent_ht();
-        needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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();
-        }
-        allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-        sis_init_stage1();
-        enable_smbus();
-
-        memreset_setup();
-
-        //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-        sis_init_stage2();
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-
-#endif
diff --git a/src/mainboard/gigabyte/ga_2761gxdk/romstage.c b/src/mainboard/gigabyte/ga_2761gxdk/romstage.c
new file mode 100644 (file)
index 0000000..69e06bc
--- /dev/null
@@ -0,0 +1,366 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ * Copyright (C) 2007 Silicon Integrated Systems Corp. (SiS)
+ * Written by Morgan Tsai <my_tsai@sis.com> for SiS.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/sis/sis966/sis966_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "southbridge/sis/sis966/sis966_early_smbus.c"
+#include "southbridge/sis/sis966/sis966_enable_rom.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/ite/it8716f/it8716f_early_serial.c"
+#include "superio/ite/it8716f/it8716f_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
+
+#include "southbridge/sis/sis966/sis966_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define SIS966_NUM 1
+#define SIS966_USE_NIC 1
+#define SIS966_USE_AZA 1
+
+#define SIS966_PCI_E_X_0 0
+
+#define SIS966_MB_SETUP \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/sis/sis966/sis966_early_setup_ss.h"
+#include "southbridge/sis/sis966/sis966_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/sis/sis966/sis966_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+
+        byte = pci_read_config8(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20;
+        pci_write_config8(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0x7b, byte);
+
+        dword = pci_read_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa0, dword);
+
+        dword = pci_read_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa4);
+        dword |= (1<<16);
+        pci_write_config32(PCI_DEV(0, SIS966_DEVN_BASE+1 , 0), 0xa4, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the sis966 */
+        sis966_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset = 0;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+        pnp_write_config(SERIAL_DEV, 0x23, 0);
+       it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+        setup_mb_resource_map();
+
+        uart_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+
+#if CONFIG_USBDEBUG_DIRECT
+       sis966_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+        console_init();
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+        setup_coherent_ht_domain(); // routing table and start other core0
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+         * So here need to make sure last core0 is started, esp for two way system,
+         * (there may be apic id conflicts in that case)
+         */
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+        enable_fid_change();
+
+        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+#endif
+
+        needs_reset |= optimize_link_coherent_ht();
+        needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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();
+        }
+        allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+        sis_init_stage1();
+        enable_smbus();
+
+        memreset_setup();
+
+        //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+        sis_init_stage2();
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+
+#endif
index 5aad212d72febd297344c60c5596eabeb9de9434..0fb2cac3d4811526f14abb963434992a5878b4d6 100644 (file)
@@ -25,7 +25,7 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 obj-$(CONFIG_GENERATE_ACPI_TABLES) +=  dsdt.o
 obj-$(CONFIG_GENERATE_ACPI_TABLES) +=  acpi_tables.o
@@ -39,7 +39,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/mcp55/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -60,11 +60,11 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/gigabyte/m57sli/cache_as_ram_auto.c b/src/mainboard/gigabyte/m57sli/cache_as_ram_auto.c
deleted file mode 100644 (file)
index ecc7827..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/ite/it8716f/it8716f_early_serial.c"
-#include "superio/ite/it8716f/it8716f_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
-#define GPIO_DEV PNP_DEV(0x2e, IT8716F_GPIO)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 0
-
-#define MCP55_MB_SETUP \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x68,/* GPIO38 PCI_REQ3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x68,/* GPIO39 PCI_GNT3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x68,/* GPIO40 PCI_GNT2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x68,/* GPIO41 PCI_REQ2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-
-        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20; 
-        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-        dword |= (1<<16);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the mcp55 */
-        mcp55_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset = 0;
-        unsigned bsp_apicid = 0;
-       uint8_t tmp = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       /* The following line will set CLKIN to 24 MHz, external */
-       pnp_write_config(SERIAL_DEV, IT8716F_CONFIG_REG_CLOCKSEL, 0x11);
-       tmp = pnp_read_config(SERIAL_DEV, IT8716F_CONFIG_REG_SWSUSP);
-       /* Is serial flash enabled? Then enable writing to serial flash. */
-       if (tmp & 0x0e) {
-               pnp_write_config(SERIAL_DEV, IT8716F_CONFIG_REG_SWSUSP, tmp | 0x10);
-               pnp_set_logical_device(GPIO_DEV);
-               /* Set Serial Flash interface to 0x0820 */
-               pnp_write_config(GPIO_DEV, 0x64, 0x08);
-               pnp_write_config(GPIO_DEV, 0x65, 0x20);
-               /* We can get away with not resetting the logical device because
-                * it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE) will do that.
-                */
-       }
-       it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-        setup_mb_resource_map();
-
-        uart_init();
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-
-#if CONFIG_USBDEBUG_DIRECT
-       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-        console_init();
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-        setup_coherent_ht_domain(); // routing table and start other core0
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-         * So here need to make sure last core0 is started, esp for two way system,
-         * (there may be apic id conflicts in that case)
-         */
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-        enable_fid_change();
-
-        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-#endif
-
-        needs_reset |= optimize_link_coherent_ht();
-        needs_reset |= optimize_link_incoherent_ht(sysinfo);
-        needs_reset |= mcp55_early_setup_x();
-
-        // 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();
-        }
-        allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-        enable_smbus(); 
-
-        memreset_setup();
-
-        //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-
-#endif
diff --git a/src/mainboard/gigabyte/m57sli/romstage.c b/src/mainboard/gigabyte/m57sli/romstage.c
new file mode 100644 (file)
index 0000000..ecc7827
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/ite/it8716f/it8716f_early_serial.c"
+#include "superio/ite/it8716f/it8716f_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
+#define GPIO_DEV PNP_DEV(0x2e, IT8716F_GPIO)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 0
+
+#define MCP55_MB_SETUP \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x68,/* GPIO38 PCI_REQ3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x68,/* GPIO39 PCI_GNT3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x68,/* GPIO40 PCI_GNT2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x68,/* GPIO41 PCI_REQ2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+
+        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20; 
+        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+        dword |= (1<<16);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the mcp55 */
+        mcp55_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset = 0;
+        unsigned bsp_apicid = 0;
+       uint8_t tmp = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       /* The following line will set CLKIN to 24 MHz, external */
+       pnp_write_config(SERIAL_DEV, IT8716F_CONFIG_REG_CLOCKSEL, 0x11);
+       tmp = pnp_read_config(SERIAL_DEV, IT8716F_CONFIG_REG_SWSUSP);
+       /* Is serial flash enabled? Then enable writing to serial flash. */
+       if (tmp & 0x0e) {
+               pnp_write_config(SERIAL_DEV, IT8716F_CONFIG_REG_SWSUSP, tmp | 0x10);
+               pnp_set_logical_device(GPIO_DEV);
+               /* Set Serial Flash interface to 0x0820 */
+               pnp_write_config(GPIO_DEV, 0x64, 0x08);
+               pnp_write_config(GPIO_DEV, 0x65, 0x20);
+               /* We can get away with not resetting the logical device because
+                * it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE) will do that.
+                */
+       }
+       it8716f_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+        setup_mb_resource_map();
+
+        uart_init();
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+
+#if CONFIG_USBDEBUG_DIRECT
+       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+        console_init();
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+        setup_coherent_ht_domain(); // routing table and start other core0
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+         * So here need to make sure last core0 is started, esp for two way system,
+         * (there may be apic id conflicts in that case)
+         */
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+        enable_fid_change();
+
+        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+#endif
+
+        needs_reset |= optimize_link_coherent_ht();
+        needs_reset |= optimize_link_incoherent_ht(sysinfo);
+        needs_reset |= mcp55_early_setup_x();
+
+        // 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();
+        }
+        allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+        enable_smbus(); 
+
+        memreset_setup();
+
+        //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+
+#endif
diff --git a/src/mainboard/hp/dl145_g3/cache_as_ram_auto.c b/src/mainboard/hp/dl145_g3/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 525cb3e..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 Tyan
- * Copyright (C) 2006 AMD
- * Written by Yinghai Lu <yinghailu@gmail.com> for Tyan and AMD.
- *
- * Copyright (C) 2007 University of Mannheim
- * Written by Philipp Degler <pdegler@rumms.uni-mannheim.de> for University of Mannheim
- * Copyright (C) 2009 University of Heidelberg
- * Written by Mondrian Nuessle <nuessle@uni-heidelberg.de> for University of Heidelberg
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-
-#include "superio/serverengines/pilot/pilot_early_serial.c"
-#include "superio/serverengines/pilot/pilot_early_init.c"
-#include "superio/nsc/pc87417/pc87417_early_serial.c"
-
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PILOT_SP1)
-#define RTC_DEV PNP_DEV(0x4e, PC87417_RTC)
-
-#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_SWITCH1 0x70
-#define SMBUS_SWITCH2 0x72
-        unsigned device = (ctrl->channel0[0]) >> 8;
-        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
-        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-//#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-//first node
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-//second node
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-#if 0
-#include "ipmi.c"
-
-static void setup_early_ipmi_serial()
-{
-       unsigned char result;
-       char channel_access[]={0x06<<2,0x40,0x04,0x80,0x05};
-       char serialmodem_conf[]={0x0c<<2,0x10,0x04,0x08,0x00,0x0f};
-       char serial_mux1[]={0x0c<<2,0x12,0x04,0x06};
-       char serial_mux2[]={0x0c<<2,0x12,0x04,0x03};
-       char serial_mux3[]={0x0c<<2,0x12,0x04,0x07};
-
-//     earlydbg(0x0d);
-       //set channel access system only
-       ipmi_request(5,channel_access);
-//     earlydbg(result);
-/*
-       //Set serial/modem config
-       result=ipmi_request(6,serialmodem_conf);
-       earlydbg(result);
-
-       //Set serial mux 1
-       result=ipmi_request(4,serial_mux1);
-       earlydbg(result);
-
-       //Set serial mux 2
-       result=ipmi_request(4,serial_mux2);
-       earlydbg(result);
-
-       //Set serial mux 3
-       result=ipmi_request(4,serial_mux3);
-       earlydbg(result);
-*/
-//     earlydbg(0x0e);
-
-}
-#endif
-
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        /* Is this a cpu only reset? Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) { // RTC already inited
-                       goto normal_image; //normal_image;
-               } else {
-                       goto fallback_image;
-               }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-        bcm5785_enable_rom();
-        bcm5785_enable_lpc();
-        //enable RTC
-       pc87417_enable_dev(RTC_DEV);
-
-        /* Is this a deliberate reset by the bios */
-
-        if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-               goto normal_image;
-        }
-        else {
-               goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               )
-#endif
-        ;
-
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               //first node
-                DIMM0, DIMM2, 0, 0,
-                DIMM1, DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               //second node
-               DIMM4, DIMM6, 0, 0,
-               DIMM5, DIMM7, 0, 0,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       pilot_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-
-       //setup_mp_resource_map();
-
-       uart_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-
-       console_init();
-//     setup_early_ipmi_serial();
-       pilot_early_init(SERIAL_DEV); //config port is being taken from SERIAL_DEV
-       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(","); print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-       setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case)
-       */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* it will set up chains and store link pair for optimization later */
-       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-       bcm5785_early_setup();
-
-#if K8_SET_FIDVID == 1
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-       }
-       enable_fid_change();
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-       init_fidvid_bsp(bsp_apicid);
-       // show final fid and vid
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-       }
-#endif
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-       // 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();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       enable_smbus();
-
-       memreset_setup();
-       //do we need apci timer, tsc...., only debug need it for better output
-       /* all ap stopped? */
-//     init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_cache_as_ram();
-
-}
-
-#endif
diff --git a/src/mainboard/hp/dl145_g3/romstage.c b/src/mainboard/hp/dl145_g3/romstage.c
new file mode 100644 (file)
index 0000000..525cb3e
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Tyan
+ * Copyright (C) 2006 AMD
+ * Written by Yinghai Lu <yinghailu@gmail.com> for Tyan and AMD.
+ *
+ * Copyright (C) 2007 University of Mannheim
+ * Written by Philipp Degler <pdegler@rumms.uni-mannheim.de> for University of Mannheim
+ * Copyright (C) 2009 University of Heidelberg
+ * Written by Mondrian Nuessle <nuessle@uni-heidelberg.de> for University of Heidelberg
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+
+#include "superio/serverengines/pilot/pilot_early_serial.c"
+#include "superio/serverengines/pilot/pilot_early_init.c"
+#include "superio/nsc/pc87417/pc87417_early_serial.c"
+
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PILOT_SP1)
+#define RTC_DEV PNP_DEV(0x4e, PC87417_RTC)
+
+#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_SWITCH1 0x70
+#define SMBUS_SWITCH2 0x72
+        unsigned device = (ctrl->channel0[0]) >> 8;
+        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
+        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+//#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+//first node
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+//second node
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+#if 0
+#include "ipmi.c"
+
+static void setup_early_ipmi_serial()
+{
+       unsigned char result;
+       char channel_access[]={0x06<<2,0x40,0x04,0x80,0x05};
+       char serialmodem_conf[]={0x0c<<2,0x10,0x04,0x08,0x00,0x0f};
+       char serial_mux1[]={0x0c<<2,0x12,0x04,0x06};
+       char serial_mux2[]={0x0c<<2,0x12,0x04,0x03};
+       char serial_mux3[]={0x0c<<2,0x12,0x04,0x07};
+
+//     earlydbg(0x0d);
+       //set channel access system only
+       ipmi_request(5,channel_access);
+//     earlydbg(result);
+/*
+       //Set serial/modem config
+       result=ipmi_request(6,serialmodem_conf);
+       earlydbg(result);
+
+       //Set serial mux 1
+       result=ipmi_request(4,serial_mux1);
+       earlydbg(result);
+
+       //Set serial mux 2
+       result=ipmi_request(4,serial_mux2);
+       earlydbg(result);
+
+       //Set serial mux 3
+       result=ipmi_request(4,serial_mux3);
+       earlydbg(result);
+*/
+//     earlydbg(0x0e);
+
+}
+#endif
+
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        /* Is this a cpu only reset? Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) { // RTC already inited
+                       goto normal_image; //normal_image;
+               } else {
+                       goto fallback_image;
+               }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+        bcm5785_enable_rom();
+        bcm5785_enable_lpc();
+        //enable RTC
+       pc87417_enable_dev(RTC_DEV);
+
+        /* Is this a deliberate reset by the bios */
+
+        if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+               goto normal_image;
+        }
+        else {
+               goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               )
+#endif
+        ;
+
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               //first node
+                DIMM0, DIMM2, 0, 0,
+                DIMM1, DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               //second node
+               DIMM4, DIMM6, 0, 0,
+               DIMM5, DIMM7, 0, 0,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       pilot_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+
+       //setup_mp_resource_map();
+
+       uart_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+
+       console_init();
+//     setup_early_ipmi_serial();
+       pilot_early_init(SERIAL_DEV); //config port is being taken from SERIAL_DEV
+       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(","); print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+       setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case)
+       */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* it will set up chains and store link pair for optimization later */
+       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+       bcm5785_early_setup();
+
+#if K8_SET_FIDVID == 1
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+       }
+       enable_fid_change();
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+       init_fidvid_bsp(bsp_apicid);
+       // show final fid and vid
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+       }
+#endif
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+       // 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();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       enable_smbus();
+
+       memreset_setup();
+       //do we need apci timer, tsc...., only debug need it for better output
+       /* all ap stopped? */
+//     init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_cache_as_ram();
+
+}
+
+#endif
diff --git a/src/mainboard/hp/e_vectra_p2706t/auto.c b/src/mainboard/hp/e_vectra_p2706t/auto.c
deleted file mode 100644 (file)
index 50d8c44..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-/* TODO: It's a PC87364 actually! */
-#include "superio/nsc/pc87360/pc87360_early_serial.c"
-/* TODO: It's i810E actually! */
-#include "northbridge/intel/i82810/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "pc80/udelay_io.c"
-#include "lib/debug.c"
-#include "northbridge/intel/i82810/raminit.c"
-
-/* TODO: It's a PC87364 actually! */
-#define SERIAL_DEV PNP_DEV(0x2e, PC87360_SP1)
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* TODO: It's a PC87364 actually! */
-       pc87360_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-
-       uart_init();
-       console_init();
-
-       enable_smbus();
-
-       report_bist_failure(bist);
-
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/hp/e_vectra_p2706t/romstage.c b/src/mainboard/hp/e_vectra_p2706t/romstage.c
new file mode 100644 (file)
index 0000000..50d8c44
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+/* TODO: It's a PC87364 actually! */
+#include "superio/nsc/pc87360/pc87360_early_serial.c"
+/* TODO: It's i810E actually! */
+#include "northbridge/intel/i82810/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "pc80/udelay_io.c"
+#include "lib/debug.c"
+#include "northbridge/intel/i82810/raminit.c"
+
+/* TODO: It's a PC87364 actually! */
+#define SERIAL_DEV PNP_DEV(0x2e, PC87360_SP1)
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* TODO: It's a PC87364 actually! */
+       pc87360_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+
+       uart_init();
+       console_init();
+
+       enable_smbus();
+
+       report_bist_failure(bist);
+
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/ibm/e325/cache_as_ram_auto.c b/src/mainboard/ibm/e325/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 6621bf1..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/nsc/pc87366/pc87366_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87366_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-       } else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);
-               udelay(90);
-       }
-}
-
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define FIRST_CPU  1
-#define SECOND_CPU 1
-#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               {
-                       .node_id = 1,
-                       .f0 = PCI_DEV(0, 0x19, 0),
-                       .f1 = PCI_DEV(0, 0x19, 1),
-                       .f2 = PCI_DEV(0, 0x19, 2),
-                       .f3 = PCI_DEV(0, 0x19, 3),
-                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
-                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
-               },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       pc87366_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_ibm_e325_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/ibm/e325/romstage.c b/src/mainboard/ibm/e325/romstage.c
new file mode 100644 (file)
index 0000000..6621bf1
--- /dev/null
@@ -0,0 +1,216 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/nsc/pc87366/pc87366_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87366_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+       } else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);
+               udelay(90);
+       }
+}
+
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define FIRST_CPU  1
+#define SECOND_CPU 1
+#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               {
+                       .node_id = 1,
+                       .f0 = PCI_DEV(0, 0x19, 0),
+                       .f1 = PCI_DEV(0, 0x19, 1),
+                       .f2 = PCI_DEV(0, 0x19, 2),
+                       .f3 = PCI_DEV(0, 0x19, 3),
+                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
+                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
+               },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       pc87366_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_ibm_e325_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/ibm/e326/cache_as_ram_auto.c b/src/mainboard/ibm/e326/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 0ec2c52..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/nsc/pc87366/pc87366_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87366_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-       } else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);
-               udelay(90);
-       }
-}
-
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define FIRST_CPU  1
-#define SECOND_CPU 1
-#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               {
-                       .node_id = 1,
-                       .f0 = PCI_DEV(0, 0x19, 0),
-                       .f1 = PCI_DEV(0, 0x19, 1),
-                       .f2 = PCI_DEV(0, 0x19, 2),
-                       .f3 = PCI_DEV(0, 0x19, 3),
-                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
-                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
-               },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       pc87366_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_ibm_e326_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/ibm/e326/romstage.c b/src/mainboard/ibm/e326/romstage.c
new file mode 100644 (file)
index 0000000..0ec2c52
--- /dev/null
@@ -0,0 +1,216 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/nsc/pc87366/pc87366_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87366_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+       } else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);
+               udelay(90);
+       }
+}
+
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define FIRST_CPU  1
+#define SECOND_CPU 1
+#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               {
+                       .node_id = 1,
+                       .f0 = PCI_DEV(0, 0x19, 0),
+                       .f1 = PCI_DEV(0, 0x19, 1),
+                       .f2 = PCI_DEV(0, 0x19, 2),
+                       .f3 = PCI_DEV(0, 0x19, 3),
+                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
+                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
+               },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       pc87366_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_ibm_e326_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/iei/juki-511p/auto.c b/src/mainboard/iei/juki-511p/auto.c
deleted file mode 100644 (file)
index 655959f..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Nikolay Petukhov <nikolay.petukhov@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83977f/w83977f_early_serial.c"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977F_SP1)
-
-#include "northbridge/amd/gx1/raminit.c"
-
-static void main(unsigned long bist)
-{
-       /* Initialize the serial console. */
-       w83977f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       /* Disable Watchdog Timer. */
-       inb(0x043);
-       inb(0x843);
-
-       cs5530_enable_rom();
-
-       /* Initialize RAM. */
-       sdram_init();
-
-       /* Check RAM. */
-       /* ram_check(0x00000000, 640 * 1024); */
-}
diff --git a/src/mainboard/iei/juki-511p/romstage.c b/src/mainboard/iei/juki-511p/romstage.c
new file mode 100644 (file)
index 0000000..655959f
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Nikolay Petukhov <nikolay.petukhov@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83977f/w83977f_early_serial.c"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977F_SP1)
+
+#include "northbridge/amd/gx1/raminit.c"
+
+static void main(unsigned long bist)
+{
+       /* Initialize the serial console. */
+       w83977f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       /* Disable Watchdog Timer. */
+       inb(0x043);
+       inb(0x843);
+
+       cs5530_enable_rom();
+
+       /* Initialize RAM. */
+       sdram_init();
+
+       /* Check RAM. */
+       /* ram_check(0x00000000, 640 * 1024); */
+}
diff --git a/src/mainboard/iei/nova4899r/auto.c b/src/mainboard/iei/nova4899r/auto.c
deleted file mode 100644 (file)
index 0b15c3f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Luis Correia <luis.f.correia@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-#include "cpu/x86/bist.h"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-#include "northbridge/amd/gx1/raminit.c"
-
-static void main(unsigned long bist)
-{
-       /* Initialize the serial console. */
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       cs5530_enable_rom();
-
-       /* Initialize RAM. */
-       sdram_init();
-
-       /* Check RAM. */
-       /* ram_check(0x00000000, 640 * 1024); */
-}
diff --git a/src/mainboard/iei/nova4899r/romstage.c b/src/mainboard/iei/nova4899r/romstage.c
new file mode 100644 (file)
index 0000000..0b15c3f
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Luis Correia <luis.f.correia@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+#include "cpu/x86/bist.h"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+#include "northbridge/amd/gx1/raminit.c"
+
+static void main(unsigned long bist)
+{
+       /* Initialize the serial console. */
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       cs5530_enable_rom();
+
+       /* Initialize RAM. */
+       sdram_init();
+
+       /* Check RAM. */
+       /* ram_check(0x00000000, 640 * 1024); */
+}
index f101f22d4ecbe18a8d3e8f6ce537104ec2d389d9..0e4b263223b6ea639ec4eec47e3e59e0fb714d3f 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/iei/pcisa-lx-800-r10/cache_as_ram_auto.c b/src/mainboard/iei/pcisa-lx-800-r10/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 24a350b..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define ManualConf 1           /* Do automatic strapped PLL config */
-//#define PLLMSRhi 0x0000059C /* CPU and GLIU mult/div 500/400*/
-//#define PLLMSRhi 0x0000049C /* CPU and GLIU mult/div 500/333*/
-#define PLLMSRhi 0x0000039C /* CPU and GLIU mult/div 500/266*/
-//0x0000059C 0000 0000 0000 0000 0000 |0101 1|0|01 110|0
-/* Hold Count - how long we will sit in reset */
-#define PLLMSRlo 0x00DE6000
-
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-
-       /* Setup access to the cache for under 1MB. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x1000A000;    /* 0-A0000 write back */
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x0;           /* Write back */
-       msr.lo = 0x0;
-       wrmsr(CPU_RCONF_A0_BF, msr);
-       wrmsr(CPU_RCONF_C0_DF, msr);
-       wrmsr(CPU_RCONF_E0_FF, msr);
-
-       /* Setup access to the cache for under 640K. Note MC not setup yet. */
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU0 + 0x21, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU1 + 0x21, msr);
-}
-
-static void mb_gpio_init(void)
-{
-       /* Early mainboard specific GPIO setup. */
-}
-
-void cache_as_ram_main(void)
-{
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* Note: must do this AFTER the early_setup! It is counting on some
-        * early MSR setup for CS5536.
-        */
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* ram_check(0, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
-       return;
-}
diff --git a/src/mainboard/iei/pcisa-lx-800-r10/romstage.c b/src/mainboard/iei/pcisa-lx-800-r10/romstage.c
new file mode 100644 (file)
index 0000000..24a350b
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define ManualConf 1           /* Do automatic strapped PLL config */
+//#define PLLMSRhi 0x0000059C /* CPU and GLIU mult/div 500/400*/
+//#define PLLMSRhi 0x0000049C /* CPU and GLIU mult/div 500/333*/
+#define PLLMSRhi 0x0000039C /* CPU and GLIU mult/div 500/266*/
+//0x0000059C 0000 0000 0000 0000 0000 |0101 1|0|01 110|0
+/* Hold Count - how long we will sit in reset */
+#define PLLMSRlo 0x00DE6000
+
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+
+       /* Setup access to the cache for under 1MB. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x1000A000;    /* 0-A0000 write back */
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x0;           /* Write back */
+       msr.lo = 0x0;
+       wrmsr(CPU_RCONF_A0_BF, msr);
+       wrmsr(CPU_RCONF_C0_DF, msr);
+       wrmsr(CPU_RCONF_E0_FF, msr);
+
+       /* Setup access to the cache for under 640K. Note MC not setup yet. */
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU0 + 0x21, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU1 + 0x21, msr);
+}
+
+static void mb_gpio_init(void)
+{
+       /* Early mainboard specific GPIO setup. */
+}
+
+void cache_as_ram_main(void)
+{
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* Note: must do this AFTER the early_setup! It is counting on some
+        * early MSR setup for CS5536.
+        */
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* ram_check(0, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
+       return;
+}
index 83e8f5cb43e0ade7613e787a480fcc2eb7db6ec6..944aa3d5f4dcc46f38d4717c5e52793e8b61ec5b 100644 (file)
@@ -41,7 +41,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/intel/model_6ex/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -59,8 +59,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/intel/d945gclf/auto.c b/src/mainboard/intel/d945gclf/auto.c
deleted file mode 100644 (file)
index 8d1dc16..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * This file is part of the coreboot project.
- * 
- * Copyright (C) 2007-2008 coresystems GmbH
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-// __PRE_RAM__ means: use "unsigned" for device, not a struct.
-#define __PRE_RAM__
-
-/* Configuration of the i945 driver */
-#define CHIPSET_I945GC 1
-#define CHANNEL_XOR_RANDOMIZATION 1
-
-#include <stdint.h>
-#include <string.h>
-#include <arch/io.h>
-#include <arch/romcc_io.h>
-#include <device/pci_def.h>
-#include <device/pnp_def.h>
-#include <cpu/x86/lapic.h>
-
-#include "superio/smsc/lpc47m15x/lpc47m15x.h"
-
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/x86/bist.h>
-
-#if CONFIG_USBDEBUG_DIRECT
-#define DBGP_DEFAULT 1
-#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
-#include "superio/smsc/lpc47m15x/lpc47m15x_early_serial.c"
-
-#include "northbridge/intel/i945/udelay.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627THG_SP1)
-
-#include "southbridge/intel/i82801gx/i82801gx.h"
-static void setup_ich7_gpios(void)
-{
-       /* TODO: This is highly board specific and should be moved */
-       printk_debug(" GPIOS...");
-       /* General Registers */
-       outl(0x3f3df7c1, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
-       outl(0xc6fcbfc3, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
-       outl(0xecfefdff, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
-       /* Output Control Registers */
-       outl(0x00040000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
-       /* Input Control Registers */
-       outl(0x0000a000, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
-       outl(0x000000ff, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
-       outl(0x000000bf, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
-       outl(0x000300fd, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
-}
-
-#include "northbridge/intel/i945/early_init.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i945/raminit.h"
-#include "northbridge/intel/i945/raminit.c"
-#include "northbridge/intel/i945/reset_test.c"
-#include "northbridge/intel/i945/errata.c"
-#include "northbridge/intel/i945/debug.c"
-
-static void ich7_enable_lpc(void)
-{
-       // Enable Serial IRQ
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
-       // Set COM1/COM2 decode range
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0010);
-       // Enable COM1
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x140d);
-       // Enable SuperIO Power Management Events
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x84, 0x007c0681);
-}
-
-
-/* This box has two superios, so enabling serial becomes slightly excessive.
- * We disable a lot of stuff to make sure that there are no conflicts between
- * the two. Also set up the GPIOs from the beginning. This is the "no schematic
- * but safe anyways" method.
- */
-static void early_superio_config_lpc47m15x(void)
-{
-       device_t dev;
-       
-       dev=PNP_DEV(0x2e, LPC47M15X_SP1);
-       pnp_enter_conf_state(dev);
-
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3f8);
-       pnp_set_irq(dev, PNP_IDX_IRQ0, 4);
-       pnp_set_enable(dev, 1);
-
-       /* Enable SuperIO PM */
-       dev=PNP_DEV(0x2e, LPC47M15X_PME);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x680);
-       pnp_set_enable(dev, 1);
-
-       pnp_exit_conf_state(dev);
-}
-
-static void rcba_config(void)
-{
-       /* Set up virtual channel 0 */
-       //RCBA32(0x0014) = 0x80000001;
-       //RCBA32(0x001c) = 0x03128010;
-
-       /* Device 1f interrupt pin register */
-       RCBA32(0x3100) = 0x00042210;
-       /* Device 1d interrupt pin register */
-       RCBA32(0x310c) = 0x00214321;
-
-       /* dev irq route register */
-       RCBA16(0x3140) = 0x0132;
-       RCBA16(0x3142) = 0x0146;
-       RCBA16(0x3144) = 0x0237;
-       RCBA16(0x3146) = 0x3201;
-       RCBA16(0x3148) = 0x0146;
-
-       /* Enable IOAPIC */
-       RCBA8(0x31ff) = 0x03;
-
-       /* Enable upper 128bytes of CMOS */
-       RCBA32(0x3400) = (1 << 2);
-
-       /* Disable unused devices */
-       //RCBA32(0x3418) = FD_PCIE6|FD_PCIE5|FD_PCIE4|FD_ACMOD|FD_ACAUD|FD_PATA;
-       // RCBA32(0x3418) |= (1 << 0); // Required.
-       // FIXME look me up!
-       RCBA32(0x3418) = 0x003204e1;
-
-       /* Enable PCIe Root Port Clock Gate */
-       // RCBA32(0x341c) = 0x00000001;
-}
-
-static void early_ich7_init(void)
-{
-       uint8_t reg8;
-       uint32_t reg32;
-
-       // program secondary mlt XXX byte?
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
-
-       // reset rtc power status
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
-       reg8 &= ~(1 << 2);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
-
-       // usb transient disconnect
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
-       reg8 |= (3 << 0);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
-       reg32 |= (1 << 29) | (1 << 17);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
-       reg32 |= (1 << 31) | (1 << 27);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
-
-       RCBA32(0x0088) = 0x0011d000;
-       RCBA16(0x01fc) = 0x060f;
-       RCBA32(0x01f4) = 0x86000040;
-       RCBA32(0x0214) = 0x10030549;
-       RCBA32(0x0218) = 0x00020504;
-       RCBA8(0x0220) = 0xc5;
-       reg32 = RCBA32(0x3410);
-       reg32 |= (1 << 6);
-       RCBA32(0x3410) = reg32;
-       reg32 = RCBA32(0x3430);
-       reg32 &= ~(3 << 0);
-       reg32 |= (1 << 0);
-       RCBA32(0x3430) = reg32;
-       RCBA32(0x3418) |= (1 << 0);
-       RCBA16(0x0200) = 0x2008;
-       RCBA8(0x2027) = 0x0d;
-       RCBA16(0x3e08) |= (1 << 7);
-       RCBA16(0x3e48) |= (1 << 7);
-       RCBA32(0x3e0e) |= (1 << 7);
-       RCBA32(0x3e4e) |= (1 << 7);
-
-       // next step only on ich7m b0 and later:
-       reg32 = RCBA32(0x2034);
-       reg32 &= ~(0x0f << 16);
-       reg32 |= (5 << 16);
-       RCBA32(0x2034) = reg32;
-}
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-#include "southbridge/intel/i82801gx/cmos_failover.c"
-#endif
-
-#include <cbmem.h>
-
-// Now, this needs to be included because it relies on the symbol
-// __PRE_RAM__ being set during CAR stage (in order to compile the
-// BSS free versions of the functions). Either rewrite the code
-// to be always BSS free, or invent a flag that's better suited than
-// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
-//
-#include "lib/cbmem.c"
-
-void real_main(unsigned long bist)
-{
-       u32 reg32;
-       int boot_mode = 0;
-
-       if (bist == 0) {
-               enable_lapic();
-       }
-
-       ich7_enable_lpc();
-       early_superio_config_lpc47m15x();
-
-       /* Set up the console */
-       uart_init();
-
-#if CONFIG_USBDEBUG_DIRECT
-       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       if (MCHBAR16(SSKPD) == 0xCAFE) {
-               printk_debug("soft reset detected.\n");
-               boot_mode = 1;
-       }
-
-       /* Perform some early chipset initialization required
-        * before RAM initialization can work
-        */
-       i945_early_initialization();
-
-        /* Read PM1_CNT */
-       reg32 = inl(DEFAULT_PMBASE + 0x04);
-       printk_debug("PM1_CNT: %08x\n", reg32);
-       if (((reg32 >> 10) & 7) == 5) {
-#if CONFIG_HAVE_ACPI_RESUME
-               printk_debug("Resume from S3 detected.\n");
-               boot_mode = 2;
-               /* Clear SLP_TYPE. This will break stage2 but
-                * we care for that when we get there.
-                */
-               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
-#else
-               printk_debug("Resume from S3 detected, but disabled.\n");
-#endif
-       }
-
-       /* Enable SPD ROMs and DDR-II DRAM */
-       enable_smbus();
-       
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-       dump_spd_registers();
-#endif
-
-       sdram_initialize(boot_mode);
-
-       /* Perform some initialization that must run before stage2 */
-       early_ich7_init();
-
-       /* This should probably go away. Until now it is required 
-        * and mainboard specific 
-        */
-       rcba_config();
-
-       /* Chipset Errata! */
-       fixup_i945_errata();
-
-       /* Initialize the internal PCIe links before we go into stage2 */
-       i945_late_initialization();
-
-#if !CONFIG_HAVE_ACPI_RESUME
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-#if defined(DEBUG_RAM_SETUP)
-       sdram_dump_mchbar_registers();
-#endif
-
-       {
-               /* This will not work if TSEG is in place! */
-               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
-
-               printk_debug("TOM: 0x%08x\n", tom);
-               ram_check(0x00000000, 0x000a0000);
-               //ram_check(0x00100000, tom);
-       }
-#endif
-#endif
-
-       MCHBAR16(SSKPD) = 0xCAFE;
-
-#if CONFIG_HAVE_ACPI_RESUME
-       /* Start address of high memory tables */
-       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
-
-       /* If there is no high memory area, we didn't boot before, so
-        * this is not a resume. In that case we just create the cbmem toc.
-        */
-       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
-               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
-
-               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
-                * through stage 2. We could keep stuff like stack and heap in high tables
-                * memory completely, but that's a wonderful clean up task for another
-                * day.
-                */
-               if (resume_backup_memory) 
-                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
-
-               /* Magic for S3 resume */
-               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
-       }
-#endif
-}
-
-#include "cpu/intel/model_106cx/cache_as_ram_disable.c"
diff --git a/src/mainboard/intel/d945gclf/romstage.c b/src/mainboard/intel/d945gclf/romstage.c
new file mode 100644 (file)
index 0000000..8d1dc16
--- /dev/null
@@ -0,0 +1,349 @@
+/*
+ * This file is part of the coreboot project.
+ * 
+ * Copyright (C) 2007-2008 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+// __PRE_RAM__ means: use "unsigned" for device, not a struct.
+#define __PRE_RAM__
+
+/* Configuration of the i945 driver */
+#define CHIPSET_I945GC 1
+#define CHANNEL_XOR_RANDOMIZATION 1
+
+#include <stdint.h>
+#include <string.h>
+#include <arch/io.h>
+#include <arch/romcc_io.h>
+#include <device/pci_def.h>
+#include <device/pnp_def.h>
+#include <cpu/x86/lapic.h>
+
+#include "superio/smsc/lpc47m15x/lpc47m15x.h"
+
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/x86/bist.h>
+
+#if CONFIG_USBDEBUG_DIRECT
+#define DBGP_DEFAULT 1
+#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
+#include "superio/smsc/lpc47m15x/lpc47m15x_early_serial.c"
+
+#include "northbridge/intel/i945/udelay.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627THG_SP1)
+
+#include "southbridge/intel/i82801gx/i82801gx.h"
+static void setup_ich7_gpios(void)
+{
+       /* TODO: This is highly board specific and should be moved */
+       printk_debug(" GPIOS...");
+       /* General Registers */
+       outl(0x3f3df7c1, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
+       outl(0xc6fcbfc3, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
+       outl(0xecfefdff, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
+       /* Output Control Registers */
+       outl(0x00040000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
+       /* Input Control Registers */
+       outl(0x0000a000, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
+       outl(0x000000ff, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
+       outl(0x000000bf, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
+       outl(0x000300fd, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
+}
+
+#include "northbridge/intel/i945/early_init.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i945/raminit.h"
+#include "northbridge/intel/i945/raminit.c"
+#include "northbridge/intel/i945/reset_test.c"
+#include "northbridge/intel/i945/errata.c"
+#include "northbridge/intel/i945/debug.c"
+
+static void ich7_enable_lpc(void)
+{
+       // Enable Serial IRQ
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
+       // Set COM1/COM2 decode range
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0010);
+       // Enable COM1
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x140d);
+       // Enable SuperIO Power Management Events
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x84, 0x007c0681);
+}
+
+
+/* This box has two superios, so enabling serial becomes slightly excessive.
+ * We disable a lot of stuff to make sure that there are no conflicts between
+ * the two. Also set up the GPIOs from the beginning. This is the "no schematic
+ * but safe anyways" method.
+ */
+static void early_superio_config_lpc47m15x(void)
+{
+       device_t dev;
+       
+       dev=PNP_DEV(0x2e, LPC47M15X_SP1);
+       pnp_enter_conf_state(dev);
+
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3f8);
+       pnp_set_irq(dev, PNP_IDX_IRQ0, 4);
+       pnp_set_enable(dev, 1);
+
+       /* Enable SuperIO PM */
+       dev=PNP_DEV(0x2e, LPC47M15X_PME);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x680);
+       pnp_set_enable(dev, 1);
+
+       pnp_exit_conf_state(dev);
+}
+
+static void rcba_config(void)
+{
+       /* Set up virtual channel 0 */
+       //RCBA32(0x0014) = 0x80000001;
+       //RCBA32(0x001c) = 0x03128010;
+
+       /* Device 1f interrupt pin register */
+       RCBA32(0x3100) = 0x00042210;
+       /* Device 1d interrupt pin register */
+       RCBA32(0x310c) = 0x00214321;
+
+       /* dev irq route register */
+       RCBA16(0x3140) = 0x0132;
+       RCBA16(0x3142) = 0x0146;
+       RCBA16(0x3144) = 0x0237;
+       RCBA16(0x3146) = 0x3201;
+       RCBA16(0x3148) = 0x0146;
+
+       /* Enable IOAPIC */
+       RCBA8(0x31ff) = 0x03;
+
+       /* Enable upper 128bytes of CMOS */
+       RCBA32(0x3400) = (1 << 2);
+
+       /* Disable unused devices */
+       //RCBA32(0x3418) = FD_PCIE6|FD_PCIE5|FD_PCIE4|FD_ACMOD|FD_ACAUD|FD_PATA;
+       // RCBA32(0x3418) |= (1 << 0); // Required.
+       // FIXME look me up!
+       RCBA32(0x3418) = 0x003204e1;
+
+       /* Enable PCIe Root Port Clock Gate */
+       // RCBA32(0x341c) = 0x00000001;
+}
+
+static void early_ich7_init(void)
+{
+       uint8_t reg8;
+       uint32_t reg32;
+
+       // program secondary mlt XXX byte?
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
+
+       // reset rtc power status
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
+       reg8 &= ~(1 << 2);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
+
+       // usb transient disconnect
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
+       reg8 |= (3 << 0);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
+       reg32 |= (1 << 29) | (1 << 17);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
+       reg32 |= (1 << 31) | (1 << 27);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
+
+       RCBA32(0x0088) = 0x0011d000;
+       RCBA16(0x01fc) = 0x060f;
+       RCBA32(0x01f4) = 0x86000040;
+       RCBA32(0x0214) = 0x10030549;
+       RCBA32(0x0218) = 0x00020504;
+       RCBA8(0x0220) = 0xc5;
+       reg32 = RCBA32(0x3410);
+       reg32 |= (1 << 6);
+       RCBA32(0x3410) = reg32;
+       reg32 = RCBA32(0x3430);
+       reg32 &= ~(3 << 0);
+       reg32 |= (1 << 0);
+       RCBA32(0x3430) = reg32;
+       RCBA32(0x3418) |= (1 << 0);
+       RCBA16(0x0200) = 0x2008;
+       RCBA8(0x2027) = 0x0d;
+       RCBA16(0x3e08) |= (1 << 7);
+       RCBA16(0x3e48) |= (1 << 7);
+       RCBA32(0x3e0e) |= (1 << 7);
+       RCBA32(0x3e4e) |= (1 << 7);
+
+       // next step only on ich7m b0 and later:
+       reg32 = RCBA32(0x2034);
+       reg32 &= ~(0x0f << 16);
+       reg32 |= (5 << 16);
+       RCBA32(0x2034) = reg32;
+}
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+#include "southbridge/intel/i82801gx/cmos_failover.c"
+#endif
+
+#include <cbmem.h>
+
+// Now, this needs to be included because it relies on the symbol
+// __PRE_RAM__ being set during CAR stage (in order to compile the
+// BSS free versions of the functions). Either rewrite the code
+// to be always BSS free, or invent a flag that's better suited than
+// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
+//
+#include "lib/cbmem.c"
+
+void real_main(unsigned long bist)
+{
+       u32 reg32;
+       int boot_mode = 0;
+
+       if (bist == 0) {
+               enable_lapic();
+       }
+
+       ich7_enable_lpc();
+       early_superio_config_lpc47m15x();
+
+       /* Set up the console */
+       uart_init();
+
+#if CONFIG_USBDEBUG_DIRECT
+       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       if (MCHBAR16(SSKPD) == 0xCAFE) {
+               printk_debug("soft reset detected.\n");
+               boot_mode = 1;
+       }
+
+       /* Perform some early chipset initialization required
+        * before RAM initialization can work
+        */
+       i945_early_initialization();
+
+        /* Read PM1_CNT */
+       reg32 = inl(DEFAULT_PMBASE + 0x04);
+       printk_debug("PM1_CNT: %08x\n", reg32);
+       if (((reg32 >> 10) & 7) == 5) {
+#if CONFIG_HAVE_ACPI_RESUME
+               printk_debug("Resume from S3 detected.\n");
+               boot_mode = 2;
+               /* Clear SLP_TYPE. This will break stage2 but
+                * we care for that when we get there.
+                */
+               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
+#else
+               printk_debug("Resume from S3 detected, but disabled.\n");
+#endif
+       }
+
+       /* Enable SPD ROMs and DDR-II DRAM */
+       enable_smbus();
+       
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+       dump_spd_registers();
+#endif
+
+       sdram_initialize(boot_mode);
+
+       /* Perform some initialization that must run before stage2 */
+       early_ich7_init();
+
+       /* This should probably go away. Until now it is required 
+        * and mainboard specific 
+        */
+       rcba_config();
+
+       /* Chipset Errata! */
+       fixup_i945_errata();
+
+       /* Initialize the internal PCIe links before we go into stage2 */
+       i945_late_initialization();
+
+#if !CONFIG_HAVE_ACPI_RESUME
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+#if defined(DEBUG_RAM_SETUP)
+       sdram_dump_mchbar_registers();
+#endif
+
+       {
+               /* This will not work if TSEG is in place! */
+               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
+
+               printk_debug("TOM: 0x%08x\n", tom);
+               ram_check(0x00000000, 0x000a0000);
+               //ram_check(0x00100000, tom);
+       }
+#endif
+#endif
+
+       MCHBAR16(SSKPD) = 0xCAFE;
+
+#if CONFIG_HAVE_ACPI_RESUME
+       /* Start address of high memory tables */
+       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
+
+       /* If there is no high memory area, we didn't boot before, so
+        * this is not a resume. In that case we just create the cbmem toc.
+        */
+       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
+               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
+
+               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
+                * through stage 2. We could keep stuff like stack and heap in high tables
+                * memory completely, but that's a wonderful clean up task for another
+                * day.
+                */
+               if (resume_backup_memory) 
+                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
+
+               /* Magic for S3 resume */
+               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
+       }
+#endif
+}
+
+#include "cpu/intel/model_106cx/cache_as_ram_disable.c"
index 6466932453086e05154209ab28ef13cf9f737cce..af1b217509281bc634252040e8437e782119fa70 100644 (file)
@@ -16,7 +16,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 # Use Intel Core (not Core 2) code for CAR init, any CPU might be used.
 crt0s += $(src)/cpu/intel/model_6ex/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -33,8 +33,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.d
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/intel/eagleheights/auto.c b/src/mainboard/intel/eagleheights/auto.c
deleted file mode 100644 (file)
index d928de5..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007-2008 coresystems GmbH
- * Copyright (C) 2009 Thomas Jourdan <thomas.jourdan@gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of
- * the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define __PRE_RAM__
-
-#include <delay.h>
-
-#include <stdint.h>
-#include <arch/io.h>
-#include <arch/romcc_io.h>
-#include <device/pci_def.h>
-#include <device/pnp_def.h>
-#include <cpu/x86/lapic.h>
-
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/x86/bist.h>
-
-#include "lib/ramtest.c"
-#include "southbridge/intel/i3100/i3100_early_smbus.c"
-#include "southbridge/intel/i3100/i3100_early_lpc.c"
-#include "reset.c"
-#include "superio/intel/i3100/i3100_early_serial.c"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-
-/* Data */
-#define UART_RBR 0x00
-#define UART_TBR 0x00
-
-/* Control */
-#define UART_IER 0x01
-#define UART_IIR 0x02
-#define UART_FCR 0x02
-#define UART_LCR 0x03
-#define UART_MCR 0x04
-#define UART_DLL 0x00
-#define UART_DLM 0x01
-
-/* Status */
-#define UART_LSR 0x05
-#define UART_MSR 0x06
-#define UART_SCR 0x07
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D3F0)
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define IA32_PERF_STS     0x198
-#define IA32_PERF_CTL     0x199
-#define MSR_THERM2_CTL    0x19D
-#define IA32_MISC_ENABLES 0x1A0
-
-/* SATA */
-#define SATA_MAP 0x90
-
-#define SATA_MODE_IDE  0x00
-#define SATA_MODE_AHCI 0x01
-
-/* RCBA registers */
-#define RCBA 0xF0
-#define DEFAULT_RCBA 0xFEA00000
-
-#define RCBA_RPC   0x0224 /* 32 bit */
-
-#define RCBA_TCTL  0x3000 /*  8 bit */
-
-#define RCBA_D31IP 0x3100 /* 32 bit */
-#define RCBA_D30IP 0x3104 /* 32 bit */
-#define RCBA_D29IP 0x3108 /* 32 bit */
-#define RCBA_D28IP 0x310C /* 32 bit */
-#define RCBA_D31IR 0x3140 /* 16 bit */
-#define RCBA_D30IR 0x3142 /* 16 bit */
-#define RCBA_D29IR 0x3144 /* 16 bit */
-#define RCBA_D28IR 0x3146 /* 16 bit */
-
-#define RCBA_RTC   0x3400 /* 32 bit */
-#define RCBA_HPTC  0x3404 /* 32 bit */
-#define RCBA_GCS   0x3410 /* 32 bit */
-#define RCBA_BUC   0x3414 /*  8 bit */
-#define RCBA_FD    0x3418 /* 32 bit */
-#define RCBA_PRC   0x341C /* 32 bit */
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(u16 device, u8 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i3100/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "northbridge/intel/i3100/memory_initialized.c"
-#include "northbridge/intel/i3100/raminit.c"
-#include "lib/generic_sdram.c"
-#include "northbridge/intel/i3100/reset_test.c"
-#include "debug.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-#include "southbridge/intel/i3100/cmos_failover.c"
-#endif
-
-void early_config(void) {
-       device_t dev;
-       u32 gcs, rpc, fd;
-
-       /* Enable RCBA */
-       pci_write_config32(PCI_DEV(0, 0x1F, 0), RCBA, DEFAULT_RCBA | 1);
-
-       /* Disable watchdog */
-       gcs = read32(DEFAULT_RCBA + RCBA_GCS);
-       gcs |= (1 << 5); /* No reset */
-       write32(DEFAULT_RCBA + RCBA_GCS, gcs);
-
-       /* Configure PCIe port B as 4x */
-       rpc = read32(DEFAULT_RCBA + RCBA_RPC);
-       rpc |= (3 << 0);
-       write32(DEFAULT_RCBA + RCBA_RPC, rpc);
-
-       /* Disable Modem, Audio, PCIe ports 2/3/4 */
-       fd = read32(DEFAULT_RCBA + RCBA_FD);
-       fd |= (1 << 19) | (1 << 18) | (1 << 17) | (1 << 6) | (1 << 5);
-       write32(DEFAULT_RCBA + RCBA_FD, fd);
-
-       /* Enable HPET */
-       write32(DEFAULT_RCBA + RCBA_HPTC, (1 << 7));
-
-       /* Improve interrupt routing
-        * D31:F2 SATA        INTB# -> PIRQD
-        * D31:F3 SMBUS       INTB# -> PIRQD
-        * D31:F4 CHAP        INTD# -> PIRQA
-        * D29:F0 USB1#1      INTA# -> PIRQH
-        * D29:F1 USB1#2      INTB# -> PIRQD
-        * D29:F7 USB2        INTA# -> PIRQH
-        * D28:F0 PCIe Port 1 INTA# -> PIRQE
-        */
-
-       write16(DEFAULT_RCBA + RCBA_D31IR, 0x0230);
-       write16(DEFAULT_RCBA + RCBA_D30IR, 0x3210);
-       write16(DEFAULT_RCBA + RCBA_D29IR, 0x3237);
-       write16(DEFAULT_RCBA + RCBA_D28IR, 0x3214);
-
-       /* Setup sata mode */
-       pci_write_config8(PCI_DEV(0, 0x1F, 2), SATA_MAP, (SATA_MODE_AHCI << 6) | (0 << 0));
-}
-
-void real_main(unsigned long bist)
-{
-       /* int boot_mode = 0; */
-
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = { (0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0 },
-                       .channel1 = { (0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4 },
-               }
-       };
-
-       if (bist == 0) {
-               enable_lapic();
-       }
-
-       /* Setup the console */
-       i3100_enable_superio();
-       i3100_enable_serial(0x4E, I3100_SP1, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       /* Perform early board specific init */
-       early_config();
-
-       /* Prevent the TCO timer from rebooting us */
-       i3100_halt_tco_timer();
-
-       /* Enable SPD ROMs and DDR-II DRAM */
-       enable_smbus();
-
-       /* Enable SpeedStep and automatic thermal throttling */
-       {
-               msr_t msr;
-               u16 perf;
-
-               msr = rdmsr(IA32_MISC_ENABLES);
-               msr.lo |= (1 << 3) | (1 << 16);
-               wrmsr(IA32_MISC_ENABLES, msr);
-
-               /* Set CPU frequency/voltage to maximum */
-
-               /* Read performance status register and keep
-                * bits 47:32, where BUS_RATIO_MAX and VID_MAX
-                * are encoded
-                */
-               msr = rdmsr(IA32_PERF_STS);
-               perf = msr.hi & 0x0000ffff;
-
-               /* Write VID_MAX & BUS_RATIO_MAX to
-                * performance control register
-                */
-               msr = rdmsr(IA32_PERF_CTL);
-               msr.lo &= 0xffff0000;
-               msr.lo |= perf;
-               wrmsr(IA32_PERF_CTL, msr);
-       }
-
-       /* Initialize memory */
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-}
-
-/* Use Intel Core (not Core 2) code for CAR init, any CPU might be used. */
-#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
diff --git a/src/mainboard/intel/eagleheights/romstage.c b/src/mainboard/intel/eagleheights/romstage.c
new file mode 100644 (file)
index 0000000..d928de5
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007-2008 coresystems GmbH
+ * Copyright (C) 2009 Thomas Jourdan <thomas.jourdan@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#define __PRE_RAM__
+
+#include <delay.h>
+
+#include <stdint.h>
+#include <arch/io.h>
+#include <arch/romcc_io.h>
+#include <device/pci_def.h>
+#include <device/pnp_def.h>
+#include <cpu/x86/lapic.h>
+
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/x86/bist.h>
+
+#include "lib/ramtest.c"
+#include "southbridge/intel/i3100/i3100_early_smbus.c"
+#include "southbridge/intel/i3100/i3100_early_lpc.c"
+#include "reset.c"
+#include "superio/intel/i3100/i3100_early_serial.c"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+
+/* Data */
+#define UART_RBR 0x00
+#define UART_TBR 0x00
+
+/* Control */
+#define UART_IER 0x01
+#define UART_IIR 0x02
+#define UART_FCR 0x02
+#define UART_LCR 0x03
+#define UART_MCR 0x04
+#define UART_DLL 0x00
+#define UART_DLM 0x01
+
+/* Status */
+#define UART_LSR 0x05
+#define UART_MSR 0x06
+#define UART_SCR 0x07
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D3F0)
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define IA32_PERF_STS     0x198
+#define IA32_PERF_CTL     0x199
+#define MSR_THERM2_CTL    0x19D
+#define IA32_MISC_ENABLES 0x1A0
+
+/* SATA */
+#define SATA_MAP 0x90
+
+#define SATA_MODE_IDE  0x00
+#define SATA_MODE_AHCI 0x01
+
+/* RCBA registers */
+#define RCBA 0xF0
+#define DEFAULT_RCBA 0xFEA00000
+
+#define RCBA_RPC   0x0224 /* 32 bit */
+
+#define RCBA_TCTL  0x3000 /*  8 bit */
+
+#define RCBA_D31IP 0x3100 /* 32 bit */
+#define RCBA_D30IP 0x3104 /* 32 bit */
+#define RCBA_D29IP 0x3108 /* 32 bit */
+#define RCBA_D28IP 0x310C /* 32 bit */
+#define RCBA_D31IR 0x3140 /* 16 bit */
+#define RCBA_D30IR 0x3142 /* 16 bit */
+#define RCBA_D29IR 0x3144 /* 16 bit */
+#define RCBA_D28IR 0x3146 /* 16 bit */
+
+#define RCBA_RTC   0x3400 /* 32 bit */
+#define RCBA_HPTC  0x3404 /* 32 bit */
+#define RCBA_GCS   0x3410 /* 32 bit */
+#define RCBA_BUC   0x3414 /*  8 bit */
+#define RCBA_FD    0x3418 /* 32 bit */
+#define RCBA_PRC   0x341C /* 32 bit */
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(u16 device, u8 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i3100/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "northbridge/intel/i3100/memory_initialized.c"
+#include "northbridge/intel/i3100/raminit.c"
+#include "lib/generic_sdram.c"
+#include "northbridge/intel/i3100/reset_test.c"
+#include "debug.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+#include "southbridge/intel/i3100/cmos_failover.c"
+#endif
+
+void early_config(void) {
+       device_t dev;
+       u32 gcs, rpc, fd;
+
+       /* Enable RCBA */
+       pci_write_config32(PCI_DEV(0, 0x1F, 0), RCBA, DEFAULT_RCBA | 1);
+
+       /* Disable watchdog */
+       gcs = read32(DEFAULT_RCBA + RCBA_GCS);
+       gcs |= (1 << 5); /* No reset */
+       write32(DEFAULT_RCBA + RCBA_GCS, gcs);
+
+       /* Configure PCIe port B as 4x */
+       rpc = read32(DEFAULT_RCBA + RCBA_RPC);
+       rpc |= (3 << 0);
+       write32(DEFAULT_RCBA + RCBA_RPC, rpc);
+
+       /* Disable Modem, Audio, PCIe ports 2/3/4 */
+       fd = read32(DEFAULT_RCBA + RCBA_FD);
+       fd |= (1 << 19) | (1 << 18) | (1 << 17) | (1 << 6) | (1 << 5);
+       write32(DEFAULT_RCBA + RCBA_FD, fd);
+
+       /* Enable HPET */
+       write32(DEFAULT_RCBA + RCBA_HPTC, (1 << 7));
+
+       /* Improve interrupt routing
+        * D31:F2 SATA        INTB# -> PIRQD
+        * D31:F3 SMBUS       INTB# -> PIRQD
+        * D31:F4 CHAP        INTD# -> PIRQA
+        * D29:F0 USB1#1      INTA# -> PIRQH
+        * D29:F1 USB1#2      INTB# -> PIRQD
+        * D29:F7 USB2        INTA# -> PIRQH
+        * D28:F0 PCIe Port 1 INTA# -> PIRQE
+        */
+
+       write16(DEFAULT_RCBA + RCBA_D31IR, 0x0230);
+       write16(DEFAULT_RCBA + RCBA_D30IR, 0x3210);
+       write16(DEFAULT_RCBA + RCBA_D29IR, 0x3237);
+       write16(DEFAULT_RCBA + RCBA_D28IR, 0x3214);
+
+       /* Setup sata mode */
+       pci_write_config8(PCI_DEV(0, 0x1F, 2), SATA_MAP, (SATA_MODE_AHCI << 6) | (0 << 0));
+}
+
+void real_main(unsigned long bist)
+{
+       /* int boot_mode = 0; */
+
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = { (0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0 },
+                       .channel1 = { (0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4 },
+               }
+       };
+
+       if (bist == 0) {
+               enable_lapic();
+       }
+
+       /* Setup the console */
+       i3100_enable_superio();
+       i3100_enable_serial(0x4E, I3100_SP1, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       /* Perform early board specific init */
+       early_config();
+
+       /* Prevent the TCO timer from rebooting us */
+       i3100_halt_tco_timer();
+
+       /* Enable SPD ROMs and DDR-II DRAM */
+       enable_smbus();
+
+       /* Enable SpeedStep and automatic thermal throttling */
+       {
+               msr_t msr;
+               u16 perf;
+
+               msr = rdmsr(IA32_MISC_ENABLES);
+               msr.lo |= (1 << 3) | (1 << 16);
+               wrmsr(IA32_MISC_ENABLES, msr);
+
+               /* Set CPU frequency/voltage to maximum */
+
+               /* Read performance status register and keep
+                * bits 47:32, where BUS_RATIO_MAX and VID_MAX
+                * are encoded
+                */
+               msr = rdmsr(IA32_PERF_STS);
+               perf = msr.hi & 0x0000ffff;
+
+               /* Write VID_MAX & BUS_RATIO_MAX to
+                * performance control register
+                */
+               msr = rdmsr(IA32_PERF_CTL);
+               msr.lo &= 0xffff0000;
+               msr.lo |= perf;
+               wrmsr(IA32_PERF_CTL, msr);
+       }
+
+       /* Initialize memory */
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+}
+
+/* Use Intel Core (not Core 2) code for CAR init, any CPU might be used. */
+#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
diff --git a/src/mainboard/intel/jarrell/auto.c b/src/mainboard/intel/jarrell/auto.c
deleted file mode 100644 (file)
index 462bd8e..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/nsc/pc87427/pc87427.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "power_reset_check.c"
-#include "jarrell_fixups.c"
-#include "superio/nsc/pc87427/pc87427_early_init.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC87427_SP2)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, PC87427_SP1)
-
-#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D6F0)
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-/* Beta values:         0x00090800 */
-/* Silver values:       0x000a0900 */
-#define RECVENA_CONFIG  0x000a090a
-#define RECVENB_CONFIG  0x000a090a
-#define DIMM_MAP_LOGICAL 0x0124
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-#include "debug.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = { (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, 0 },
-                       .channel1 = { (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, 0 },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       pc87427_disable_dev(CONSOLE_SERIAL_DEV);
-       pc87427_disable_dev(HIDDEN_SERIAL_DEV);
-       pc87427_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-        /* Enable Serial 2 lines instead of GPIO */
-        outb(0x2c, 0x2e);
-        outb((inb(0x2f) & (~1<<1)), 0x2f);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       pc87427_enable_dev(PC87427_GPIO_DEV, SIO_GPIO_BASE);
-
-       pc87427_enable_dev(PC87427_XBUS_DEV, SIO_XBUS_BASE);
-       xbus_cfg(PC87427_XBUS_DEV);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing ich5?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       print_pci_devices();
-#endif
-       enable_smbus();
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-       power_down_reset_check();
-//     dump_ipmi_registers();
-       mainboard_set_e7520_leds();     
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-       ich5_watchdog_on();
-#if 0
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-       dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-       ram_check(0x00100000, 0x01000000);
-       /* check the first 1M in the 3rd Gig */
-       ram_check(0x30100000, 0x31000000);
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#endif
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/intel/jarrell/romstage.c b/src/mainboard/intel/jarrell/romstage.c
new file mode 100644 (file)
index 0000000..462bd8e
--- /dev/null
@@ -0,0 +1,152 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/nsc/pc87427/pc87427.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "power_reset_check.c"
+#include "jarrell_fixups.c"
+#include "superio/nsc/pc87427/pc87427_early_init.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC87427_SP2)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, PC87427_SP1)
+
+#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D6F0)
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+/* Beta values:         0x00090800 */
+/* Silver values:       0x000a0900 */
+#define RECVENA_CONFIG  0x000a090a
+#define RECVENB_CONFIG  0x000a090a
+#define DIMM_MAP_LOGICAL 0x0124
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+#include "debug.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = { (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, 0 },
+                       .channel1 = { (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, 0 },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       pc87427_disable_dev(CONSOLE_SERIAL_DEV);
+       pc87427_disable_dev(HIDDEN_SERIAL_DEV);
+       pc87427_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+        /* Enable Serial 2 lines instead of GPIO */
+        outb(0x2c, 0x2e);
+        outb((inb(0x2f) & (~1<<1)), 0x2f);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       pc87427_enable_dev(PC87427_GPIO_DEV, SIO_GPIO_BASE);
+
+       pc87427_enable_dev(PC87427_XBUS_DEV, SIO_XBUS_BASE);
+       xbus_cfg(PC87427_XBUS_DEV);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing ich5?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       print_pci_devices();
+#endif
+       enable_smbus();
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+       power_down_reset_check();
+//     dump_ipmi_registers();
+       mainboard_set_e7520_leds();     
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+       ich5_watchdog_on();
+#if 0
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+       dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+       ram_check(0x00100000, 0x01000000);
+       /* check the first 1M in the 3rd Gig */
+       ram_check(0x30100000, 0x31000000);
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#endif
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/intel/mtarvon/auto.c b/src/mainboard/intel/mtarvon/auto.c
deleted file mode 100644 (file)
index 6524ea2..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Arastra, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- *
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i3100/i3100_early_smbus.c"
-#include "southbridge/intel/i3100/i3100_early_lpc.c"
-#include "northbridge/intel/i3100/raminit.h"
-#include "superio/intel/i3100/i3100.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "superio/intel/i3100/i3100_early_serial.c"
-#include "northbridge/intel/i3100/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0)
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(u16 device, u8 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i3100/raminit.c"
-#include "lib/generic_sdram.c"
-#include "../jarrell/debug.c"
-
-
-static void main(unsigned long bist)
-{
-       msr_t msr;
-       u16 perf;
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = { (0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0 },
-                       .channel1 = { (0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4 },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Set up the console */
-       i3100_enable_superio();
-       i3100_enable_serial(0x4e, I3100_SP1, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Prevent the TCO timer from rebooting us */
-       i3100_halt_tco_timer();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       /* print_pci_devices(); */
-       enable_smbus();
-       /* dump_spd_registers(); */
-
-       /* Enable SpeedStep and automatic thermal throttling */
-       /* FIXME: move to Pentium M init code */
-       msr = rdmsr(0x1a0);
-       msr.lo |= (1 << 3) | (1 << 16);
-       wrmsr(0x1a0, msr);
-       msr = rdmsr(0x19d);
-       msr.lo |= (1 << 16);
-       wrmsr(0x19d, msr);
-
-       /* Set CPU frequency/voltage to maximum */
-       /* FIXME: move to Pentium M init code */
-       msr = rdmsr(0x198);
-       perf = msr.hi & 0xffff;
-       msr = rdmsr(0x199);
-       msr.lo &= 0xffff0000;
-       msr.lo |= perf;
-       wrmsr(0x199, msr);
-
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-       /* dump_pci_devices(); */
-       /* dump_pci_device(PCI_DEV(0, 0x00, 0)); */
-       /* dump_bar14(PCI_DEV(0, 0x00, 0)); */
-
-       ram_check(0, 1024 * 1024);
-}
diff --git a/src/mainboard/intel/mtarvon/romstage.c b/src/mainboard/intel/mtarvon/romstage.c
new file mode 100644 (file)
index 0000000..6524ea2
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Arastra, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i3100/i3100_early_smbus.c"
+#include "southbridge/intel/i3100/i3100_early_lpc.c"
+#include "northbridge/intel/i3100/raminit.h"
+#include "superio/intel/i3100/i3100.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "superio/intel/i3100/i3100_early_serial.c"
+#include "northbridge/intel/i3100/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0)
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(u16 device, u8 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i3100/raminit.c"
+#include "lib/generic_sdram.c"
+#include "../jarrell/debug.c"
+
+
+static void main(unsigned long bist)
+{
+       msr_t msr;
+       u16 perf;
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = { (0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0 },
+                       .channel1 = { (0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4 },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Set up the console */
+       i3100_enable_superio();
+       i3100_enable_serial(0x4e, I3100_SP1, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Prevent the TCO timer from rebooting us */
+       i3100_halt_tco_timer();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       /* print_pci_devices(); */
+       enable_smbus();
+       /* dump_spd_registers(); */
+
+       /* Enable SpeedStep and automatic thermal throttling */
+       /* FIXME: move to Pentium M init code */
+       msr = rdmsr(0x1a0);
+       msr.lo |= (1 << 3) | (1 << 16);
+       wrmsr(0x1a0, msr);
+       msr = rdmsr(0x19d);
+       msr.lo |= (1 << 16);
+       wrmsr(0x19d, msr);
+
+       /* Set CPU frequency/voltage to maximum */
+       /* FIXME: move to Pentium M init code */
+       msr = rdmsr(0x198);
+       perf = msr.hi & 0xffff;
+       msr = rdmsr(0x199);
+       msr.lo &= 0xffff0000;
+       msr.lo |= perf;
+       wrmsr(0x199, msr);
+
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+       /* dump_pci_devices(); */
+       /* dump_pci_device(PCI_DEV(0, 0x00, 0)); */
+       /* dump_bar14(PCI_DEV(0, 0x00, 0)); */
+
+       ram_check(0, 1024 * 1024);
+}
diff --git a/src/mainboard/intel/truxton/auto.c b/src/mainboard/intel/truxton/auto.c
deleted file mode 100644 (file)
index 834c53e..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Arastra, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- *
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "pc80/udelay_io.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i3100/i3100_early_smbus.c"
-#include "southbridge/intel/i3100/i3100_early_lpc.c"
-#include "northbridge/intel/i3100/raminit_ep80579.h"
-#include "superio/intel/i3100/i3100.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "superio/intel/i3100/i3100_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "spd.h"
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D3F0 | DEVPRES_D4F0)
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(u16 device, u8 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i3100/raminit_ep80579.c"
-#include "lib/generic_sdram.c"
-#include "../../intel/jarrell/debug.c"
-
-/* #define TRUXTON_DEBUG */
-
-static void main(unsigned long bist)
-{
-       msr_t msr;
-       u16 perf;
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .channel0 = { (0xa<<3)|2, (0xa<<3)|3 },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-
-       /* Set up the console */
-       i3100_enable_superio();
-       i3100_enable_serial(I3100_SUPERIO_CONFIG_PORT, I3100_SP1, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Prevent the TCO timer from rebooting us */
-       i3100_halt_tco_timer();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-#ifdef TRUXTON_DEBUG
-       print_pci_devices();
-#endif
-       enable_smbus();
-       dump_spd_registers();
-
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-       dump_pci_devices();
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-#ifdef TRUXTON_DEBUG
-       dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#ifdef TRUXTON_DEBUG
-       ram_fill(0x00000000, 0x02000000);
-       ram_verify(0x00000000, 0x02000000);
-#endif
-}
diff --git a/src/mainboard/intel/truxton/romstage.c b/src/mainboard/intel/truxton/romstage.c
new file mode 100644 (file)
index 0000000..834c53e
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Arastra, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "pc80/udelay_io.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i3100/i3100_early_smbus.c"
+#include "southbridge/intel/i3100/i3100_early_lpc.c"
+#include "northbridge/intel/i3100/raminit_ep80579.h"
+#include "superio/intel/i3100/i3100.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "superio/intel/i3100/i3100_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "spd.h"
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define DEVPRES_CONFIG  (DEVPRES_D1F0 | DEVPRES_D2F0 | DEVPRES_D3F0 | DEVPRES_D4F0)
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(u16 device, u8 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i3100/raminit_ep80579.c"
+#include "lib/generic_sdram.c"
+#include "../../intel/jarrell/debug.c"
+
+/* #define TRUXTON_DEBUG */
+
+static void main(unsigned long bist)
+{
+       msr_t msr;
+       u16 perf;
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .channel0 = { (0xa<<3)|2, (0xa<<3)|3 },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+
+       /* Set up the console */
+       i3100_enable_superio();
+       i3100_enable_serial(I3100_SUPERIO_CONFIG_PORT, I3100_SP1, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Prevent the TCO timer from rebooting us */
+       i3100_halt_tco_timer();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+#ifdef TRUXTON_DEBUG
+       print_pci_devices();
+#endif
+       enable_smbus();
+       dump_spd_registers();
+
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+       dump_pci_devices();
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+#ifdef TRUXTON_DEBUG
+       dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#ifdef TRUXTON_DEBUG
+       ram_fill(0x00000000, 0x02000000);
+       ram_verify(0x00000000, 0x02000000);
+#endif
+}
diff --git a/src/mainboard/intel/xe7501devkit/auto.c b/src/mainboard/intel/xe7501devkit/auto.c
deleted file mode 100644 (file)
index 7269fa8..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <arch/cpu.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801ca/i82801ca_early_smbus.c"
-#include "northbridge/intel/e7501/raminit.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/intel/e7501/debug.c"
-#include "superio/smsc/lpc47b272/lpc47b272_early_serial.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#define SUPERIO_PORT   0x2e
-#define SERIAL_DEV             PNP_DEV(SUPERIO_PORT, LPC47B272_SP1)
-
-static void hard_reset(void)
-{
-        outb(0x0e, 0x0cf9);
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-        /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7501/raminit.c"
-#include "northbridge/intel/e7501/reset_test.c"
-#include "lib/generic_sdram.c"
-
-
-// This function MUST appear last (ROMCC limitation)
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl[] = {
-               {
-                       .d0 = PCI_DEV(0, 0, 0),
-                       .d0f1 = PCI_DEV(0, 0, 1),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, 0 },
-                       .channel1 = { (0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, 0 },
-               },
-       };
-
-       if (bist == 0) 
-       {
-               // Skip this if there was a built in self test failure
-
-               early_mtrr_init();
-        enable_lapic();
-    }
-
-       // Get the serial port running and print a welcome banner
-
-    lpc47b272_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-    uart_init();
-    console_init();
-
-    // Halt if there was a built in self test failure
-       report_bist_failure(bist);
-
-//     print_pci_devices();
-
-       // If this is a warm boot, some initialization can be skipped
-
-       if (!bios_reset_detected()) 
-       {
-               enable_smbus();
-//     dump_spd_registers(&memctrl[0]);
-//      dump_smbus_registers();
-
-//             memreset_setup();               No-op for this chipset
-               sdram_initialize(ARRAY_SIZE(memctrl), memctrl);
-       }
-       
-       // NOTE: ROMCC dies with an internal compiler error
-       //               if the following line is removed.
-       print_debug("SDRAM is up.\r\n");
-}
diff --git a/src/mainboard/intel/xe7501devkit/romstage.c b/src/mainboard/intel/xe7501devkit/romstage.c
new file mode 100644 (file)
index 0000000..7269fa8
--- /dev/null
@@ -0,0 +1,94 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <arch/cpu.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801ca/i82801ca_early_smbus.c"
+#include "northbridge/intel/e7501/raminit.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/intel/e7501/debug.c"
+#include "superio/smsc/lpc47b272/lpc47b272_early_serial.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#define SUPERIO_PORT   0x2e
+#define SERIAL_DEV             PNP_DEV(SUPERIO_PORT, LPC47B272_SP1)
+
+static void hard_reset(void)
+{
+        outb(0x0e, 0x0cf9);
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+        /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7501/raminit.c"
+#include "northbridge/intel/e7501/reset_test.c"
+#include "lib/generic_sdram.c"
+
+
+// This function MUST appear last (ROMCC limitation)
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl[] = {
+               {
+                       .d0 = PCI_DEV(0, 0, 0),
+                       .d0f1 = PCI_DEV(0, 0, 1),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, 0 },
+                       .channel1 = { (0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, 0 },
+               },
+       };
+
+       if (bist == 0) 
+       {
+               // Skip this if there was a built in self test failure
+
+               early_mtrr_init();
+        enable_lapic();
+    }
+
+       // Get the serial port running and print a welcome banner
+
+    lpc47b272_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+    uart_init();
+    console_init();
+
+    // Halt if there was a built in self test failure
+       report_bist_failure(bist);
+
+//     print_pci_devices();
+
+       // If this is a warm boot, some initialization can be skipped
+
+       if (!bios_reset_detected()) 
+       {
+               enable_smbus();
+//     dump_spd_registers(&memctrl[0]);
+//      dump_smbus_registers();
+
+//             memreset_setup();               No-op for this chipset
+               sdram_initialize(ARRAY_SIZE(memctrl), memctrl);
+       }
+       
+       // NOTE: ROMCC dies with an internal compiler error
+       //               if the following line is removed.
+       print_debug("SDRAM is up.\r\n");
+}
index 1b991e89a7ca5f4b7226d2da8260b4fcb15ee3f5..95af1006cfdabc449c7d38d9da5b1bdc4626683a 100644 (file)
@@ -44,7 +44,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -81,8 +81,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/ssdt5.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pc
        perl -pi -e 's/AmlCode/AmlCode_ssdt5/g' $(obj)/pci5.hex
        mv $(obj)/pci5.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/iwill/dk8_htx/cache_as_ram_auto.c b/src/mainboard/iwill/dk8_htx/cache_as_ram_auto.c
deleted file mode 100644 (file)
index cdfdfc0..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1 
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-//#define K8_ALLOCATE_IO_RANGE 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#endif
-
-
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "cpu/x86/bist.h"
-
-#include "lib/delay.c"
-
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-/*
- * GPIO28 of 8111 will control H0_MEMRESET_L
- * GPIO29 of 8111 will control H1_MEMRESET_L
- */
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       } else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               udelay(90);
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit.c"
-
-#include "lib/generic_sdram.c"
-#include "lib/ramtest.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-       unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the rom access for 4M */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-                       //first node
-                        DIMM0, DIMM2, 0, 0,
-                        DIMM1, DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       //second node
-                        DIMM4, DIMM6, 0, 0,
-                        DIMM5, DIMM7, 0, 0,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset; int i;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        setup_mb_resource_map();
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case) 
-        */
-        start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       
-       /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-               msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                       msr=rdmsr(0xc0010042);
-                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
-
-        }
-#endif
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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);
-        }
-
-       allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-        init_timer(); // Need to use TMICT to synconize FID/VID
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-
-#if 0
-        dump_pci_devices();
-#endif
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-#endif
diff --git a/src/mainboard/iwill/dk8_htx/romstage.c b/src/mainboard/iwill/dk8_htx/romstage.c
new file mode 100644 (file)
index 0000000..cdfdfc0
--- /dev/null
@@ -0,0 +1,323 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1 
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+//#define K8_ALLOCATE_IO_RANGE 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#endif
+
+
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "cpu/x86/bist.h"
+
+#include "lib/delay.c"
+
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+/*
+ * GPIO28 of 8111 will control H0_MEMRESET_L
+ * GPIO29 of 8111 will control H1_MEMRESET_L
+ */
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       } else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               udelay(90);
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit.c"
+
+#include "lib/generic_sdram.c"
+#include "lib/ramtest.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+       unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the rom access for 4M */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+                       //first node
+                        DIMM0, DIMM2, 0, 0,
+                        DIMM1, DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       //second node
+                        DIMM4, DIMM6, 0, 0,
+                        DIMM5, DIMM7, 0, 0,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset; int i;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        setup_mb_resource_map();
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case) 
+        */
+        start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       
+       /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+               msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                       msr=rdmsr(0xc0010042);
+                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
+
+        }
+#endif
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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);
+        }
+
+       allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+        init_timer(); // Need to use TMICT to synconize FID/VID
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+
+#if 0
+        dump_pci_devices();
+#endif
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+#endif
diff --git a/src/mainboard/iwill/dk8s2/cache_as_ram_auto.c b/src/mainboard/iwill/dk8s2/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 271ad6c..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1 
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-//#define K8_ALLOCATE_IO_RANGE 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#endif
-
-
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "cpu/x86/bist.h"
-
-#include "lib/delay.c"
-
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-/*
- * GPIO28 of 8111 will control H0_MEMRESET_L
- * GPIO29 of 8111 will control H1_MEMRESET_L
- */
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       } else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               udelay(90);
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit.c"
-
-#include "lib/generic_sdram.c"
-#include "lib/ramtest.c"
-
- /* tyan does not want the default */
-#include "northbridge/amd/amdk8/resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-       unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the rom access for 4M */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-                       //first node
-                        DIMM0, DIMM2, 0, 0,
-                        DIMM1, DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       //second node
-                        DIMM4, DIMM6, 0, 0,
-                        DIMM5, DIMM7, 0, 0,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset; int i;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        setup_default_resource_map();
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case) 
-        */
-        start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       
-       /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-               msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                       msr=rdmsr(0xc0010042);
-                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
-
-        }
-#endif
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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);
-        }
-
-       allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-        init_timer(); // Need to use TMICT to synconize FID/VID
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-
-#if 0
-        dump_pci_devices();
-#endif
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-#endif
diff --git a/src/mainboard/iwill/dk8s2/romstage.c b/src/mainboard/iwill/dk8s2/romstage.c
new file mode 100644 (file)
index 0000000..271ad6c
--- /dev/null
@@ -0,0 +1,323 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1 
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+//#define K8_ALLOCATE_IO_RANGE 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#endif
+
+
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "cpu/x86/bist.h"
+
+#include "lib/delay.c"
+
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+/*
+ * GPIO28 of 8111 will control H0_MEMRESET_L
+ * GPIO29 of 8111 will control H1_MEMRESET_L
+ */
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       } else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               udelay(90);
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit.c"
+
+#include "lib/generic_sdram.c"
+#include "lib/ramtest.c"
+
+ /* tyan does not want the default */
+#include "northbridge/amd/amdk8/resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+       unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the rom access for 4M */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+                       //first node
+                        DIMM0, DIMM2, 0, 0,
+                        DIMM1, DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       //second node
+                        DIMM4, DIMM6, 0, 0,
+                        DIMM5, DIMM7, 0, 0,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset; int i;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        setup_default_resource_map();
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case) 
+        */
+        start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       
+       /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+               msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                       msr=rdmsr(0xc0010042);
+                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
+
+        }
+#endif
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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);
+        }
+
+       allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+        init_timer(); // Need to use TMICT to synconize FID/VID
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+
+#if 0
+        dump_pci_devices();
+#endif
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+#endif
diff --git a/src/mainboard/iwill/dk8x/cache_as_ram_auto.c b/src/mainboard/iwill/dk8x/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 271ad6c..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1 
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-//#define K8_ALLOCATE_IO_RANGE 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#endif
-
-
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "cpu/x86/bist.h"
-
-#include "lib/delay.c"
-
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-/*
- * GPIO28 of 8111 will control H0_MEMRESET_L
- * GPIO29 of 8111 will control H1_MEMRESET_L
- */
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       } else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               udelay(90);
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit.c"
-
-#include "lib/generic_sdram.c"
-#include "lib/ramtest.c"
-
- /* tyan does not want the default */
-#include "northbridge/amd/amdk8/resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-       unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the rom access for 4M */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-                       //first node
-                        DIMM0, DIMM2, 0, 0,
-                        DIMM1, DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       //second node
-                        DIMM4, DIMM6, 0, 0,
-                        DIMM5, DIMM7, 0, 0,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset; int i;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        setup_default_resource_map();
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case) 
-        */
-        start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-       
-       /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-               msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                       msr=rdmsr(0xc0010042);
-                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
-
-        }
-#endif
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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);
-        }
-
-       allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-        init_timer(); // Need to use TMICT to synconize FID/VID
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-
-#if 0
-        dump_pci_devices();
-#endif
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-#endif
diff --git a/src/mainboard/iwill/dk8x/romstage.c b/src/mainboard/iwill/dk8x/romstage.c
new file mode 100644 (file)
index 0000000..271ad6c
--- /dev/null
@@ -0,0 +1,323 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1 
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+//#define K8_ALLOCATE_IO_RANGE 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#endif
+
+
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "cpu/x86/bist.h"
+
+#include "lib/delay.c"
+
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+/*
+ * GPIO28 of 8111 will control H0_MEMRESET_L
+ * GPIO29 of 8111 will control H1_MEMRESET_L
+ */
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       } else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               udelay(90);
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit.c"
+
+#include "lib/generic_sdram.c"
+#include "lib/ramtest.c"
+
+ /* tyan does not want the default */
+#include "northbridge/amd/amdk8/resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+       unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the rom access for 4M */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+                       //first node
+                        DIMM0, DIMM2, 0, 0,
+                        DIMM1, DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       //second node
+                        DIMM4, DIMM6, 0, 0,
+                        DIMM5, DIMM7, 0, 0,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset; int i;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        setup_default_resource_map();
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram 
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain, 
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case) 
+        */
+        start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+       
+       /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+               msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                       msr=rdmsr(0xc0010042);
+                       print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n"); 
+
+        }
+#endif
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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);
+        }
+
+       allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+        init_timer(); // Need to use TMICT to synconize FID/VID
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+
+#if 0
+        dump_pci_devices();
+#endif
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+#endif
index 2843b73ccfeae1e77a9fdee8f93620391d3c8e00..47e519a52c0a539fcc399f14e46a7b262c68154d 100644 (file)
@@ -35,13 +35,13 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/fpu_enable.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 crt0s += $(src)/cpu/x86/mmx_disable.inc
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/jetway/j7f24/auto.c b/src/mainboard/jetway/j7f24/auto.c
deleted file mode 100644 (file)
index 050b40e..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 VIA Technologies, Inc.
- * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cn700/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "superio/fintek/f71805f/f71805f_early_serial.c"
-
-#if CONFIG_TTYS0_BASE == 0x2f8
-#define SERIAL_DEV PNP_DEV(0x2e, F71805F_SP2)
-#else
-#define SERIAL_DEV PNP_DEV(0x2e, F71805F_SP1)
-#endif
-
-static void memreset_setup(void)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/cn700/raminit.c"
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
-       if (dev == PCI_DEV_INVALID)
-               die("Southbridge not found!!!\n");
-
-       /* bit=0 means enable function (per CX700 datasheet)
-        *   5 16.1 USB 2
-        *   4 16.0 USB 1
-        *   3 15.0 SATA and PATA
-        *   2 16.2 USB 3
-        *   1 16.4 USB EHCI
-        */
-       pci_write_config8(dev, 0x50, 0x80);
-
-       /* bit=1 means enable internal function (per CX700 datasheet)
-        *   3 Internal RTC
-        *   2 Internal PS2 Mouse
-        *   1 Internal KBC Configuration
-        *   0 Internal Keyboard Controller
-        */
-       pci_write_config8(dev, 0x51, 0x1d);
-}
-
-static const struct mem_controller ctrl = {
-       .d0f0 = 0x0000,
-       .d0f2 = 0x2000,
-       .d0f3 = 0x3000,
-       .d0f4 = 0x4000,
-       .d0f7 = 0x7000,
-       .d1f0 = 0x8000,
-       .channel0 = { 0x50 },
-};
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       device_t dev;
-
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
-
-       f71805f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       print_spew("In auto.c:main()\r\n");
-
-       enable_smbus();
-       smbus_fixup(&ctrl);
-
-       if (bist == 0) {
-               print_debug("doing early_mtrr\r\n");
-               early_mtrr_init();
-       }
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       ddr_ram_setup(&ctrl);
-
-       /* ram_check(0, 640 * 1024); */
-
-       print_spew("Leaving auto.c:main()\r\n");
-}
diff --git a/src/mainboard/jetway/j7f24/romstage.c b/src/mainboard/jetway/j7f24/romstage.c
new file mode 100644 (file)
index 0000000..82a90db
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 VIA Technologies, Inc.
+ * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cn700/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "superio/fintek/f71805f/f71805f_early_serial.c"
+
+#if CONFIG_TTYS0_BASE == 0x2f8
+#define SERIAL_DEV PNP_DEV(0x2e, F71805F_SP2)
+#else
+#define SERIAL_DEV PNP_DEV(0x2e, F71805F_SP1)
+#endif
+
+static void memreset_setup(void)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/cn700/raminit.c"
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
+       if (dev == PCI_DEV_INVALID)
+               die("Southbridge not found!!!\n");
+
+       /* bit=0 means enable function (per CX700 datasheet)
+        *   5 16.1 USB 2
+        *   4 16.0 USB 1
+        *   3 15.0 SATA and PATA
+        *   2 16.2 USB 3
+        *   1 16.4 USB EHCI
+        */
+       pci_write_config8(dev, 0x50, 0x80);
+
+       /* bit=1 means enable internal function (per CX700 datasheet)
+        *   3 Internal RTC
+        *   2 Internal PS2 Mouse
+        *   1 Internal KBC Configuration
+        *   0 Internal Keyboard Controller
+        */
+       pci_write_config8(dev, 0x51, 0x1d);
+}
+
+static const struct mem_controller ctrl = {
+       .d0f0 = 0x0000,
+       .d0f2 = 0x2000,
+       .d0f3 = 0x3000,
+       .d0f4 = 0x4000,
+       .d0f7 = 0x7000,
+       .d1f0 = 0x8000,
+       .channel0 = { 0x50 },
+};
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       device_t dev;
+
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
+
+       f71805f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       print_spew("In romstage.c:main()\r\n");
+
+       enable_smbus();
+       smbus_fixup(&ctrl);
+
+       if (bist == 0) {
+               print_debug("doing early_mtrr\r\n");
+               early_mtrr_init();
+       }
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       ddr_ram_setup(&ctrl);
+
+       /* ram_check(0, 640 * 1024); */
+
+       print_spew("Leaving romstage.c:main()\r\n");
+}
index bd0d7b9965eacc2c50c68ee4a41b76c4cd829f71..29f43797c02e0e5abe69ff14e8cfb62f02e6772f 100644 (file)
@@ -40,7 +40,7 @@ initobj-y += crt0.o
 
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/intel/model_6ex/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -55,8 +55,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/kontron/986lcd-m/auto.c b/src/mainboard/kontron/986lcd-m/auto.c
deleted file mode 100644 (file)
index 29d1d24..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * This file is part of the coreboot project.
- * 
- * Copyright (C) 2007-2009 coresystems GmbH
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of
- * the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-// __PRE_RAM__ means: use "unsigned" for device, not a struct.
-#define __PRE_RAM__
-
-/* Configuration of the i945 driver */
-#define CHIPSET_I945GM 1
-/* Usually system firmware turns off system memory clock signals to 
- * unused SO-DIMM slots to reduce EMI and power consumption.
- * However, the Kontron 986LCD-M does not like unused clock signals to
- * be disabled. If other similar mainboard occur, it would make sense
- * to make this an entry in the sysinfo structure, and pre-initialize that
- * structure in the mainboard's auto.c main() function. For now a
- * #define will do.
- */
-#define OVERRIDE_CLOCK_DISABLE 1
-#define CHANNEL_XOR_RANDOMIZATION 1
-
-#include <stdint.h>
-#include <string.h>
-#include <arch/io.h>
-#include <arch/romcc_io.h>
-#include <device/pci_def.h>
-#include <device/pnp_def.h>
-#include <cpu/x86/lapic.h>
-
-#include "superio/winbond/w83627thg/w83627thg.h"
-
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/x86/bist.h>
-
-#if CONFIG_USBDEBUG_DIRECT
-#define DBGP_DEFAULT 1
-#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
-#include "superio/winbond/w83627thg/w83627thg_early_serial.c"
-
-#include "northbridge/intel/i945/udelay.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627THG_SP1)
-
-#include "southbridge/intel/i82801gx/i82801gx.h"
-static void setup_ich7_gpios(void)
-{
-       printk_debug(" GPIOS...");
-       /* General Registers */
-       outl(0x1f1ff7c0, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
-       outl(0xe0e8efc3, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
-       outl(0xebffeeff, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
-       /* Output Control Registers */
-       outl(0x00000000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
-       /* Input Control Registers */
-       outl(0x00002180, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
-       outl(0x000100ff, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
-       outl(0x00000030, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
-       outl(0x00010035, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
-}
-
-#include "northbridge/intel/i945/early_init.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i945/raminit.h"
-#include "northbridge/intel/i945/raminit.c"
-#include "northbridge/intel/i945/reset_test.c"
-#include "northbridge/intel/i945/errata.c"
-#include "northbridge/intel/i945/debug.c"
-
-static void ich7_enable_lpc(void)
-{
-       // Enable Serial IRQ
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
-       // Set COM1/COM2 decode range
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0010);
-       // Enable COM1/COM2/KBD/SuperIO1+2
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x340b);
-       // Enable HWM at 0xa00
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x84, 0x00fc0a01);
-       // COM3 decode
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x88, 0x000403e9);
-       // COM4 decode
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x8c, 0x000402e9);
-       // io 0x300 decode 
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x90, 0x00000301);
-}
-
-
-/* This box has two superios, so enabling serial becomes slightly excessive.
- * We disable a lot of stuff to make sure that there are no conflicts between
- * the two. Also set up the GPIOs from the beginning. This is the "no schematic
- * but safe anyways" method.
- */
-static void early_superio_config_w83627thg(void)
-{
-       device_t dev;
-       
-       dev=PNP_DEV(0x2e, W83627THG_SP1);
-       pnp_enter_ext_func_mode(dev);
-
-       pnp_write_config(dev, 0x24, 0xc6); // PNPCSV
-
-       pnp_write_config(dev, 0x29, 0x43); // GPIO settings
-       pnp_write_config(dev, 0x2a, 0x40); // GPIO settings
-
-       dev=PNP_DEV(0x2e, W83627THG_SP1);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3f8);
-       pnp_set_irq(dev, PNP_IDX_IRQ0, 4);
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x2e, W83627THG_SP2);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x2f8);
-       pnp_set_irq(dev, PNP_IDX_IRQ0, 3);
-       // pnp_write_config(dev, 0xf1, 4); // IRMODE0
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x2e, W83627THG_KBC);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x60);
-       pnp_set_iobase(dev, PNP_IDX_IO1, 0x64);
-       // pnp_write_config(dev, 0xf0, 0x82);
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x2e, W83627THG_GAME_MIDI_GPIO1);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_write_config(dev, 0xf5, 0xff); // invert all GPIOs
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x2e, W83627THG_GPIO2);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 1); // Just enable it
-
-       dev=PNP_DEV(0x2e, W83627THG_GPIO3);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_write_config(dev, 0xf0, 0xfb); // GPIO bit 2 is output
-       pnp_write_config(dev, 0xf1, 0x00); // GPIO bit 2 is 0
-       pnp_write_config(dev, 0x30, 0x03); // Enable GPIO3+4. pnp_set_enable is not sufficient
-
-       dev=PNP_DEV(0x2e, W83627THG_FDC);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-
-       dev=PNP_DEV(0x2e, W83627THG_PP);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-
-       /* Enable HWM */
-       dev=PNP_DEV(0x2e, W83627THG_HWM);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0xa00);
-       pnp_set_enable(dev, 1);
-
-       pnp_exit_ext_func_mode(dev);
-
-       dev=PNP_DEV(0x4e, W83627THG_SP1);
-       pnp_enter_ext_func_mode(dev);
-
-       pnp_set_logical_device(dev); // Set COM3 to sane non-conflicting values
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3e8);
-       pnp_set_irq(dev, PNP_IDX_IRQ0, 11);
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x4e, W83627THG_SP2); 
-       pnp_set_logical_device(dev); // Set COM4 to sane non-conflicting values
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x2e8);
-       pnp_set_irq(dev, PNP_IDX_IRQ0, 10);
-       pnp_set_enable(dev, 1);
-
-       dev=PNP_DEV(0x4e, W83627THG_FDC);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-
-       dev=PNP_DEV(0x4e, W83627THG_PP);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-
-       dev=PNP_DEV(0x4e, W83627THG_KBC);
-       pnp_set_logical_device(dev);
-       pnp_set_enable(dev, 0);
-       pnp_set_iobase(dev, PNP_IDX_IO0, 0x00);
-       pnp_set_iobase(dev, PNP_IDX_IO1, 0x00);
-
-       pnp_exit_ext_func_mode(dev);
-}
-
-static void rcba_config(void)
-{
-       u32 reg32;
-
-       /* Set up virtual channel 0 */
-       //RCBA32(0x0014) = 0x80000001;
-       //RCBA32(0x001c) = 0x03128010;
-
-       /* Device 1f interrupt pin register */
-       RCBA32(0x3100) = 0x00042210;
-       /* Device 1d interrupt pin register */
-       RCBA32(0x310c) = 0x00214321;
-
-       /* dev irq route register */
-       RCBA16(0x3140) = 0x0132;
-       RCBA16(0x3142) = 0x3241;
-       RCBA16(0x3144) = 0x0237;
-       RCBA16(0x3146) = 0x3210;
-       RCBA16(0x3148) = 0x3210;
-
-       /* Enable IOAPIC */
-       RCBA8(0x31ff) = 0x03;
-
-       /* Enable upper 128bytes of CMOS */
-       RCBA32(0x3400) = (1 << 2);
-
-       /* Now, this is a bit ugly. As per PCI specification, function 0 of a
-        * device always has to be implemented. So disabling ethernet port 1
-        * would essentially disable all three ethernet ports of the mainboard.
-        * It's possible to rename the ports to achieve compatibility to the
-        * PCI spec but this will confuse all (static!) tables containing
-        * interrupt routing information. 
-        * To avoid this, we enable (unused) port 6 and swap it with port 1
-        * in the case that ethernet port 1 is disabled. Since no devices
-        * are connected to that port, we don't have to worry about interrupt
-        * routing.
-        */
-       int port_shuffle = 0;
-
-       /* Disable unused devices */
-       reg32 = FD_ACMOD|FD_ACAUD|FD_PATA;
-       reg32 |= FD_PCIE6|FD_PCIE5|FD_PCIE4;
-
-       if (read_option(CMOS_VSTART_ethernet1, CMOS_VLEN_ethernet1, 0) != 0) {
-               printk_debug("Disabling ethernet adapter 1.\n");
-               reg32 |= FD_PCIE1;
-       }
-       if (read_option(CMOS_VSTART_ethernet2, CMOS_VLEN_ethernet2, 0) != 0) {
-               printk_debug("Disabling ethernet adapter 2.\n");
-               reg32 |= FD_PCIE2;
-       } else {
-               if (reg32 & FD_PCIE1)
-                       port_shuffle = 1;
-       }
-       if (read_option(CMOS_VSTART_ethernet3, CMOS_VLEN_ethernet3, 0) != 0) {
-               printk_debug("Disabling ethernet adapter 3.\n");
-               reg32 |= FD_PCIE3;
-       } else {
-               if (reg32 & FD_PCIE1)
-                       port_shuffle = 1;
-       }
-
-       if (port_shuffle) {
-               /* Enable PCIE6 again */
-               reg32 &= ~FD_PCIE6;
-               /* Swap PCIE6 and PCIE1 */
-               RCBA32(RPFN) = 0x00043215;
-       }
-
-       reg32 |= 1;
-
-       RCBA32(0x3418) = reg32;
-
-       /* Enable PCIe Root Port Clock Gate */
-       // RCBA32(0x341c) = 0x00000001;
-}
-
-static void early_ich7_init(void)
-{
-       uint8_t reg8;
-       uint32_t reg32;
-
-       // program secondary mlt XXX byte?
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
-
-       // reset rtc power status
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
-       reg8 &= ~(1 << 2);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
-
-       // usb transient disconnect
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
-       reg8 |= (3 << 0);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
-       reg32 |= (1 << 29) | (1 << 17);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
-       reg32 |= (1 << 31) | (1 << 27);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
-
-       RCBA32(0x0088) = 0x0011d000;
-       RCBA16(0x01fc) = 0x060f;
-       RCBA32(0x01f4) = 0x86000040;
-       RCBA32(0x0214) = 0x10030549;
-       RCBA32(0x0218) = 0x00020504;
-       RCBA8(0x0220) = 0xc5;
-       reg32 = RCBA32(0x3410);
-       reg32 |= (1 << 6);
-       RCBA32(0x3410) = reg32;
-       reg32 = RCBA32(0x3430);
-       reg32 &= ~(3 << 0);
-       reg32 |= (1 << 0);
-       RCBA32(0x3430) = reg32;
-       RCBA32(0x3418) |= (1 << 0);
-       RCBA16(0x0200) = 0x2008;
-       RCBA8(0x2027) = 0x0d;
-       RCBA16(0x3e08) |= (1 << 7);
-       RCBA16(0x3e48) |= (1 << 7);
-       RCBA32(0x3e0e) |= (1 << 7);
-       RCBA32(0x3e4e) |= (1 << 7);
-
-       // next step only on ich7m b0 and later:
-       reg32 = RCBA32(0x2034);
-       reg32 &= ~(0x0f << 16);
-       reg32 |= (5 << 16);
-       RCBA32(0x2034) = reg32;
-}
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-#include "southbridge/intel/i82801gx/cmos_failover.c"
-#endif
-
-#include <cbmem.h>
-
-// Now, this needs to be included because it relies on the symbol
-// __PRE_RAM__ being set during CAR stage (in order to compile the
-// BSS free versions of the functions). Either rewrite the code
-// to be always BSS free, or invent a flag that's better suited than
-// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
-//
-#include "lib/cbmem.c"
-
-void real_main(unsigned long bist)
-{
-       u32 reg32;
-       int boot_mode = 0;
-
-       if (bist == 0) {
-               enable_lapic();
-       }
-
-       ich7_enable_lpc();
-       early_superio_config_w83627thg();
-
-       /* Set up the console */
-       uart_init();
-
-#if CONFIG_USBDEBUG_DIRECT
-       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       if (MCHBAR16(SSKPD) == 0xCAFE) {
-               printk_debug("soft reset detected.\n");
-               boot_mode = 1;
-       }
-
-       /* Perform some early chipset initialization required
-        * before RAM initialization can work
-        */
-       i945_early_initialization();
-
-       /* Read PM1_CNT */
-       reg32 = inl(DEFAULT_PMBASE + 0x04);
-       printk_debug("PM1_CNT: %08x\n", reg32);
-       if (((reg32 >> 10) & 7) == 5) {
-#if CONFIG_HAVE_ACPI_RESUME
-               printk_debug("Resume from S3 detected.\n");
-               boot_mode = 2;
-               /* Clear SLP_TYPE. This will break stage2 but
-                * we care for that when we get there.
-                */
-               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
-
-#else
-               printk_debug("Resume from S3 detected, but disabled.\n");
-#endif
-       }
-
-       /* Enable SPD ROMs and DDR-II DRAM */
-       enable_smbus();
-       
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-       dump_spd_registers();
-#endif
-
-       sdram_initialize(boot_mode);
-
-       /* Perform some initialization that must run before stage2 */
-       early_ich7_init();
-
-       /* This should probably go away. Until now it is required 
-        * and mainboard specific 
-        */
-       rcba_config();
-
-       /* Chipset Errata! */
-       fixup_i945_errata();
-
-       /* Initialize the internal PCIe links before we go into stage2 */
-       i945_late_initialization();
-
-#if !CONFIG_HAVE_ACPI_RESUME
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-#if defined(DEBUG_RAM_SETUP)
-       sdram_dump_mchbar_registers();
-#endif
-
-       {
-               /* This will not work if TSEG is in place! */
-               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
-
-               printk_debug("TOM: 0x%08x\n", tom);
-               ram_check(0x00000000, 0x000a0000);
-               //ram_check(0x00100000, tom);
-       }
-#endif
-#endif
-
-       MCHBAR16(SSKPD) = 0xCAFE;
-
-#if CONFIG_HAVE_ACPI_RESUME
-       /* Start address of high memory tables */
-       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
-
-       /* If there is no high memory area, we didn't boot before, so
-        * this is not a resume. In that case we just create the cbmem toc.
-        */
-       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
-               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
-
-               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
-                * through stage 2. We could keep stuff like stack and heap in high tables
-                * memory completely, but that's a wonderful clean up task for another
-                * day.
-                */
-               if (resume_backup_memory) 
-                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
-
-               /* Magic for S3 resume */
-               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
-       }
-#endif
-}
-
-#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
diff --git a/src/mainboard/kontron/986lcd-m/romstage.c b/src/mainboard/kontron/986lcd-m/romstage.c
new file mode 100644 (file)
index 0000000..e0943ab
--- /dev/null
@@ -0,0 +1,488 @@
+/*
+ * This file is part of the coreboot project.
+ * 
+ * Copyright (C) 2007-2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+// __PRE_RAM__ means: use "unsigned" for device, not a struct.
+#define __PRE_RAM__
+
+/* Configuration of the i945 driver */
+#define CHIPSET_I945GM 1
+/* Usually system firmware turns off system memory clock signals to 
+ * unused SO-DIMM slots to reduce EMI and power consumption.
+ * However, the Kontron 986LCD-M does not like unused clock signals to
+ * be disabled. If other similar mainboard occur, it would make sense
+ * to make this an entry in the sysinfo structure, and pre-initialize that
+ * structure in the mainboard's romstage.c main() function. For now a
+ * #define will do.
+ */
+#define OVERRIDE_CLOCK_DISABLE 1
+#define CHANNEL_XOR_RANDOMIZATION 1
+
+#include <stdint.h>
+#include <string.h>
+#include <arch/io.h>
+#include <arch/romcc_io.h>
+#include <device/pci_def.h>
+#include <device/pnp_def.h>
+#include <cpu/x86/lapic.h>
+
+#include "superio/winbond/w83627thg/w83627thg.h"
+
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/x86/bist.h>
+
+#if CONFIG_USBDEBUG_DIRECT
+#define DBGP_DEFAULT 1
+#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
+#include "superio/winbond/w83627thg/w83627thg_early_serial.c"
+
+#include "northbridge/intel/i945/udelay.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627THG_SP1)
+
+#include "southbridge/intel/i82801gx/i82801gx.h"
+static void setup_ich7_gpios(void)
+{
+       printk_debug(" GPIOS...");
+       /* General Registers */
+       outl(0x1f1ff7c0, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
+       outl(0xe0e8efc3, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
+       outl(0xebffeeff, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
+       /* Output Control Registers */
+       outl(0x00000000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
+       /* Input Control Registers */
+       outl(0x00002180, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
+       outl(0x000100ff, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
+       outl(0x00000030, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
+       outl(0x00010035, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
+}
+
+#include "northbridge/intel/i945/early_init.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i945/raminit.h"
+#include "northbridge/intel/i945/raminit.c"
+#include "northbridge/intel/i945/reset_test.c"
+#include "northbridge/intel/i945/errata.c"
+#include "northbridge/intel/i945/debug.c"
+
+static void ich7_enable_lpc(void)
+{
+       // Enable Serial IRQ
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
+       // Set COM1/COM2 decode range
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0010);
+       // Enable COM1/COM2/KBD/SuperIO1+2
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x340b);
+       // Enable HWM at 0xa00
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x84, 0x00fc0a01);
+       // COM3 decode
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x88, 0x000403e9);
+       // COM4 decode
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x8c, 0x000402e9);
+       // io 0x300 decode 
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x90, 0x00000301);
+}
+
+
+/* This box has two superios, so enabling serial becomes slightly excessive.
+ * We disable a lot of stuff to make sure that there are no conflicts between
+ * the two. Also set up the GPIOs from the beginning. This is the "no schematic
+ * but safe anyways" method.
+ */
+static void early_superio_config_w83627thg(void)
+{
+       device_t dev;
+       
+       dev=PNP_DEV(0x2e, W83627THG_SP1);
+       pnp_enter_ext_func_mode(dev);
+
+       pnp_write_config(dev, 0x24, 0xc6); // PNPCSV
+
+       pnp_write_config(dev, 0x29, 0x43); // GPIO settings
+       pnp_write_config(dev, 0x2a, 0x40); // GPIO settings
+
+       dev=PNP_DEV(0x2e, W83627THG_SP1);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3f8);
+       pnp_set_irq(dev, PNP_IDX_IRQ0, 4);
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x2e, W83627THG_SP2);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x2f8);
+       pnp_set_irq(dev, PNP_IDX_IRQ0, 3);
+       // pnp_write_config(dev, 0xf1, 4); // IRMODE0
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x2e, W83627THG_KBC);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x60);
+       pnp_set_iobase(dev, PNP_IDX_IO1, 0x64);
+       // pnp_write_config(dev, 0xf0, 0x82);
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x2e, W83627THG_GAME_MIDI_GPIO1);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_write_config(dev, 0xf5, 0xff); // invert all GPIOs
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x2e, W83627THG_GPIO2);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 1); // Just enable it
+
+       dev=PNP_DEV(0x2e, W83627THG_GPIO3);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_write_config(dev, 0xf0, 0xfb); // GPIO bit 2 is output
+       pnp_write_config(dev, 0xf1, 0x00); // GPIO bit 2 is 0
+       pnp_write_config(dev, 0x30, 0x03); // Enable GPIO3+4. pnp_set_enable is not sufficient
+
+       dev=PNP_DEV(0x2e, W83627THG_FDC);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+
+       dev=PNP_DEV(0x2e, W83627THG_PP);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+
+       /* Enable HWM */
+       dev=PNP_DEV(0x2e, W83627THG_HWM);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0xa00);
+       pnp_set_enable(dev, 1);
+
+       pnp_exit_ext_func_mode(dev);
+
+       dev=PNP_DEV(0x4e, W83627THG_SP1);
+       pnp_enter_ext_func_mode(dev);
+
+       pnp_set_logical_device(dev); // Set COM3 to sane non-conflicting values
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x3e8);
+       pnp_set_irq(dev, PNP_IDX_IRQ0, 11);
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x4e, W83627THG_SP2); 
+       pnp_set_logical_device(dev); // Set COM4 to sane non-conflicting values
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x2e8);
+       pnp_set_irq(dev, PNP_IDX_IRQ0, 10);
+       pnp_set_enable(dev, 1);
+
+       dev=PNP_DEV(0x4e, W83627THG_FDC);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+
+       dev=PNP_DEV(0x4e, W83627THG_PP);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+
+       dev=PNP_DEV(0x4e, W83627THG_KBC);
+       pnp_set_logical_device(dev);
+       pnp_set_enable(dev, 0);
+       pnp_set_iobase(dev, PNP_IDX_IO0, 0x00);
+       pnp_set_iobase(dev, PNP_IDX_IO1, 0x00);
+
+       pnp_exit_ext_func_mode(dev);
+}
+
+static void rcba_config(void)
+{
+       u32 reg32;
+
+       /* Set up virtual channel 0 */
+       //RCBA32(0x0014) = 0x80000001;
+       //RCBA32(0x001c) = 0x03128010;
+
+       /* Device 1f interrupt pin register */
+       RCBA32(0x3100) = 0x00042210;
+       /* Device 1d interrupt pin register */
+       RCBA32(0x310c) = 0x00214321;
+
+       /* dev irq route register */
+       RCBA16(0x3140) = 0x0132;
+       RCBA16(0x3142) = 0x3241;
+       RCBA16(0x3144) = 0x0237;
+       RCBA16(0x3146) = 0x3210;
+       RCBA16(0x3148) = 0x3210;
+
+       /* Enable IOAPIC */
+       RCBA8(0x31ff) = 0x03;
+
+       /* Enable upper 128bytes of CMOS */
+       RCBA32(0x3400) = (1 << 2);
+
+       /* Now, this is a bit ugly. As per PCI specification, function 0 of a
+        * device always has to be implemented. So disabling ethernet port 1
+        * would essentially disable all three ethernet ports of the mainboard.
+        * It's possible to rename the ports to achieve compatibility to the
+        * PCI spec but this will confuse all (static!) tables containing
+        * interrupt routing information. 
+        * To avoid this, we enable (unused) port 6 and swap it with port 1
+        * in the case that ethernet port 1 is disabled. Since no devices
+        * are connected to that port, we don't have to worry about interrupt
+        * routing.
+        */
+       int port_shuffle = 0;
+
+       /* Disable unused devices */
+       reg32 = FD_ACMOD|FD_ACAUD|FD_PATA;
+       reg32 |= FD_PCIE6|FD_PCIE5|FD_PCIE4;
+
+       if (read_option(CMOS_VSTART_ethernet1, CMOS_VLEN_ethernet1, 0) != 0) {
+               printk_debug("Disabling ethernet adapter 1.\n");
+               reg32 |= FD_PCIE1;
+       }
+       if (read_option(CMOS_VSTART_ethernet2, CMOS_VLEN_ethernet2, 0) != 0) {
+               printk_debug("Disabling ethernet adapter 2.\n");
+               reg32 |= FD_PCIE2;
+       } else {
+               if (reg32 & FD_PCIE1)
+                       port_shuffle = 1;
+       }
+       if (read_option(CMOS_VSTART_ethernet3, CMOS_VLEN_ethernet3, 0) != 0) {
+               printk_debug("Disabling ethernet adapter 3.\n");
+               reg32 |= FD_PCIE3;
+       } else {
+               if (reg32 & FD_PCIE1)
+                       port_shuffle = 1;
+       }
+
+       if (port_shuffle) {
+               /* Enable PCIE6 again */
+               reg32 &= ~FD_PCIE6;
+               /* Swap PCIE6 and PCIE1 */
+               RCBA32(RPFN) = 0x00043215;
+       }
+
+       reg32 |= 1;
+
+       RCBA32(0x3418) = reg32;
+
+       /* Enable PCIe Root Port Clock Gate */
+       // RCBA32(0x341c) = 0x00000001;
+}
+
+static void early_ich7_init(void)
+{
+       uint8_t reg8;
+       uint32_t reg32;
+
+       // program secondary mlt XXX byte?
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
+
+       // reset rtc power status
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
+       reg8 &= ~(1 << 2);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
+
+       // usb transient disconnect
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
+       reg8 |= (3 << 0);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
+       reg32 |= (1 << 29) | (1 << 17);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
+       reg32 |= (1 << 31) | (1 << 27);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
+
+       RCBA32(0x0088) = 0x0011d000;
+       RCBA16(0x01fc) = 0x060f;
+       RCBA32(0x01f4) = 0x86000040;
+       RCBA32(0x0214) = 0x10030549;
+       RCBA32(0x0218) = 0x00020504;
+       RCBA8(0x0220) = 0xc5;
+       reg32 = RCBA32(0x3410);
+       reg32 |= (1 << 6);
+       RCBA32(0x3410) = reg32;
+       reg32 = RCBA32(0x3430);
+       reg32 &= ~(3 << 0);
+       reg32 |= (1 << 0);
+       RCBA32(0x3430) = reg32;
+       RCBA32(0x3418) |= (1 << 0);
+       RCBA16(0x0200) = 0x2008;
+       RCBA8(0x2027) = 0x0d;
+       RCBA16(0x3e08) |= (1 << 7);
+       RCBA16(0x3e48) |= (1 << 7);
+       RCBA32(0x3e0e) |= (1 << 7);
+       RCBA32(0x3e4e) |= (1 << 7);
+
+       // next step only on ich7m b0 and later:
+       reg32 = RCBA32(0x2034);
+       reg32 &= ~(0x0f << 16);
+       reg32 |= (5 << 16);
+       RCBA32(0x2034) = reg32;
+}
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+#include "southbridge/intel/i82801gx/cmos_failover.c"
+#endif
+
+#include <cbmem.h>
+
+// Now, this needs to be included because it relies on the symbol
+// __PRE_RAM__ being set during CAR stage (in order to compile the
+// BSS free versions of the functions). Either rewrite the code
+// to be always BSS free, or invent a flag that's better suited than
+// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
+//
+#include "lib/cbmem.c"
+
+void real_main(unsigned long bist)
+{
+       u32 reg32;
+       int boot_mode = 0;
+
+       if (bist == 0) {
+               enable_lapic();
+       }
+
+       ich7_enable_lpc();
+       early_superio_config_w83627thg();
+
+       /* Set up the console */
+       uart_init();
+
+#if CONFIG_USBDEBUG_DIRECT
+       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       if (MCHBAR16(SSKPD) == 0xCAFE) {
+               printk_debug("soft reset detected.\n");
+               boot_mode = 1;
+       }
+
+       /* Perform some early chipset initialization required
+        * before RAM initialization can work
+        */
+       i945_early_initialization();
+
+       /* Read PM1_CNT */
+       reg32 = inl(DEFAULT_PMBASE + 0x04);
+       printk_debug("PM1_CNT: %08x\n", reg32);
+       if (((reg32 >> 10) & 7) == 5) {
+#if CONFIG_HAVE_ACPI_RESUME
+               printk_debug("Resume from S3 detected.\n");
+               boot_mode = 2;
+               /* Clear SLP_TYPE. This will break stage2 but
+                * we care for that when we get there.
+                */
+               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
+
+#else
+               printk_debug("Resume from S3 detected, but disabled.\n");
+#endif
+       }
+
+       /* Enable SPD ROMs and DDR-II DRAM */
+       enable_smbus();
+       
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+       dump_spd_registers();
+#endif
+
+       sdram_initialize(boot_mode);
+
+       /* Perform some initialization that must run before stage2 */
+       early_ich7_init();
+
+       /* This should probably go away. Until now it is required 
+        * and mainboard specific 
+        */
+       rcba_config();
+
+       /* Chipset Errata! */
+       fixup_i945_errata();
+
+       /* Initialize the internal PCIe links before we go into stage2 */
+       i945_late_initialization();
+
+#if !CONFIG_HAVE_ACPI_RESUME
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+#if defined(DEBUG_RAM_SETUP)
+       sdram_dump_mchbar_registers();
+#endif
+
+       {
+               /* This will not work if TSEG is in place! */
+               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
+
+               printk_debug("TOM: 0x%08x\n", tom);
+               ram_check(0x00000000, 0x000a0000);
+               //ram_check(0x00100000, tom);
+       }
+#endif
+#endif
+
+       MCHBAR16(SSKPD) = 0xCAFE;
+
+#if CONFIG_HAVE_ACPI_RESUME
+       /* Start address of high memory tables */
+       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
+
+       /* If there is no high memory area, we didn't boot before, so
+        * this is not a resume. In that case we just create the cbmem toc.
+        */
+       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
+               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
+
+               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
+                * through stage 2. We could keep stuff like stack and heap in high tables
+                * memory completely, but that's a wonderful clean up task for another
+                * day.
+                */
+               if (resume_backup_memory) 
+                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
+
+               /* Magic for S3 resume */
+               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
+       }
+#endif
+}
+
+#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
index dda9ecf0441cd2b726d0494d6863301f449bd4d8..482dfff7248d4227527db3790d5b05bbfc163532 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,8 +55,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/acpi/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/kontron/kt690/cache_as_ram_auto.c b/src/mainboard/kontron/kt690/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 224f603..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- * Copyright (C) 2009 coresystems GmbH
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define K8_SET_FIDVID 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define RC0 (6<<8)
-#define RC1 (7<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-
-#define ICS951462_ADDRESS      0x69
-#define SMBUS_HUB 0x71
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#define post_code(x) outb(x, 0x80)
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627dhg/w83627dhg_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#include "southbridge/amd/rs690/rs690_early_setup.c"
-#include "southbridge/amd/sb600/sb600_early_setup.c"
-
-/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-/* called in raminit_f.c */
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-/*called in raminit_f.c */
-static inline int spd_read_byte(u32 device, u32 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* Is this a cpu only reset? Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) {       /* RTC already inited */
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       /* sb600_lpc_port80(); */
-       sb600_pci_port80();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-normal_image:
-       post_code(0x23);
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
-
-fallback_image:
-       post_code(0x25);
-}
-#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       device_t dev;
-       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
-       int needs_reset = 0;
-       u32 bsp_apicid = 0;
-       msr_t msr;
-       struct cpuid_result cpuid1;
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       enable_rs690_dev8();
-       sb600_lpc_init();
-
-       dev=PNP_DEV(0x2e, W83627DHG_SP1);
-       w83627dhg_enable_serial(dev, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
-
-       setup_kt690_resource_map();
-
-       setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched */
-       wait_all_core0_started();
-       start_other_cores();
-#endif
-       wait_all_aps_started(bsp_apicid);
-
-       ht_setup_chains_x(sysinfo);
-
-       /* run _early_setup before soft-reset. */
-       rs690_early_setup();
-       sb600_early_setup();
-
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-               /* Read FIDVID_STATUS */
-               msr=rdmsr(0xc0010042);
-               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-               enable_fid_change();
-               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-               init_fidvid_bsp(bsp_apicid);
-
-               /* show final fid and vid */
-               msr=rdmsr(0xc0010042);
-               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-       } else {
-               printk_debug("Changing FIDVID not supported\n");
-               printk_spew("... because cpuid returned %08x\n", cpuid1.edx);
-       }
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       rs690_htinit();
-       printk_debug("needs_reset=0x%x\n", needs_reset);
-
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now; */
-       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
-                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       rs690_before_pci_init();
-       sb600_before_pci_init();
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/kontron/kt690/romstage.c b/src/mainboard/kontron/kt690/romstage.c
new file mode 100644 (file)
index 0000000..224f603
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define K8_SET_FIDVID 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define RC0 (6<<8)
+#define RC1 (7<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+
+#define ICS951462_ADDRESS      0x69
+#define SMBUS_HUB 0x71
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#define post_code(x) outb(x, 0x80)
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627dhg/w83627dhg_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#include "southbridge/amd/rs690/rs690_early_setup.c"
+#include "southbridge/amd/sb600/sb600_early_setup.c"
+
+/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+/* called in raminit_f.c */
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+/*called in raminit_f.c */
+static inline int spd_read_byte(u32 device, u32 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* Is this a cpu only reset? Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) {       /* RTC already inited */
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       /* sb600_lpc_port80(); */
+       sb600_pci_port80();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+normal_image:
+       post_code(0x23);
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
+
+fallback_image:
+       post_code(0x25);
+}
+#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       device_t dev;
+       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
+       int needs_reset = 0;
+       u32 bsp_apicid = 0;
+       msr_t msr;
+       struct cpuid_result cpuid1;
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       enable_rs690_dev8();
+       sb600_lpc_init();
+
+       dev=PNP_DEV(0x2e, W83627DHG_SP1);
+       w83627dhg_enable_serial(dev, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
+
+       setup_kt690_resource_map();
+
+       setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched */
+       wait_all_core0_started();
+       start_other_cores();
+#endif
+       wait_all_aps_started(bsp_apicid);
+
+       ht_setup_chains_x(sysinfo);
+
+       /* run _early_setup before soft-reset. */
+       rs690_early_setup();
+       sb600_early_setup();
+
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+               /* Read FIDVID_STATUS */
+               msr=rdmsr(0xc0010042);
+               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+               enable_fid_change();
+               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+               init_fidvid_bsp(bsp_apicid);
+
+               /* show final fid and vid */
+               msr=rdmsr(0xc0010042);
+               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+       } else {
+               printk_debug("Changing FIDVID not supported\n");
+               printk_spew("... because cpuid returned %08x\n", cpuid1.edx);
+       }
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       rs690_htinit();
+       printk_debug("needs_reset=0x%x\n", needs_reset);
+
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now; */
+       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
+                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       rs690_before_pci_init();
+       sb600_before_pci_init();
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/lippert/frontrunner/auto.c b/src/mainboard/lippert/frontrunner/auto.c
deleted file mode 100644 (file)
index b0ffcc9..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/gx2def.h>
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5535/cs5535_early_smbus.c"
-#include "southbridge/amd/cs5535/cs5535_early_setup.c"
-#include "northbridge/amd/gx2/raminit.h"
-
-/* this has to be done on a per-mainboard basis, esp. if you don't have smbus */
-static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
-{
-       msr_t msr;
-       /* 1. Initialize GLMC registers base on SPD values,
-        * Hard coded as XpressROM for now */
-       //print_debug("sdram_enable step 1\r\n");
-       msr = rdmsr(0x20000018);
-       msr.hi = 0x10076013;
-       msr.lo = 0x3400;
-       wrmsr(0x20000018, msr);
-
-       msr = rdmsr(0x20000019);
-       msr.hi = 0x18000008;
-       msr.lo = 0x696332a3;
-       wrmsr(0x20000019, msr);
-
-}
-
-#include "northbridge/amd/gx2/raminit.c"
-#include "lib/generic_sdram.c"
-
-#define PLLMSRhi 0x00000226
-#define PLLMSRlo 0x00000008
-#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
-#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
-#include "northbridge/amd/gx2/pll_reset.c"
-#include "cpu/amd/model_gx2/cpureginit.c"
-#include "cpu/amd/model_gx2/syspreinit.c"
-static void msr_init(void)
-{
-       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
-
-       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
-        __builtin_wrmsr(0x10000026, 0x400fffc0, 0x2cfbc040);
-        __builtin_wrmsr(0x10000027, 0xfff00000, 0xff);
-        __builtin_wrmsr(0x10000028, 0x7bf00100, 0x2000000f);
-        __builtin_wrmsr(0x1000002c, 0xff030003, 0x20000000);
-
-        __builtin_wrmsr(0x10000080, 0x3, 0x0);
-
-        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
-       __builtin_wrmsr(0x40000023, 0x400fffc0, 0x20000040);
-        __builtin_wrmsr(0x40000024, 0xff4ffffc, 0x200000ef);
-        __builtin_wrmsr(0x40000029, 0x7bf00100, 0x2000000f);
-        __builtin_wrmsr(0x4000002d, 0xff030003, 0x20000000);
-
-
-        __builtin_wrmsr(0x50002001, 0x27, 0x0);
-        __builtin_wrmsr(0x4c002001, 0x1, 0x0);
-}
-
-
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-       unsigned char temp;
-       SystemPreInit();
-       msr_init();
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       cs5535_early_setup();
-       print_err("done cs5535 early\n");
-       pll_reset();
-       print_err("done pll_reset\n");
-
-       cpuRegInit();
-       print_err("done cpuRegInit\n");
-
-       sdram_initialize(1, memctrl);
-
-       print_err("Done sdram_initialize\n");
-       print_err("Disable watchdog\n");
-       outb( 0x87, 0x4E);                            //enter SuperIO configuration mode
-       outb( 0x87, 0x4E);
-
-
-       outb(0x20, 0x4e);
-       temp = inb(0x4f);
-       print_debug_hex8(temp);
-       if (temp != 0x52){
-               print_err("CAN NOT READ SUPERIO VID\n");
-       }
-
-       outb(0x29, 0x4e);
-       outb(0x7c, 0x4f);
-
-       outb( 0x07, 0x4E);                            //enable logical device 9
-       outb( 0x09, 0x4F);
-       outb(0x30, 0x4e);
-       outb(1, 0x4f);
-       outb( 0xF0, 0x4E);                            //set GP33 as outbut in configuration register F0h     Bit4 = \u20180\u2019
-       outb( 0xC7, 0x4F);
-       outb( 0xF1, 0x4E);                            //clr GP33 (Bit4) value in cofiguration register F1h to \u20181\u2019 disables
-       temp = inb(0x4F);                            //watchdog function. Make sure to let the other Bits unchanged!
-       print_debug_hex8(temp);print_debug(":");
-       temp = temp & ~8;
-       outb( temp, 0x4F);
-       temp = inb(0x4F);                            //watchdog function. Make sure to let the other Bits unchanged!
-       print_debug_hex8(temp);print_debug("\n");
-       /* Check all of memory */
-//     ram_check(0, 16384);
-       ram_check(0x20000, 0x24000);
-//     ram_check(0x00000000, 640*1024);
-
-}
diff --git a/src/mainboard/lippert/frontrunner/romstage.c b/src/mainboard/lippert/frontrunner/romstage.c
new file mode 100644 (file)
index 0000000..b0ffcc9
--- /dev/null
@@ -0,0 +1,136 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/gx2def.h>
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5535/cs5535_early_smbus.c"
+#include "southbridge/amd/cs5535/cs5535_early_setup.c"
+#include "northbridge/amd/gx2/raminit.h"
+
+/* this has to be done on a per-mainboard basis, esp. if you don't have smbus */
+static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
+{
+       msr_t msr;
+       /* 1. Initialize GLMC registers base on SPD values,
+        * Hard coded as XpressROM for now */
+       //print_debug("sdram_enable step 1\r\n");
+       msr = rdmsr(0x20000018);
+       msr.hi = 0x10076013;
+       msr.lo = 0x3400;
+       wrmsr(0x20000018, msr);
+
+       msr = rdmsr(0x20000019);
+       msr.hi = 0x18000008;
+       msr.lo = 0x696332a3;
+       wrmsr(0x20000019, msr);
+
+}
+
+#include "northbridge/amd/gx2/raminit.c"
+#include "lib/generic_sdram.c"
+
+#define PLLMSRhi 0x00000226
+#define PLLMSRlo 0x00000008
+#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
+#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
+#include "northbridge/amd/gx2/pll_reset.c"
+#include "cpu/amd/model_gx2/cpureginit.c"
+#include "cpu/amd/model_gx2/syspreinit.c"
+static void msr_init(void)
+{
+       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
+
+       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
+        __builtin_wrmsr(0x10000026, 0x400fffc0, 0x2cfbc040);
+        __builtin_wrmsr(0x10000027, 0xfff00000, 0xff);
+        __builtin_wrmsr(0x10000028, 0x7bf00100, 0x2000000f);
+        __builtin_wrmsr(0x1000002c, 0xff030003, 0x20000000);
+
+        __builtin_wrmsr(0x10000080, 0x3, 0x0);
+
+        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
+       __builtin_wrmsr(0x40000023, 0x400fffc0, 0x20000040);
+        __builtin_wrmsr(0x40000024, 0xff4ffffc, 0x200000ef);
+        __builtin_wrmsr(0x40000029, 0x7bf00100, 0x2000000f);
+        __builtin_wrmsr(0x4000002d, 0xff030003, 0x20000000);
+
+
+        __builtin_wrmsr(0x50002001, 0x27, 0x0);
+        __builtin_wrmsr(0x4c002001, 0x1, 0x0);
+}
+
+
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl [] = {
+               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
+       };
+       unsigned char temp;
+       SystemPreInit();
+       msr_init();
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       cs5535_early_setup();
+       print_err("done cs5535 early\n");
+       pll_reset();
+       print_err("done pll_reset\n");
+
+       cpuRegInit();
+       print_err("done cpuRegInit\n");
+
+       sdram_initialize(1, memctrl);
+
+       print_err("Done sdram_initialize\n");
+       print_err("Disable watchdog\n");
+       outb( 0x87, 0x4E);                            //enter SuperIO configuration mode
+       outb( 0x87, 0x4E);
+
+
+       outb(0x20, 0x4e);
+       temp = inb(0x4f);
+       print_debug_hex8(temp);
+       if (temp != 0x52){
+               print_err("CAN NOT READ SUPERIO VID\n");
+       }
+
+       outb(0x29, 0x4e);
+       outb(0x7c, 0x4f);
+
+       outb( 0x07, 0x4E);                            //enable logical device 9
+       outb( 0x09, 0x4F);
+       outb(0x30, 0x4e);
+       outb(1, 0x4f);
+       outb( 0xF0, 0x4E);                            //set GP33 as outbut in configuration register F0h     Bit4 = \u20180\u2019
+       outb( 0xC7, 0x4F);
+       outb( 0xF1, 0x4E);                            //clr GP33 (Bit4) value in cofiguration register F1h to \u20181\u2019 disables
+       temp = inb(0x4F);                            //watchdog function. Make sure to let the other Bits unchanged!
+       print_debug_hex8(temp);print_debug(":");
+       temp = temp & ~8;
+       outb( temp, 0x4F);
+       temp = inb(0x4F);                            //watchdog function. Make sure to let the other Bits unchanged!
+       print_debug_hex8(temp);print_debug("\n");
+       /* Check all of memory */
+//     ram_check(0, 16384);
+       ram_check(0x20000, 0x24000);
+//     ram_check(0x00000000, 640*1024);
+
+}
index f101f22d4ecbe18a8d3e8f6ce537104ec2d389d9..0e4b263223b6ea639ec4eec47e3e59e0fb714d3f 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/lippert/roadrunner-lx/cache_as_ram_auto.c b/src/mainboard/lippert/roadrunner-lx/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 3884a27..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 LiPPERT Embedded Computers GmbH
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-/* Based on cache_as_ram_auto.c from AMD's DB800 and DBM690T mainboards. */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#define ManualConf 1           /* No automatic strapped PLL config */
-#define PLLMSRhi 0x0000049C    /* Manual settings for the PLL */
-#define PLLMSRlo 0x00DE6001
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       if (device != DIMM0)
-               return 0xFF;    /* No DIMM1, don't even try. */
-
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-
-       /* Setup access to the cache for under 1MB. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x1000A000;    /* 0-A0000 write back */
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x0;           /* Write back */
-       msr.lo = 0x0;
-       wrmsr(CPU_RCONF_A0_BF, msr);
-       wrmsr(CPU_RCONF_C0_DF, msr);
-       wrmsr(CPU_RCONF_E0_FF, msr);
-
-       /* Setup access to the cache for under 640K. Note MC not setup yet. */
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU0 + 0x21, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU1 + 0x21, msr);
-}
-
-static const u16 sio_init_table[] = {  // hi=data, lo=index
-       0x0707,         // select LDN 7 (GPIO, SPI, watchdog, ...)
-       0x1E2C,         // disable ATXPowerGood - will cause a reboot!
-       0x0423,         // don't delay POWerOK1/2
-       0x9072,         // watchdog triggers POWOK, counts seconds
-#if !CONFIG_USE_WATCHDOG_ON_BOOT
-       0x0073, 0x0074, // disable watchdog by setting timeout to 0
-#endif
-       0xBF25, 0x372A, 0xF326, // select GPIO function for most pins
-       0xBF27, 0xFF28, 0x2529, // (GP36=FAN_CTL3, GP13=PWROK1)
-       0x1E2C,         // VIN6=enabled?, FAN4/5 enabled, VIN7=internal, VIN3=enabled
-       0x46B8, 0x0CB9, // enable pullups
-       0x36C0,         // enable Simple-I/O for GP15,14,12,11= LIVE_LED, WD_ACTIVE, RS485_EN2,1
-       0xFFC3,         // enable Simple-I/O for GP47-40 (GPIOs on Supervisory Connector)
-       0x26C8,         // config GP15,12,11 as output; GP14 as input
-       0x2DF5,         // map Hw Monitor Thermal Output to GP55
-       0x0DF8,         // map GP LED Blinking 1 to GP15=LIVE_LED (deactivate Simple-I/O to use)
-};
-
-/* Early mainboard specific GPIO setup. */
-static void mb_gpio_init(void)
-{
-       int i;
-
-       /* Init Super I/O WDT, GPIOs. Done early, WDT init may trigger reset! */
-       it8712f_enter_conf();
-       for (i = 0; i < ARRAY_SIZE(sio_init_table); i++) {
-               u16 val = sio_init_table[i];
-               outb((u8)val, SIO_INDEX);
-               outb(val >> 8, SIO_DATA);
-       }
-       it8712f_exit_conf();
-}
-
-void cache_as_ram_main(void)
-{
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /*
-        * Note: must do this AFTER the early_setup! It is counting on some
-        * early MSR setup for CS5536.
-        */
-       it8712f_enable_serial(0, CONFIG_TTYS0_BASE); // Does not use its 1st parameter
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Check memory. */
-       /* ram_check(0x00000000, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
-       return;
-}
diff --git a/src/mainboard/lippert/roadrunner-lx/romstage.c b/src/mainboard/lippert/roadrunner-lx/romstage.c
new file mode 100644 (file)
index 0000000..e8cfee5
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 LiPPERT Embedded Computers GmbH
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+/* Based on romstage.c from AMD's DB800 and DBM690T mainboards. */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#define ManualConf 1           /* No automatic strapped PLL config */
+#define PLLMSRhi 0x0000049C    /* Manual settings for the PLL */
+#define PLLMSRlo 0x00DE6001
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       if (device != DIMM0)
+               return 0xFF;    /* No DIMM1, don't even try. */
+
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+
+       /* Setup access to the cache for under 1MB. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x1000A000;    /* 0-A0000 write back */
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x0;           /* Write back */
+       msr.lo = 0x0;
+       wrmsr(CPU_RCONF_A0_BF, msr);
+       wrmsr(CPU_RCONF_C0_DF, msr);
+       wrmsr(CPU_RCONF_E0_FF, msr);
+
+       /* Setup access to the cache for under 640K. Note MC not setup yet. */
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU0 + 0x21, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU1 + 0x21, msr);
+}
+
+static const u16 sio_init_table[] = {  // hi=data, lo=index
+       0x0707,         // select LDN 7 (GPIO, SPI, watchdog, ...)
+       0x1E2C,         // disable ATXPowerGood - will cause a reboot!
+       0x0423,         // don't delay POWerOK1/2
+       0x9072,         // watchdog triggers POWOK, counts seconds
+#if !CONFIG_USE_WATCHDOG_ON_BOOT
+       0x0073, 0x0074, // disable watchdog by setting timeout to 0
+#endif
+       0xBF25, 0x372A, 0xF326, // select GPIO function for most pins
+       0xBF27, 0xFF28, 0x2529, // (GP36=FAN_CTL3, GP13=PWROK1)
+       0x1E2C,         // VIN6=enabled?, FAN4/5 enabled, VIN7=internal, VIN3=enabled
+       0x46B8, 0x0CB9, // enable pullups
+       0x36C0,         // enable Simple-I/O for GP15,14,12,11= LIVE_LED, WD_ACTIVE, RS485_EN2,1
+       0xFFC3,         // enable Simple-I/O for GP47-40 (GPIOs on Supervisory Connector)
+       0x26C8,         // config GP15,12,11 as output; GP14 as input
+       0x2DF5,         // map Hw Monitor Thermal Output to GP55
+       0x0DF8,         // map GP LED Blinking 1 to GP15=LIVE_LED (deactivate Simple-I/O to use)
+};
+
+/* Early mainboard specific GPIO setup. */
+static void mb_gpio_init(void)
+{
+       int i;
+
+       /* Init Super I/O WDT, GPIOs. Done early, WDT init may trigger reset! */
+       it8712f_enter_conf();
+       for (i = 0; i < ARRAY_SIZE(sio_init_table); i++) {
+               u16 val = sio_init_table[i];
+               outb((u8)val, SIO_INDEX);
+               outb(val >> 8, SIO_DATA);
+       }
+       it8712f_exit_conf();
+}
+
+void cache_as_ram_main(void)
+{
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /*
+        * Note: must do this AFTER the early_setup! It is counting on some
+        * early MSR setup for CS5536.
+        */
+       it8712f_enable_serial(0, CONFIG_TTYS0_BASE); // Does not use its 1st parameter
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Check memory. */
+       /* ram_check(0x00000000, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
+       return;
+}
index f101f22d4ecbe18a8d3e8f6ce537104ec2d389d9..0e4b263223b6ea639ec4eec47e3e59e0fb714d3f 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/build.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/build.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/lippert/spacerunner-lx/cache_as_ram_auto.c b/src/mainboard/lippert/spacerunner-lx/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9aeeb63..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- * Copyright (C) 2008 LiPPERT Embedded Computers GmbH
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-/* Based on cache_as_ram_auto.c from AMD's DB800 and DBM690T mainboards. */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdlib.h>
-#include <stdint.h>
-#include <spd.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-/* Bit0 enables Spread Spectrum, bit1 makes on-board SSD act as IDE slave. */
-#define SMC_CONFIG 0x01
-
-#define ManualConf 1           /* No automatic strapped PLL config */
-#define PLLMSRhi 0x0000059C    /* Manual settings for the PLL */
-#define PLLMSRlo 0x00DE6001
-#define DIMM0 0xA0
-#define DIMM1 0xA2
-
-static const unsigned char spdbytes[] = {      // 4x Promos V58C2512164SA-J5I
-       0xFF, 0xFF,                             // only values used by Geode-LX raminit.c are set
-       [SPD_MEMORY_TYPE]               = SPD_MEMORY_TYPE_SDRAM_DDR,    // (Fundamental) memory type
-       [SPD_NUM_ROWS]                  = 0x0D, // Number of row address bits [13]
-       [SPD_NUM_COLUMNS]               = 0x0A, // Number of column address bits [10]
-       [SPD_NUM_DIMM_BANKS]            = 1,    // Number of module rows (banks)
-       0xFF, 0xFF, 0xFF,
-       [SPD_MIN_CYCLE_TIME_AT_CAS_MAX] = 0x50, // SDRAM cycle time (highest CAS latency), RAS access time (tRAC) [5.0 ns in BCD]
-       0xFF, 0xFF,
-       [SPD_REFRESH]                   = 0x82, // Refresh rate/type [Self Refresh, 7.8 us]
-       [SPD_PRIMARY_SDRAM_WIDTH]       = 64,   // SDRAM width (primary SDRAM) [64 bits]
-       0xFF, 0xFF, 0xFF,
-       [SPD_NUM_BANKS_PER_SDRAM]       = 4,    // SDRAM device attributes, number of banks on SDRAM device
-       [SPD_ACCEPTABLE_CAS_LATENCIES]  = 0x1C, // SDRAM device attributes, CAS latency [3, 2.5, 2]
-       0xFF, 0xFF,
-       [SPD_MODULE_ATTRIBUTES]         = 0x20, // SDRAM module attributes [differential clk]
-       [SPD_DEVICE_ATTRIBUTES_GENERAL] = 0x40, // SDRAM device attributes, general [Concurrent AP]
-       [SPD_SDRAM_CYCLE_TIME_2ND]      = 0x60, // SDRAM cycle time (2nd highest CAS latency) [6.0 ns in BCD]
-       0xFF,
-       [SPD_SDRAM_CYCLE_TIME_3RD]      = 0x75, // SDRAM cycle time (3rd highest CAS latency) [7.5 ns in BCD]
-       0xFF,
-       [SPD_tRP]                       = 60,   // Min. row precharge time [15 ns in units of 0.25 ns]
-       [SPD_tRRD]                      = 40,   // Min. row active to row active [10 ns in units of 0.25 ns]
-       [SPD_tRCD]                      = 60,   // Min. RAS to CAS delay [15 ns in units of 0.25 ns]
-       [SPD_tRAS]                      = 40,   // Min. RAS pulse width = active to precharge delay [40 ns]
-       [SPD_BANK_DENSITY]              = 0x40, // Density of each row on module [256 MB]
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       [SPD_tRFC]                      = 70    // SDRAM Device Minimum Auto Refresh to Active/Auto Refresh [70 ns]
-};
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       if (device != DIMM0)
-               return 0xFF;    /* No DIMM1, don't even try. */
-
-#if CONFIG_DEBUG
-       if (address >= sizeof(spdbytes) || spdbytes[address] == 0xFF) {
-               print_err("ERROR: spd_read_byte(DIMM0, 0x");
-               print_err_hex8(address);
-               print_err(") returns 0xff\r\n");
-       }
-#endif
-
-       /* Fake SPD ROM value */
-       return (address < sizeof(spdbytes)) ? spdbytes[address] : 0xFF;
-}
-
-/* Send config data to System Management Controller via SMB. */
-static int smc_send_config(unsigned char config_data)
-{
-       if (smbus_check_stop_condition(SMBUS_IO_BASE))
-               return 1;
-       if (smbus_start_condition(SMBUS_IO_BASE))
-               return 2;
-       if (smbus_send_slave_address(SMBUS_IO_BASE, 0x50)) // SMC address
-               return 3;
-       if (smbus_send_command(SMBUS_IO_BASE, 0x28)) // set config data
-               return 4;
-       if (smbus_send_command(SMBUS_IO_BASE, 0x01)) // data length
-               return 5;
-       if (smbus_send_command(SMBUS_IO_BASE, config_data))
-               return 6;
-       smbus_stop_condition(SMBUS_IO_BASE);
-       return 0;
-}
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-
-       /* Setup access to the cache for under 1MB. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x1000A000;    /* 0-A0000 write back */
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x0;           /* Write back */
-       msr.lo = 0x0;
-       wrmsr(CPU_RCONF_A0_BF, msr);
-       wrmsr(CPU_RCONF_C0_DF, msr);
-       wrmsr(CPU_RCONF_E0_FF, msr);
-
-       /* Setup access to the cache for under 640K. Note MC not setup yet. */
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU0 + 0x21, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff80;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0x80fffe0;
-       wrmsr(MSR_GLIU1 + 0x21, msr);
-}
-
-static const u16 sio_init_table[] = { // hi=data, lo=index
-       0x0707,         // select LDN 7 (GPIO, SPI, watchdog, ...)
-       0x1E2C,         // disable ATXPowerGood
-       0x0423,         // don't delay POWerOK1/2
-       0x9072,         // watchdog triggers POWOK, counts seconds
-#if !CONFIG_USE_WATCHDOG_ON_BOOT
-       0x0073, 0x0074, // disable watchdog by setting timeout to 0
-#endif
-       0xBF25, 0x172A, 0xF326, // select GPIO function for most pins
-       0xFF27, 0xDF28, 0x2729, // (GP45=SUSB, GP23,22,16,15=SPI, GP13=PWROK1)
-       0x072C,         // VIN6=enabled?, FAN4/5 disabled, VIN7=internal, VIN3=internal
-       0x66B8, 0x0CB9, // enable pullups
-       0x07C0,         // enable Simple-I/O for GP12-10= RS485_EN2,1, LIVE_LED
-       0x07C8,         // config GP12-10 as output
-       0x2DF5,         // map Hw Monitor Thermal Output to GP55
-       0x08F8,         // map GP LED Blinking 1 to GP10=LIVE_LED (deactivate Simple I/O to use)
-};
-
-/* Early mainboard specific GPIO setup. */
-static void mb_gpio_init(void)
-{
-       int i;
-
-       /* Init Super I/O WDT, GPIOs. Done early, WDT init may trigger reset! */
-       it8712f_enter_conf();
-       for (i = 0; i < ARRAY_SIZE(sio_init_table); i++) {
-               u16 val = sio_init_table[i];
-               outb((u8)val, SIO_INDEX);
-               outb(val >> 8, SIO_DATA);
-       }
-       it8712f_exit_conf();
-}
-
-void cache_as_ram_main(void)
-{
-       int err;
-       POST_CODE(0x01);
-
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /*
-        * Note: Must do this AFTER the early_setup! It is counting on some
-        * early MSR setup for CS5536.
-        */
-       it8712f_enable_serial(0, CONFIG_TTYS0_BASE); // Does not use its 1st parameter
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       /* bit1 = on-board IDE is slave, bit0 = Spread Spectrum */
-       if ((err = smc_send_config(SMC_CONFIG))) {
-               print_err("ERROR ");
-               print_err_char('0'+err);
-               print_err(" sending config data to SMC\r\n");
-       }
-
-       sdram_initialize(1, memctrl);
-
-       /* Check memory. */
-       /* ram_check(0, 640 * 1024); */
-
-       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
-       return;
-}
diff --git a/src/mainboard/lippert/spacerunner-lx/romstage.c b/src/mainboard/lippert/spacerunner-lx/romstage.c
new file mode 100644 (file)
index 0000000..54d7113
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008 LiPPERT Embedded Computers GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+/* Based on romstage.c from AMD's DB800 and DBM690T mainboards. */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <spd.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+/* Bit0 enables Spread Spectrum, bit1 makes on-board SSD act as IDE slave. */
+#define SMC_CONFIG 0x01
+
+#define ManualConf 1           /* No automatic strapped PLL config */
+#define PLLMSRhi 0x0000059C    /* Manual settings for the PLL */
+#define PLLMSRlo 0x00DE6001
+#define DIMM0 0xA0
+#define DIMM1 0xA2
+
+static const unsigned char spdbytes[] = {      // 4x Promos V58C2512164SA-J5I
+       0xFF, 0xFF,                             // only values used by Geode-LX raminit.c are set
+       [SPD_MEMORY_TYPE]               = SPD_MEMORY_TYPE_SDRAM_DDR,    // (Fundamental) memory type
+       [SPD_NUM_ROWS]                  = 0x0D, // Number of row address bits [13]
+       [SPD_NUM_COLUMNS]               = 0x0A, // Number of column address bits [10]
+       [SPD_NUM_DIMM_BANKS]            = 1,    // Number of module rows (banks)
+       0xFF, 0xFF, 0xFF,
+       [SPD_MIN_CYCLE_TIME_AT_CAS_MAX] = 0x50, // SDRAM cycle time (highest CAS latency), RAS access time (tRAC) [5.0 ns in BCD]
+       0xFF, 0xFF,
+       [SPD_REFRESH]                   = 0x82, // Refresh rate/type [Self Refresh, 7.8 us]
+       [SPD_PRIMARY_SDRAM_WIDTH]       = 64,   // SDRAM width (primary SDRAM) [64 bits]
+       0xFF, 0xFF, 0xFF,
+       [SPD_NUM_BANKS_PER_SDRAM]       = 4,    // SDRAM device attributes, number of banks on SDRAM device
+       [SPD_ACCEPTABLE_CAS_LATENCIES]  = 0x1C, // SDRAM device attributes, CAS latency [3, 2.5, 2]
+       0xFF, 0xFF,
+       [SPD_MODULE_ATTRIBUTES]         = 0x20, // SDRAM module attributes [differential clk]
+       [SPD_DEVICE_ATTRIBUTES_GENERAL] = 0x40, // SDRAM device attributes, general [Concurrent AP]
+       [SPD_SDRAM_CYCLE_TIME_2ND]      = 0x60, // SDRAM cycle time (2nd highest CAS latency) [6.0 ns in BCD]
+       0xFF,
+       [SPD_SDRAM_CYCLE_TIME_3RD]      = 0x75, // SDRAM cycle time (3rd highest CAS latency) [7.5 ns in BCD]
+       0xFF,
+       [SPD_tRP]                       = 60,   // Min. row precharge time [15 ns in units of 0.25 ns]
+       [SPD_tRRD]                      = 40,   // Min. row active to row active [10 ns in units of 0.25 ns]
+       [SPD_tRCD]                      = 60,   // Min. RAS to CAS delay [15 ns in units of 0.25 ns]
+       [SPD_tRAS]                      = 40,   // Min. RAS pulse width = active to precharge delay [40 ns]
+       [SPD_BANK_DENSITY]              = 0x40, // Density of each row on module [256 MB]
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       [SPD_tRFC]                      = 70    // SDRAM Device Minimum Auto Refresh to Active/Auto Refresh [70 ns]
+};
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       if (device != DIMM0)
+               return 0xFF;    /* No DIMM1, don't even try. */
+
+#if CONFIG_DEBUG
+       if (address >= sizeof(spdbytes) || spdbytes[address] == 0xFF) {
+               print_err("ERROR: spd_read_byte(DIMM0, 0x");
+               print_err_hex8(address);
+               print_err(") returns 0xff\r\n");
+       }
+#endif
+
+       /* Fake SPD ROM value */
+       return (address < sizeof(spdbytes)) ? spdbytes[address] : 0xFF;
+}
+
+/* Send config data to System Management Controller via SMB. */
+static int smc_send_config(unsigned char config_data)
+{
+       if (smbus_check_stop_condition(SMBUS_IO_BASE))
+               return 1;
+       if (smbus_start_condition(SMBUS_IO_BASE))
+               return 2;
+       if (smbus_send_slave_address(SMBUS_IO_BASE, 0x50)) // SMC address
+               return 3;
+       if (smbus_send_command(SMBUS_IO_BASE, 0x28)) // set config data
+               return 4;
+       if (smbus_send_command(SMBUS_IO_BASE, 0x01)) // data length
+               return 5;
+       if (smbus_send_command(SMBUS_IO_BASE, config_data))
+               return 6;
+       smbus_stop_condition(SMBUS_IO_BASE);
+       return 0;
+}
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+
+       /* Setup access to the cache for under 1MB. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x1000A000;    /* 0-A0000 write back */
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x0;           /* Write back */
+       msr.lo = 0x0;
+       wrmsr(CPU_RCONF_A0_BF, msr);
+       wrmsr(CPU_RCONF_C0_DF, msr);
+       wrmsr(CPU_RCONF_E0_FF, msr);
+
+       /* Setup access to the cache for under 640K. Note MC not setup yet. */
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU0 + 0x21, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff80;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0x80fffe0;
+       wrmsr(MSR_GLIU1 + 0x21, msr);
+}
+
+static const u16 sio_init_table[] = { // hi=data, lo=index
+       0x0707,         // select LDN 7 (GPIO, SPI, watchdog, ...)
+       0x1E2C,         // disable ATXPowerGood
+       0x0423,         // don't delay POWerOK1/2
+       0x9072,         // watchdog triggers POWOK, counts seconds
+#if !CONFIG_USE_WATCHDOG_ON_BOOT
+       0x0073, 0x0074, // disable watchdog by setting timeout to 0
+#endif
+       0xBF25, 0x172A, 0xF326, // select GPIO function for most pins
+       0xFF27, 0xDF28, 0x2729, // (GP45=SUSB, GP23,22,16,15=SPI, GP13=PWROK1)
+       0x072C,         // VIN6=enabled?, FAN4/5 disabled, VIN7=internal, VIN3=internal
+       0x66B8, 0x0CB9, // enable pullups
+       0x07C0,         // enable Simple-I/O for GP12-10= RS485_EN2,1, LIVE_LED
+       0x07C8,         // config GP12-10 as output
+       0x2DF5,         // map Hw Monitor Thermal Output to GP55
+       0x08F8,         // map GP LED Blinking 1 to GP10=LIVE_LED (deactivate Simple I/O to use)
+};
+
+/* Early mainboard specific GPIO setup. */
+static void mb_gpio_init(void)
+{
+       int i;
+
+       /* Init Super I/O WDT, GPIOs. Done early, WDT init may trigger reset! */
+       it8712f_enter_conf();
+       for (i = 0; i < ARRAY_SIZE(sio_init_table); i++) {
+               u16 val = sio_init_table[i];
+               outb((u8)val, SIO_INDEX);
+               outb(val >> 8, SIO_DATA);
+       }
+       it8712f_exit_conf();
+}
+
+void cache_as_ram_main(void)
+{
+       int err;
+       POST_CODE(0x01);
+
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {(0xa << 3) | 0, (0xa << 3) | 1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /*
+        * Note: Must do this AFTER the early_setup! It is counting on some
+        * early MSR setup for CS5536.
+        */
+       it8712f_enable_serial(0, CONFIG_TTYS0_BASE); // Does not use its 1st parameter
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       /* bit1 = on-board IDE is slave, bit0 = Spread Spectrum */
+       if ((err = smc_send_config(SMC_CONFIG))) {
+               print_err("ERROR ");
+               print_err_char('0'+err);
+               print_err(" sending config data to SMC\r\n");
+       }
+
+       sdram_initialize(1, memctrl);
+
+       /* Check memory. */
+       /* ram_check(0, 640 * 1024); */
+
+       /* Memory is setup. Return to cache_as_ram.inc and continue to boot. */
+       return;
+}
diff --git a/src/mainboard/mitac/6513wu/auto.c b/src/mainboard/mitac/6513wu/auto.c
deleted file mode 100644 (file)
index 6222ea8..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 Michael Gold <mgold@ncf.ca>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "northbridge/intel/i82810/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x4e, SMSCSUPERIO_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i82810/raminit.c"
-/* #include "northbridge/intel/i82810/debug.c" */
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       report_bist_failure(bist);
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/mitac/6513wu/romstage.c b/src/mainboard/mitac/6513wu/romstage.c
new file mode 100644 (file)
index 0000000..6222ea8
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 Michael Gold <mgold@ncf.ca>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "northbridge/intel/i82810/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x4e, SMSCSUPERIO_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i82810/raminit.c"
+/* #include "northbridge/intel/i82810/debug.c" */
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       report_bist_failure(bist);
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/msi/ms6119/auto.c b/src/mainboard/msi/ms6119/auto.c
deleted file mode 100644 (file)
index 942fdfb..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/msi/ms6119/romstage.c b/src/mainboard/msi/ms6119/romstage.c
new file mode 100644 (file)
index 0000000..942fdfb
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/msi/ms6147/auto.c b/src/mainboard/msi/ms6147/auto.c
deleted file mode 100644 (file)
index 5aec34a..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Mats Erik Andersson <mats.andersson@gisladisker.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include <cpu/x86/bist.h>
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-/* #include "northbridge/intel/i440bx/debug.c" */
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-#if 0
-       ram_check(0, 640 * 1024);          /* DOS-area */
-       ram_check(0x00100000, 0x00400000); /* 1MB to 4MB */
-       ram_check(0x00100000, 0x03ffffff); /* 1MB to 64MB- */
-       ram_check(0x03fff000, 0x04000010); /* Across 64MB boundary */
-       ram_check(0x07ffff00, 0x07fffff0); /* Just below 128MB */
-       ram_check(0x00100000, 0x07ffffff); /* 1MB to 128MB- */
-#endif
-}
diff --git a/src/mainboard/msi/ms6147/romstage.c b/src/mainboard/msi/ms6147/romstage.c
new file mode 100644 (file)
index 0000000..5aec34a
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Mats Erik Andersson <mats.andersson@gisladisker.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include <cpu/x86/bist.h>
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+/* #include "northbridge/intel/i440bx/debug.c" */
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+#if 0
+       ram_check(0, 640 * 1024);          /* DOS-area */
+       ram_check(0x00100000, 0x00400000); /* 1MB to 4MB */
+       ram_check(0x00100000, 0x03ffffff); /* 1MB to 64MB- */
+       ram_check(0x03fff000, 0x04000010); /* Across 64MB boundary */
+       ram_check(0x07ffff00, 0x07fffff0); /* Just below 128MB */
+       ram_check(0x00100000, 0x07ffffff); /* 1MB to 128MB- */
+#endif
+}
diff --git a/src/mainboard/msi/ms6156/auto.c b/src/mainboard/msi/ms6156/auto.c
deleted file mode 100644 (file)
index 78d133b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/msi/ms6156/romstage.c b/src/mainboard/msi/ms6156/romstage.c
new file mode 100644 (file)
index 0000000..78d133b
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/winbond/w83977tf/w83977tf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x3f0, W83977TF_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       w83977tf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/msi/ms6178/auto.c b/src/mainboard/msi/ms6178/auto.c
deleted file mode 100644 (file)
index a320dde..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "northbridge/intel/i82810/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "pc80/udelay_io.c"
-#include "lib/debug.c"
-#include "northbridge/intel/i82810/raminit.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* FIXME */
-       outb(0x87, 0x2e);
-       outb(0x87, 0x2e);
-       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       outb(0x87, 0xaa);
-
-       uart_init();
-       console_init();
-
-       enable_smbus();
-
-       report_bist_failure(bist);
-
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/msi/ms6178/romstage.c b/src/mainboard/msi/ms6178/romstage.c
new file mode 100644 (file)
index 0000000..a320dde
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "northbridge/intel/i82810/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "pc80/udelay_io.c"
+#include "lib/debug.c"
+#include "northbridge/intel/i82810/raminit.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* FIXME */
+       outb(0x87, 0x2e);
+       outb(0x87, 0x2e);
+       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       outb(0x87, 0xaa);
+
+       uart_init();
+       console_init();
+
+       enable_smbus();
+
+       report_bist_failure(bist);
+
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/msi/ms7135/cache_as_ram_auto.c b/src/mainboard/msi/ms7135/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 6616dc1..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
- * Copyright (C) 2007 Philipp Degler <pdegler@rumms.uni-mannheim.de>
- * (Thanks to LSRA University of Mannheim for their support)
- * Copyright (C) 2008 Jonathan A. Kollasch <jakllsch@kollasch.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define SERIAL_DEV PNP_DEV(0x4e, W83627HF_SP1)
-
-/* Used by raminit. */
-#define QRANK_DIMM_SUPPORT 1
-
-/* Turn this on for SMBus debugging output. */
-#define DEBUG_SMBUS 0
-
-#if CONFIG_LOGICAL_CPUS == 1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-
-/* Used by ck804_early_setup(). */
-#define CK804_NUM 1
-#define CK804_USE_NIC 1
-#define CK804_USE_ACI 1
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "cpu/amd/dualcore/dualcore.c"
-
-static void memreset_setup(void)
-{
-       /* FIXME: Nothing to do? */
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       /* FIXME: Nothing to do? */
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* FIXME: Nothing to do? */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "lib/generic_sdram.c"
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#endif /* CONFIG_USE_FAILOVER_IMAGE */
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) \
-       || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       /* Subject decoding */
-       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b, byte);
-
-       /* LPC Positive Decode 0 */
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0);
-       /* Serial 0, Serial 1 */
-       dword |= (1 << 0) | (1 << 1);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a CPU only reset? Or is this a secondary CPU? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the ck804 */
-       ck804_enable_rom();
-
-       /* Is this a deliberate reset by the BIOS? */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-
-       /* This is the primary CPU. How should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-
-normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               :                                       /* outputs */
-               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
-               );
-
-fallback_image:
-
-#if CONFIG_HAVE_FAILOVER_BOOT == 1
-       __asm__ volatile ("jmp __fallback_image"
-               :                                       /* outputs */
-               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
-               )
-#endif
-       ;
-}
-
-#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) ... */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT == 1
-#if CONFIG_USE_FAILOVER_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#else
-       real_main(bist, cpu_init_detectedx);
-#endif
-#else
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               (0xa << 3) | 0, (0xa << 3) | 1, 0, 0,
-               0, 0, 0, 0,
-               0, 0, 0, 0,
-               0, 0, 0, 0,
-       };
-
-       int needs_reset;
-       unsigned bsp_apicid = 0;
-
-       struct mem_controller ctrl[8];
-       unsigned nodes;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-       }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x18, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       needs_reset |= ht_setup_chains_x();
-
-       needs_reset |= ck804_early_setup_x();
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-       //It's the time to set ctrl now;
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       dump_spd_registers(&ctrl[0]);
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-#if 0
-       print_pci_devices();
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-}
-#endif /* CONFIG_USE_FAILOVER_IMAGE */
diff --git a/src/mainboard/msi/ms7135/romstage.c b/src/mainboard/msi/ms7135/romstage.c
new file mode 100644 (file)
index 0000000..6616dc1
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * (Written by Yinghai Lu <yinghailu@amd.com> for AMD)
+ * Copyright (C) 2007 Philipp Degler <pdegler@rumms.uni-mannheim.de>
+ * (Thanks to LSRA University of Mannheim for their support)
+ * Copyright (C) 2008 Jonathan A. Kollasch <jakllsch@kollasch.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define SERIAL_DEV PNP_DEV(0x4e, W83627HF_SP1)
+
+/* Used by raminit. */
+#define QRANK_DIMM_SUPPORT 1
+
+/* Turn this on for SMBus debugging output. */
+#define DEBUG_SMBUS 0
+
+#if CONFIG_LOGICAL_CPUS == 1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+
+/* Used by ck804_early_setup(). */
+#define CK804_NUM 1
+#define CK804_USE_NIC 1
+#define CK804_USE_ACI 1
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "cpu/amd/dualcore/dualcore.c"
+
+static void memreset_setup(void)
+{
+       /* FIXME: Nothing to do? */
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       /* FIXME: Nothing to do? */
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* FIXME: Nothing to do? */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "lib/generic_sdram.c"
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#endif /* CONFIG_USE_FAILOVER_IMAGE */
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) \
+       || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       /* Subject decoding */
+       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0x7b, byte);
+
+       /* LPC Positive Decode 0 */
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0);
+       /* Serial 0, Serial 1 */
+       dword |= (1 << 0) | (1 << 1);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE + 1, 0), 0xa0, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a CPU only reset? Or is this a secondary CPU? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the ck804 */
+       ck804_enable_rom();
+
+       /* Is this a deliberate reset by the BIOS? */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+
+       /* This is the primary CPU. How should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+
+normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               :                                       /* outputs */
+               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
+               );
+
+fallback_image:
+
+#if CONFIG_HAVE_FAILOVER_BOOT == 1
+       __asm__ volatile ("jmp __fallback_image"
+               :                                       /* outputs */
+               :"a" (bist), "b"(cpu_init_detectedx)    /* inputs */
+               )
+#endif
+       ;
+}
+
+#endif /* ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) ... */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT == 1
+#if CONFIG_USE_FAILOVER_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#else
+       real_main(bist, cpu_init_detectedx);
+#endif
+#else
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               (0xa << 3) | 0, (0xa << 3) | 1, 0, 0,
+               0, 0, 0, 0,
+               0, 0, 0, 0,
+               0, 0, 0, 0,
+       };
+
+       int needs_reset;
+       unsigned bsp_apicid = 0;
+
+       struct mem_controller ctrl[8];
+       unsigned nodes;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+       }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x18, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       needs_reset |= ht_setup_chains_x();
+
+       needs_reset |= ck804_early_setup_x();
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+       //It's the time to set ctrl now;
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       dump_spd_registers(&ctrl[0]);
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+#if 0
+       print_pci_devices();
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+}
+#endif /* CONFIG_USE_FAILOVER_IMAGE */
index 6fec80a18b91bc5e29c45ca6f6fb0d866b0a28d3..fa88bc0d9292be1c40bcfb44f801bbb8e6e69170 100644 (file)
@@ -25,7 +25,7 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
@@ -35,7 +35,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,11 +55,11 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/msi/ms7260/cache_as_ram_auto.c b/src/mainboard/msi/ms7260/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 7a8bf13..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-// #define CACHE_AS_RAM_ADDRESS_DEBUG 1
-// #define DEBUG_SMBUS 1
-// #define RAM_TIMING_DEBUG 1
-// #define DQS_TRAIN_DEBUG 1
-// #define RES_DEBUG 1
-
-#define RAMINIT_SYSINFO 1
-#define K8_ALLOCATE_IO_RANGE 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS == 1
-#define SET_NB_CFG_54 1
-#endif
-
-/* Used by init_cpus and fidvid. */
-#define K8_SET_FIDVID 1
-
-/* If we want to wait for core1 done before DQS training, set it to 0. */
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-
-#include "cpu/x86/bist.h"
-#include "northbridge/amd/amdk8/debug.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-/* Yes, on the MSI K9N Neo (MS-7260) the Super I/O is at 0x4e! */
-#define SERIAL_DEV PNP_DEV(0x4e, W83627EHG_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void) {}
-static void memreset(int controllers, const struct mem_controller *ctrl) {}
-static inline void activate_spd_rom(const struct mem_controller *ctrl) {}
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-#define MCP55_PCI_E_X_0 0
-
-#define MCP55_MB_SETUP \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-#include "cpu/amd/model_fxx/init_cpus.c"
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-       uint32_t dword;
-       uint8_t byte;
-
-       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0);
-       dword |= (1 << 0);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4);
-       dword |= (1 << 16);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned int last_boot_normal_x = last_boot_normal();
-
-       /* Is this a CPU only reset? Or is this a secondary CPU? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x)
-                       goto normal_image;
-               else
-                       goto fallback_image;
-       }
-
-       /* Nothing special needs to be done to find bus 0. */
-       /* Allow the HT devices to be found. */
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the MCP55. */
-       mcp55_enable_rom();
-
-       /* Is this a deliberate reset by the BIOS? */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary CPU. How should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-
-normal_image:
-       __asm__ volatile ("jmp __normal_image":
-                         :"a" (bist), "b"(cpu_init_detectedx)
-       );
-
-fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image":
-                         :"a" (bist), "b"(cpu_init_detectedx)
-       )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT == 1
-#if CONFIG_USE_FAILOVER_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#else
-       real_main(bist, cpu_init_detectedx);
-#endif
-#else
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE == 0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
-               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
-               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
-#endif
-       };
-
-       struct sys_info *sysinfo =
-           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-       int needs_reset = 0;
-       unsigned bsp_apicid = 0;
-
-       if (bist == 0)
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-
-       /* FIXME: This should be part of the Super I/O code/config. */
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       /* Switch CLKSEL to 24MHz (default is 48MHz). Needed for serial! */
-       pnp_write_config(SERIAL_DEV, 0x24, 0);
-       w83627ehg_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-       setup_mb_resource_map();
-       uart_init();
-       report_bist_failure(bist); /* Halt upon BIST failure. */
-#if CONFIG_USBDEBUG_DIRECT
-       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-       console_init();
-
-       print_debug("*sysinfo range: [");
-       print_debug_hex32(sysinfo);
-       print_debug(",");
-       print_debug_hex32((unsigned long)sysinfo + sizeof(struct sys_info));
-       print_debug(")\r\n");
-
-       print_debug("bsp_apicid=");
-       print_debug_hex8(bsp_apicid);
-       print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-       /* In BSP so could hold all AP until sysinfo is in RAM. */
-       set_sysinfo_in_ram(0);
-#endif
-
-       setup_coherent_ht_domain(); /* Routing table and start other core0. */
-       wait_all_core0_started();
-
-#if CONFIG_LOGICAL_CPUS == 1
-       /* It is said that we should start core1 after all core0 launched
-        * becase optimize_link_coherent_ht is moved out from
-        * setup_coherent_ht_domain, so here need to make sure last core0 is
-        * started, esp for two way system (there may be APIC ID conflicts in
-        * that case).
-        */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* Set up chains and store link pair for optimization later. */
-       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
-
-#if K8_SET_FIDVID == 1
-       {
-               msr_t msr = rdmsr(0xc0010042);
-               print_debug("begin msr fid, vid ");
-               print_debug_hex32(msr.hi);
-               print_debug_hex32(msr.lo);
-               print_debug("\r\n");
-       }
-
-       enable_fid_change();
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-       init_fidvid_bsp(bsp_apicid);
-
-       {
-               msr_t msr = rdmsr(0xc0010042);
-               print_debug("end   msr fid, vid ");
-               print_debug_hex32(msr.hi);
-               print_debug_hex32(msr.lo);
-               print_debug("\r\n");
-       }
-#endif
-
-       needs_reset |= optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       needs_reset |= mcp55_early_setup_x();
-
-       /* 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();
-       }
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl in sysinfo now. */
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-
-       /* Do we need apci timer, tsc...., only debug need it for better output */
-       /* All AP stopped? */
-       // init_timer(); /* Need to use TMICT to synconize FID/VID. */
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       /* bsp switch stack to RAM and copy sysinfo RAM now. */
-       post_cache_as_ram();
-}
-
-#endif
diff --git a/src/mainboard/msi/ms7260/romstage.c b/src/mainboard/msi/ms7260/romstage.c
new file mode 100644 (file)
index 0000000..7a8bf13
--- /dev/null
@@ -0,0 +1,342 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+// #define CACHE_AS_RAM_ADDRESS_DEBUG 1
+// #define DEBUG_SMBUS 1
+// #define RAM_TIMING_DEBUG 1
+// #define DQS_TRAIN_DEBUG 1
+// #define RES_DEBUG 1
+
+#define RAMINIT_SYSINFO 1
+#define K8_ALLOCATE_IO_RANGE 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS == 1
+#define SET_NB_CFG_54 1
+#endif
+
+/* Used by init_cpus and fidvid. */
+#define K8_SET_FIDVID 1
+
+/* If we want to wait for core1 done before DQS training, set it to 0. */
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+
+#include "cpu/x86/bist.h"
+#include "northbridge/amd/amdk8/debug.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+/* Yes, on the MSI K9N Neo (MS-7260) the Super I/O is at 0x4e! */
+#define SERIAL_DEV PNP_DEV(0x4e, W83627EHG_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void) {}
+static void memreset(int controllers, const struct mem_controller *ctrl) {}
+static inline void activate_spd_rom(const struct mem_controller *ctrl) {}
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+#define MCP55_PCI_E_X_0 0
+
+#define MCP55_MB_SETUP \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+        RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+#include "cpu/amd/model_fxx/init_cpus.c"
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+       uint32_t dword;
+       uint8_t byte;
+
+       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0);
+       dword |= (1 << 0);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4);
+       dword |= (1 << 16);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned int last_boot_normal_x = last_boot_normal();
+
+       /* Is this a CPU only reset? Or is this a secondary CPU? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x)
+                       goto normal_image;
+               else
+                       goto fallback_image;
+       }
+
+       /* Nothing special needs to be done to find bus 0. */
+       /* Allow the HT devices to be found. */
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the MCP55. */
+       mcp55_enable_rom();
+
+       /* Is this a deliberate reset by the BIOS? */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary CPU. How should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+
+normal_image:
+       __asm__ volatile ("jmp __normal_image":
+                         :"a" (bist), "b"(cpu_init_detectedx)
+       );
+
+fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image":
+                         :"a" (bist), "b"(cpu_init_detectedx)
+       )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT == 1
+#if CONFIG_USE_FAILOVER_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#else
+       real_main(bist, cpu_init_detectedx);
+#endif
+#else
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE == 0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+               (0xa << 3) | 0, (0xa << 3) | 2, 0, 0,
+               (0xa << 3) | 1, (0xa << 3) | 3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa << 3) | 4, (0xa << 3) | 6, 0, 0,
+               (0xa << 3) | 5, (0xa << 3) | 7, 0, 0,
+#endif
+       };
+
+       struct sys_info *sysinfo =
+           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+       int needs_reset = 0;
+       unsigned bsp_apicid = 0;
+
+       if (bist == 0)
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+
+       /* FIXME: This should be part of the Super I/O code/config. */
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       /* Switch CLKSEL to 24MHz (default is 48MHz). Needed for serial! */
+       pnp_write_config(SERIAL_DEV, 0x24, 0);
+       w83627ehg_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+       setup_mb_resource_map();
+       uart_init();
+       report_bist_failure(bist); /* Halt upon BIST failure. */
+#if CONFIG_USBDEBUG_DIRECT
+       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+       console_init();
+
+       print_debug("*sysinfo range: [");
+       print_debug_hex32(sysinfo);
+       print_debug(",");
+       print_debug_hex32((unsigned long)sysinfo + sizeof(struct sys_info));
+       print_debug(")\r\n");
+
+       print_debug("bsp_apicid=");
+       print_debug_hex8(bsp_apicid);
+       print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+       /* In BSP so could hold all AP until sysinfo is in RAM. */
+       set_sysinfo_in_ram(0);
+#endif
+
+       setup_coherent_ht_domain(); /* Routing table and start other core0. */
+       wait_all_core0_started();
+
+#if CONFIG_LOGICAL_CPUS == 1
+       /* It is said that we should start core1 after all core0 launched
+        * becase optimize_link_coherent_ht is moved out from
+        * setup_coherent_ht_domain, so here need to make sure last core0 is
+        * started, esp for two way system (there may be APIC ID conflicts in
+        * that case).
+        */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* Set up chains and store link pair for optimization later. */
+       ht_setup_chains_x(sysinfo); /* Init sblnk and sbbusn, nodes, sbdn. */
+
+#if K8_SET_FIDVID == 1
+       {
+               msr_t msr = rdmsr(0xc0010042);
+               print_debug("begin msr fid, vid ");
+               print_debug_hex32(msr.hi);
+               print_debug_hex32(msr.lo);
+               print_debug("\r\n");
+       }
+
+       enable_fid_change();
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+       init_fidvid_bsp(bsp_apicid);
+
+       {
+               msr_t msr = rdmsr(0xc0010042);
+               print_debug("end   msr fid, vid ");
+               print_debug_hex32(msr.hi);
+               print_debug_hex32(msr.lo);
+               print_debug("\r\n");
+       }
+#endif
+
+       needs_reset |= optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       needs_reset |= mcp55_early_setup_x();
+
+       /* 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();
+       }
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl in sysinfo now. */
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+
+       /* Do we need apci timer, tsc...., only debug need it for better output */
+       /* All AP stopped? */
+       // init_timer(); /* Need to use TMICT to synconize FID/VID. */
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       /* bsp switch stack to RAM and copy sysinfo RAM now. */
+       post_cache_as_ram();
+}
+
+#endif
diff --git a/src/mainboard/msi/ms9185/cache_as_ram_auto.c b/src/mainboard/msi/ms9185/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 2558157..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 Tyan
- * Copyright (C) 2006 AMD
- * Written by Yinghai Lu <yinghailu@gmail.com> for Tyan and AMD.
- *
- * Copyright (C) 2006 MSI
- * Written by bxshi <bingxunshi@gmail.com> for MSI.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by incoherent_ht
-//#define K8_ALLOCATE_IO_RANGE 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#define DEBUG_SMBUS 1
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/nsc/pc87417/pc87417_early_serial.c"
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87417_SP1)
-#define RTC_DEV PNP_DEV(0x2e, PC87417_RTC)
-#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_SWITCH1 0x70
-#define SMBUS_SWITCH2 0x72
-        unsigned device = (ctrl->channel0[0]) >> 8;
-        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
-        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
-}
-
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_SWITCH1 0x70
-#define SMBUS_SWITCH2 0x72
-        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
-        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
-}
-#endif
-
-
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
- /* msi does not want the default */
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define RC0 (0x10<<8)
-#define RC1 (0x01<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-#define DIMM4 0x54
-#define DIMM5 0x55
-#define DIMM6 0x56
-#define DIMM7 0x57
-
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-        /* Is this a cpu only reset? Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal()) { // RTC already inited
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        bcm5785_enable_rom();
-
-        bcm5785_enable_lpc();
-
-        //enable RTC
-        pc87417_enable_dev(RTC_DEV);
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal()) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-        ;
-
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr[] = {
-                       //first node
-                        RC0|DIMM0, RC0|DIMM2, RC0|DIMM4, RC0|DIMM6,
-                        RC0|DIMM1, RC0|DIMM3, RC0|DIMM5, RC0|DIMM7,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       //second node
-                       RC1|DIMM0, RC1|DIMM2, RC1|DIMM4, RC1|DIMM6,
-                       RC1|DIMM1, RC1|DIMM3, RC1|DIMM5, RC1|DIMM7,
-#endif
-
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-//     post_code(0x32);
-
-       pc87417_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-       setup_ms9185_resource_map();
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-       setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case)
-        */
-        start_other_cores();
-//bx_a010-     wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-       bcm5785_early_setup();
-
-
-#if 0
-       //it your CPU min fid is 1G, you can change HT to 1G and FID to max one time.
-        needs_reset = optimize_link_coherent_ht();
-        needs_reset |= optimize_link_incoherent_ht(sysinfo);
-#endif
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-#endif
-
-#if 1
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        // 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();
-        }
-#endif
-       allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-       int i;
-       for(i=0;i<2;i++) {
-               activate_spd_rom(sysinfo->ctrl+i);
-               dump_smbus_registers();
-       }
-#endif
-
-#if 0
-       int i;
-        for(i=1;i<256;i<<=1) {
-                change_i2c_mux(i);
-                dump_smbus_registers();
-        }
-#endif
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-#if 0
-        print_pci_devices();
-#endif
-
-#if 0
-//        dump_pci_devices();
-        dump_pci_device_index_wait(PCI_DEV(0, 0x18, 2), 0x98);
-       dump_pci_device_index_wait(PCI_DEV(0, 0x19, 2), 0x98);
-#endif
-
-       post_cache_as_ram();
-
-
-}
diff --git a/src/mainboard/msi/ms9185/romstage.c b/src/mainboard/msi/ms9185/romstage.c
new file mode 100644 (file)
index 0000000..2558157
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Tyan
+ * Copyright (C) 2006 AMD
+ * Written by Yinghai Lu <yinghailu@gmail.com> for Tyan and AMD.
+ *
+ * Copyright (C) 2006 MSI
+ * Written by bxshi <bingxunshi@gmail.com> for MSI.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by incoherent_ht
+//#define K8_ALLOCATE_IO_RANGE 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#define DEBUG_SMBUS 1
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/broadcom/bcm5785/bcm5785_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/nsc/pc87417/pc87417_early_serial.c"
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87417_SP1)
+#define RTC_DEV PNP_DEV(0x2e, PC87417_RTC)
+#include "southbridge/broadcom/bcm5785/bcm5785_early_setup.c"
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_SWITCH1 0x70
+#define SMBUS_SWITCH2 0x72
+        unsigned device = (ctrl->channel0[0]) >> 8;
+        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
+        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
+}
+
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_SWITCH1 0x70
+#define SMBUS_SWITCH2 0x72
+        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
+        smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f );
+}
+#endif
+
+
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+ /* msi does not want the default */
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define RC0 (0x10<<8)
+#define RC1 (0x01<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+#define DIMM4 0x54
+#define DIMM5 0x55
+#define DIMM6 0x56
+#define DIMM7 0x57
+
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+        /* Is this a cpu only reset? Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal()) { // RTC already inited
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        bcm5785_enable_rom();
+
+        bcm5785_enable_lpc();
+
+        //enable RTC
+        pc87417_enable_dev(RTC_DEV);
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal()) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+        ;
+
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr[] = {
+                       //first node
+                        RC0|DIMM0, RC0|DIMM2, RC0|DIMM4, RC0|DIMM6,
+                        RC0|DIMM1, RC0|DIMM3, RC0|DIMM5, RC0|DIMM7,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       //second node
+                       RC1|DIMM0, RC1|DIMM2, RC1|DIMM4, RC1|DIMM6,
+                       RC1|DIMM1, RC1|DIMM3, RC1|DIMM5, RC1|DIMM7,
+#endif
+
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+//     post_code(0x32);
+
+       pc87417_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+       setup_ms9185_resource_map();
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+       setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case)
+        */
+        start_other_cores();
+//bx_a010-     wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+       bcm5785_early_setup();
+
+
+#if 0
+       //it your CPU min fid is 1G, you can change HT to 1G and FID to max one time.
+        needs_reset = optimize_link_coherent_ht();
+        needs_reset |= optimize_link_incoherent_ht(sysinfo);
+#endif
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+#endif
+
+#if 1
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        // 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();
+        }
+#endif
+       allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+       int i;
+       for(i=0;i<2;i++) {
+               activate_spd_rom(sysinfo->ctrl+i);
+               dump_smbus_registers();
+       }
+#endif
+
+#if 0
+       int i;
+        for(i=1;i<256;i<<=1) {
+                change_i2c_mux(i);
+                dump_smbus_registers();
+        }
+#endif
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+#if 0
+        print_pci_devices();
+#endif
+
+#if 0
+//        dump_pci_devices();
+        dump_pci_device_index_wait(PCI_DEV(0, 0x18, 2), 0x98);
+       dump_pci_device_index_wait(PCI_DEV(0, 0x19, 2), 0x98);
+#endif
+
+       post_cache_as_ram();
+
+
+}
index 9bffee7d88905e3bacf477eeac5e549bf748dc61..e46f01295ce2f736bf14f3073a573457f27686d9 100644 (file)
@@ -27,7 +27,7 @@ driver-y += ../../../drivers/i2c/adm1027/adm1027.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
@@ -37,7 +37,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -57,11 +57,11 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/msi/ms9282/cache_as_ram_auto.c b/src/mainboard/msi/ms9282/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 11c92b8..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * Copyright (C) 2006 MSI
- * Written by Bingxun Shi <bingxunshi@gmail.com> for MSI.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#define SET_NB_CFG_54 1
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#define DEBUG_SMBUS 1
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
-#define RTC_DEV PNP_DEV(0x2e, W83627EHG_RTC)
-
-#include <device/pci_ids.h>
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_SWITCH1 0x70
-#define SMBUS_SWITCH2 0x72
-        unsigned device=(ctrl->channel0[0])>>8;
-        smbus_send_byte(SMBUS_SWITCH1, device);
-       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
-}
-
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_SWITCH1 0x70
-#define SMBUS_SWITHC2 0x72
-        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
-       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
-}
-#endif
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-//#define K8_4RANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* msi does not want the default */
-#include "resourcemap.c"
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-//set GPIO to input mode
-#define MCP55_MB_SETUP \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXA_PRSNT2_L*/ \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/ \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/ \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/ \
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-
-        byte = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20;
-        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-
-
-}
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the mcp55 */
-        mcp55_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-//CPU 1 mem is on SMBUS_HUB channel 2, and CPU 2 mem is on channel 1.
-#define RC0 (2<<8)
-#define RC1 (1<<8)
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       RC0|(0xa<<3)|0, RC0|(0xa<<3)|2, RC0|(0xa<<3)|4, RC0|(0xa<<3)|6,
-                       RC0|(0xa<<3)|1, RC0|(0xa<<3)|3, RC0|(0xa<<3)|5, RC0|(0xa<<3)|7,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       RC1|(0xa<<3)|0, RC1|(0xa<<3)|2, RC1|(0xa<<3)|4, RC1|(0xa<<3)|6,
-                       RC1|(0xa<<3)|1, RC1|(0xa<<3)|3, RC1|(0xa<<3)|5, RC1|(0xa<<3)|7,
-#endif
-       };
-
-       unsigned bsp_apicid = 0;
-        int needs_reset;
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-       char *p ;
-
-        if (bist == 0) {
-               //init_cpus(cpu_init_detectedx);
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_ms9282_resource_map();
-
-       setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        //wait_all_other_cores_started(bsp_apicid);
-#endif
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-       needs_reset = optimize_link_coherent_ht();
-
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-
-        needs_reset |= mcp55_early_setup_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-#if 0
-        int i;
-        for(i=4;i<8;i++) {
-                change_i2c_mux(i);
-                dump_smbus_registers();
-        }
-#endif
-
-       memreset_setup();
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/msi/ms9282/romstage.c b/src/mainboard/msi/ms9282/romstage.c
new file mode 100644 (file)
index 0000000..11c92b8
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * Copyright (C) 2006 MSI
+ * Written by Bingxun Shi <bingxunshi@gmail.com> for MSI.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#define SET_NB_CFG_54 1
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#define DEBUG_SMBUS 1
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
+#define RTC_DEV PNP_DEV(0x2e, W83627EHG_RTC)
+
+#include <device/pci_ids.h>
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_SWITCH1 0x70
+#define SMBUS_SWITCH2 0x72
+        unsigned device=(ctrl->channel0[0])>>8;
+        smbus_send_byte(SMBUS_SWITCH1, device);
+       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
+}
+
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_SWITCH1 0x70
+#define SMBUS_SWITHC2 0x72
+        smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
+       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
+}
+#endif
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+//#define K8_4RANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* msi does not want the default */
+#include "resourcemap.c"
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+//set GPIO to input mode
+#define MCP55_MB_SETUP \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXA_PRSNT2_L*/ \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/ \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/ \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff), ((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/ \
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+
+        byte = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20;
+        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+
+
+}
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the mcp55 */
+        mcp55_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+//CPU 1 mem is on SMBUS_HUB channel 2, and CPU 2 mem is on channel 1.
+#define RC0 (2<<8)
+#define RC1 (1<<8)
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       RC0|(0xa<<3)|0, RC0|(0xa<<3)|2, RC0|(0xa<<3)|4, RC0|(0xa<<3)|6,
+                       RC0|(0xa<<3)|1, RC0|(0xa<<3)|3, RC0|(0xa<<3)|5, RC0|(0xa<<3)|7,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       RC1|(0xa<<3)|0, RC1|(0xa<<3)|2, RC1|(0xa<<3)|4, RC1|(0xa<<3)|6,
+                       RC1|(0xa<<3)|1, RC1|(0xa<<3)|3, RC1|(0xa<<3)|5, RC1|(0xa<<3)|7,
+#endif
+       };
+
+       unsigned bsp_apicid = 0;
+        int needs_reset;
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+       char *p ;
+
+        if (bist == 0) {
+               //init_cpus(cpu_init_detectedx);
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       w83627ehg_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_ms9282_resource_map();
+
+       setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        //wait_all_other_cores_started(bsp_apicid);
+#endif
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+       needs_reset = optimize_link_coherent_ht();
+
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+
+        needs_reset |= mcp55_early_setup_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+#if 0
+        int i;
+        for(i=4;i<8;i++) {
+                change_i2c_mux(i);
+                dump_smbus_registers();
+        }
+#endif
+
+       memreset_setup();
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/nec/powermate2000/auto.c b/src/mainboard/nec/powermate2000/auto.c
deleted file mode 100644 (file)
index 701e312..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-#include "northbridge/intel/i82810/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-#include "pc80/udelay_io.c"
-#include "northbridge/intel/i82810/raminit.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       enable_smbus();
-
-       report_bist_failure(bist);
-
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/nec/powermate2000/romstage.c b/src/mainboard/nec/powermate2000/romstage.c
new file mode 100644 (file)
index 0000000..701e312
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+#include "northbridge/intel/i82810/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+#include "pc80/udelay_io.c"
+#include "northbridge/intel/i82810/raminit.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       enable_smbus();
+
+       report_bist_failure(bist);
+
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/newisys/khepri/cache_as_ram_auto.c b/src/mainboard/newisys/khepri/cache_as_ram_auto.c
deleted file mode 100644 (file)
index efd2ea3..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * This code is derived from the Tyan s2882 cache_as_ram_auto.c
- * Adapted by Stefan Reinauer <stepan@coresystems.de>
- * Additional (C) 2007 coresystems GmbH 
- */
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-       if (is_cpu_pre_c0()) {
-               /* Set the memreset low */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               /* Ensure the BIOS has control of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-       else {
-               /* Ensure the CPU has controll of the memory lines */
-               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
-       }
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-       if (is_cpu_pre_c0()) {
-               udelay(800);
-               /* Set memreset_high */
-               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
-               udelay(90);
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* newisys khepri does not want the default */
-#include "resourcemap.c" 
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the amd8111 */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-
-//     post_code(0x32);
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_khepri_resource_map();
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-
-        allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-        enable_smbus();
-
-        memreset_setup();
-        sdram_initialize(nodes, ctrl);
-
-#if 0
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/newisys/khepri/romstage.c b/src/mainboard/newisys/khepri/romstage.c
new file mode 100644 (file)
index 0000000..e4c52d0
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+ * This code is derived from the Tyan s2882 romstage.c
+ * Adapted by Stefan Reinauer <stepan@coresystems.de>
+ * Additional (C) 2007 coresystems GmbH 
+ */
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+       if (is_cpu_pre_c0()) {
+               /* Set the memreset low */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               /* Ensure the BIOS has control of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+       else {
+               /* Ensure the CPU has controll of the memory lines */
+               outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 29);
+       }
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+       if (is_cpu_pre_c0()) {
+               udelay(800);
+               /* Set memreset_high */
+               outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 28);
+               udelay(90);
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* newisys khepri does not want the default */
+#include "resourcemap.c" 
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the amd8111 */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+
+//     post_code(0x32);
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_khepri_resource_map();
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+
+        allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+        enable_smbus();
+
+        memreset_setup();
+        sdram_initialize(nodes, ctrl);
+
+#if 0
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+
+}
index 7ca325a450708f3112cc5d2efbaf13bf5c5f1842..dec2de56a367ca7503294791d7847d8de514d5f8 100644 (file)
@@ -25,7 +25,7 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
@@ -36,7 +36,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/mcp55/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -50,11 +50,11 @@ endif
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/nvidia/l1_2pvv/cache_as_ram_auto.c b/src/mainboard/nvidia/l1_2pvv/cache_as_ram_auto.c
deleted file mode 100644 (file)
index ab6941f..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
-#include "superio/winbond/w83627ehg/w83627ehg_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 2
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 2
-#define MCP55_PCI_E_X_1 4
-
-#define MCP55_MB_SETUP \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-       dword |= (1<<0);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-       dword |= (1<<16);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the mcp55 */
-       mcp55_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
- normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       int needs_reset = 0;
-       unsigned bsp_apicid = 0;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       pnp_write_config(SERIAL_DEV, 0x24, 0);
-       w83627ehg_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-       setup_mb_resource_map();
-
-       uart_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-
-#if CONFIG_USBDEBUG_DIRECT
-       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-       console_init();
-       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case)
-        */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* it will set up chains and store link pair for optimization later */
-       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-       }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-       init_fidvid_bsp(bsp_apicid);
-
-       // show final fid and vid
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-       }
-#endif
-
-       needs_reset |= optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       needs_reset |= mcp55_early_setup_x();
-
-       // 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();
-       }
-       allow_all_aps_stop(bsp_apicid);
-
-       //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-       /* all ap stopped? */
-//     init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-
-#endif
diff --git a/src/mainboard/nvidia/l1_2pvv/romstage.c b/src/mainboard/nvidia/l1_2pvv/romstage.c
new file mode 100644 (file)
index 0000000..ab6941f
--- /dev/null
@@ -0,0 +1,364 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_serial.c"
+#include "superio/winbond/w83627ehg/w83627ehg_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627EHG_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 2
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 2
+#define MCP55_PCI_E_X_1 4
+
+#define MCP55_MB_SETUP \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+       dword |= (1<<0);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+       dword |= (1<<16);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the mcp55 */
+       mcp55_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+ normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       int needs_reset = 0;
+       unsigned bsp_apicid = 0;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       pnp_write_config(SERIAL_DEV, 0x24, 0);
+       w83627ehg_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+       setup_mb_resource_map();
+
+       uart_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+
+#if CONFIG_USBDEBUG_DIRECT
+       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+       console_init();
+       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case)
+        */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* it will set up chains and store link pair for optimization later */
+       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+       }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+       init_fidvid_bsp(bsp_apicid);
+
+       // show final fid and vid
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+       }
+#endif
+
+       needs_reset |= optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       needs_reset |= mcp55_early_setup_x();
+
+       // 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();
+       }
+       allow_all_aps_stop(bsp_apicid);
+
+       //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+       /* all ap stopped? */
+//     init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+
+#endif
diff --git a/src/mainboard/olpc/btest/auto.c b/src/mainboard/olpc/btest/auto.c
deleted file mode 100644 (file)
index 21363b7..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/gx2def.h>
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/gx2/raminit.h"
-
-static inline unsigned int fls(unsigned int x)
-{
-        int r;
-
-        __asm__("bsfl %1,%0\n\t"
-                "jnz 1f\n\t"
-                "movl $32,%0\n"
-                "1:" : "=r" (r) : "g" (x));
-        return r;
-}
-
-
-
-
-/* sdram parameters for OLPC:
-       row address = 13
-       col address = 9
-       banks = 4
-       dimm0size=128MB
-       d0_MB=1 (module banks)
-       d0_cb=4 (component banks)
-       do_psz=4KB      (page size)
-       Trc=10 (clocks) (ref2act)
-       Tras=7 (act2pre)
-       Trcd=3 (act2cmd)
-       Trp=3   (pre2act)
-       Trrd=2 (act2act)
-       Tref=17.8ms
-  */
-static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
-{
-       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
-        *                      component Banks (byte 17) * module banks, side (byte 5) *
-        *                      width in bits (byte 6,7)
-        *                    = Density per side (byte 31) * number of sides (byte 5) */
-       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
-       msr_t msr;
-       unsigned char module_banks, val;
-
-       msr = rdmsr(MC_CF07_DATA);
-
-       /* get module banks (sides) per dimm, SPD byte 5 */
-       module_banks = 1;
-       module_banks >>= 1;
-       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
-       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
-
-       /* get component banks per module bank, SPD byte 17 */
-       val = 4;
-       val >>= 2;
-       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
-
-       /* get the module bank density, SPD byte 31  */
-       /* this is multiples of 8 MB */
-       /* actually it is 2^x*4, where x is the value you put in */
-       /* for OLPC, set default size */
-       /* dimm size - hardcoded 128Mb */
-       val = 5;
-       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
-
-       /* page size = 2^col address */
-       val = 2; /* 4096 bytes */
-       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
-
-       print_debug("computed msr.hi ");
-       print_debug_hex32(msr.hi);
-       print_debug("\r\n");
-
-       /* this is a standard value, DOES NOT PROBABLY MATCH FROM ABOVE */
-       /* well, it may be close. It's about 200,000 ticks */
-       msr.lo = 0x00003000;
-       wrmsr(MC_CF07_DATA, msr);
-
-       /* timing and mode ... */
-
-       msr = rdmsr(0x20000019);
-       
-       /* per standard bios settings */        
-
-       msr.hi = 0x18000108;
-       msr.lo = 
-                       (6<<28) |               // cas_lat
-                       (10<<24)|               // ref2act
-                       (7<<20)|                // act2pre
-                       (3<<16)|                // pre2act
-                       (3<<12)|                // act2cmd
-                       (2<<8)|                 // act2act
-                       (2<<6)|                 // dplwr
-                       (2<<4)|                 // dplrd
-                       (3);                    // dal
-       /* the msr value reported by quanta is very, very different. 
-        * we will go with that value for now. 
-        */
-       msr.lo = 0x286332a3;
-
-       wrmsr(0x20000019, msr);
-
-}
-
-#include "northbridge/amd/gx2/raminit.c"
-#include "lib/generic_sdram.c"
-
-#define PLLMSRhi 0x00001490
-#define PLLMSRlo 0x02000030
-#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
-#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
-#include "northbridge/amd/gx2/pll_reset.c"
-#include "cpu/amd/model_gx2/cpureginit.c"
-#include "cpu/amd/model_gx2/syspreinit.c"
-static void msr_init(void)
-{
-       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
-
-       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
-
-        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
-}
-
-static void gpio_init(void)
-{
-       unsigned long m;
-
-       /* Make sure events enable for gpio 12 is off */
-
-       m = inl(GPIOL_EVENTS_ENABLE);
-       m &= ~GPIOL_12_SET;
-       m |= GPIOL_12_CLEAR;
-       outl(m, GPIOL_EVENTS_ENABLE);
-}
-
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* NOTE: must do this AFTER the early_setup!
-        * it is counting on some early MSR setup
-        * for cs5536
-        */
-       cs5536_setup_onchipuart();
-       gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset();
-
-       cpuRegInit();
-       print_err("done cpuRegInit\n");
-       
-       sdram_initialize(1, memctrl);
-       
-       /* Check all of memory */
-       //ram_check(0x00000000, 640*1024);
-}
diff --git a/src/mainboard/olpc/btest/romstage.c b/src/mainboard/olpc/btest/romstage.c
new file mode 100644 (file)
index 0000000..21363b7
--- /dev/null
@@ -0,0 +1,194 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/gx2def.h>
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/gx2/raminit.h"
+
+static inline unsigned int fls(unsigned int x)
+{
+        int r;
+
+        __asm__("bsfl %1,%0\n\t"
+                "jnz 1f\n\t"
+                "movl $32,%0\n"
+                "1:" : "=r" (r) : "g" (x));
+        return r;
+}
+
+
+
+
+/* sdram parameters for OLPC:
+       row address = 13
+       col address = 9
+       banks = 4
+       dimm0size=128MB
+       d0_MB=1 (module banks)
+       d0_cb=4 (component banks)
+       do_psz=4KB      (page size)
+       Trc=10 (clocks) (ref2act)
+       Tras=7 (act2pre)
+       Trcd=3 (act2cmd)
+       Trp=3   (pre2act)
+       Trrd=2 (act2act)
+       Tref=17.8ms
+  */
+static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
+{
+       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
+        *                      component Banks (byte 17) * module banks, side (byte 5) *
+        *                      width in bits (byte 6,7)
+        *                    = Density per side (byte 31) * number of sides (byte 5) */
+       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
+       msr_t msr;
+       unsigned char module_banks, val;
+
+       msr = rdmsr(MC_CF07_DATA);
+
+       /* get module banks (sides) per dimm, SPD byte 5 */
+       module_banks = 1;
+       module_banks >>= 1;
+       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
+       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
+
+       /* get component banks per module bank, SPD byte 17 */
+       val = 4;
+       val >>= 2;
+       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
+
+       /* get the module bank density, SPD byte 31  */
+       /* this is multiples of 8 MB */
+       /* actually it is 2^x*4, where x is the value you put in */
+       /* for OLPC, set default size */
+       /* dimm size - hardcoded 128Mb */
+       val = 5;
+       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
+
+       /* page size = 2^col address */
+       val = 2; /* 4096 bytes */
+       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
+
+       print_debug("computed msr.hi ");
+       print_debug_hex32(msr.hi);
+       print_debug("\r\n");
+
+       /* this is a standard value, DOES NOT PROBABLY MATCH FROM ABOVE */
+       /* well, it may be close. It's about 200,000 ticks */
+       msr.lo = 0x00003000;
+       wrmsr(MC_CF07_DATA, msr);
+
+       /* timing and mode ... */
+
+       msr = rdmsr(0x20000019);
+       
+       /* per standard bios settings */        
+
+       msr.hi = 0x18000108;
+       msr.lo = 
+                       (6<<28) |               // cas_lat
+                       (10<<24)|               // ref2act
+                       (7<<20)|                // act2pre
+                       (3<<16)|                // pre2act
+                       (3<<12)|                // act2cmd
+                       (2<<8)|                 // act2act
+                       (2<<6)|                 // dplwr
+                       (2<<4)|                 // dplrd
+                       (3);                    // dal
+       /* the msr value reported by quanta is very, very different. 
+        * we will go with that value for now. 
+        */
+       msr.lo = 0x286332a3;
+
+       wrmsr(0x20000019, msr);
+
+}
+
+#include "northbridge/amd/gx2/raminit.c"
+#include "lib/generic_sdram.c"
+
+#define PLLMSRhi 0x00001490
+#define PLLMSRlo 0x02000030
+#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
+#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
+#include "northbridge/amd/gx2/pll_reset.c"
+#include "cpu/amd/model_gx2/cpureginit.c"
+#include "cpu/amd/model_gx2/syspreinit.c"
+static void msr_init(void)
+{
+       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
+
+       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
+
+        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
+}
+
+static void gpio_init(void)
+{
+       unsigned long m;
+
+       /* Make sure events enable for gpio 12 is off */
+
+       m = inl(GPIOL_EVENTS_ENABLE);
+       m &= ~GPIOL_12_SET;
+       m |= GPIOL_12_CLEAR;
+       outl(m, GPIOL_EVENTS_ENABLE);
+}
+
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl [] = {
+               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* NOTE: must do this AFTER the early_setup!
+        * it is counting on some early MSR setup
+        * for cs5536
+        */
+       cs5536_setup_onchipuart();
+       gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset();
+
+       cpuRegInit();
+       print_err("done cpuRegInit\n");
+       
+       sdram_initialize(1, memctrl);
+       
+       /* Check all of memory */
+       //ram_check(0x00000000, 640*1024);
+}
diff --git a/src/mainboard/olpc/rev_a/auto.c b/src/mainboard/olpc/rev_a/auto.c
deleted file mode 100644 (file)
index 21363b7..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/gx2def.h>
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-        return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/gx2/raminit.h"
-
-static inline unsigned int fls(unsigned int x)
-{
-        int r;
-
-        __asm__("bsfl %1,%0\n\t"
-                "jnz 1f\n\t"
-                "movl $32,%0\n"
-                "1:" : "=r" (r) : "g" (x));
-        return r;
-}
-
-
-
-
-/* sdram parameters for OLPC:
-       row address = 13
-       col address = 9
-       banks = 4
-       dimm0size=128MB
-       d0_MB=1 (module banks)
-       d0_cb=4 (component banks)
-       do_psz=4KB      (page size)
-       Trc=10 (clocks) (ref2act)
-       Tras=7 (act2pre)
-       Trcd=3 (act2cmd)
-       Trp=3   (pre2act)
-       Trrd=2 (act2act)
-       Tref=17.8ms
-  */
-static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
-{
-       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
-        *                      component Banks (byte 17) * module banks, side (byte 5) *
-        *                      width in bits (byte 6,7)
-        *                    = Density per side (byte 31) * number of sides (byte 5) */
-       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
-       msr_t msr;
-       unsigned char module_banks, val;
-
-       msr = rdmsr(MC_CF07_DATA);
-
-       /* get module banks (sides) per dimm, SPD byte 5 */
-       module_banks = 1;
-       module_banks >>= 1;
-       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
-       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
-
-       /* get component banks per module bank, SPD byte 17 */
-       val = 4;
-       val >>= 2;
-       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
-
-       /* get the module bank density, SPD byte 31  */
-       /* this is multiples of 8 MB */
-       /* actually it is 2^x*4, where x is the value you put in */
-       /* for OLPC, set default size */
-       /* dimm size - hardcoded 128Mb */
-       val = 5;
-       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
-
-       /* page size = 2^col address */
-       val = 2; /* 4096 bytes */
-       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
-       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
-
-       print_debug("computed msr.hi ");
-       print_debug_hex32(msr.hi);
-       print_debug("\r\n");
-
-       /* this is a standard value, DOES NOT PROBABLY MATCH FROM ABOVE */
-       /* well, it may be close. It's about 200,000 ticks */
-       msr.lo = 0x00003000;
-       wrmsr(MC_CF07_DATA, msr);
-
-       /* timing and mode ... */
-
-       msr = rdmsr(0x20000019);
-       
-       /* per standard bios settings */        
-
-       msr.hi = 0x18000108;
-       msr.lo = 
-                       (6<<28) |               // cas_lat
-                       (10<<24)|               // ref2act
-                       (7<<20)|                // act2pre
-                       (3<<16)|                // pre2act
-                       (3<<12)|                // act2cmd
-                       (2<<8)|                 // act2act
-                       (2<<6)|                 // dplwr
-                       (2<<4)|                 // dplrd
-                       (3);                    // dal
-       /* the msr value reported by quanta is very, very different. 
-        * we will go with that value for now. 
-        */
-       msr.lo = 0x286332a3;
-
-       wrmsr(0x20000019, msr);
-
-}
-
-#include "northbridge/amd/gx2/raminit.c"
-#include "lib/generic_sdram.c"
-
-#define PLLMSRhi 0x00001490
-#define PLLMSRlo 0x02000030
-#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
-#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
-#include "northbridge/amd/gx2/pll_reset.c"
-#include "cpu/amd/model_gx2/cpureginit.c"
-#include "cpu/amd/model_gx2/syspreinit.c"
-static void msr_init(void)
-{
-       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
-
-       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
-
-        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
-        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
-}
-
-static void gpio_init(void)
-{
-       unsigned long m;
-
-       /* Make sure events enable for gpio 12 is off */
-
-       m = inl(GPIOL_EVENTS_ENABLE);
-       m &= ~GPIOL_12_SET;
-       m |= GPIOL_12_CLEAR;
-       outl(m, GPIOL_EVENTS_ENABLE);
-}
-
-static void main(unsigned long bist)
-{
-       static const struct mem_controller memctrl [] = {
-               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
-       };
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* NOTE: must do this AFTER the early_setup!
-        * it is counting on some early MSR setup
-        * for cs5536
-        */
-       cs5536_setup_onchipuart();
-       gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset();
-
-       cpuRegInit();
-       print_err("done cpuRegInit\n");
-       
-       sdram_initialize(1, memctrl);
-       
-       /* Check all of memory */
-       //ram_check(0x00000000, 640*1024);
-}
diff --git a/src/mainboard/olpc/rev_a/romstage.c b/src/mainboard/olpc/rev_a/romstage.c
new file mode 100644 (file)
index 0000000..21363b7
--- /dev/null
@@ -0,0 +1,194 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/gx2def.h>
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/cs5536/cs5536_early_smbus.c"
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+        return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/gx2/raminit.h"
+
+static inline unsigned int fls(unsigned int x)
+{
+        int r;
+
+        __asm__("bsfl %1,%0\n\t"
+                "jnz 1f\n\t"
+                "movl $32,%0\n"
+                "1:" : "=r" (r) : "g" (x));
+        return r;
+}
+
+
+
+
+/* sdram parameters for OLPC:
+       row address = 13
+       col address = 9
+       banks = 4
+       dimm0size=128MB
+       d0_MB=1 (module banks)
+       d0_cb=4 (component banks)
+       do_psz=4KB      (page size)
+       Trc=10 (clocks) (ref2act)
+       Tras=7 (act2pre)
+       Trcd=3 (act2cmd)
+       Trp=3   (pre2act)
+       Trrd=2 (act2act)
+       Tref=17.8ms
+  */
+static void sdram_set_spd_registers(const struct mem_controller *ctrl) 
+{
+       /* Total size of DIMM = 2^row address (byte 3) * 2^col address (byte 4) *
+        *                      component Banks (byte 17) * module banks, side (byte 5) *
+        *                      width in bits (byte 6,7)
+        *                    = Density per side (byte 31) * number of sides (byte 5) */
+       /* 1. Initialize GLMC registers base on SPD values, do one DIMM for now */
+       msr_t msr;
+       unsigned char module_banks, val;
+
+       msr = rdmsr(MC_CF07_DATA);
+
+       /* get module banks (sides) per dimm, SPD byte 5 */
+       module_banks = 1;
+       module_banks >>= 1;
+       msr.hi &= ~(1 << CF07_UPPER_D0_MB_SHIFT);
+       msr.hi |= (module_banks << CF07_UPPER_D0_MB_SHIFT);
+
+       /* get component banks per module bank, SPD byte 17 */
+       val = 4;
+       val >>= 2;
+       msr.hi &= ~(0x1 << CF07_UPPER_D0_CB_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_CB_SHIFT);
+
+       /* get the module bank density, SPD byte 31  */
+       /* this is multiples of 8 MB */
+       /* actually it is 2^x*4, where x is the value you put in */
+       /* for OLPC, set default size */
+       /* dimm size - hardcoded 128Mb */
+       val = 5;
+       msr.hi &= ~(0xf << CF07_UPPER_D0_SZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_SZ_SHIFT);
+
+       /* page size = 2^col address */
+       val = 2; /* 4096 bytes */
+       msr.hi &= ~(0x7 << CF07_UPPER_D0_PSZ_SHIFT);
+       msr.hi |=  (val << CF07_UPPER_D0_PSZ_SHIFT);
+
+       print_debug("computed msr.hi ");
+       print_debug_hex32(msr.hi);
+       print_debug("\r\n");
+
+       /* this is a standard value, DOES NOT PROBABLY MATCH FROM ABOVE */
+       /* well, it may be close. It's about 200,000 ticks */
+       msr.lo = 0x00003000;
+       wrmsr(MC_CF07_DATA, msr);
+
+       /* timing and mode ... */
+
+       msr = rdmsr(0x20000019);
+       
+       /* per standard bios settings */        
+
+       msr.hi = 0x18000108;
+       msr.lo = 
+                       (6<<28) |               // cas_lat
+                       (10<<24)|               // ref2act
+                       (7<<20)|                // act2pre
+                       (3<<16)|                // pre2act
+                       (3<<12)|                // act2cmd
+                       (2<<8)|                 // act2act
+                       (2<<6)|                 // dplwr
+                       (2<<4)|                 // dplrd
+                       (3);                    // dal
+       /* the msr value reported by quanta is very, very different. 
+        * we will go with that value for now. 
+        */
+       msr.lo = 0x286332a3;
+
+       wrmsr(0x20000019, msr);
+
+}
+
+#include "northbridge/amd/gx2/raminit.c"
+#include "lib/generic_sdram.c"
+
+#define PLLMSRhi 0x00001490
+#define PLLMSRlo 0x02000030
+#define PLLMSRlo1 ((0xde << 16) | (1 << 26) | (1 << 24))
+#define PLLMSRlo2 ((1<<14) |(1<<13) | (1<<0))
+#include "northbridge/amd/gx2/pll_reset.c"
+#include "cpu/amd/model_gx2/cpureginit.c"
+#include "cpu/amd/model_gx2/syspreinit.c"
+static void msr_init(void)
+{
+       __builtin_wrmsr(0x1808,  0x10f3bf00, 0x22fffc02);
+
+       __builtin_wrmsr(0x10000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x10000021, 0x80fffe0, 0x20000000);
+
+        __builtin_wrmsr(0x40000020, 0xfff80, 0x20000000);
+        __builtin_wrmsr(0x40000021, 0x80fffe0, 0x20000000);
+}
+
+static void gpio_init(void)
+{
+       unsigned long m;
+
+       /* Make sure events enable for gpio 12 is off */
+
+       m = inl(GPIOL_EVENTS_ENABLE);
+       m &= ~GPIOL_12_SET;
+       m |= GPIOL_12_CLEAR;
+       outl(m, GPIOL_EVENTS_ENABLE);
+}
+
+static void main(unsigned long bist)
+{
+       static const struct mem_controller memctrl [] = {
+               {.channel0 = {(0xa<<3)|0, (0xa<<3)|1}}
+       };
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* NOTE: must do this AFTER the early_setup!
+        * it is counting on some early MSR setup
+        * for cs5536
+        */
+       cs5536_setup_onchipuart();
+       gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset();
+
+       cpuRegInit();
+       print_err("done cpuRegInit\n");
+       
+       sdram_initialize(1, memctrl);
+       
+       /* Check all of memory */
+       //ram_check(0x00000000, 640*1024);
+}
index 6f3a239f400a38e4b5fab9c3d402ee80839e7b44..843cf9a8ee4926ba9301f62ff9f2fae64fc4902e 100644 (file)
@@ -12,7 +12,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/model_lx/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -22,8 +22,8 @@ ldscripts += $(src)/arch/i386/lib/failover.lds
 
 ifdef POST_EVALUATION
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/pcengines/alix1c/cache_as_ram_auto.c b/src/mainboard/pcengines/alix1c/cache_as_ram_auto.c
deleted file mode 100644 (file)
index e482815..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <spd.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-#include "cpu/x86/msr.h"
-#include <cpu/amd/lxdef.h>
-#include <cpu/amd/geode_post_code.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-#define POST_CODE(x) outb(x, 0x80)
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-/* The ALIX1.C has no SMBus; the setup is hard-wired. */
-void cs5536_enable_smbus(void)
-{
-}
-
-#include "southbridge/amd/cs5536/cs5536_early_setup.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-/* The part is a Hynix hy5du121622ctp-d43.
- *
- * HY 5D U 12 16 2 2 C <blank> T <blank> P D43
- * Hynix
- * DDR SDRAM (5D)
- * VDD 2.5 VDDQ 2.5 (U)
- * 512M 8K REFRESH (12)
- * x16 (16)
- * 4banks (2)
- * SSTL_2 (2)
- * 4th GEN die (C)
- * Normal Power Consumption (<blank> )
- * TSOP (T)
- * Single Die (<blank>)
- * Lead Free (P)
- * DDR400 3-3-3 (D43)
- */
-/* SPD array */
-static const u8 spdbytes[] = {
-       [SPD_ACCEPTABLE_CAS_LATENCIES] = 0x10,
-       [SPD_BANK_DENSITY] = 0x40,
-       [SPD_DEVICE_ATTRIBUTES_GENERAL] = 0xff,
-       [SPD_MEMORY_TYPE] = 7,
-       [SPD_MIN_CYCLE_TIME_AT_CAS_MAX] = 10, /* A guess for the tRAC value */
-       [SPD_MODULE_ATTRIBUTES] = 0xff, /* FIXME later when we figure out. */
-       [SPD_NUM_BANKS_PER_SDRAM] = 4,
-       [SPD_PRIMARY_SDRAM_WIDTH] = 8,
-       [SPD_NUM_DIMM_BANKS] = 1, /* ALIX1.C is 1 bank. */
-       [SPD_NUM_COLUMNS] = 0xa,
-       [SPD_NUM_ROWS] = 3,
-       [SPD_REFRESH] = 0x3a,
-       [SPD_SDRAM_CYCLE_TIME_2ND] = 60,
-       [SPD_SDRAM_CYCLE_TIME_3RD] = 75,
-       [SPD_tRAS] = 40,
-       [SPD_tRCD] = 15,
-       [SPD_tRFC] = 70,
-       [SPD_tRP] = 15,
-       [SPD_tRRD] = 10,
-};
-
-static u8 spd_read_byte(u8 device, u8 address)
-{
-       print_debug("spd_read_byte dev ");
-       print_debug_hex8(device);
-
-       if (device != (0x50 << 1)) {
-               print_debug(" returns 0xff\n");
-               return 0xff;
-       }
-
-       print_debug(" addr ");
-       print_debug_hex8(address);
-       print_debug(" returns ");
-       print_debug_hex8(spdbytes[address]);
-       print_debug("\r\n");
-
-       return spdbytes[address];
-}
-
-#define ManualConf     0               /* Do automatic strapped PLL config */
-#define PLLMSRhi       0x00001490      /* Manual settings for the PLL */
-#define PLLMSRlo       0x02000030
-
-#define DIMM0          0xa0
-#define DIMM1          0xa2
-
-#include "northbridge/amd/lx/raminit.h"
-#include "northbridge/amd/lx/pll_reset.c"
-#include "northbridge/amd/lx/raminit.c"
-#include "lib/generic_sdram.c"
-#include "cpu/amd/model_lx/cpureginit.c"
-#include "cpu/amd/model_lx/syspreinit.c"
-
-static void msr_init(void)
-{
-       msr_t msr;
-
-       /* Setup access to the MC for under 1MB. Note MC not setup yet. */
-       msr.hi = 0x24fffc02;
-       msr.lo = 0x10010000;
-       wrmsr(CPU_RCONF_DEFAULT, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff00;
-       wrmsr(MSR_GLIU0 + 0x20, msr);
-
-       msr.hi = 0x20000000;
-       msr.lo = 0xfff00;
-       wrmsr(MSR_GLIU1 + 0x20, msr);
-}
-
-/** Early mainboard specific GPIO setup. */
-static void mb_gpio_init(void)
-{
-}
-
-void cache_as_ram_main(void)
-{
-       static const struct mem_controller memctrl[] = {
-               {.channel0 = {0x50}},
-       };
-
-       extern void RestartCAR();
-
-       POST_CODE(0x01);
-
-       SystemPreInit();
-       msr_init();
-
-       cs5536_early_setup();
-
-       /* NOTE: Must do this AFTER cs5536_early_setup()!
-        * It is counting on some early MSR setup for the CS5536.
-        */
-       cs5536_disable_internal_uart();
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       mb_gpio_init();
-       uart_init();
-       console_init();
-
-       pll_reset(ManualConf);
-
-       cpuRegInit();
-
-       sdram_initialize(1, memctrl);
-
-       /* Check memory */
-       /* Enable this only if you are having questions. */
-       /* ram_check(0, 640 * 1024); */
-
-       /* Switch from Cache as RAM to real RAM.
-        *
-        * There are two ways we could think about this.
-        *
-        * 1. If we are using the auto.inc ROMCC way, the stack is
-        * going to be re-setup in the code following this code.  Just
-        * wbinvd the stack to clear the cache tags.  We don't care
-        * where the stack used to be.
-        *
-        * 2. This file is built as a normal .c -> .o and linked in
-        * etc.  The stack might be used to return etc.  That means we
-        * care about what is in the stack.  If we are smart we set
-        * the CAR stack to the same location as the rest of
-        * coreboot. If that is the case we can just do a wbinvd.
-        * The stack will be written into real RAM that is now setup
-        * and we continue like nothing happened.  If the stack is
-        * located somewhere other than where LB would like it, you
-        * need to write some code to do a copy from cache to RAM
-        *
-        * We use method 1 on Norwich and on this board too.
-        */
-       POST_CODE(0x02);
-       print_err("POST 02\n");
-       __asm__("wbinvd\n");
-       print_err("Past wbinvd\n");
-
-       /* We are finding the return does not work on this board. Explicitly
-        * call the label that is after the call to us. This is gross, but
-        * sometimes at this level it is the only way out.
-        */
-       void done_cache_as_ram_main(void);
-       done_cache_as_ram_main();
-}
diff --git a/src/mainboard/pcengines/alix1c/romstage.c b/src/mainboard/pcengines/alix1c/romstage.c
new file mode 100644 (file)
index 0000000..321426b
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <spd.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+#include "cpu/x86/msr.h"
+#include <cpu/amd/lxdef.h>
+#include <cpu/amd/geode_post_code.h>
+#include "southbridge/amd/cs5536/cs5536.h"
+
+#define POST_CODE(x) outb(x, 0x80)
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+/* The ALIX1.C has no SMBus; the setup is hard-wired. */
+void cs5536_enable_smbus(void)
+{
+}
+
+#include "southbridge/amd/cs5536/cs5536_early_setup.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+/* The part is a Hynix hy5du121622ctp-d43.
+ *
+ * HY 5D U 12 16 2 2 C <blank> T <blank> P D43
+ * Hynix
+ * DDR SDRAM (5D)
+ * VDD 2.5 VDDQ 2.5 (U)
+ * 512M 8K REFRESH (12)
+ * x16 (16)
+ * 4banks (2)
+ * SSTL_2 (2)
+ * 4th GEN die (C)
+ * Normal Power Consumption (<blank> )
+ * TSOP (T)
+ * Single Die (<blank>)
+ * Lead Free (P)
+ * DDR400 3-3-3 (D43)
+ */
+/* SPD array */
+static const u8 spdbytes[] = {
+       [SPD_ACCEPTABLE_CAS_LATENCIES] = 0x10,
+       [SPD_BANK_DENSITY] = 0x40,
+       [SPD_DEVICE_ATTRIBUTES_GENERAL] = 0xff,
+       [SPD_MEMORY_TYPE] = 7,
+       [SPD_MIN_CYCLE_TIME_AT_CAS_MAX] = 10, /* A guess for the tRAC value */
+       [SPD_MODULE_ATTRIBUTES] = 0xff, /* FIXME later when we figure out. */
+       [SPD_NUM_BANKS_PER_SDRAM] = 4,
+       [SPD_PRIMARY_SDRAM_WIDTH] = 8,
+       [SPD_NUM_DIMM_BANKS] = 1, /* ALIX1.C is 1 bank. */
+       [SPD_NUM_COLUMNS] = 0xa,
+       [SPD_NUM_ROWS] = 3,
+       [SPD_REFRESH] = 0x3a,
+       [SPD_SDRAM_CYCLE_TIME_2ND] = 60,
+       [SPD_SDRAM_CYCLE_TIME_3RD] = 75,
+       [SPD_tRAS] = 40,
+       [SPD_tRCD] = 15,
+       [SPD_tRFC] = 70,
+       [SPD_tRP] = 15,
+       [SPD_tRRD] = 10,
+};
+
+static u8 spd_read_byte(u8 device, u8 address)
+{
+       print_debug("spd_read_byte dev ");
+       print_debug_hex8(device);
+
+       if (device != (0x50 << 1)) {
+               print_debug(" returns 0xff\n");
+               return 0xff;
+       }
+
+       print_debug(" addr ");
+       print_debug_hex8(address);
+       print_debug(" returns ");
+       print_debug_hex8(spdbytes[address]);
+       print_debug("\r\n");
+
+       return spdbytes[address];
+}
+
+#define ManualConf     0               /* Do automatic strapped PLL config */
+#define PLLMSRhi       0x00001490      /* Manual settings for the PLL */
+#define PLLMSRlo       0x02000030
+
+#define DIMM0          0xa0
+#define DIMM1          0xa2
+
+#include "northbridge/amd/lx/raminit.h"
+#include "northbridge/amd/lx/pll_reset.c"
+#include "northbridge/amd/lx/raminit.c"
+#include "lib/generic_sdram.c"
+#include "cpu/amd/model_lx/cpureginit.c"
+#include "cpu/amd/model_lx/syspreinit.c"
+
+static void msr_init(void)
+{
+       msr_t msr;
+
+       /* Setup access to the MC for under 1MB. Note MC not setup yet. */
+       msr.hi = 0x24fffc02;
+       msr.lo = 0x10010000;
+       wrmsr(CPU_RCONF_DEFAULT, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff00;
+       wrmsr(MSR_GLIU0 + 0x20, msr);
+
+       msr.hi = 0x20000000;
+       msr.lo = 0xfff00;
+       wrmsr(MSR_GLIU1 + 0x20, msr);
+}
+
+/** Early mainboard specific GPIO setup. */
+static void mb_gpio_init(void)
+{
+}
+
+void cache_as_ram_main(void)
+{
+       static const struct mem_controller memctrl[] = {
+               {.channel0 = {0x50}},
+       };
+
+       extern void RestartCAR();
+
+       POST_CODE(0x01);
+
+       SystemPreInit();
+       msr_init();
+
+       cs5536_early_setup();
+
+       /* NOTE: Must do this AFTER cs5536_early_setup()!
+        * It is counting on some early MSR setup for the CS5536.
+        */
+       cs5536_disable_internal_uart();
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       mb_gpio_init();
+       uart_init();
+       console_init();
+
+       pll_reset(ManualConf);
+
+       cpuRegInit();
+
+       sdram_initialize(1, memctrl);
+
+       /* Check memory */
+       /* Enable this only if you are having questions. */
+       /* ram_check(0, 640 * 1024); */
+
+       /* Switch from Cache as RAM to real RAM.
+        *
+        * There are two ways we could think about this.
+        *
+        * 1. If we are using the romstage.inc ROMCC way, the stack is
+        * going to be re-setup in the code following this code.  Just
+        * wbinvd the stack to clear the cache tags.  We don't care
+        * where the stack used to be.
+        *
+        * 2. This file is built as a normal .c -> .o and linked in
+        * etc.  The stack might be used to return etc.  That means we
+        * care about what is in the stack.  If we are smart we set
+        * the CAR stack to the same location as the rest of
+        * coreboot. If that is the case we can just do a wbinvd.
+        * The stack will be written into real RAM that is now setup
+        * and we continue like nothing happened.  If the stack is
+        * located somewhere other than where LB would like it, you
+        * need to write some code to do a copy from cache to RAM
+        *
+        * We use method 1 on Norwich and on this board too.
+        */
+       POST_CODE(0x02);
+       print_err("POST 02\n");
+       __asm__("wbinvd\n");
+       print_err("Past wbinvd\n");
+
+       /* We are finding the return does not work on this board. Explicitly
+        * call the label that is after the call to us. This is gross, but
+        * sometimes at this level it is the only way out.
+        */
+       void done_cache_as_ram_main(void);
+       done_cache_as_ram_main();
+}
diff --git a/src/mainboard/rca/rm4100/auto.c b/src/mainboard/rca/rm4100/auto.c
deleted file mode 100644 (file)
index 2f3892e..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008-2010 Joseph Smith <joe@settoplinux.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "pc80/udelay_io.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-#include "northbridge/intel/i82830/raminit.h"
-#include "northbridge/intel/i82830/memory_initialized.c"
-#include "southbridge/intel/i82801xx/i82801xx.h"
-#include "southbridge/intel/i82801xx/i82801xx_reset.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "spd_table.h"
-#include "gpio.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
-
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-
-/**
- * The onboard 64MB PC133 memory does not have a SPD EEPROM so the
- * values have to be set manually, the SO-DIMM socket is located in
- * socket0 (0x50), and the onboard memory is located in socket1 (0x51).
- */
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       int i;
-
-       if (device == 0x50) {
-               return smbus_read_byte(device, address);
-       } else if (device == 0x51) {
-               for (i = 0; i < ARRAY_SIZE(spd_table); i++) {
-                       if (spd_table[i].address == address)
-                               return spd_table[i].data;
-               }
-               return 0xFF; /* Return 0xFF when address is not found. */
-       } else {
-               return 0xFF; /* Return 0xFF on any failures. */
-       }
-}
-
-#include "northbridge/intel/i82830/raminit.c"
-
-/**
- * Setup mainboard specific registers pre raminit.
- */
-static void mb_early_setup(void)
-{
-       /* - Hub Interface to PCI Bridge Registers - */
-       /* 12-Clock Retry Enable */
-       pci_write_config16(PCI_DEV(0, 0x1e, 0), 0x50, 0x1402);
-       /* Master Latency Timer Count */
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
-       /* I/O Address Base */
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1c, 0xf0);
-
-       /* - LPC Interface Bridge Registers - */
-       /* Delayed Transaction Enable */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xd0, 0x00000002);
-       /* Disable the TCO Timer system reboot feature */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, 0x02);
-       /* CPU Frequency Strap */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd5, 0x02);
-       /* ACPI base address and enable Resource Indicator */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR | 1)); 
-       /* Enable the SMBUS */
-       enable_smbus();
-       /* ACPI base address and disable Resource Indicator */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR)); 
-       /*  ACPI Enable */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), ACPI_CNTL, 0x10);
-}
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       hard_reset();
-               }
-
-       /* Set southbridge and superio gpios */
-       mb_gpio_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       /* Setup mainboard specific registers */
-       mb_early_setup();
-
-       /* Initialize memory */
-       sdram_initialize();
-
-       /* Check RAM. */
-       /* ram_check(0, 640 * 1024); */
-       /* ram_check(64512 * 1024, 65536 * 1024); */
-}
\ No newline at end of file
diff --git a/src/mainboard/rca/rm4100/romstage.c b/src/mainboard/rca/rm4100/romstage.c
new file mode 100644 (file)
index 0000000..2f3892e
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008-2010 Joseph Smith <joe@settoplinux.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "pc80/udelay_io.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+#include "northbridge/intel/i82830/raminit.h"
+#include "northbridge/intel/i82830/memory_initialized.c"
+#include "southbridge/intel/i82801xx/i82801xx.h"
+#include "southbridge/intel/i82801xx/i82801xx_reset.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "spd_table.h"
+#include "gpio.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
+
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+
+/**
+ * The onboard 64MB PC133 memory does not have a SPD EEPROM so the
+ * values have to be set manually, the SO-DIMM socket is located in
+ * socket0 (0x50), and the onboard memory is located in socket1 (0x51).
+ */
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       int i;
+
+       if (device == 0x50) {
+               return smbus_read_byte(device, address);
+       } else if (device == 0x51) {
+               for (i = 0; i < ARRAY_SIZE(spd_table); i++) {
+                       if (spd_table[i].address == address)
+                               return spd_table[i].data;
+               }
+               return 0xFF; /* Return 0xFF when address is not found. */
+       } else {
+               return 0xFF; /* Return 0xFF on any failures. */
+       }
+}
+
+#include "northbridge/intel/i82830/raminit.c"
+
+/**
+ * Setup mainboard specific registers pre raminit.
+ */
+static void mb_early_setup(void)
+{
+       /* - Hub Interface to PCI Bridge Registers - */
+       /* 12-Clock Retry Enable */
+       pci_write_config16(PCI_DEV(0, 0x1e, 0), 0x50, 0x1402);
+       /* Master Latency Timer Count */
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
+       /* I/O Address Base */
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1c, 0xf0);
+
+       /* - LPC Interface Bridge Registers - */
+       /* Delayed Transaction Enable */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xd0, 0x00000002);
+       /* Disable the TCO Timer system reboot feature */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, 0x02);
+       /* CPU Frequency Strap */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd5, 0x02);
+       /* ACPI base address and enable Resource Indicator */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR | 1)); 
+       /* Enable the SMBUS */
+       enable_smbus();
+       /* ACPI base address and disable Resource Indicator */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR)); 
+       /*  ACPI Enable */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), ACPI_CNTL, 0x10);
+}
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       hard_reset();
+               }
+
+       /* Set southbridge and superio gpios */
+       mb_gpio_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       /* Setup mainboard specific registers */
+       mb_early_setup();
+
+       /* Initialize memory */
+       sdram_initialize();
+
+       /* Check RAM. */
+       /* ram_check(0, 640 * 1024); */
+       /* ram_check(64512 * 1024, 65536 * 1024); */
+}
\ No newline at end of file
index 41e5780a8c470b55f6295a33fd7175af23a1c145..c943ae4c297811116856579a64acaf66357a2c52 100644 (file)
@@ -45,7 +45,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/intel/model_6ex/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -63,8 +63,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/roda/rk886ex/auto.c b/src/mainboard/roda/rk886ex/auto.c
deleted file mode 100644 (file)
index 868d41e..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * This file is part of the coreboot project.
- * 
- * Copyright (C) 2007-2009 coresystems GmbH
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of
- * the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-// __PRE_RAM__ means: use "unsigned" for device, not a struct.
-#define __PRE_RAM__
-
-/* Configuration of the i945 driver */
-#define CHIPSET_I945GM 1
-#define CHANNEL_XOR_RANDOMIZATION 1
-// Rocky freezing temperature settings:
-#define MAXIMUM_SUPPORTED_FREQUENCY 400
-
-#include <stdint.h>
-#include <string.h>
-#include <arch/io.h>
-#include <arch/romcc_io.h>
-#include <device/pci_def.h>
-#include <device/pnp_def.h>
-#include <cpu/x86/lapic.h>
-
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include <cpu/x86/bist.h>
-
-#if CONFIG_USBDEBUG_DIRECT
-#define DBGP_DEFAULT 1
-#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
-
-#include "northbridge/intel/i945/udelay.c"
-
-#include "southbridge/intel/i82801gx/i82801gx.h"
-static void setup_ich7_gpios(void)
-{
-       printk_debug(" GPIOS...");
-       /* General Registers */
-       outl(0xbfc0f7c0, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
-       outl(0x70a87d83, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
-       outl(0x7dc07f83, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
-       /* Output Control Registers */
-       outl(0x00000000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
-       /* Input Control Registers */
-       outl(0x00002180, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
-       outl(0x000100e8, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
-       outl(0x00000030, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
-       outl(0x00010030, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
-}
-
-#include "northbridge/intel/i945/early_init.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i945/raminit.h"
-#include "northbridge/intel/i945/raminit.c"
-#include "northbridge/intel/i945/reset_test.c"
-#include "northbridge/intel/i945/errata.c"
-#include "northbridge/intel/i945/debug.c"
-
-static void ich7_enable_lpc(void)
-{
-       // Enable Serial IRQ
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
-       // decode range
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0007);
-       // decode range
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x3f0f);
-       // Enable 0x02e0
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x84, 0x02e1);
-       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x86, 0x001c);
-       // COM3 decode
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x88, 0x00fc0601);
-       // COM4 decode
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x8c, 0x00040069);
-}
-
-
-/* This box has two superios, so enabling serial becomes slightly excessive.
- * We disable a lot of stuff to make sure that there are no conflicts between
- * the two. Also set up the GPIOs from the beginning. This is the "no schematic
- * but safe anyways" method.
- */
-static inline void pnp_enter_ext_func_mode(device_t dev)
-{
-       unsigned int port = dev >> 8;
-       outb(0x55, port);
-}
-
-static void pnp_exit_ext_func_mode(device_t dev)
-{
-       unsigned int port = dev >> 8;
-       outb(0xaa, port);
-}
-
-static void pnp_write_register(device_t dev, int reg, int val)
-{
-       unsigned int port = dev >> 8;
-       outb(reg, port);
-       outb(val, port+1);
-}
-
-static void early_superio_config(void)
-{
-       device_t dev;
-
-       dev=PNP_DEV(0x2e, 0x00);
-
-       pnp_enter_ext_func_mode(dev);
-       pnp_write_register(dev, 0x01, 0x94); // Extended Parport modes
-       pnp_write_register(dev, 0x02, 0x88); // UART power on
-       pnp_write_register(dev, 0x03, 0x72); // Floppy
-       pnp_write_register(dev, 0x04, 0x01); // EPP + SPP
-       pnp_write_register(dev, 0x14, 0x03); // Floppy
-       pnp_write_register(dev, 0x20, (0x3f0 >> 2)); // Floppy
-       pnp_write_register(dev, 0x23, (0x378 >> 2)); // PP base
-       pnp_write_register(dev, 0x24, (0x3f8 >> 2)); // UART1 base
-       pnp_write_register(dev, 0x25, (0x2f8 >> 2)); // UART2 base
-       pnp_write_register(dev, 0x26, (2 << 4) | 0); // FDC + PP DMA
-       pnp_write_register(dev, 0x27, (6 << 4) | 7); // FDC + PP DMA
-       pnp_write_register(dev, 0x28, (4 << 4) | 3); // UART1,2 IRQ
-       /* These are the SMI status registers in the SIO: */
-       pnp_write_register(dev, 0x30, (0x600 >> 4)); // Runtime Register Block Base
-
-       pnp_write_register(dev, 0x31, 0x00); // GPIO1 DIR
-       pnp_write_register(dev, 0x32, 0x00); // GPIO1 POL
-       pnp_write_register(dev, 0x33, 0x40); // GPIO2 DIR
-       pnp_write_register(dev, 0x34, 0x00); // GPIO2 POL
-       pnp_write_register(dev, 0x35, 0xff); // GPIO3 DIR
-       pnp_write_register(dev, 0x36, 0x00); // GPIO3 POL
-       pnp_write_register(dev, 0x37, 0xe0); // GPIO4 DIR
-       pnp_write_register(dev, 0x38, 0x00); // GPIO4 POL
-       pnp_write_register(dev, 0x39, 0x80); // GPIO4 POL
-
-       pnp_exit_ext_func_mode(dev);
-}
-
-static void rcba_config(void)
-{
-       /* Set up virtual channel 0 */
-       //RCBA32(0x0014) = 0x80000001;
-       //RCBA32(0x001c) = 0x03128010;
-
-       /* Device 1f interrupt pin register */
-       RCBA32(0x3100) = 0x00042220;
-       /* Device 1d interrupt pin register */
-       RCBA32(0x310c) = 0x00214321;
-
-       /* dev irq route register */
-       RCBA16(0x3140) = 0x0232;
-       RCBA16(0x3142) = 0x3246;
-       RCBA16(0x3144) = 0x0237;
-       RCBA16(0x3146) = 0x3201;
-       RCBA16(0x3148) = 0x3216;
-
-       /* Enable IOAPIC */
-       RCBA8(0x31ff) = 0x03;
-
-       /* Enable upper 128bytes of CMOS */
-       RCBA32(0x3400) = (1 << 2);
-
-       /* Disable unused devices */
-       RCBA32(0x3418) = FD_PCIE6 | FD_PCIE5 | FD_PCIE3 | FD_PCIE2 | 
-                        FD_INTLAN | FD_ACMOD | FD_HDAUD | FD_PATA;
-       RCBA32(0x3418) |= (1 << 0); // Required.
-
-       /* Enable PCIe Root Port Clock Gate */
-       // RCBA32(0x341c) = 0x00000001;
-
-       /* This should probably go into the ACPI OS Init trap */
-
-       /* Set up I/O Trap #0 for 0xfe00 (SMIC) */
-       RCBA32(0x1e84) = 0x00020001;
-       RCBA32(0x1e80) = 0x0000fe01;
-
-       /* Set up I/O Trap #3 for 0x800-0x80c (Trap) */
-       RCBA32(0x1e9c) = 0x000200f0;
-       RCBA32(0x1e98) = 0x000c0801;
-}
-
-static void early_ich7_init(void)
-{
-       uint8_t reg8;
-       uint32_t reg32;
-
-       // program secondary mlt XXX byte?
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
-
-       // reset rtc power status
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
-       reg8 &= ~(1 << 2);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
-
-       // usb transient disconnect
-       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
-       reg8 |= (3 << 0);
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
-       reg32 |= (1 << 29) | (1 << 17);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
-
-       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
-       reg32 |= (1 << 31) | (1 << 27);
-       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
-
-       RCBA32(0x0088) = 0x0011d000;
-       RCBA16(0x01fc) = 0x060f;
-       RCBA32(0x01f4) = 0x86000040;
-       RCBA32(0x0214) = 0x10030549;
-       RCBA32(0x0218) = 0x00020504;
-       RCBA8(0x0220) = 0xc5;
-       reg32 = RCBA32(0x3410);
-       reg32 |= (1 << 6);
-       RCBA32(0x3410) = reg32;
-       reg32 = RCBA32(0x3430);
-       reg32 &= ~(3 << 0);
-       reg32 |= (1 << 0);
-       RCBA32(0x3430) = reg32;
-       RCBA32(0x3418) |= (1 << 0);
-       RCBA16(0x0200) = 0x2008;
-       RCBA8(0x2027) = 0x0d;
-       RCBA16(0x3e08) |= (1 << 7);
-       RCBA16(0x3e48) |= (1 << 7);
-       RCBA32(0x3e0e) |= (1 << 7);
-       RCBA32(0x3e4e) |= (1 << 7);
-
-       // next step only on ich7m b0 and later:
-       reg32 = RCBA32(0x2034);
-       reg32 &= ~(0x0f << 16);
-       reg32 |= (5 << 16);
-       RCBA32(0x2034) = reg32;
-}
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-#include "southbridge/intel/i82801gx/cmos_failover.c"
-#endif
-
-static void init_artec_dongle(void)
-{
-       // Enable 4MB decoding
-       outb(0xf1, 0x88);
-       outb(0xf4, 0x88);
-}
-
-#include <cbmem.h>
-
-// Now, this needs to be included because it relies on the symbol
-// __PRE_RAM__ being set during CAR stage (in order to compile the 
-// BSS free versions of the functions). Either rewrite the code
-// to be always BSS free, or invent a flag that's better suited than
-// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
-//
-#include "lib/cbmem.c"
-
-void real_main(unsigned long bist)
-{
-       u32 reg32;
-       int boot_mode = 0;
-
-       if (bist == 0) {
-               enable_lapic();
-       }
-
-       ich7_enable_lpc();
-       early_superio_config();
-
-       /* Set up the console */
-       uart_init();
-
-#if CONFIG_USBDEBUG_DIRECT
-       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       if (MCHBAR16(SSKPD) == 0xCAFE) {
-               printk_debug("soft reset detected.\n");
-               boot_mode = 1;
-       }
-
-       /* Perform some early chipset initialization required
-        * before RAM initialization can work
-        */
-       i945_early_initialization();
-
-       /* This has to happen after i945_early_initialization() */
-       init_artec_dongle();
-
-       /* Read PM1_CNT */
-       reg32 = inl(DEFAULT_PMBASE + 0x04);
-       printk_debug("PM1_CNT: %08x\n", reg32);
-       if (((reg32 >> 10) & 7) == 5) {
-#if CONFIG_HAVE_ACPI_RESUME
-               printk_debug("Resume from S3 detected.\n");
-               boot_mode = 2;
-               /* Clear SLP_TYPE. This will break stage2 but
-                * we care for that when we get there.
-                */
-               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
-
-#else
-               printk_debug("Resume from S3 detected, but disabled.\n");
-#endif
-       }
-
-       /* Enable SPD ROMs and DDR-II DRAM */
-       enable_smbus();
-       
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-       dump_spd_registers();
-#endif
-
-       sdram_initialize(boot_mode);
-
-       /* Perform some initialization that must run before stage2 */
-       early_ich7_init();
-
-       /* This should probably go away. Until now it is required 
-        * and mainboard specific 
-        */
-       rcba_config();
-
-       /* Chipset Errata! */
-       fixup_i945_errata();
-
-       /* Initialize the internal PCIe links before we go into stage2 */
-       i945_late_initialization();
-
-#if !CONFIG_HAVE_ACPI_RESUME
-#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
-#if defined(DEBUG_RAM_SETUP)
-       sdram_dump_mchbar_registers();
-
-       {
-               /* This will not work if TSEG is in place! */
-               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
-
-               printk_debug("TOM: 0x%08x\n", tom);
-               ram_check(0x00000000, 0x000a0000);
-               ram_check(0x00100000, tom);
-       }
-#endif
-#endif
-#endif
-
-       MCHBAR16(SSKPD) = 0xCAFE;
-
-#if CONFIG_HAVE_ACPI_RESUME
-       /* Start address of high memory tables */
-       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
-
-       /* If there is no high memory area, we didn't boot before, so
-        * this is not a resume. In that case we just create the cbmem toc.
-        */
-       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
-               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
-
-               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
-                * through stage 2. We could keep stuff like stack and heap in high tables
-                * memory completely, but that's a wonderful clean up task for another
-                * day.
-                */
-               if (resume_backup_memory) 
-                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
-
-               /* Magic for S3 resume */
-               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
-       }
-#endif
-}
-
-#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
diff --git a/src/mainboard/roda/rk886ex/romstage.c b/src/mainboard/roda/rk886ex/romstage.c
new file mode 100644 (file)
index 0000000..868d41e
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+ * This file is part of the coreboot project.
+ * 
+ * Copyright (C) 2007-2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+// __PRE_RAM__ means: use "unsigned" for device, not a struct.
+#define __PRE_RAM__
+
+/* Configuration of the i945 driver */
+#define CHIPSET_I945GM 1
+#define CHANNEL_XOR_RANDOMIZATION 1
+// Rocky freezing temperature settings:
+#define MAXIMUM_SUPPORTED_FREQUENCY 400
+
+#include <stdint.h>
+#include <string.h>
+#include <arch/io.h>
+#include <arch/romcc_io.h>
+#include <device/pci_def.h>
+#include <device/pnp_def.h>
+#include <cpu/x86/lapic.h>
+
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include <cpu/x86/bist.h>
+
+#if CONFIG_USBDEBUG_DIRECT
+#define DBGP_DEFAULT 1
+#include "southbridge/intel/i82801gx/i82801gx_usb_debug.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801gx/i82801gx_early_smbus.c"
+
+#include "northbridge/intel/i945/udelay.c"
+
+#include "southbridge/intel/i82801gx/i82801gx.h"
+static void setup_ich7_gpios(void)
+{
+       printk_debug(" GPIOS...");
+       /* General Registers */
+       outl(0xbfc0f7c0, DEFAULT_GPIOBASE + 0x00);      /* GPIO_USE_SEL */
+       outl(0x70a87d83, DEFAULT_GPIOBASE + 0x04);      /* GP_IO_SEL */
+       outl(0x7dc07f83, DEFAULT_GPIOBASE + 0x0c);      /* GP_LVL */
+       /* Output Control Registers */
+       outl(0x00000000, DEFAULT_GPIOBASE + 0x18);      /* GPO_BLINK */
+       /* Input Control Registers */
+       outl(0x00002180, DEFAULT_GPIOBASE + 0x2c);      /* GPI_INV */
+       outl(0x000100e8, DEFAULT_GPIOBASE + 0x30);      /* GPIO_USE_SEL2 */
+       outl(0x00000030, DEFAULT_GPIOBASE + 0x34);      /* GP_IO_SEL2 */
+       outl(0x00010030, DEFAULT_GPIOBASE + 0x38);      /* GP_LVL */
+}
+
+#include "northbridge/intel/i945/early_init.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i945/raminit.h"
+#include "northbridge/intel/i945/raminit.c"
+#include "northbridge/intel/i945/reset_test.c"
+#include "northbridge/intel/i945/errata.c"
+#include "northbridge/intel/i945/debug.c"
+
+static void ich7_enable_lpc(void)
+{
+       // Enable Serial IRQ
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x64, 0xd0);
+       // decode range
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x80, 0x0007);
+       // decode range
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x82, 0x3f0f);
+       // Enable 0x02e0
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x84, 0x02e1);
+       pci_write_config16(PCI_DEV(0, 0x1f, 0), 0x86, 0x001c);
+       // COM3 decode
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x88, 0x00fc0601);
+       // COM4 decode
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0x8c, 0x00040069);
+}
+
+
+/* This box has two superios, so enabling serial becomes slightly excessive.
+ * We disable a lot of stuff to make sure that there are no conflicts between
+ * the two. Also set up the GPIOs from the beginning. This is the "no schematic
+ * but safe anyways" method.
+ */
+static inline void pnp_enter_ext_func_mode(device_t dev)
+{
+       unsigned int port = dev >> 8;
+       outb(0x55, port);
+}
+
+static void pnp_exit_ext_func_mode(device_t dev)
+{
+       unsigned int port = dev >> 8;
+       outb(0xaa, port);
+}
+
+static void pnp_write_register(device_t dev, int reg, int val)
+{
+       unsigned int port = dev >> 8;
+       outb(reg, port);
+       outb(val, port+1);
+}
+
+static void early_superio_config(void)
+{
+       device_t dev;
+
+       dev=PNP_DEV(0x2e, 0x00);
+
+       pnp_enter_ext_func_mode(dev);
+       pnp_write_register(dev, 0x01, 0x94); // Extended Parport modes
+       pnp_write_register(dev, 0x02, 0x88); // UART power on
+       pnp_write_register(dev, 0x03, 0x72); // Floppy
+       pnp_write_register(dev, 0x04, 0x01); // EPP + SPP
+       pnp_write_register(dev, 0x14, 0x03); // Floppy
+       pnp_write_register(dev, 0x20, (0x3f0 >> 2)); // Floppy
+       pnp_write_register(dev, 0x23, (0x378 >> 2)); // PP base
+       pnp_write_register(dev, 0x24, (0x3f8 >> 2)); // UART1 base
+       pnp_write_register(dev, 0x25, (0x2f8 >> 2)); // UART2 base
+       pnp_write_register(dev, 0x26, (2 << 4) | 0); // FDC + PP DMA
+       pnp_write_register(dev, 0x27, (6 << 4) | 7); // FDC + PP DMA
+       pnp_write_register(dev, 0x28, (4 << 4) | 3); // UART1,2 IRQ
+       /* These are the SMI status registers in the SIO: */
+       pnp_write_register(dev, 0x30, (0x600 >> 4)); // Runtime Register Block Base
+
+       pnp_write_register(dev, 0x31, 0x00); // GPIO1 DIR
+       pnp_write_register(dev, 0x32, 0x00); // GPIO1 POL
+       pnp_write_register(dev, 0x33, 0x40); // GPIO2 DIR
+       pnp_write_register(dev, 0x34, 0x00); // GPIO2 POL
+       pnp_write_register(dev, 0x35, 0xff); // GPIO3 DIR
+       pnp_write_register(dev, 0x36, 0x00); // GPIO3 POL
+       pnp_write_register(dev, 0x37, 0xe0); // GPIO4 DIR
+       pnp_write_register(dev, 0x38, 0x00); // GPIO4 POL
+       pnp_write_register(dev, 0x39, 0x80); // GPIO4 POL
+
+       pnp_exit_ext_func_mode(dev);
+}
+
+static void rcba_config(void)
+{
+       /* Set up virtual channel 0 */
+       //RCBA32(0x0014) = 0x80000001;
+       //RCBA32(0x001c) = 0x03128010;
+
+       /* Device 1f interrupt pin register */
+       RCBA32(0x3100) = 0x00042220;
+       /* Device 1d interrupt pin register */
+       RCBA32(0x310c) = 0x00214321;
+
+       /* dev irq route register */
+       RCBA16(0x3140) = 0x0232;
+       RCBA16(0x3142) = 0x3246;
+       RCBA16(0x3144) = 0x0237;
+       RCBA16(0x3146) = 0x3201;
+       RCBA16(0x3148) = 0x3216;
+
+       /* Enable IOAPIC */
+       RCBA8(0x31ff) = 0x03;
+
+       /* Enable upper 128bytes of CMOS */
+       RCBA32(0x3400) = (1 << 2);
+
+       /* Disable unused devices */
+       RCBA32(0x3418) = FD_PCIE6 | FD_PCIE5 | FD_PCIE3 | FD_PCIE2 | 
+                        FD_INTLAN | FD_ACMOD | FD_HDAUD | FD_PATA;
+       RCBA32(0x3418) |= (1 << 0); // Required.
+
+       /* Enable PCIe Root Port Clock Gate */
+       // RCBA32(0x341c) = 0x00000001;
+
+       /* This should probably go into the ACPI OS Init trap */
+
+       /* Set up I/O Trap #0 for 0xfe00 (SMIC) */
+       RCBA32(0x1e84) = 0x00020001;
+       RCBA32(0x1e80) = 0x0000fe01;
+
+       /* Set up I/O Trap #3 for 0x800-0x80c (Trap) */
+       RCBA32(0x1e9c) = 0x000200f0;
+       RCBA32(0x1e98) = 0x000c0801;
+}
+
+static void early_ich7_init(void)
+{
+       uint8_t reg8;
+       uint32_t reg32;
+
+       // program secondary mlt XXX byte?
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
+
+       // reset rtc power status
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xa4);
+       reg8 &= ~(1 << 2);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xa4, reg8);
+
+       // usb transient disconnect
+       reg8 = pci_read_config8(PCI_DEV(0, 0x1f, 0), 0xad);
+       reg8 |= (3 << 0);
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xad, reg8);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xfc);
+       reg32 |= (1 << 29) | (1 << 17);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xfc, reg32);
+
+       reg32 = pci_read_config32(PCI_DEV(0, 0x1d, 7), 0xdc);
+       reg32 |= (1 << 31) | (1 << 27);
+       pci_write_config32(PCI_DEV(0, 0x1d, 7), 0xdc, reg32);
+
+       RCBA32(0x0088) = 0x0011d000;
+       RCBA16(0x01fc) = 0x060f;
+       RCBA32(0x01f4) = 0x86000040;
+       RCBA32(0x0214) = 0x10030549;
+       RCBA32(0x0218) = 0x00020504;
+       RCBA8(0x0220) = 0xc5;
+       reg32 = RCBA32(0x3410);
+       reg32 |= (1 << 6);
+       RCBA32(0x3410) = reg32;
+       reg32 = RCBA32(0x3430);
+       reg32 &= ~(3 << 0);
+       reg32 |= (1 << 0);
+       RCBA32(0x3430) = reg32;
+       RCBA32(0x3418) |= (1 << 0);
+       RCBA16(0x0200) = 0x2008;
+       RCBA8(0x2027) = 0x0d;
+       RCBA16(0x3e08) |= (1 << 7);
+       RCBA16(0x3e48) |= (1 << 7);
+       RCBA32(0x3e0e) |= (1 << 7);
+       RCBA32(0x3e4e) |= (1 << 7);
+
+       // next step only on ich7m b0 and later:
+       reg32 = RCBA32(0x2034);
+       reg32 &= ~(0x0f << 16);
+       reg32 |= (5 << 16);
+       RCBA32(0x2034) = reg32;
+}
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+#include "southbridge/intel/i82801gx/cmos_failover.c"
+#endif
+
+static void init_artec_dongle(void)
+{
+       // Enable 4MB decoding
+       outb(0xf1, 0x88);
+       outb(0xf4, 0x88);
+}
+
+#include <cbmem.h>
+
+// Now, this needs to be included because it relies on the symbol
+// __PRE_RAM__ being set during CAR stage (in order to compile the 
+// BSS free versions of the functions). Either rewrite the code
+// to be always BSS free, or invent a flag that's better suited than
+// __PRE_RAM__ to determine whether we're in ram init stage (stage 1)
+//
+#include "lib/cbmem.c"
+
+void real_main(unsigned long bist)
+{
+       u32 reg32;
+       int boot_mode = 0;
+
+       if (bist == 0) {
+               enable_lapic();
+       }
+
+       ich7_enable_lpc();
+       early_superio_config();
+
+       /* Set up the console */
+       uart_init();
+
+#if CONFIG_USBDEBUG_DIRECT
+       i82801gx_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       if (MCHBAR16(SSKPD) == 0xCAFE) {
+               printk_debug("soft reset detected.\n");
+               boot_mode = 1;
+       }
+
+       /* Perform some early chipset initialization required
+        * before RAM initialization can work
+        */
+       i945_early_initialization();
+
+       /* This has to happen after i945_early_initialization() */
+       init_artec_dongle();
+
+       /* Read PM1_CNT */
+       reg32 = inl(DEFAULT_PMBASE + 0x04);
+       printk_debug("PM1_CNT: %08x\n", reg32);
+       if (((reg32 >> 10) & 7) == 5) {
+#if CONFIG_HAVE_ACPI_RESUME
+               printk_debug("Resume from S3 detected.\n");
+               boot_mode = 2;
+               /* Clear SLP_TYPE. This will break stage2 but
+                * we care for that when we get there.
+                */
+               outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
+
+#else
+               printk_debug("Resume from S3 detected, but disabled.\n");
+#endif
+       }
+
+       /* Enable SPD ROMs and DDR-II DRAM */
+       enable_smbus();
+       
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+       dump_spd_registers();
+#endif
+
+       sdram_initialize(boot_mode);
+
+       /* Perform some initialization that must run before stage2 */
+       early_ich7_init();
+
+       /* This should probably go away. Until now it is required 
+        * and mainboard specific 
+        */
+       rcba_config();
+
+       /* Chipset Errata! */
+       fixup_i945_errata();
+
+       /* Initialize the internal PCIe links before we go into stage2 */
+       i945_late_initialization();
+
+#if !CONFIG_HAVE_ACPI_RESUME
+#if CONFIG_DEFAULT_CONSOLE_LOGLEVEL > 8
+#if defined(DEBUG_RAM_SETUP)
+       sdram_dump_mchbar_registers();
+
+       {
+               /* This will not work if TSEG is in place! */
+               u32 tom = pci_read_config32(PCI_DEV(0,2,0), 0x5c);
+
+               printk_debug("TOM: 0x%08x\n", tom);
+               ram_check(0x00000000, 0x000a0000);
+               ram_check(0x00100000, tom);
+       }
+#endif
+#endif
+#endif
+
+       MCHBAR16(SSKPD) = 0xCAFE;
+
+#if CONFIG_HAVE_ACPI_RESUME
+       /* Start address of high memory tables */
+       unsigned long high_ram_base = get_top_of_ram() - HIGH_MEMORY_SIZE;
+
+       /* If there is no high memory area, we didn't boot before, so
+        * this is not a resume. In that case we just create the cbmem toc.
+        */
+       if ((boot_mode == 2) && cbmem_reinit((u64)high_ram_base)) {
+               void *resume_backup_memory = cbmem_find(CBMEM_ID_RESUME);
+
+               /* copy 1MB - 64K to high tables ram_base to prevent memory corruption
+                * through stage 2. We could keep stuff like stack and heap in high tables
+                * memory completely, but that's a wonderful clean up task for another
+                * day.
+                */
+               if (resume_backup_memory) 
+                       memcpy(resume_backup_memory, CONFIG_RAMBASE, HIGH_MEMORY_SAVE);
+
+               /* Magic for S3 resume */
+               pci_write_config32(PCI_DEV(0, 0x00, 0), SKPAD, 0xcafed00d);
+       }
+#endif
+}
+
+#include "cpu/intel/model_6ex/cache_as_ram_disable.c"
diff --git a/src/mainboard/soyo/sy-6ba-plus-iii/auto.c b/src/mainboard/soyo/sy-6ba-plus-iii/auto.c
deleted file mode 100644 (file)
index 48d18f6..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/ite/it8671f/it8671f_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x370, IT8671F_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       it8671f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/soyo/sy-6ba-plus-iii/romstage.c b/src/mainboard/soyo/sy-6ba-plus-iii/romstage.c
new file mode 100644 (file)
index 0000000..48d18f6
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/ite/it8671f/it8671f_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x370, IT8671F_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       it8671f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/sunw/ultra40/cache_as_ram_auto.c b/src/mainboard/sunw/ultra40/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9a3f948..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, LPC47B397_SP1)
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
-
-#define SUPERIO_GPIO_IO_BASE 0x400
-
-static void sio_gpio_setup(void){
-
-        unsigned value;
-
-        /*Enable onboard scsi*/
-        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x2c, (1<<7)|(0<<2)|(0<<1)|(0<<0)); // GP21, offset 0x2c, DISABLE_SCSI_L 
-        value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x4c);
-        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x4c, (value|(1<<1)));
-
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define CK804_NUM 2
-#define CK804_USE_NIC 1
-#define CK804_USE_ACI 1
-
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-
-//set GPIO to input mode
-#define CK804_MB_SETUP \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 5, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M9,GPIO6, PCIXB2_PRSNT1_L*/  \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXB2_PRSNT2_L*/ \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/  \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 7, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M5,GPIO8, PCIXA_PRSNT2_L*/   \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/  \
-                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/
-
-#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-
-        
-        pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xac, 0x047f0400);
-        
-        byte = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20; 
-        pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
-        
-        dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<29)|(1<<0);
-        pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-        
-#if  1  
-        lpc47b397_enable_serial(SUPERIO_GPIO_DEV, SUPERIO_GPIO_IO_BASE);
-                
-        value =  lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x77);
-        value &= 0xbf; 
-        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x77, value);
-#endif
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the ck804 */
-        ck804_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-
-       lpc47b397_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_ultra40_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        needs_reset |= ht_setup_chains_x();
-
-        needs_reset |= ck804_early_setup_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-        allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/sunw/ultra40/romstage.c b/src/mainboard/sunw/ultra40/romstage.c
new file mode 100644 (file)
index 0000000..9a3f948
--- /dev/null
@@ -0,0 +1,266 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, LPC47B397_SP1)
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
+
+#define SUPERIO_GPIO_IO_BASE 0x400
+
+static void sio_gpio_setup(void){
+
+        unsigned value;
+
+        /*Enable onboard scsi*/
+        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x2c, (1<<7)|(0<<2)|(0<<1)|(0<<0)); // GP21, offset 0x2c, DISABLE_SCSI_L 
+        value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x4c);
+        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x4c, (value|(1<<1)));
+
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define CK804_NUM 2
+#define CK804_USE_NIC 1
+#define CK804_USE_ACI 1
+
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+
+//set GPIO to input mode
+#define CK804_MB_SETUP \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 5, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M9,GPIO6, PCIXB2_PRSNT1_L*/  \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXB2_PRSNT2_L*/ \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/  \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 7, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M5,GPIO8, PCIXA_PRSNT2_L*/   \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/  \
+                RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/
+
+#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+
+        
+        pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xac, 0x047f0400);
+        
+        byte = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20; 
+        pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
+        
+        dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<29)|(1<<0);
+        pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
+        
+#if  1  
+        lpc47b397_enable_serial(SUPERIO_GPIO_DEV, SUPERIO_GPIO_IO_BASE);
+                
+        value =  lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x77);
+        value &= 0xbf; 
+        lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x77, value);
+#endif
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the ck804 */
+        ck804_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+
+       lpc47b397_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_ultra40_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        needs_reset |= ht_setup_chains_x();
+
+        needs_reset |= ck804_early_setup_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+        allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+       post_cache_as_ram();
+}
index b878c05d2bd4c1bb94ecd7b069afcc5617651663..2d87c43ac0be99b5943f9ee59e98d22d74ad1001 100644 (file)
@@ -37,7 +37,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/mcp55/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -70,8 +70,8 @@ $(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' pci4.hex
        mv pci4.hex ssdt4.c
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/supermicro/h8dme/cache_as_ram_auto.c b/src/mainboard/supermicro/h8dme/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 72d5809..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-// used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-// for enable the FAN
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-// #include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static int smbus_send_byte_one(unsigned device, unsigned char val)
-{
-       return do_smbus_send_byte(SMBUS1_IO_BASE, device, val);
-}
-
-static void dump_smbus_registers(void)
-{
-       u32 device;
-
-       print_debug("\r\n");
-       for (device = 1; device < 0x80; device++) {
-               int j;
-               if (smbus_read_byte(device, 0) < 0)
-                       continue;
-               printk_debug("smbus: %02x", device);
-               for (j = 0; j < 256; j++) {
-                       int status;
-                       unsigned char byte;
-                       status = smbus_read_byte(device, j);
-                       if (status < 0) {
-                               break;
-                       }
-                       if ((j & 0xf) == 0) {
-                               printk_debug("\r\n%02x: ", j);
-                       }
-                       byte = status & 0xff;
-                       printk_debug("%02x ", byte);
-               }
-               print_debug("\r\n");
-       }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-/* We don't do any switching yet.
-#define SMBUS_SWITCH1 0x48
-#define SMBUS_SWITCH2 0x49
-       unsigned device=(ctrl->channel0[0])>>8;
-       smbus_send_byte(SMBUS_SWITCH1, device);
-       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
-*/
-       /* nothing to do */
-}
-
-/*
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_SWITCH1 0x48
-#define SMBUS_SWITHC2 0x49
-       smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
-       smbus_send_byte_one(SMBUS_SWITCH2, (device >> 4) & 0x0f);
-       int ret;
-        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
-       dump_smbus_registers();
-        ret = smbus_send_byte(SMBUS_SWITCH1, device);
-        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
-       dump_smbus_registers();
-        ret = smbus_send_byte_one(SMBUS_SWITCH2, device);
-        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
-       dump_smbus_registers();
-}
-*/
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 4
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-
-       u32 value;
-       uint32_t dword;
-       uint8_t byte;
-
-       enable_smbus();
-//      smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
-       smbusx_write_byte(1, (0x58 >> 1), 0xb1, 0xff);  /* set FAN ctrl to DC mode */
-
-       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0);
-       dword |= (1 << 0);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4);
-       dword |= (1 << 16);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       u32 last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the mcp55 */
-       mcp55_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-normal_image:
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */
-           );
-
-      fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image":       /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */
-           )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-#if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-#else
-       real_main(bist, cpu_init_detectedx);
-#endif
-#else
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-/* We have no idea where the SMBUS switch is. This doesn't do anything ATM. */
-#define RC0 (2<<8)
-#define RC1 (1<<8)
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-/* The SPD is being read from the CPU1 (marked CPU2 on the board) and we
-   don't know how to switch the SMBus to decode the CPU0 SPDs. So, The
-   memory on each CPU must be an exact match.
- */
-       static const uint16_t spd_addr[] = {
-               RC0 | (0xa << 3) | 0, RC0 | (0xa << 3) | 2,
-                   RC0 | (0xa << 3) | 4, RC0 | (0xa << 3) | 6,
-               RC0 | (0xa << 3) | 1, RC0 | (0xa << 3) | 3,
-                   RC0 | (0xa << 3) | 5, RC0 | (0xa << 3) | 7,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               RC1 | (0xa << 3) | 0, RC1 | (0xa << 3) | 2,
-                   RC1 | (0xa << 3) | 4, RC1 | (0xa << 3) | 6,
-               RC1 | (0xa << 3) | 1, RC1 | (0xa << 3) | 3,
-                   RC1 | (0xa << 3) | 5, RC1 | (0xa << 3) | 7,
-#endif
-       };
-
-       struct sys_info *sysinfo =
-           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       int needs_reset = 0;
-       unsigned bsp_apicid = 0;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       print_debug("*sysinfo range: [");
-       print_debug_hex32(sysinfo);
-       print_debug(",");
-       print_debug_hex32((unsigned long)sysinfo + sizeof(struct sys_info));
-       print_debug(")\r\n");
-
-       setup_mb_resource_map();
-
-       print_debug("bsp_apicid=");
-       print_debug_hex8(bsp_apicid);
-       print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-       set_sysinfo_in_ram(0);  // in BSP so could hold all ap until sysinfo is in ram
-#endif
-/*     dump_smbus_registers(); */
-       setup_coherent_ht_domain();     // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case)
-        */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* it will set up chains and store link pair for optimization later */
-       ht_setup_chains_x(sysinfo);     // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-       {
-               msr_t msr;
-               msr = rdmsr(0xc0010042);
-               print_debug("begin msr fid, vid ");
-               print_debug_hex32(msr.hi);
-               print_debug_hex32(msr.lo);
-               print_debug("\r\n");
-
-       }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-       init_fidvid_bsp(bsp_apicid);
-
-       // show final fid and vid
-       {
-               msr_t msr;
-               msr = rdmsr(0xc0010042);
-               print_debug("end   msr fid, vid ");
-               print_debug_hex32(msr.hi);
-               print_debug_hex32(msr.lo);
-               print_debug("\r\n");
-
-       }
-#endif
-
-#if 1
-       needs_reset |= optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       needs_reset |= mcp55_early_setup_x();
-
-       // 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();
-       }
-#endif
-       allow_all_aps_stop(bsp_apicid);
-
-       //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();         /* enable in sio_setup */
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-       /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_cache_as_ram();    // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-#endif
diff --git a/src/mainboard/supermicro/h8dme/romstage.c b/src/mainboard/supermicro/h8dme/romstage.c
new file mode 100644 (file)
index 0000000..72d5809
--- /dev/null
@@ -0,0 +1,429 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+// used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+// for enable the FAN
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+// #include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static int smbus_send_byte_one(unsigned device, unsigned char val)
+{
+       return do_smbus_send_byte(SMBUS1_IO_BASE, device, val);
+}
+
+static void dump_smbus_registers(void)
+{
+       u32 device;
+
+       print_debug("\r\n");
+       for (device = 1; device < 0x80; device++) {
+               int j;
+               if (smbus_read_byte(device, 0) < 0)
+                       continue;
+               printk_debug("smbus: %02x", device);
+               for (j = 0; j < 256; j++) {
+                       int status;
+                       unsigned char byte;
+                       status = smbus_read_byte(device, j);
+                       if (status < 0) {
+                               break;
+                       }
+                       if ((j & 0xf) == 0) {
+                               printk_debug("\r\n%02x: ", j);
+                       }
+                       byte = status & 0xff;
+                       printk_debug("%02x ", byte);
+               }
+               print_debug("\r\n");
+       }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+/* We don't do any switching yet.
+#define SMBUS_SWITCH1 0x48
+#define SMBUS_SWITCH2 0x49
+       unsigned device=(ctrl->channel0[0])>>8;
+       smbus_send_byte(SMBUS_SWITCH1, device);
+       smbus_send_byte(SMBUS_SWITCH2, (device >> 4) & 0x0f);
+*/
+       /* nothing to do */
+}
+
+/*
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_SWITCH1 0x48
+#define SMBUS_SWITHC2 0x49
+       smbus_send_byte(SMBUS_SWITCH1, device & 0x0f);
+       smbus_send_byte_one(SMBUS_SWITCH2, (device >> 4) & 0x0f);
+       int ret;
+        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n");
+       dump_smbus_registers();
+        ret = smbus_send_byte(SMBUS_SWITCH1, device);
+        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
+       dump_smbus_registers();
+        ret = smbus_send_byte_one(SMBUS_SWITCH2, device);
+        print_debug("change_i2c_mux ret="); print_debug_hex32(ret); print_debug("\r\n");
+       dump_smbus_registers();
+}
+*/
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 4
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+
+       u32 value;
+       uint32_t dword;
+       uint8_t byte;
+
+       enable_smbus();
+//      smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
+       smbusx_write_byte(1, (0x58 >> 1), 0xb1, 0xff);  /* set FAN ctrl to DC mode */
+
+       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0);
+       dword |= (1 << 0);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4);
+       dword |= (1 << 16);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE + 1, 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       u32 last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the mcp55 */
+       mcp55_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+normal_image:
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */
+           );
+
+      fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image":       /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */
+           )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+#if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+#else
+       real_main(bist, cpu_init_detectedx);
+#endif
+#else
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+/* We have no idea where the SMBUS switch is. This doesn't do anything ATM. */
+#define RC0 (2<<8)
+#define RC1 (1<<8)
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+/* The SPD is being read from the CPU1 (marked CPU2 on the board) and we
+   don't know how to switch the SMBus to decode the CPU0 SPDs. So, The
+   memory on each CPU must be an exact match.
+ */
+       static const uint16_t spd_addr[] = {
+               RC0 | (0xa << 3) | 0, RC0 | (0xa << 3) | 2,
+                   RC0 | (0xa << 3) | 4, RC0 | (0xa << 3) | 6,
+               RC0 | (0xa << 3) | 1, RC0 | (0xa << 3) | 3,
+                   RC0 | (0xa << 3) | 5, RC0 | (0xa << 3) | 7,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               RC1 | (0xa << 3) | 0, RC1 | (0xa << 3) | 2,
+                   RC1 | (0xa << 3) | 4, RC1 | (0xa << 3) | 6,
+               RC1 | (0xa << 3) | 1, RC1 | (0xa << 3) | 3,
+                   RC1 | (0xa << 3) | 5, RC1 | (0xa << 3) | 7,
+#endif
+       };
+
+       struct sys_info *sysinfo =
+           (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       int needs_reset = 0;
+       unsigned bsp_apicid = 0;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       print_debug("*sysinfo range: [");
+       print_debug_hex32(sysinfo);
+       print_debug(",");
+       print_debug_hex32((unsigned long)sysinfo + sizeof(struct sys_info));
+       print_debug(")\r\n");
+
+       setup_mb_resource_map();
+
+       print_debug("bsp_apicid=");
+       print_debug_hex8(bsp_apicid);
+       print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+       set_sysinfo_in_ram(0);  // in BSP so could hold all ap until sysinfo is in ram
+#endif
+/*     dump_smbus_registers(); */
+       setup_coherent_ht_domain();     // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case)
+        */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* it will set up chains and store link pair for optimization later */
+       ht_setup_chains_x(sysinfo);     // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+       {
+               msr_t msr;
+               msr = rdmsr(0xc0010042);
+               print_debug("begin msr fid, vid ");
+               print_debug_hex32(msr.hi);
+               print_debug_hex32(msr.lo);
+               print_debug("\r\n");
+
+       }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+       init_fidvid_bsp(bsp_apicid);
+
+       // show final fid and vid
+       {
+               msr_t msr;
+               msr = rdmsr(0xc0010042);
+               print_debug("end   msr fid, vid ");
+               print_debug_hex32(msr.hi);
+               print_debug_hex32(msr.lo);
+               print_debug("\r\n");
+
+       }
+#endif
+
+#if 1
+       needs_reset |= optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       needs_reset |= mcp55_early_setup_x();
+
+       // 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();
+       }
+#endif
+       allow_all_aps_stop(bsp_apicid);
+
+       //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();         /* enable in sio_setup */
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+       /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_cache_as_ram();    // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+#endif
index 7e8949c5994e95f0e204789d65027cf356189559..d280d6bfd2df31078adc18c0a8586c9b4657f60c 100644 (file)
@@ -36,7 +36,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/mcp55/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -69,8 +69,8 @@ $(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' pci4.hex
        mv pci4.hex ssdt4.c
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/supermicro/h8dmr/cache_as_ram_auto.c b/src/mainboard/supermicro/h8dmr/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9c67527..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 1
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-// for enable the FAN
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c" 
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 4
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-        enable_smbus();
-//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
-       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
-
-        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20; 
-        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-        dword |= (1<<16);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the mcp55 */
-        mcp55_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-        int needs_reset = 0;
-        unsigned bsp_apicid = 0;
-
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-        pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-        uart_init();
-        console_init();
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-        setup_mb_resource_map();
-
-        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-        setup_coherent_ht_domain(); // routing table and start other core0
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-         * So here need to make sure last core0 is started, esp for two way system,
-         * (there may be apic id conflicts in that case)
-         */
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        /* it will set up chains and store link pair for optimization later */
-        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-
-        enable_fid_change();
-
-        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-        init_fidvid_bsp(bsp_apicid);
-
-        // show final fid and vid
-        {
-                msr_t msr;
-                msr=rdmsr(0xc0010042);
-                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-        }
-#endif
-
-#if 1
-        needs_reset |= optimize_link_coherent_ht();
-        needs_reset |= optimize_link_incoherent_ht(sysinfo);
-        needs_reset |= mcp55_early_setup_x();
-
-        // 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();
-        }
-#endif
-        allow_all_aps_stop(bsp_apicid);
-
-        //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-//        enable_smbus(); /* enable in sio_setup */
-
-        memreset_setup();
-
-        //do we need apci timer, tsc...., only debug need it for better output
-        /* all ap stopped? */
-//        init_timer(); // Need to use TMICT to synconize FID/VID
-
-        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-
-#endif
diff --git a/src/mainboard/supermicro/h8dmr/romstage.c b/src/mainboard/supermicro/h8dmr/romstage.c
new file mode 100644 (file)
index 0000000..9c67527
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 1
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+// for enable the FAN
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c" 
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 4
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+        enable_smbus();
+//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
+       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
+
+        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20; 
+        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+        dword |= (1<<16);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the mcp55 */
+        mcp55_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+        int needs_reset = 0;
+        unsigned bsp_apicid = 0;
+
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+        pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+        uart_init();
+        console_init();
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+        setup_mb_resource_map();
+
+        print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+        set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+        setup_coherent_ht_domain(); // routing table and start other core0
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+         * So here need to make sure last core0 is started, esp for two way system,
+         * (there may be apic id conflicts in that case)
+         */
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        /* it will set up chains and store link pair for optimization later */
+        ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+
+        enable_fid_change();
+
+        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+        init_fidvid_bsp(bsp_apicid);
+
+        // show final fid and vid
+        {
+                msr_t msr;
+                msr=rdmsr(0xc0010042);
+                print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+        }
+#endif
+
+#if 1
+        needs_reset |= optimize_link_coherent_ht();
+        needs_reset |= optimize_link_incoherent_ht(sysinfo);
+        needs_reset |= mcp55_early_setup_x();
+
+        // 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();
+        }
+#endif
+        allow_all_aps_stop(bsp_apicid);
+
+        //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+//        enable_smbus(); /* enable in sio_setup */
+
+        memreset_setup();
+
+        //do we need apci timer, tsc...., only debug need it for better output
+        /* all ap stopped? */
+//        init_timer(); // Need to use TMICT to synconize FID/VID
+
+        sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+        post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+
+#endif
index d1e0ef6863c1c07eef59a87ad89a6f6beb1247af..9d1b77116a1134a01f312f5b38ab162fac39a604 100644 (file)
@@ -32,7 +32,7 @@ initobj-y += crt0.o
 # FIXME in $(top)/Makefile
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -62,8 +62,8 @@ $(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' $(obj)/pci4.hex
        mv $(obj)/pci4.hex $(obj)/ssdt4.c
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/supermicro/h8dmr_fam10/cache_as_ram_auto.c b/src/mainboard/supermicro/h8dmr_fam10/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 4ebc47f..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define FAM10_SCAN_PCI_BUS 0
-#define FAM10_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define FAM10_SET_FIDVID 1
-#define FAM10_SET_FIDVID_CORE_RANGE 0
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-// for enable the FAN
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-
-static void post_code(u8 value) {
-       outb(value, 0x80);
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_10xxx_rev.h>
-
-//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdfam10/raminit.h"
-#include "northbridge/amd/amdfam10/amdfam10.h"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdfam10/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdfam10/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-
-#include "northbridge/amd/amdfam10/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdfam10/amdfam10.h"
-#include "northbridge/amd/amdht/ht_wrapper.c"
-
-#include "include/cpu/x86/mem.h"
-#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
-#include "northbridge/amd/amdfam10/raminit_amdmct.c"
-#include "northbridge/amd/amdfam10/amdfam10_pci.c"
-
-#include "resourcemap.c" 
-
-#include "cpu/amd/quadcore/quadcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 4
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_10xxx/init_cpus.c"
-
-#include "cpu/amd/model_10xxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdfam10/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-        enable_smbus();
-//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
-       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
-
-        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20; 
-        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-        dword |= (1<<16);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        set_bsp_node_CHtExtNodeCfgEn();
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the mcp55 */
-        mcp55_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "spd_addr.h"
-#include "cpu/amd/microcode/microcode.c"
-#include "cpu/amd/model_10xxx/update_microcode.c"
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-  struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       u32 bsp_apicid = 0;
-       u32 val;
-       u32 wants_reset;
-       msr_t msr;
-
-  post_code(0x30);
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-  post_code(0x32);
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-        uart_init();
-        console_init();
-  printk_debug("\n");
-
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
- val = cpuid_eax(1);
- printk_debug("BSP Family_Model: %08x \n", val);
- printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
- printk_debug("bsp_apicid = %02x \n", bsp_apicid);
- printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
-
- /* Setup sysinfo defaults */
- set_sysinfo_in_ram(0);
-
- update_microcode(val);
- post_code(0x33);
-
- cpuSetAMDMSR();
- post_code(0x34);
-
- amd_ht_init(sysinfo);
- post_code(0x35);
-
- /* Setup nodes PCI space and start core 0 AP init. */
- finalize_node_setup(sysinfo);
-
- /* Setup any mainboard PCI settings etc. */
- setup_mb_resource_map();
- post_code(0x36);
-
- /* wait for all the APs core0 started by finalize_node_setup. */
- /* FIXME: A bunch of cores are going to start output to serial at once.
-  * It would be nice to fixup prink spinlocks for ROM XIP mode.
-  * I think it could be done by putting the spinlock flag in the cache
-  * of the BSP located right after sysinfo.
-  */
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
- /* Core0 on each node is configured. Now setup any additional cores. */
- printk_debug("start_other_cores()\n");
-        start_other_cores();
- post_code(0x37);
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
- post_code(0x38);
-
-#if FAM10_SET_FIDVID == 1
- msr = rdmsr(0xc0010071);
- printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-
- /* FIXME: The sb fid change may survive the warm reset and only
-  * need to be done once.*/
-
-        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
- post_code(0x39);
-
- if (!warm_reset_detect(0)) {      // BSP is node 0
-   init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
- } else {
-   init_fidvid_stage2(bsp_apicid, 0);  // BSP is node 0
-        }
-
- post_code(0x3A);
-
- /* show final fid and vid */
- msr=rdmsr(0xc0010071);
- printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-#endif
-
- wants_reset = mcp55_early_setup_x();
-
- /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
- if (!warm_reset_detect(0)) {
-   print_info("...WARM RESET...\n\n\n");
-               soft_reset();
-   die("After soft_reset_x - shouldn't see this message!!!\n");
-        }
-
- if (wants_reset)
-   printk_debug("mcp55_early_setup_x wanted additional reset!\n");
-
- post_code(0x3B);
-
-/* It's the time to set ctrl in sysinfo now; */
-printk_debug("fill_mem_ctrl()\n");
-fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-post_code(0x3D);
-
-//printk_debug("enable_smbus()\n");
-//        enable_smbus(); /* enable in sio_setup */
-
-post_code(0x3E);
-
-        memreset_setup();
-
-post_code(0x40);
-
-
- printk_debug("raminit_amdmct()\n");
- raminit_amdmct(sysinfo);
- post_code(0x41);
-
-// printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
- post_cache_as_ram();  // BSP switch stack to ram, copy then execute LB.
- post_code(0x42);  // Should never see this post code.
-
-}
-
-
-#endif
diff --git a/src/mainboard/supermicro/h8dmr_fam10/romstage.c b/src/mainboard/supermicro/h8dmr_fam10/romstage.c
new file mode 100644 (file)
index 0000000..4ebc47f
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define FAM10_SCAN_PCI_BUS 0
+#define FAM10_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define FAM10_SET_FIDVID 1
+#define FAM10_SET_FIDVID_CORE_RANGE 0
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+// for enable the FAN
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+
+static void post_code(u8 value) {
+       outb(value, 0x80);
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_10xxx_rev.h>
+
+//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdfam10/raminit.h"
+#include "northbridge/amd/amdfam10/amdfam10.h"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdfam10/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdfam10/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+
+#include "northbridge/amd/amdfam10/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdfam10/amdfam10.h"
+#include "northbridge/amd/amdht/ht_wrapper.c"
+
+#include "include/cpu/x86/mem.h"
+#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
+#include "northbridge/amd/amdfam10/raminit_amdmct.c"
+#include "northbridge/amd/amdfam10/amdfam10_pci.c"
+
+#include "resourcemap.c" 
+
+#include "cpu/amd/quadcore/quadcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 4
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_10xxx/init_cpus.c"
+
+#include "cpu/amd/model_10xxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdfam10/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+        enable_smbus();
+//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
+       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
+
+        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20; 
+        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+        dword |= (1<<16);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        set_bsp_node_CHtExtNodeCfgEn();
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the mcp55 */
+        mcp55_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "spd_addr.h"
+#include "cpu/amd/microcode/microcode.c"
+#include "cpu/amd/model_10xxx/update_microcode.c"
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+  struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       u32 bsp_apicid = 0;
+       u32 val;
+       u32 wants_reset;
+       msr_t msr;
+
+  post_code(0x30);
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+  post_code(0x32);
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+        uart_init();
+        console_init();
+  printk_debug("\n");
+
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+ val = cpuid_eax(1);
+ printk_debug("BSP Family_Model: %08x \n", val);
+ printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
+ printk_debug("bsp_apicid = %02x \n", bsp_apicid);
+ printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
+
+ /* Setup sysinfo defaults */
+ set_sysinfo_in_ram(0);
+
+ update_microcode(val);
+ post_code(0x33);
+
+ cpuSetAMDMSR();
+ post_code(0x34);
+
+ amd_ht_init(sysinfo);
+ post_code(0x35);
+
+ /* Setup nodes PCI space and start core 0 AP init. */
+ finalize_node_setup(sysinfo);
+
+ /* Setup any mainboard PCI settings etc. */
+ setup_mb_resource_map();
+ post_code(0x36);
+
+ /* wait for all the APs core0 started by finalize_node_setup. */
+ /* FIXME: A bunch of cores are going to start output to serial at once.
+  * It would be nice to fixup prink spinlocks for ROM XIP mode.
+  * I think it could be done by putting the spinlock flag in the cache
+  * of the BSP located right after sysinfo.
+  */
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+ /* Core0 on each node is configured. Now setup any additional cores. */
+ printk_debug("start_other_cores()\n");
+        start_other_cores();
+ post_code(0x37);
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+ post_code(0x38);
+
+#if FAM10_SET_FIDVID == 1
+ msr = rdmsr(0xc0010071);
+ printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+
+ /* FIXME: The sb fid change may survive the warm reset and only
+  * need to be done once.*/
+
+        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+ post_code(0x39);
+
+ if (!warm_reset_detect(0)) {      // BSP is node 0
+   init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
+ } else {
+   init_fidvid_stage2(bsp_apicid, 0);  // BSP is node 0
+        }
+
+ post_code(0x3A);
+
+ /* show final fid and vid */
+ msr=rdmsr(0xc0010071);
+ printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+#endif
+
+ wants_reset = mcp55_early_setup_x();
+
+ /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
+ if (!warm_reset_detect(0)) {
+   print_info("...WARM RESET...\n\n\n");
+               soft_reset();
+   die("After soft_reset_x - shouldn't see this message!!!\n");
+        }
+
+ if (wants_reset)
+   printk_debug("mcp55_early_setup_x wanted additional reset!\n");
+
+ post_code(0x3B);
+
+/* It's the time to set ctrl in sysinfo now; */
+printk_debug("fill_mem_ctrl()\n");
+fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+post_code(0x3D);
+
+//printk_debug("enable_smbus()\n");
+//        enable_smbus(); /* enable in sio_setup */
+
+post_code(0x3E);
+
+        memreset_setup();
+
+post_code(0x40);
+
+
+ printk_debug("raminit_amdmct()\n");
+ raminit_amdmct(sysinfo);
+ post_code(0x41);
+
+// printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
+ post_cache_as_ram();  // BSP switch stack to ram, copy then execute LB.
+ post_code(0x42);  // Should never see this post code.
+
+}
+
+
+#endif
index 915ee8bd7ca1b95d00bbca7e0ad3c16ce52e25d7..a8abf331ee1f63d725406b9c10d64ac4cc07139e 100644 (file)
@@ -19,7 +19,7 @@
 
 /**
  * This file defines the SPD addresses for the mainboard. Must be included in
- * cache_as_ram_auto.c
+ * romstage.c
  */
 
 #define RC00 0
index d1e0ef6863c1c07eef59a87ad89a6f6beb1247af..9d1b77116a1134a01f312f5b38ab162fac39a604 100644 (file)
@@ -32,7 +32,7 @@ initobj-y += crt0.o
 # FIXME in $(top)/Makefile
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -62,8 +62,8 @@ $(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
        perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' $(obj)/pci4.hex
        mv $(obj)/pci4.hex $(obj)/ssdt4.c
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/supermicro/h8qme_fam10/cache_as_ram_auto.c b/src/mainboard/supermicro/h8qme_fam10/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 4ebc47f..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define FAM10_SCAN_PCI_BUS 0
-#define FAM10_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define FAM10_SET_FIDVID 1
-#define FAM10_SET_FIDVID_CORE_RANGE 0
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-// for enable the FAN
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-
-static void post_code(u8 value) {
-       outb(value, 0x80);
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_10xxx_rev.h>
-
-//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdfam10/raminit.h"
-#include "northbridge/amd/amdfam10/amdfam10.h"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdfam10/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdfam10/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-
-#include "northbridge/amd/amdfam10/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdfam10/amdfam10.h"
-#include "northbridge/amd/amdht/ht_wrapper.c"
-
-#include "include/cpu/x86/mem.h"
-#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
-#include "northbridge/amd/amdfam10/raminit_amdmct.c"
-#include "northbridge/amd/amdfam10/amdfam10_pci.c"
-
-#include "resourcemap.c" 
-
-#include "cpu/amd/quadcore/quadcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-#define MCP55_USE_AZA 1
-
-#define MCP55_PCI_E_X_0 4
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_10xxx/init_cpus.c"
-
-#include "cpu/amd/model_10xxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdfam10/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-        unsigned value;
-        uint32_t dword;
-        uint8_t byte;
-        enable_smbus();
-//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
-       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
-
-        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-        byte |= 0x20; 
-        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-        dword |= (1<<0);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-        
-        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-        dword |= (1<<16);
-        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        set_bsp_node_CHtExtNodeCfgEn();
-        enumerate_ht_chain();
-
-        sio_setup();
-
-        /* Setup the mcp55 */
-        mcp55_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-        __asm__ volatile ("jmp __fallback_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1 
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);     
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);     
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "spd_addr.h"
-#include "cpu/amd/microcode/microcode.c"
-#include "cpu/amd/model_10xxx/update_microcode.c"
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-  struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       u32 bsp_apicid = 0;
-       u32 val;
-       u32 wants_reset;
-       msr_t msr;
-
-  post_code(0x30);
-        if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-        }
-
-  post_code(0x32);
-
-       pnp_enter_ext_func_mode(SERIAL_DEV);
-       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       pnp_exit_ext_func_mode(SERIAL_DEV);
-
-        uart_init();
-        console_init();
-  printk_debug("\n");
-
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
- val = cpuid_eax(1);
- printk_debug("BSP Family_Model: %08x \n", val);
- printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
- printk_debug("bsp_apicid = %02x \n", bsp_apicid);
- printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
-
- /* Setup sysinfo defaults */
- set_sysinfo_in_ram(0);
-
- update_microcode(val);
- post_code(0x33);
-
- cpuSetAMDMSR();
- post_code(0x34);
-
- amd_ht_init(sysinfo);
- post_code(0x35);
-
- /* Setup nodes PCI space and start core 0 AP init. */
- finalize_node_setup(sysinfo);
-
- /* Setup any mainboard PCI settings etc. */
- setup_mb_resource_map();
- post_code(0x36);
-
- /* wait for all the APs core0 started by finalize_node_setup. */
- /* FIXME: A bunch of cores are going to start output to serial at once.
-  * It would be nice to fixup prink spinlocks for ROM XIP mode.
-  * I think it could be done by putting the spinlock flag in the cache
-  * of the BSP located right after sysinfo.
-  */
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
- /* Core0 on each node is configured. Now setup any additional cores. */
- printk_debug("start_other_cores()\n");
-        start_other_cores();
- post_code(0x37);
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
- post_code(0x38);
-
-#if FAM10_SET_FIDVID == 1
- msr = rdmsr(0xc0010071);
- printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-
- /* FIXME: The sb fid change may survive the warm reset and only
-  * need to be done once.*/
-
-        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
- post_code(0x39);
-
- if (!warm_reset_detect(0)) {      // BSP is node 0
-   init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
- } else {
-   init_fidvid_stage2(bsp_apicid, 0);  // BSP is node 0
-        }
-
- post_code(0x3A);
-
- /* show final fid and vid */
- msr=rdmsr(0xc0010071);
- printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-#endif
-
- wants_reset = mcp55_early_setup_x();
-
- /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
- if (!warm_reset_detect(0)) {
-   print_info("...WARM RESET...\n\n\n");
-               soft_reset();
-   die("After soft_reset_x - shouldn't see this message!!!\n");
-        }
-
- if (wants_reset)
-   printk_debug("mcp55_early_setup_x wanted additional reset!\n");
-
- post_code(0x3B);
-
-/* It's the time to set ctrl in sysinfo now; */
-printk_debug("fill_mem_ctrl()\n");
-fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-post_code(0x3D);
-
-//printk_debug("enable_smbus()\n");
-//        enable_smbus(); /* enable in sio_setup */
-
-post_code(0x3E);
-
-        memreset_setup();
-
-post_code(0x40);
-
-
- printk_debug("raminit_amdmct()\n");
- raminit_amdmct(sysinfo);
- post_code(0x41);
-
-// printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
- post_cache_as_ram();  // BSP switch stack to ram, copy then execute LB.
- post_code(0x42);  // Should never see this post code.
-
-}
-
-
-#endif
diff --git a/src/mainboard/supermicro/h8qme_fam10/romstage.c b/src/mainboard/supermicro/h8qme_fam10/romstage.c
new file mode 100644 (file)
index 0000000..4ebc47f
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define FAM10_SCAN_PCI_BUS 0
+#define FAM10_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define FAM10_SET_FIDVID 1
+#define FAM10_SET_FIDVID_CORE_RANGE 0
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+// for enable the FAN
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+
+static void post_code(u8 value) {
+       outb(value, 0x80);
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_10xxx_rev.h>
+
+//#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdfam10/raminit.h"
+#include "northbridge/amd/amdfam10/amdfam10.h"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdfam10/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdfam10/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+
+#include "northbridge/amd/amdfam10/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdfam10/amdfam10.h"
+#include "northbridge/amd/amdht/ht_wrapper.c"
+
+#include "include/cpu/x86/mem.h"
+#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
+#include "northbridge/amd/amdfam10/raminit_amdmct.c"
+#include "northbridge/amd/amdfam10/amdfam10_pci.c"
+
+#include "resourcemap.c" 
+
+#include "cpu/amd/quadcore/quadcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+#define MCP55_USE_AZA 1
+
+#define MCP55_PCI_E_X_0 4
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_10xxx/init_cpus.c"
+
+#include "cpu/amd/model_10xxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdfam10/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+        unsigned value;
+        uint32_t dword;
+        uint8_t byte;
+        enable_smbus();
+//     smbusx_write_byte(1, (0x58>>1), 0, 0x80); /* select bank0 */
+       smbusx_write_byte(1, (0x58>>1), 0xb1, 0xff); /* set FAN ctrl to DC mode */
+
+        byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+        byte |= 0x20; 
+        pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+        dword |= (1<<0);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+        
+        dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+        dword |= (1<<16);
+        pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        set_bsp_node_CHtExtNodeCfgEn();
+        enumerate_ht_chain();
+
+        sio_setup();
+
+        /* Setup the mcp55 */
+        mcp55_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+        __asm__ volatile ("jmp __fallback_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1 
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);     
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);     
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "spd_addr.h"
+#include "cpu/amd/microcode/microcode.c"
+#include "cpu/amd/model_10xxx/update_microcode.c"
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+  struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       u32 bsp_apicid = 0;
+       u32 val;
+       u32 wants_reset;
+       msr_t msr;
+
+  post_code(0x30);
+        if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+        }
+
+  post_code(0x32);
+
+       pnp_enter_ext_func_mode(SERIAL_DEV);
+       pnp_write_config(SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       pnp_exit_ext_func_mode(SERIAL_DEV);
+
+        uart_init();
+        console_init();
+  printk_debug("\n");
+
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+ val = cpuid_eax(1);
+ printk_debug("BSP Family_Model: %08x \n", val);
+ printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
+ printk_debug("bsp_apicid = %02x \n", bsp_apicid);
+ printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
+
+ /* Setup sysinfo defaults */
+ set_sysinfo_in_ram(0);
+
+ update_microcode(val);
+ post_code(0x33);
+
+ cpuSetAMDMSR();
+ post_code(0x34);
+
+ amd_ht_init(sysinfo);
+ post_code(0x35);
+
+ /* Setup nodes PCI space and start core 0 AP init. */
+ finalize_node_setup(sysinfo);
+
+ /* Setup any mainboard PCI settings etc. */
+ setup_mb_resource_map();
+ post_code(0x36);
+
+ /* wait for all the APs core0 started by finalize_node_setup. */
+ /* FIXME: A bunch of cores are going to start output to serial at once.
+  * It would be nice to fixup prink spinlocks for ROM XIP mode.
+  * I think it could be done by putting the spinlock flag in the cache
+  * of the BSP located right after sysinfo.
+  */
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+ /* Core0 on each node is configured. Now setup any additional cores. */
+ printk_debug("start_other_cores()\n");
+        start_other_cores();
+ post_code(0x37);
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+ post_code(0x38);
+
+#if FAM10_SET_FIDVID == 1
+ msr = rdmsr(0xc0010071);
+ printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+
+ /* FIXME: The sb fid change may survive the warm reset and only
+  * need to be done once.*/
+
+        enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+ post_code(0x39);
+
+ if (!warm_reset_detect(0)) {      // BSP is node 0
+   init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
+ } else {
+   init_fidvid_stage2(bsp_apicid, 0);  // BSP is node 0
+        }
+
+ post_code(0x3A);
+
+ /* show final fid and vid */
+ msr=rdmsr(0xc0010071);
+ printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+#endif
+
+ wants_reset = mcp55_early_setup_x();
+
+ /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
+ if (!warm_reset_detect(0)) {
+   print_info("...WARM RESET...\n\n\n");
+               soft_reset();
+   die("After soft_reset_x - shouldn't see this message!!!\n");
+        }
+
+ if (wants_reset)
+   printk_debug("mcp55_early_setup_x wanted additional reset!\n");
+
+ post_code(0x3B);
+
+/* It's the time to set ctrl in sysinfo now; */
+printk_debug("fill_mem_ctrl()\n");
+fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+post_code(0x3D);
+
+//printk_debug("enable_smbus()\n");
+//        enable_smbus(); /* enable in sio_setup */
+
+post_code(0x3E);
+
+        memreset_setup();
+
+post_code(0x40);
+
+
+ printk_debug("raminit_amdmct()\n");
+ raminit_amdmct(sysinfo);
+ post_code(0x41);
+
+// printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
+ post_cache_as_ram();  // BSP switch stack to ram, copy then execute LB.
+ post_code(0x42);  // Should never see this post code.
+
+}
+
+
+#endif
index b5994bf017be0ed725d0f62e62f4b923f03ec85b..5b32b4c2d68ea852cf42ebd020608b3489f393e6 100644 (file)
@@ -19,7 +19,7 @@
 
 /**
  * This file defines the SPD addresses for the mainboard. Must be included in
- * cache_as_ram_auto.c
+ * romstage.c
  */
 
 #define RC00 0
diff --git a/src/mainboard/supermicro/x6dai_g/auto.c b/src/mainboard/supermicro/x6dai_g/auto.c
deleted file mode 100644 (file)
index c9289d9..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/esb6300/esb6300_early_smbus.c"
-#include "northbridge/intel/e7525/raminit.h"
-#include "superio/winbond/w83627hf/w83627hf.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-#include "northbridge/intel/e7525/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0808090a
-#define RECVENB_CONFIG  0x0808090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7525/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
-                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       outb(0x87,0x2e);
-       outb(0x87,0x2e);
-       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing 6300ESB?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 0
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 1
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-//     dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-       ram_check(0x00100000, 0x01000000);
-       /* check the first 1M in the 3rd Gig */
-       ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/supermicro/x6dai_g/romstage.c b/src/mainboard/supermicro/x6dai_g/romstage.c
new file mode 100644 (file)
index 0000000..c9289d9
--- /dev/null
@@ -0,0 +1,141 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/esb6300/esb6300_early_smbus.c"
+#include "northbridge/intel/e7525/raminit.h"
+#include "superio/winbond/w83627hf/w83627hf.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+#include "northbridge/intel/e7525/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0808090a
+#define RECVENB_CONFIG  0x0808090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7525/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
+                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       outb(0x87,0x2e);
+       outb(0x87,0x2e);
+       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing 6300ESB?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 0
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 1
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+//     dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+       ram_check(0x00100000, 0x01000000);
+       /* check the first 1M in the 3rd Gig */
+       ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/supermicro/x6dhe_g/auto.c b/src/mainboard/supermicro/x6dhe_g/auto.c
deleted file mode 100644 (file)
index 086dd52..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/esb6300/esb6300_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/winbond/w83627hf/w83627hf.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "x6dhe_g_fixups.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0808090a
-#define RECVENB_CONFIG  0x0808090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = {(0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, (0xa<<3)|3, },
-                       .channel1 = {(0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, (0xa<<3)|7, },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       outb(0x87,0x2e);
-       outb(0x87,0x2e);
-       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-//     report_bist_failure(bist);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing esb6300?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 0
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-//     dump_ipmi_registers();
-//     mainboard_set_e7520_leds();     
-//     memreset_setup();
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 0
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-       dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-       ram_check(0x00100000, 0x01000000);
-       /* check the first 1M in the 3rd Gig */
-       ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/supermicro/x6dhe_g/romstage.c b/src/mainboard/supermicro/x6dhe_g/romstage.c
new file mode 100644 (file)
index 0000000..086dd52
--- /dev/null
@@ -0,0 +1,152 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/esb6300/esb6300_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/winbond/w83627hf/w83627hf.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "x6dhe_g_fixups.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0808090a
+#define RECVENB_CONFIG  0x0808090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = {(0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, (0xa<<3)|3, },
+                       .channel1 = {(0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, (0xa<<3)|7, },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       outb(0x87,0x2e);
+       outb(0x87,0x2e);
+       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+//     report_bist_failure(bist);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing esb6300?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 0
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+//     dump_ipmi_registers();
+//     mainboard_set_e7520_leds();     
+//     memreset_setup();
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 0
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+       dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+       ram_check(0x00100000, 0x01000000);
+       /* check the first 1M in the 3rd Gig */
+       ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/supermicro/x6dhe_g2/auto.c b/src/mainboard/supermicro/x6dhe_g2/auto.c
deleted file mode 100644 (file)
index 4e9c1e2..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/nsc/pc87427/pc87427.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "x6dhe_g2_fixups.c"
-#include "superio/nsc/pc87427/pc87427_early_init.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC87427_SP1)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, PC87427_SP2)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0708090a
-#define RECVENB_CONFIG  0x0708090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
-                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
-
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       outb(0x87,0x2e);
-       outb(0x87,0x2e);
-       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       pc87427_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-//     report_bist_failure(bist);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing ich5r?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 0
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-//     dump_ipmi_registers();
-//     mainboard_set_e7520_leds();     
-//     memreset_setup();
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 0
-       dump_pci_devices();
-#endif
-#if 1
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-       //dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-       ram_check(0x00100000, 0x01000000);
-       /* check the first 1M in the 3rd Gig */
-       ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/supermicro/x6dhe_g2/romstage.c b/src/mainboard/supermicro/x6dhe_g2/romstage.c
new file mode 100644 (file)
index 0000000..4e9c1e2
--- /dev/null
@@ -0,0 +1,153 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/nsc/pc87427/pc87427.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "x6dhe_g2_fixups.c"
+#include "superio/nsc/pc87427/pc87427_early_init.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, PC87427_SP1)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, PC87427_SP2)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0708090a
+#define RECVENB_CONFIG  0x0708090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
+                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
+
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       outb(0x87,0x2e);
+       outb(0x87,0x2e);
+       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       pc87427_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+//     report_bist_failure(bist);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x25a1), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing ich5r?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 0
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+//     dump_ipmi_registers();
+//     mainboard_set_e7520_leds();     
+//     memreset_setup();
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 0
+       dump_pci_devices();
+#endif
+#if 1
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+       //dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+       ram_check(0x00100000, 0x01000000);
+       /* check the first 1M in the 3rd Gig */
+       ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/supermicro/x6dhr_ig/auto.c b/src/mainboard/supermicro/x6dhr_ig/auto.c
deleted file mode 100644 (file)
index 314cc70..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/winbond/w83627hf/w83627hf.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "x6dhr_fixups.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D0F0 | \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0808090a
-#define RECVENB_CONFIG  0x0808090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
-                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       outb(0x87,0x2e);
-       outb(0x87,0x2e);
-       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-//     report_bist_failure(bist);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing ich5?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 0
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-//     dump_ipmi_registers();
-       mainboard_set_e7520_leds();     
-//     memreset_setup();
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 1
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-       dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-//     ram_check(0x00100000, 0x01000000);
-       ram_check(0x00100000, 0x00100100);
-       /* check the first 1M in the 3rd Gig */
-//     ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/supermicro/x6dhr_ig/romstage.c b/src/mainboard/supermicro/x6dhr_ig/romstage.c
new file mode 100644 (file)
index 0000000..314cc70
--- /dev/null
@@ -0,0 +1,154 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/winbond/w83627hf/w83627hf.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "x6dhr_fixups.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D0F0 | \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0808090a
+#define RECVENB_CONFIG  0x0808090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
+                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       outb(0x87,0x2e);
+       outb(0x87,0x2e);
+       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+//     report_bist_failure(bist);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing ich5?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 0
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+//     dump_ipmi_registers();
+       mainboard_set_e7520_leds();     
+//     memreset_setup();
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 1
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+       dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+//     ram_check(0x00100000, 0x01000000);
+       ram_check(0x00100000, 0x00100100);
+       /* check the first 1M in the 3rd Gig */
+//     ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
diff --git a/src/mainboard/supermicro/x6dhr_ig2/auto.c b/src/mainboard/supermicro/x6dhr_ig2/auto.c
deleted file mode 100644 (file)
index 3cb41ad..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7520/raminit.h"
-#include "superio/winbond/w83627hf/w83627hf.h"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "debug.c"
-#include "watchdog.c"
-#include "reset.c"
-#include "x6dhr2_fixups.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-#include "northbridge/intel/e7520/memory_initialized.c"
-#include "cpu/x86/bist.h"
-
-
-#define SIO_GPIO_BASE 0x680
-#define SIO_XBUS_BASE 0x4880
-
-#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
-
-#define DEVPRES_CONFIG  ( \
-       DEVPRES_D0F0 | \
-       DEVPRES_D1F0 | \
-       DEVPRES_D2F0 | \
-       DEVPRES_D3F0 | \
-       DEVPRES_D4F0 | \
-       DEVPRES_D6F0 | \
-       0 )
-#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
-
-#define RECVENA_CONFIG  0x0808090a
-#define RECVENB_CONFIG  0x0808090a
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/e7520/raminit.c"
-#include "lib/generic_sdram.c"
-
-
-static void main(unsigned long bist)
-{
-       /*
-        * 
-        * 
-        */
-       static const struct mem_controller mch[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x00, 0),
-                       .f1 = PCI_DEV(0, 0x00, 1),
-                       .f2 = PCI_DEV(0, 0x00, 2),
-                       .f3 = PCI_DEV(0, 0x00, 3),
-                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
-                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
-               }
-       };
-
-       if (bist == 0) {
-               /* Skip this if there was a built in self test failure */
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       asm volatile ("jmp __cpu_reset");
-               }
-       }
-       /* Setup the console */
-       outb(0x87,0x2e);
-       outb(0x87,0x2e);
-       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
-       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-//     report_bist_failure(bist);
-
-       /* MOVE ME TO A BETTER LOCATION !!! */
-       /* config LPC decode for flash memory access */
-        device_t dev;
-        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
-        if (dev == PCI_DEV_INVALID) {
-                die("Missing ich5?");
-        }
-        pci_write_config32(dev, 0xe8, 0x00000000);
-        pci_write_config8(dev, 0xf0, 0x00);
-
-#if 0
-       display_cpuid_update_microcode();
-#endif
-#if 0
-       print_pci_devices();
-#endif
-#if 1
-       enable_smbus();
-#endif
-#if 0
-//     dump_spd_registers(&cpu[0]);
-       int i;
-       for(i = 0; i < 1; i++) {
-               dump_spd_registers();
-       }
-#endif
-       disable_watchdogs();
-//     dump_ipmi_registers();
-       mainboard_set_e7520_leds();     
-//     memreset_setup();
-       sdram_initialize(ARRAY_SIZE(mch), mch);
-#if 0
-       dump_pci_devices();
-#endif
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x00, 0));
-       dump_bar14(PCI_DEV(0, 0x00, 0));
-#endif
-
-#if 0 // temporarily disabled 
-       /* Check the first 1M */
-//     ram_check(0x00000000, 0x000100000);
-//     ram_check(0x00000000, 0x000a0000);
-//     ram_check(0x00100000, 0x01000000);
-       ram_check(0x00100000, 0x00100100);
-       /* check the first 1M in the 3rd Gig */
-//     ram_check(0x30100000, 0x31000000);
-#endif
-#if 0
-       ram_check(0x00000000, 0x02000000);
-#endif
-       
-#if 0  
-       while(1) {
-               hlt();
-       }
-#endif
-}
diff --git a/src/mainboard/supermicro/x6dhr_ig2/romstage.c b/src/mainboard/supermicro/x6dhr_ig2/romstage.c
new file mode 100644 (file)
index 0000000..3cb41ad
--- /dev/null
@@ -0,0 +1,154 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7520/raminit.h"
+#include "superio/winbond/w83627hf/w83627hf.h"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "debug.c"
+#include "watchdog.c"
+#include "reset.c"
+#include "x6dhr2_fixups.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+#include "northbridge/intel/e7520/memory_initialized.c"
+#include "cpu/x86/bist.h"
+
+
+#define SIO_GPIO_BASE 0x680
+#define SIO_XBUS_BASE 0x4880
+
+#define CONSOLE_SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+#define HIDDEN_SERIAL_DEV  PNP_DEV(0x2e, W83627HF_SP2)
+
+#define DEVPRES_CONFIG  ( \
+       DEVPRES_D0F0 | \
+       DEVPRES_D1F0 | \
+       DEVPRES_D2F0 | \
+       DEVPRES_D3F0 | \
+       DEVPRES_D4F0 | \
+       DEVPRES_D6F0 | \
+       0 )
+#define DEVPRES1_CONFIG (DEVPRES1_D0F1 | DEVPRES1_D8F0)
+
+#define RECVENA_CONFIG  0x0808090a
+#define RECVENB_CONFIG  0x0808090a
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/e7520/raminit.c"
+#include "lib/generic_sdram.c"
+
+
+static void main(unsigned long bist)
+{
+       /*
+        * 
+        * 
+        */
+       static const struct mem_controller mch[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x00, 0),
+                       .f1 = PCI_DEV(0, 0x00, 1),
+                       .f2 = PCI_DEV(0, 0x00, 2),
+                       .f3 = PCI_DEV(0, 0x00, 3),
+                       .channel0 = {(0xa<<3)|3, (0xa<<3)|2, (0xa<<3)|1, (0xa<<3)|0, },
+                       .channel1 = {(0xa<<3)|7, (0xa<<3)|6, (0xa<<3)|5, (0xa<<3)|4, },
+               }
+       };
+
+       if (bist == 0) {
+               /* Skip this if there was a built in self test failure */
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       asm volatile ("jmp __cpu_reset");
+               }
+       }
+       /* Setup the console */
+       outb(0x87,0x2e);
+       outb(0x87,0x2e);
+       pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));
+       w83627hf_enable_dev(CONSOLE_SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+//     report_bist_failure(bist);
+
+       /* MOVE ME TO A BETTER LOCATION !!! */
+       /* config LPC decode for flash memory access */
+        device_t dev;
+        dev = pci_locate_device(PCI_ID(0x8086, 0x24d0), 0);
+        if (dev == PCI_DEV_INVALID) {
+                die("Missing ich5?");
+        }
+        pci_write_config32(dev, 0xe8, 0x00000000);
+        pci_write_config8(dev, 0xf0, 0x00);
+
+#if 0
+       display_cpuid_update_microcode();
+#endif
+#if 0
+       print_pci_devices();
+#endif
+#if 1
+       enable_smbus();
+#endif
+#if 0
+//     dump_spd_registers(&cpu[0]);
+       int i;
+       for(i = 0; i < 1; i++) {
+               dump_spd_registers();
+       }
+#endif
+       disable_watchdogs();
+//     dump_ipmi_registers();
+       mainboard_set_e7520_leds();     
+//     memreset_setup();
+       sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 0
+       dump_pci_devices();
+#endif
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x00, 0));
+       dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+
+#if 0 // temporarily disabled 
+       /* Check the first 1M */
+//     ram_check(0x00000000, 0x000100000);
+//     ram_check(0x00000000, 0x000a0000);
+//     ram_check(0x00100000, 0x01000000);
+       ram_check(0x00100000, 0x00100100);
+       /* check the first 1M in the 3rd Gig */
+//     ram_check(0x30100000, 0x31000000);
+#endif
+#if 0
+       ram_check(0x00000000, 0x02000000);
+#endif
+       
+#if 0  
+       while(1) {
+               hlt();
+       }
+#endif
+}
index fc725128dc06300d800d78fb277a50e229b22984..25176c713354761ae8981ef091cd3fe530aed201 100644 (file)
@@ -44,7 +44,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -61,8 +61,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/acpi/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/technexion/tim5690/cache_as_ram_auto.c b/src/mainboard/technexion/tim5690/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 4919078..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define K8_SET_FIDVID 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define RC0 (6<<8)
-#define RC1 (7<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-
-#define ICS951462_ADDRESS      0x69
-#define SMBUS_HUB 0x71
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#define post_code(x) outb(x, 0x80)
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#include "southbridge/amd/rs690/rs690_early_setup.c"
-#include "southbridge/amd/sb600/sb600_early_setup.c"
-
-/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-/* called in raminit_f.c */
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-/*called in raminit_f.c */
-static inline int spd_read_byte(u32 device, u32 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#include "tn_post_code.c"
-#include "speaker.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* Is this a cpu only reset? Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) {       /* RTC already inited */
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       /* sb600_lpc_port80(); */
-       sb600_pci_port80();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-normal_image:
-       post_code(0x23);
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
-
-fallback_image:
-       post_code(0x25);
-}
-#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
-       int needs_reset = 0;
-       u32 bsp_apicid = 0;
-       msr_t msr;
-       struct cpuid_result cpuid1;
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       technexion_post_code_init();
-       technexion_post_code(LED_MESSAGE_START);
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       enable_rs690_dev8();
-       sb600_lpc_init();
-
-       /* it8712f_enable_serial does not use its 1st parameter. */
-       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
-       it8712f_kill_watchdog();
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
-
-       setup_tim5690_resource_map();
-
-       setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched */
-       wait_all_core0_started();
-       start_other_cores();
-#endif
-       wait_all_aps_started(bsp_apicid);
-
-       ht_setup_chains_x(sysinfo);
-
-       /* run _early_setup before soft-reset. */
-       rs690_early_setup();
-       sb600_early_setup();
-
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-               /* Read FIDVID_STATUS */
-               msr=rdmsr(0xc0010042);
-               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-               enable_fid_change();
-               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-               init_fidvid_bsp(bsp_apicid);
-
-               /* show final fid and vid */
-               msr=rdmsr(0xc0010042);
-               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-       } else {
-               printk_debug("Changing FIDVID not supported\n");
-       }
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       rs690_htinit();
-       printk_debug("needs_reset=0x%x\n", needs_reset);
-
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       speaker_init(255);
-       speaker_on_nodelay();
-
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now; */
-       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
-                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       technexion_post_code(LED_MESSAGE_RAM);
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       speaker_off_nodelay();
-
-       rs690_before_pci_init();
-       sb600_before_pci_init();
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/technexion/tim5690/romstage.c b/src/mainboard/technexion/tim5690/romstage.c
new file mode 100644 (file)
index 0000000..4919078
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define K8_SET_FIDVID 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define RC0 (6<<8)
+#define RC1 (7<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+
+#define ICS951462_ADDRESS      0x69
+#define SMBUS_HUB 0x71
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#define post_code(x) outb(x, 0x80)
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#include "southbridge/amd/rs690/rs690_early_setup.c"
+#include "southbridge/amd/sb600/sb600_early_setup.c"
+
+/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+/* called in raminit_f.c */
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+/*called in raminit_f.c */
+static inline int spd_read_byte(u32 device, u32 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#include "tn_post_code.c"
+#include "speaker.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* Is this a cpu only reset? Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) {       /* RTC already inited */
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       /* sb600_lpc_port80(); */
+       sb600_pci_port80();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+normal_image:
+       post_code(0x23);
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
+
+fallback_image:
+       post_code(0x25);
+}
+#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
+       int needs_reset = 0;
+       u32 bsp_apicid = 0;
+       msr_t msr;
+       struct cpuid_result cpuid1;
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       technexion_post_code_init();
+       technexion_post_code(LED_MESSAGE_START);
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       enable_rs690_dev8();
+       sb600_lpc_init();
+
+       /* it8712f_enable_serial does not use its 1st parameter. */
+       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
+       it8712f_kill_watchdog();
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
+
+       setup_tim5690_resource_map();
+
+       setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched */
+       wait_all_core0_started();
+       start_other_cores();
+#endif
+       wait_all_aps_started(bsp_apicid);
+
+       ht_setup_chains_x(sysinfo);
+
+       /* run _early_setup before soft-reset. */
+       rs690_early_setup();
+       sb600_early_setup();
+
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+               /* Read FIDVID_STATUS */
+               msr=rdmsr(0xc0010042);
+               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+               enable_fid_change();
+               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+               init_fidvid_bsp(bsp_apicid);
+
+               /* show final fid and vid */
+               msr=rdmsr(0xc0010042);
+               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+       } else {
+               printk_debug("Changing FIDVID not supported\n");
+       }
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       rs690_htinit();
+       printk_debug("needs_reset=0x%x\n", needs_reset);
+
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       speaker_init(255);
+       speaker_on_nodelay();
+
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now; */
+       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
+                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       technexion_post_code(LED_MESSAGE_RAM);
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       speaker_off_nodelay();
+
+       rs690_before_pci_init();
+       sb600_before_pci_init();
+
+       post_cache_as_ram();
+}
index dda9ecf0441cd2b726d0494d6863301f449bd4d8..482dfff7248d4227527db3790d5b05bbfc163532 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -55,8 +55,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/acpi/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/technexion/tim8690/cache_as_ram_auto.c b/src/mainboard/technexion/tim8690/cache_as_ram_auto.c
deleted file mode 100644 (file)
index ff86ba3..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-#define K8_SET_FIDVID 1
-#define QRANK_DIMM_SUPPORT 1
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define RC0 (6<<8)
-#define RC1 (7<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-
-#define ICS951462_ADDRESS      0x69
-#define SMBUS_HUB 0x71
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-
-#define post_code(x) outb(x, 0x80)
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/ite/it8712f/it8712f_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#include "southbridge/amd/rs690/rs690_early_setup.c"
-#include "southbridge/amd/sb600/sb600_early_setup.c"
-
-/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-/* called in raminit_f.c */
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-}
-
-/*called in raminit_f.c */
-static inline int spd_read_byte(u32 device, u32 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8.h"
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "northbridge/amd/amdk8/raminit_f.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       /* Is this a cpu only reset? Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal()) {       /* RTC already inited */
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-       enumerate_ht_chain();
-
-       /* sb600_lpc_port80(); */
-       sb600_pci_port80();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal()) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       } else {
-               goto fallback_image;
-       }
-normal_image:
-       post_code(0x23);
-       __asm__ volatile ("jmp __normal_image": /* outputs */
-                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
-
-fallback_image:
-       post_code(0x25);
-}
-#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
-       int needs_reset = 0;
-       u32 bsp_apicid = 0;
-       msr_t msr;
-       struct cpuid_result cpuid1;
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       enable_rs690_dev8();
-       sb600_lpc_init();
-
-       /* it8712f_enable_serial does not use its 1st parameter. */
-       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
-       it8712f_kill_watchdog();
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
-
-       setup_tim8690_resource_map();
-
-       setup_coherent_ht_domain();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* It is said that we should start core1 after all core0 launched */
-       wait_all_core0_started();
-       start_other_cores();
-#endif
-       wait_all_aps_started(bsp_apicid);
-
-       ht_setup_chains_x(sysinfo);
-
-       /* run _early_setup before soft-reset. */
-       rs690_early_setup();
-       sb600_early_setup();
-
-       /* Check to see if processor is capable of changing FIDVID  */
-       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
-       cpuid1 = cpuid(0x80000007);
-       if( (cpuid1.edx & 0x6) == 0x6 ) {
-
-               /* Read FIDVID_STATUS */
-               msr=rdmsr(0xc0010042);
-               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-               enable_fid_change();
-               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-               init_fidvid_bsp(bsp_apicid);
-
-               /* show final fid and vid */
-               msr=rdmsr(0xc0010042);
-               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
-
-       } else {
-               printk_debug("Changing FIDVID not supported\n");
-       }
-
-       needs_reset = optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       rs690_htinit();
-       printk_debug("needs_reset=0x%x\n", needs_reset);
-
-
-       if (needs_reset) {
-               print_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       /* It's the time to set ctrl now; */
-       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
-                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       rs690_before_pci_init();
-       sb600_before_pci_init();
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/technexion/tim8690/romstage.c b/src/mainboard/technexion/tim8690/romstage.c
new file mode 100644 (file)
index 0000000..ff86ba3
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+#define K8_SET_FIDVID 1
+#define QRANK_DIMM_SUPPORT 1
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define RC0 (6<<8)
+#define RC1 (7<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+
+#define ICS951462_ADDRESS      0x69
+#define SMBUS_HUB 0x71
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+
+#define post_code(x) outb(x, 0x80)
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/ite/it8712f/it8712f_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#include "southbridge/amd/rs690/rs690_early_setup.c"
+#include "southbridge/amd/sb600/sb600_early_setup.c"
+
+/* CAN'T BE REMOVED! crt0.S will use it. I don't know WHY!*/
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+/* called in raminit_f.c */
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
+
+/*called in raminit_f.c */
+static inline int spd_read_byte(u32 device, u32 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8.h"
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "northbridge/amd/amdk8/raminit_f.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       /* Is this a cpu only reset? Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal()) {       /* RTC already inited */
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+       enumerate_ht_chain();
+
+       /* sb600_lpc_port80(); */
+       sb600_pci_port80();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal()) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       } else {
+               goto fallback_image;
+       }
+normal_image:
+       post_code(0x23);
+       __asm__ volatile ("jmp __normal_image": /* outputs */
+                         :"a" (bist), "b"(cpu_init_detectedx)  /* inputs */);
+
+fallback_image:
+       post_code(0x25);
+}
+#endif                         /* CONFIG_USE_FALLBACK_IMAGE == 1 */
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const u16 spd_addr[] = { DIMM0, 0, 0, 0, DIMM1, 0, 0, 0, };
+       int needs_reset = 0;
+       u32 bsp_apicid = 0;
+       msr_t msr;
+       struct cpuid_result cpuid1;
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       enable_rs690_dev8();
+       sb600_lpc_init();
+
+       /* it8712f_enable_serial does not use its 1st parameter. */
+       it8712f_enable_serial(0, CONFIG_TTYS0_BASE);
+       it8712f_kill_watchdog();
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       printk_debug("bsp_apicid=0x%x\n", bsp_apicid);
+
+       setup_tim8690_resource_map();
+
+       setup_coherent_ht_domain();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* It is said that we should start core1 after all core0 launched */
+       wait_all_core0_started();
+       start_other_cores();
+#endif
+       wait_all_aps_started(bsp_apicid);
+
+       ht_setup_chains_x(sysinfo);
+
+       /* run _early_setup before soft-reset. */
+       rs690_early_setup();
+       sb600_early_setup();
+
+       /* Check to see if processor is capable of changing FIDVID  */
+       /* otherwise it will throw a GP# when reading FIDVID_STATUS */
+       cpuid1 = cpuid(0x80000007);
+       if( (cpuid1.edx & 0x6) == 0x6 ) {
+
+               /* Read FIDVID_STATUS */
+               msr=rdmsr(0xc0010042);
+               printk_debug("begin msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+               enable_fid_change();
+               enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+               init_fidvid_bsp(bsp_apicid);
+
+               /* show final fid and vid */
+               msr=rdmsr(0xc0010042);
+               printk_debug("end msr fid, vid: hi=0x%x, lo=0x%x\n", msr.hi, msr.lo);
+
+       } else {
+               printk_debug("Changing FIDVID not supported\n");
+       }
+
+       needs_reset = optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       rs690_htinit();
+       printk_debug("needs_reset=0x%x\n", needs_reset);
+
+
+       if (needs_reset) {
+               print_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       /* It's the time to set ctrl now; */
+       printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",
+                    sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       rs690_before_pci_init();
+       sb600_before_pci_init();
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/technologic/ts5300/auto.c b/src/mainboard/technologic/ts5300/auto.c
deleted file mode 100644 (file)
index 31a7518..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * TS5300 specific initialization code.
- *   written by Stefan Reinauer <stepan@coresystems.de>
- *   (c) 2006 coresystems GmbH
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#define ASM_CONSOLE_LOGLEVEL 6
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "cpu/x86/bist.h"
-
-#define TS5300_LED_OFF outb((inb(0x77)&0xfe), 0x77)
-#define TS5300_LED_ON  outb((inb(0x77)|1), 0x77)
-
-#define TS9500_LED_OFF outb((inb(0x19a)&0xfe), 0x19a)
-#define TS9500_LED_ON  outb((inb(0x19a)|1), 0x19a)
-
-/* PAR register setup */
-void setup_pars(void)
-{
-        volatile unsigned long *par;
-        par = (unsigned long *) 0xfffef088;
-
-        /* NOTE: Ron says, move this to mainboard.c */
-       *par++ = 0x00000000;
-       *par++ = 0x340f0070;
-       *par++ = 0x380701f0;
-       *par++ = 0x3c0103f6;
-       *par++ = 0x2c0f0300;
-       *par++ = 0x447c00a0;
-       *par++ = 0xe600000c;
-       *par++ = 0x300046e8;
-       *par++ = 0x500400d0;
-       *par++ = 0x281f0140;
-       *par++ = 0x00000000;
-       *par++ = 0x00000000;
-       *par++ = 0x00000000;
-       *par++ = 0x8a07c940; /* Flash setup */
-       *par++ = 0x00000000;
-       *par++ = 0xee00400e;
-}
-
-#include "cpu/amd/sc520/raminit.c"
-
-static void identify_ts9500(void)
-{
-       unsigned i, val;
-       
-       TS9500_LED_ON;
-
-       print_err("TS-9500 add-on found:\r\n");
-       val=inb(0x19b);
-       for (i=0; i<8; i++) {
-               print_err("  DIP");
-               print_err_char(i+0x31);
-               print_err(": ");
-               if((val&(1<<i))!=0) 
-                       print_err("on\r\n"); 
-               else
-                       print_err("off\r\n"); 
-       }
-       print_err("\r\n");
-       
-       val=inb(0x19a);
-       
-       for (i=6; i<8; i++) {
-               print_err("  JP");
-               print_err_char(i+0x30-5);
-               print_err(": ");
-               if((val&(1<<i))!=0) 
-                       print_err("on\r\n"); 
-               else
-                       print_err("off\r\n"); 
-       }
-       print_err("\r\n");
-
-       TS9500_LED_OFF;
-}
-
-static void identify_system(void)
-{
-       unsigned i,val;
-
-       print_err("Mainboard: ");
-       val=inb(0x74);
-       switch(val) {
-       case 0x50: print_err("TS-5300\r\n"); break;
-       case 0x40: print_err("TS-5400\r\n"); break;
-       case 0x60: print_err("TS-5500\r\n"); break;
-       case 0x20: print_err("TS-5600\r\n"); break;
-       case 0x70: print_err("TS-5700\r\n"); break;
-       default:   print_err("unknown\r\n"); break;
-       }
-
-       val=inb(0x75);
-       print_err("  SRAM option:   ");
-       if((val&1)==0) print_err("not ");
-       print_err("installed\r\n");
-       
-       print_err("  RS-485 option: ");
-       if((val&2)==0) print_err("not ");
-       print_err("installed\r\n");
-
-       val=inb(0x76);
-       print_err("  Temp. range:   ");
-       if((val&2)==0) print_err("commercial\r\n"); 
-       else print_err("industrial\r\n");
-       
-       print_err("\r\n");
-       
-       val=inb(0x77);
-       for (i=1; i<8; i++) {
-               print_err("  JP");
-               print_err_char(i+0x30);
-               print_err(": ");
-               if((val&(1<<i))!=0) 
-                       print_err("on\r\n"); 
-               else
-                       print_err("off\r\n"); 
-       }
-       print_err("\r\n");
-
-       /* Detect TS-9500 */
-       val=inb(0x19d);
-       if(val==0x5f) 
-               identify_ts9500();
-
-}
-
-static void hard_reset(void)
-{
-       print_err("Hard reset called.\n");
-       while (1) ;
-}
-
-static void main(unsigned long bist)
-{
-       volatile int i;
-       unsigned val;
-       
-       TS5300_LED_ON;
-       
-       // Let the hardware settle a bit.
-       for(i = 0; i < 100; i++)
-               ;
-       
-        setupsc520();
-        uart_init();
-        console_init();
-       
-       
-       print_err("Technologic Systems TS5300 - http://www.embeddedx86.com/\r\n");
-       staticmem();
-       print_err("Memory initialized: 32MB\r\n");
-
-#if 1
-       identify_system();
-#endif
-
-#if 0
-       // Check 32MB of memory @ 0 (very slow!)
-       print_err("Checking memory:\r\n");
-       ram_check(0x00000000, 0x000a0000);
-       ram_check(0x000b0000, 0x02000000);
-#endif
-       
-       TS5300_LED_OFF;
-}
-
diff --git a/src/mainboard/technologic/ts5300/romstage.c b/src/mainboard/technologic/ts5300/romstage.c
new file mode 100644 (file)
index 0000000..31a7518
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * TS5300 specific initialization code.
+ *   written by Stefan Reinauer <stepan@coresystems.de>
+ *   (c) 2006 coresystems GmbH
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#define ASM_CONSOLE_LOGLEVEL 6
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "cpu/x86/bist.h"
+
+#define TS5300_LED_OFF outb((inb(0x77)&0xfe), 0x77)
+#define TS5300_LED_ON  outb((inb(0x77)|1), 0x77)
+
+#define TS9500_LED_OFF outb((inb(0x19a)&0xfe), 0x19a)
+#define TS9500_LED_ON  outb((inb(0x19a)|1), 0x19a)
+
+/* PAR register setup */
+void setup_pars(void)
+{
+        volatile unsigned long *par;
+        par = (unsigned long *) 0xfffef088;
+
+        /* NOTE: Ron says, move this to mainboard.c */
+       *par++ = 0x00000000;
+       *par++ = 0x340f0070;
+       *par++ = 0x380701f0;
+       *par++ = 0x3c0103f6;
+       *par++ = 0x2c0f0300;
+       *par++ = 0x447c00a0;
+       *par++ = 0xe600000c;
+       *par++ = 0x300046e8;
+       *par++ = 0x500400d0;
+       *par++ = 0x281f0140;
+       *par++ = 0x00000000;
+       *par++ = 0x00000000;
+       *par++ = 0x00000000;
+       *par++ = 0x8a07c940; /* Flash setup */
+       *par++ = 0x00000000;
+       *par++ = 0xee00400e;
+}
+
+#include "cpu/amd/sc520/raminit.c"
+
+static void identify_ts9500(void)
+{
+       unsigned i, val;
+       
+       TS9500_LED_ON;
+
+       print_err("TS-9500 add-on found:\r\n");
+       val=inb(0x19b);
+       for (i=0; i<8; i++) {
+               print_err("  DIP");
+               print_err_char(i+0x31);
+               print_err(": ");
+               if((val&(1<<i))!=0) 
+                       print_err("on\r\n"); 
+               else
+                       print_err("off\r\n"); 
+       }
+       print_err("\r\n");
+       
+       val=inb(0x19a);
+       
+       for (i=6; i<8; i++) {
+               print_err("  JP");
+               print_err_char(i+0x30-5);
+               print_err(": ");
+               if((val&(1<<i))!=0) 
+                       print_err("on\r\n"); 
+               else
+                       print_err("off\r\n"); 
+       }
+       print_err("\r\n");
+
+       TS9500_LED_OFF;
+}
+
+static void identify_system(void)
+{
+       unsigned i,val;
+
+       print_err("Mainboard: ");
+       val=inb(0x74);
+       switch(val) {
+       case 0x50: print_err("TS-5300\r\n"); break;
+       case 0x40: print_err("TS-5400\r\n"); break;
+       case 0x60: print_err("TS-5500\r\n"); break;
+       case 0x20: print_err("TS-5600\r\n"); break;
+       case 0x70: print_err("TS-5700\r\n"); break;
+       default:   print_err("unknown\r\n"); break;
+       }
+
+       val=inb(0x75);
+       print_err("  SRAM option:   ");
+       if((val&1)==0) print_err("not ");
+       print_err("installed\r\n");
+       
+       print_err("  RS-485 option: ");
+       if((val&2)==0) print_err("not ");
+       print_err("installed\r\n");
+
+       val=inb(0x76);
+       print_err("  Temp. range:   ");
+       if((val&2)==0) print_err("commercial\r\n"); 
+       else print_err("industrial\r\n");
+       
+       print_err("\r\n");
+       
+       val=inb(0x77);
+       for (i=1; i<8; i++) {
+               print_err("  JP");
+               print_err_char(i+0x30);
+               print_err(": ");
+               if((val&(1<<i))!=0) 
+                       print_err("on\r\n"); 
+               else
+                       print_err("off\r\n"); 
+       }
+       print_err("\r\n");
+
+       /* Detect TS-9500 */
+       val=inb(0x19d);
+       if(val==0x5f) 
+               identify_ts9500();
+
+}
+
+static void hard_reset(void)
+{
+       print_err("Hard reset called.\n");
+       while (1) ;
+}
+
+static void main(unsigned long bist)
+{
+       volatile int i;
+       unsigned val;
+       
+       TS5300_LED_ON;
+       
+       // Let the hardware settle a bit.
+       for(i = 0; i < 100; i++)
+               ;
+       
+        setupsc520();
+        uart_init();
+        console_init();
+       
+       
+       print_err("Technologic Systems TS5300 - http://www.embeddedx86.com/\r\n");
+       staticmem();
+       print_err("Memory initialized: 32MB\r\n");
+
+#if 1
+       identify_system();
+#endif
+
+#if 0
+       // Check 32MB of memory @ 0 (very slow!)
+       print_err("Checking memory:\r\n");
+       ram_check(0x00000000, 0x000a0000);
+       ram_check(0x000b0000, 0x02000000);
+#endif
+       
+       TS5300_LED_OFF;
+}
+
diff --git a/src/mainboard/televideo/tc7020/auto.c b/src/mainboard/televideo/tc7020/auto.c
deleted file mode 100644 (file)
index 5c4bbe2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/amd/gx1/raminit.c"
-#include "superio/nsc/pc97317/pc97317_early_serial.c"
-#include "cpu/x86/bist.h"
-#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
-
-static void main(unsigned long bist)
-{
-       /* Initialize the serial console. */
-       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       cs5530_enable_rom();
-
-       /* Initialize RAM. */
-       sdram_init();
-
-       /* Check whether RAM works. */
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/televideo/tc7020/romstage.c b/src/mainboard/televideo/tc7020/romstage.c
new file mode 100644 (file)
index 0000000..5c4bbe2
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Juergen Beisert <juergen@kreuzholzen.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/amd/gx1/raminit.c"
+#include "superio/nsc/pc97317/pc97317_early_serial.c"
+#include "cpu/x86/bist.h"
+#include "southbridge/amd/cs5530/cs5530_enable_rom.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC97317_SP1)
+
+static void main(unsigned long bist)
+{
+       /* Initialize the serial console. */
+       pc97317_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       cs5530_enable_rom();
+
+       /* Initialize RAM. */
+       sdram_init();
+
+       /* Check whether RAM works. */
+       /* ram_check(0, 640 * 1024); */
+}
diff --git a/src/mainboard/thomson/ip1000/auto.c b/src/mainboard/thomson/ip1000/auto.c
deleted file mode 100644 (file)
index 2f3892e..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008-2010 Joseph Smith <joe@settoplinux.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "pc80/udelay_io.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
-#include "northbridge/intel/i82830/raminit.h"
-#include "northbridge/intel/i82830/memory_initialized.c"
-#include "southbridge/intel/i82801xx/i82801xx.h"
-#include "southbridge/intel/i82801xx/i82801xx_reset.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "spd_table.h"
-#include "gpio.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
-
-#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
-
-/**
- * The onboard 64MB PC133 memory does not have a SPD EEPROM so the
- * values have to be set manually, the SO-DIMM socket is located in
- * socket0 (0x50), and the onboard memory is located in socket1 (0x51).
- */
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       int i;
-
-       if (device == 0x50) {
-               return smbus_read_byte(device, address);
-       } else if (device == 0x51) {
-               for (i = 0; i < ARRAY_SIZE(spd_table); i++) {
-                       if (spd_table[i].address == address)
-                               return spd_table[i].data;
-               }
-               return 0xFF; /* Return 0xFF when address is not found. */
-       } else {
-               return 0xFF; /* Return 0xFF on any failures. */
-       }
-}
-
-#include "northbridge/intel/i82830/raminit.c"
-
-/**
- * Setup mainboard specific registers pre raminit.
- */
-static void mb_early_setup(void)
-{
-       /* - Hub Interface to PCI Bridge Registers - */
-       /* 12-Clock Retry Enable */
-       pci_write_config16(PCI_DEV(0, 0x1e, 0), 0x50, 0x1402);
-       /* Master Latency Timer Count */
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
-       /* I/O Address Base */
-       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1c, 0xf0);
-
-       /* - LPC Interface Bridge Registers - */
-       /* Delayed Transaction Enable */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xd0, 0x00000002);
-       /* Disable the TCO Timer system reboot feature */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, 0x02);
-       /* CPU Frequency Strap */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd5, 0x02);
-       /* ACPI base address and enable Resource Indicator */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR | 1)); 
-       /* Enable the SMBUS */
-       enable_smbus();
-       /* ACPI base address and disable Resource Indicator */
-       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR)); 
-       /*  ACPI Enable */
-       pci_write_config8(PCI_DEV(0, 0x1f, 0), ACPI_CNTL, 0x10);
-}
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-               if (memory_initialized()) {
-                       hard_reset();
-               }
-
-       /* Set southbridge and superio gpios */
-       mb_gpio_init();
-
-       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure. */
-       report_bist_failure(bist);
-
-       /* Setup mainboard specific registers */
-       mb_early_setup();
-
-       /* Initialize memory */
-       sdram_initialize();
-
-       /* Check RAM. */
-       /* ram_check(0, 640 * 1024); */
-       /* ram_check(64512 * 1024, 65536 * 1024); */
-}
\ No newline at end of file
diff --git a/src/mainboard/thomson/ip1000/romstage.c b/src/mainboard/thomson/ip1000/romstage.c
new file mode 100644 (file)
index 0000000..2f3892e
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008-2010 Joseph Smith <joe@settoplinux.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "pc80/udelay_io.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "superio/smsc/smscsuperio/smscsuperio_early_serial.c"
+#include "northbridge/intel/i82830/raminit.h"
+#include "northbridge/intel/i82830/memory_initialized.c"
+#include "southbridge/intel/i82801xx/i82801xx.h"
+#include "southbridge/intel/i82801xx/i82801xx_reset.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "spd_table.h"
+#include "gpio.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, SMSCSUPERIO_SP1)
+
+#include "southbridge/intel/i82801xx/i82801xx_early_smbus.c"
+
+/**
+ * The onboard 64MB PC133 memory does not have a SPD EEPROM so the
+ * values have to be set manually, the SO-DIMM socket is located in
+ * socket0 (0x50), and the onboard memory is located in socket1 (0x51).
+ */
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       int i;
+
+       if (device == 0x50) {
+               return smbus_read_byte(device, address);
+       } else if (device == 0x51) {
+               for (i = 0; i < ARRAY_SIZE(spd_table); i++) {
+                       if (spd_table[i].address == address)
+                               return spd_table[i].data;
+               }
+               return 0xFF; /* Return 0xFF when address is not found. */
+       } else {
+               return 0xFF; /* Return 0xFF on any failures. */
+       }
+}
+
+#include "northbridge/intel/i82830/raminit.c"
+
+/**
+ * Setup mainboard specific registers pre raminit.
+ */
+static void mb_early_setup(void)
+{
+       /* - Hub Interface to PCI Bridge Registers - */
+       /* 12-Clock Retry Enable */
+       pci_write_config16(PCI_DEV(0, 0x1e, 0), 0x50, 0x1402);
+       /* Master Latency Timer Count */
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1b, 0x20);
+       /* I/O Address Base */
+       pci_write_config8(PCI_DEV(0, 0x1e, 0), 0x1c, 0xf0);
+
+       /* - LPC Interface Bridge Registers - */
+       /* Delayed Transaction Enable */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), 0xd0, 0x00000002);
+       /* Disable the TCO Timer system reboot feature */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd4, 0x02);
+       /* CPU Frequency Strap */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), 0xd5, 0x02);
+       /* ACPI base address and enable Resource Indicator */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR | 1)); 
+       /* Enable the SMBUS */
+       enable_smbus();
+       /* ACPI base address and disable Resource Indicator */
+       pci_write_config32(PCI_DEV(0, 0x1f, 0), PMBASE, (PMBASE_ADDR)); 
+       /*  ACPI Enable */
+       pci_write_config8(PCI_DEV(0, 0x1f, 0), ACPI_CNTL, 0x10);
+}
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+               if (memory_initialized()) {
+                       hard_reset();
+               }
+
+       /* Set southbridge and superio gpios */
+       mb_gpio_init();
+
+       smscsuperio_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure. */
+       report_bist_failure(bist);
+
+       /* Setup mainboard specific registers */
+       mb_early_setup();
+
+       /* Initialize memory */
+       sdram_initialize();
+
+       /* Check RAM. */
+       /* ram_check(0, 640 * 1024); */
+       /* ram_check(64512 * 1024, 65536 * 1024); */
+}
\ No newline at end of file
diff --git a/src/mainboard/tyan/s1846/auto.c b/src/mainboard/tyan/s1846/auto.c
deleted file mode 100644 (file)
index be6e43b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
-#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
-#include "northbridge/intel/i440bx/raminit.h"
-#include "lib/debug.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "superio/nsc/pc87309/pc87309_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, PC87309_SP1)
-
-static inline int spd_read_byte(unsigned int device, unsigned int address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/intel/i440bx/raminit.c"
-#include "northbridge/intel/i440bx/debug.c"
-
-static void main(unsigned long bist)
-{
-       if (bist == 0)
-               early_mtrr_init();
-
-       pc87309_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       report_bist_failure(bist);
-
-       /* Enable access to the full ROM chip, needed very early by CBFS. */
-       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
-
-       enable_smbus();
-       /* dump_spd_registers(); */
-       sdram_set_registers();
-       sdram_set_spd_registers();
-       sdram_enable();
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/tyan/s1846/romstage.c b/src/mainboard/tyan/s1846/romstage.c
new file mode 100644 (file)
index 0000000..be6e43b
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "southbridge/intel/i82371eb/i82371eb_enable_rom.c"
+#include "southbridge/intel/i82371eb/i82371eb_early_smbus.c"
+#include "northbridge/intel/i440bx/raminit.h"
+#include "lib/debug.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "superio/nsc/pc87309/pc87309_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, PC87309_SP1)
+
+static inline int spd_read_byte(unsigned int device, unsigned int address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/intel/i440bx/raminit.c"
+#include "northbridge/intel/i440bx/debug.c"
+
+static void main(unsigned long bist)
+{
+       if (bist == 0)
+               early_mtrr_init();
+
+       pc87309_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       report_bist_failure(bist);
+
+       /* Enable access to the full ROM chip, needed very early by CBFS. */
+       i82371eb_enable_rom(PCI_DEV(0, 7, 0)); /* ISA bridge is 00:07.0. */
+
+       enable_smbus();
+       /* dump_spd_registers(); */
+       sdram_set_registers();
+       sdram_set_spd_registers();
+       sdram_enable();
+       /* ram_check(0, 640 * 1024); */
+}
index 027dd1fd340e5040e6f85354688f5f564c8073e3..27b522a01f9539b19fed45798673a7db51825d35 100644 (file)
@@ -40,7 +40,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -58,8 +58,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.dsl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/tyan/s2735/cache_as_ram_auto.c b/src/mainboard/tyan/s2735/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 99a38a9..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
-#include "northbridge/intel/e7501/raminit.h"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/intel/e7501/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-// FIXME: There's another hard_reset() in reset.c. Why?
-static void hard_reset(void)
-{
-        /* full reset */
-       outb(0x0a, 0x0cf9);
-        outb(0x0e, 0x0cf9);
-}
-
-static void soft_reset(void)
-{
-#if 1
-        /* link reset */
-       outb(0x02, 0x0cf9);
-        outb(0x06, 0x0cf9);
-#endif
-}
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-
-#include "northbridge/intel/e7501/raminit.c"
-#include "northbridge/intel/e7501/reset_test.c"
-#include "lib/generic_sdram.c"
-
-
-#include "cpu/x86/car/copy_and_run.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/intel/i82801er/cmos_failover.c"
-
-void real_main(unsigned long bist);
-
-void amd64_main(unsigned long bist)
-{
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal()) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else {
-               check_cmos_failed();
-               if (do_normal_boot()) {
-                       goto normal_image;
-               }
-               else {
-                       goto fallback_image;
-               }
-       }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist) /* inputs */
-                );
- cpu_reset:
-//        post_code(0x24);
-#if 0
-        //CPU reset will reset memtroller ???
-        asm volatile ("jmp __cpu_reset" 
-                : /* outputs */ 
-                : "a"(bist) /* inputs */
-                );
-#endif
-
- fallback_image:
-//        post_code(0x25);
-        real_main(bist);
-}
-void real_main(unsigned long bist)
-#else
-void amd64_main(unsigned long bist)
-#endif
-{
-       static const struct mem_controller memctrl[] = {
-                {
-                        .d0 = PCI_DEV(0, 0, 0),
-                        .d0f1 = PCI_DEV(0, 0, 1),
-                        .channel0 = { (0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, 0 },
-                        .channel1 = { (0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, 0 },
-                },
-       };
-       
-       unsigned cpu_reset = 0;
-
-       if (bist == 0) 
-       {
-//             early_mtrr_init();
-                enable_lapic();
-
-        }
-
-//     post_code(0x32);
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-//        setup_s2735_resource_map();
-
-       if(bios_reset_detected()) {
-               cpu_reset = 1;
-               goto cpu_reset_x;
-       }
-
-       enable_smbus();
-#if 0
-       dump_spd_registers(&memctrl[0]);
-#endif
-#if 0
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-       sdram_initialize(1, memctrl);
-
-#if 0
-       dump_pci_devices();
-#endif
-
-#if 1
-        dump_pci_device(PCI_DEV(0, 0, 0));
-#endif
-
-
-#if 1
-        {
-               /* Check value of esp to verify if we have enough rom for stack in Cache as RAM */
-               unsigned v_esp;
-               __asm__ volatile (
-                       "movl   %%esp, %0\n\t"
-                       : "=a" (v_esp)
-               );
-#if CONFIG_USE_INIT
-               printk_debug("v_esp=%08x\r\n", v_esp);
-#else
-               print_debug("v_esp="); print_debug_hex32(v_esp); print_debug("\r\n");
-#endif
-        }
-
-#endif
-#if 1
-
-cpu_reset_x:
-
-#if CONFIG_USE_INIT
-        printk_debug("cpu_reset = %08x\r\n",cpu_reset);
-#else
-        print_debug("cpu_reset = "); print_debug_hex32(cpu_reset); print_debug("\r\n");
-#endif
-
-       if(cpu_reset == 0) {
-               print_debug("Clearing initial memory region: ");
-       }
-       print_debug("No cache as ram now - ");
-
-       /* store cpu_reset to ebx */
-        __asm__ volatile (
-                "movl %0, %%ebx\n\t"
-                ::"a" (cpu_reset)
-        );
-
-       if(cpu_reset==0) {
-#define CLEAR_FIRST_1M_RAM 1
-#include "cpu/x86/car/cache_as_ram_post.c"
-       }
-       else {
-#undef CLEAR_FIRST_1M_RAM 
-#include "cpu/x86/car/cache_as_ram_post.c"
-       }
-
-       __asm__ volatile (
-                /* set new esp */ /* before CONFIG_RAMBASE */
-                "subl   %0, %%ebp\n\t"
-                "subl   %0, %%esp\n\t"
-                ::"a"( (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE)- CONFIG_RAMBASE )
-       );
-
-       {
-               unsigned new_cpu_reset;
-
-               /* get back cpu_reset from ebx */
-               __asm__ volatile (
-                       "movl %%ebx, %0\n\t"
-                       :"=a" (new_cpu_reset)
-               );
-
-                /* We can not go back any more, we lost old stack data in cache as ram*/
-                if(new_cpu_reset==0) {
-                        print_debug("Use Ram as Stack now - done\r\n");
-                } else
-                {  
-                        print_debug("Use Ram as Stack now - \r\n");
-                }
-#if CONFIG_USE_INIT
-                printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
-#else
-                print_debug("new_cpu_reset = "); print_debug_hex32(new_cpu_reset); print_debug("\r\n");
-#endif
-       
-#ifdef DEACTIVATE_CAR
-               print_debug("Deactivating CAR");
-#include DEACTIVATE_CAR_FILE
-               print_debug(" - Done.\r\n");
-#endif
-               /*copy and execute coreboot_ram */
-               copy_and_run(new_cpu_reset);
-               /* We will not return */
-       }
-#endif
-
-
-       print_debug("should not be here -\r\n");
-
-}
index bffb0389a871f96f85b291f5d612aee43284e532..371920dca259654cf170f5cacb7962d4e1bed4fa 100644 (file)
@@ -1,6 +1,6 @@
 void i82801er_hard_reset(void);
 
-/* FIXME: There's another hard_reset() in cache_as_ram_auto.c. Why? */
+/* FIXME: There's another hard_reset() in romstage.c. Why? */
 void hard_reset(void)
 {
        i82801er_hard_reset();
diff --git a/src/mainboard/tyan/s2735/romstage.c b/src/mainboard/tyan/s2735/romstage.c
new file mode 100644 (file)
index 0000000..99a38a9
--- /dev/null
@@ -0,0 +1,274 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include "southbridge/intel/i82801er/i82801er_early_smbus.c"
+#include "northbridge/intel/e7501/raminit.h"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/intel/e7501/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+// FIXME: There's another hard_reset() in reset.c. Why?
+static void hard_reset(void)
+{
+        /* full reset */
+       outb(0x0a, 0x0cf9);
+        outb(0x0e, 0x0cf9);
+}
+
+static void soft_reset(void)
+{
+#if 1
+        /* link reset */
+       outb(0x02, 0x0cf9);
+        outb(0x06, 0x0cf9);
+#endif
+}
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+
+#include "northbridge/intel/e7501/raminit.c"
+#include "northbridge/intel/e7501/reset_test.c"
+#include "lib/generic_sdram.c"
+
+
+#include "cpu/x86/car/copy_and_run.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/intel/i82801er/cmos_failover.c"
+
+void real_main(unsigned long bist);
+
+void amd64_main(unsigned long bist)
+{
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal()) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else {
+               check_cmos_failed();
+               if (do_normal_boot()) {
+                       goto normal_image;
+               }
+               else {
+                       goto fallback_image;
+               }
+       }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist) /* inputs */
+                );
+ cpu_reset:
+//        post_code(0x24);
+#if 0
+        //CPU reset will reset memtroller ???
+        asm volatile ("jmp __cpu_reset" 
+                : /* outputs */ 
+                : "a"(bist) /* inputs */
+                );
+#endif
+
+ fallback_image:
+//        post_code(0x25);
+        real_main(bist);
+}
+void real_main(unsigned long bist)
+#else
+void amd64_main(unsigned long bist)
+#endif
+{
+       static const struct mem_controller memctrl[] = {
+                {
+                        .d0 = PCI_DEV(0, 0, 0),
+                        .d0f1 = PCI_DEV(0, 0, 1),
+                        .channel0 = { (0xa<<3)|0, (0xa<<3)|1, (0xa<<3)|2, 0 },
+                        .channel1 = { (0xa<<3)|4, (0xa<<3)|5, (0xa<<3)|6, 0 },
+                },
+       };
+       
+       unsigned cpu_reset = 0;
+
+       if (bist == 0) 
+       {
+//             early_mtrr_init();
+                enable_lapic();
+
+        }
+
+//     post_code(0x32);
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+//        setup_s2735_resource_map();
+
+       if(bios_reset_detected()) {
+               cpu_reset = 1;
+               goto cpu_reset_x;
+       }
+
+       enable_smbus();
+#if 0
+       dump_spd_registers(&memctrl[0]);
+#endif
+#if 0
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+       sdram_initialize(1, memctrl);
+
+#if 0
+       dump_pci_devices();
+#endif
+
+#if 1
+        dump_pci_device(PCI_DEV(0, 0, 0));
+#endif
+
+
+#if 1
+        {
+               /* Check value of esp to verify if we have enough rom for stack in Cache as RAM */
+               unsigned v_esp;
+               __asm__ volatile (
+                       "movl   %%esp, %0\n\t"
+                       : "=a" (v_esp)
+               );
+#if CONFIG_USE_INIT
+               printk_debug("v_esp=%08x\r\n", v_esp);
+#else
+               print_debug("v_esp="); print_debug_hex32(v_esp); print_debug("\r\n");
+#endif
+        }
+
+#endif
+#if 1
+
+cpu_reset_x:
+
+#if CONFIG_USE_INIT
+        printk_debug("cpu_reset = %08x\r\n",cpu_reset);
+#else
+        print_debug("cpu_reset = "); print_debug_hex32(cpu_reset); print_debug("\r\n");
+#endif
+
+       if(cpu_reset == 0) {
+               print_debug("Clearing initial memory region: ");
+       }
+       print_debug("No cache as ram now - ");
+
+       /* store cpu_reset to ebx */
+        __asm__ volatile (
+                "movl %0, %%ebx\n\t"
+                ::"a" (cpu_reset)
+        );
+
+       if(cpu_reset==0) {
+#define CLEAR_FIRST_1M_RAM 1
+#include "cpu/x86/car/cache_as_ram_post.c"
+       }
+       else {
+#undef CLEAR_FIRST_1M_RAM 
+#include "cpu/x86/car/cache_as_ram_post.c"
+       }
+
+       __asm__ volatile (
+                /* set new esp */ /* before CONFIG_RAMBASE */
+                "subl   %0, %%ebp\n\t"
+                "subl   %0, %%esp\n\t"
+                ::"a"( (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE)- CONFIG_RAMBASE )
+       );
+
+       {
+               unsigned new_cpu_reset;
+
+               /* get back cpu_reset from ebx */
+               __asm__ volatile (
+                       "movl %%ebx, %0\n\t"
+                       :"=a" (new_cpu_reset)
+               );
+
+                /* We can not go back any more, we lost old stack data in cache as ram*/
+                if(new_cpu_reset==0) {
+                        print_debug("Use Ram as Stack now - done\r\n");
+                } else
+                {  
+                        print_debug("Use Ram as Stack now - \r\n");
+                }
+#if CONFIG_USE_INIT
+                printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
+#else
+                print_debug("new_cpu_reset = "); print_debug_hex32(new_cpu_reset); print_debug("\r\n");
+#endif
+       
+#ifdef DEACTIVATE_CAR
+               print_debug("Deactivating CAR");
+#include DEACTIVATE_CAR_FILE
+               print_debug(" - Done.\r\n");
+#endif
+               /*copy and execute coreboot_ram */
+               copy_and_run(new_cpu_reset);
+               /* We will not return */
+       }
+#endif
+
+
+       print_debug("should not be here -\r\n");
+
+}
diff --git a/src/mainboard/tyan/s2850/cache_as_ram_auto.c b/src/mainboard/tyan/s2850/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 352fead..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the amd8111 */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-//     post_code(0x32);
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_default_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s2850/romstage.c b/src/mainboard/tyan/s2850/romstage.c
new file mode 100644 (file)
index 0000000..352fead
--- /dev/null
@@ -0,0 +1,210 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the amd8111 */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+//     post_code(0x32);
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_default_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s2875/cache_as_ram_auto.c b/src/mainboard/tyan/s2875/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 50b12f1..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx)/* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               {
-                       .node_id = 1,
-                       .f0 = PCI_DEV(0, 0x19, 0),
-                       .f1 = PCI_DEV(0, 0x19, 1),
-                       .f2 = PCI_DEV(0, 0x19, 2),
-                       .f3 = PCI_DEV(0, 0x19, 3),
-                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
-                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
-               },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_default_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/tyan/s2875/romstage.c b/src/mainboard/tyan/s2875/romstage.c
new file mode 100644 (file)
index 0000000..50b12f1
--- /dev/null
@@ -0,0 +1,208 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx)/* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               {
+                       .node_id = 1,
+                       .f0 = PCI_DEV(0, 0x19, 0),
+                       .f1 = PCI_DEV(0, 0x19, 1),
+                       .f2 = PCI_DEV(0, 0x19, 2),
+                       .f3 = PCI_DEV(0, 0x19, 3),
+                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
+                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
+               },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_default_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/tyan/s2880/cache_as_ram_auto.c b/src/mainboard/tyan/s2880/cache_as_ram_auto.c
deleted file mode 100644 (file)
index c97f3b7..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               {
-                       .node_id = 1,
-                       .f0 = PCI_DEV(0, 0x19, 0),
-                       .f1 = PCI_DEV(0, 0x19, 1),
-                       .f2 = PCI_DEV(0, 0x19, 2),
-                       .f3 = PCI_DEV(0, 0x19, 3),
-                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
-                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
-               },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_default_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s2880/romstage.c b/src/mainboard/tyan/s2880/romstage.c
new file mode 100644 (file)
index 0000000..c97f3b7
--- /dev/null
@@ -0,0 +1,209 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               {
+                       .node_id = 1,
+                       .f0 = PCI_DEV(0, 0x19, 0),
+                       .f1 = PCI_DEV(0, 0x19, 1),
+                       .f2 = PCI_DEV(0, 0x19, 2),
+                       .f3 = PCI_DEV(0, 0x19, 3),
+                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
+                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
+               },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_default_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s2881/cache_as_ram_auto.c b/src/mainboard/tyan/s2881/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9d5edcb..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the amd8111 */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-
-//     post_code(0x32);
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_s2881_resource_map();
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-#if 0
-       dump_spd_registers(&cpu[0]);
-#endif
-#if 0
-       dump_smbus_registers();
-#endif
-
-        allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-        memreset_setup();
-        sdram_initialize(nodes, ctrl);
-
-#if 0
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s2881/romstage.c b/src/mainboard/tyan/s2881/romstage.c
new file mode 100644 (file)
index 0000000..9d5edcb
--- /dev/null
@@ -0,0 +1,239 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the amd8111 */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+
+//     post_code(0x32);
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_s2881_resource_map();
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+#if 0
+       dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+       dump_smbus_registers();
+#endif
+
+        allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+        memreset_setup();
+        sdram_initialize(nodes, ctrl);
+
+#if 0
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s2882/cache_as_ram_auto.c b/src/mainboard/tyan/s2882/cache_as_ram_auto.c
deleted file mode 100644 (file)
index cdea693..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/resourcemap.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define FIRST_CPU  1
-#define SECOND_CPU 1
-#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-               {
-                       .node_id = 0,
-                       .f0 = PCI_DEV(0, 0x18, 0),
-                       .f1 = PCI_DEV(0, 0x18, 1),
-                       .f2 = PCI_DEV(0, 0x18, 2),
-                       .f3 = PCI_DEV(0, 0x18, 3),
-                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
-                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
-               },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               {
-                       .node_id = 1,
-                       .f0 = PCI_DEV(0, 0x19, 0),
-                       .f1 = PCI_DEV(0, 0x19, 1),
-                       .f2 = PCI_DEV(0, 0x19, 2),
-                       .f3 = PCI_DEV(0, 0x19, 3),
-                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
-                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
-               },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_default_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-        // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/tyan/s2882/romstage.c b/src/mainboard/tyan/s2882/romstage.c
new file mode 100644 (file)
index 0000000..cdea693
--- /dev/null
@@ -0,0 +1,213 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/resourcemap.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define FIRST_CPU  1
+#define SECOND_CPU 1
+#define TOTAL_CPUS (FIRST_CPU + SECOND_CPU)
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist) , "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+               {
+                       .node_id = 0,
+                       .f0 = PCI_DEV(0, 0x18, 0),
+                       .f1 = PCI_DEV(0, 0x18, 1),
+                       .f2 = PCI_DEV(0, 0x18, 2),
+                       .f3 = PCI_DEV(0, 0x18, 3),
+                       .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
+                       .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
+               },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               {
+                       .node_id = 1,
+                       .f0 = PCI_DEV(0, 0x19, 0),
+                       .f1 = PCI_DEV(0, 0x19, 1),
+                       .f2 = PCI_DEV(0, 0x19, 2),
+                       .f3 = PCI_DEV(0, 0x19, 3),
+                       .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
+                       .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
+               },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_default_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+        // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/tyan/s2885/cache_as_ram_auto.c b/src/mainboard/tyan/s2885/cache_as_ram_auto.c
deleted file mode 100644 (file)
index d561e03..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#if 0
-static void post_code(uint8_t value) {
-#if 1
-        int i;
-        for(i=0;i<0x80000;i++) {
-                outb(value, 0x80);
-        }
-#endif
-}
-#endif
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        /* Setup the amd8111 */
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-//        post_code(0x22);
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-//        post_code(0x23);
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-//        post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-
-//     post_code(0x32);
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
-       
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_s2885_resource_map();
-#if 0
-        dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-
-        allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-        enable_smbus();
-
-        memreset_setup();
-        sdram_initialize(nodes, ctrl);
-
-#if 0
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/tyan/s2885/romstage.c b/src/mainboard/tyan/s2885/romstage.c
new file mode 100644 (file)
index 0000000..d561e03
--- /dev/null
@@ -0,0 +1,237 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+        int i;
+        for(i=0;i<0x80000;i++) {
+                outb(value, 0x80);
+        }
+#endif
+}
+#endif
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        /* Setup the amd8111 */
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+//        post_code(0x22);
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+//        post_code(0x23);
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+//        post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+
+//     post_code(0x32);
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+//     dump_mem(CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE-0x200, CONFIG_DCACHE_RAM_BASE+CONFIG_DCACHE_RAM_SIZE);
+       
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_s2885_resource_map();
+#if 0
+        dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+
+        allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+        enable_smbus();
+
+        memreset_setup();
+        sdram_initialize(nodes, ctrl);
+
+#if 0
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/tyan/s2891/cache_as_ram_auto.c b/src/mainboard/tyan/s2891/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9ace5e3..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-//used by raminit
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define CK804_NUM 1
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-#include "southbridge/nvidia/ck804/ck804_early_setup.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       /* subject decoding*/
-       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       /* LPC Positive Decode 0 */
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
-       /* Serial 0, Serial 1 */
-       dword |= (1<<0) | (1<<1);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-
-#if 1
-       /* s2891 has onboard LPC port 80 */
-       /*Hope I can enable port 80 here
-       It will decode port 80 to LPC, If you are using PCI post code you can not do this */
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4);
-       dword |= (1<<16);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
-
-#endif
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-       if (last_boot_normal_x) {
-       goto normal_image;
-       } else {
-       goto fallback_image;
-       }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the ck804 */
-       ck804_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-//     post_code(0x22);
-       if (bios_reset_detected() && last_boot_normal_x) {
-       goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-       goto normal_image;
-       }
-       else {
-       goto fallback_image;
-       }
- normal_image:
-//     post_code(0x23);
-       __asm__ volatile ("jmp __normal_image"
-       : /* outputs */
-       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
-       );
-
- fallback_image:
-//     post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-               failover_process(bist, cpu_init_detectedx);
-#endif
-       real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       int needs_reset;
-       unsigned bsp_apicid = 0;
-
-       struct mem_controller ctrl[8];
-       unsigned nodes;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-       }
-
-//     post_code(0x32);
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       setup_s2891_resource_map();
-#if 0
-       dump_pci_device(PCI_DEV(0, 0x18, 0));
-       dump_pci_device(PCI_DEV(0, 0x19, 0));
-#endif
-
-       needs_reset = setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       needs_reset |= ht_setup_chains_x();
-
-       needs_reset |= ck804_early_setup_x();
-
-       if (needs_reset) {
-               printk_info("ht reset -\r\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-       //It's the time to set ctrl now;
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-#if 0
-       dump_spd_registers(&cpu[0]);
-#endif
-#if 0
-       dump_smbus_registers();
-#endif
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-#if 0
-       print_pci_devices();
-#endif
-
-#if 0
-       dump_pci_devices();
-#endif
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s2891/romstage.c b/src/mainboard/tyan/s2891/romstage.c
new file mode 100644 (file)
index 0000000..9ace5e3
--- /dev/null
@@ -0,0 +1,255 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+//used by raminit
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define CK804_NUM 1
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+#include "southbridge/nvidia/ck804/ck804_early_setup.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       /* subject decoding*/
+       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       /* LPC Positive Decode 0 */
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
+       /* Serial 0, Serial 1 */
+       dword |= (1<<0) | (1<<1);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
+
+#if 1
+       /* s2891 has onboard LPC port 80 */
+       /*Hope I can enable port 80 here
+       It will decode port 80 to LPC, If you are using PCI post code you can not do this */
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4);
+       dword |= (1<<16);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
+
+#endif
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+       if (last_boot_normal_x) {
+       goto normal_image;
+       } else {
+       goto fallback_image;
+       }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the ck804 */
+       ck804_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+//     post_code(0x22);
+       if (bios_reset_detected() && last_boot_normal_x) {
+       goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+       goto normal_image;
+       }
+       else {
+       goto fallback_image;
+       }
+ normal_image:
+//     post_code(0x23);
+       __asm__ volatile ("jmp __normal_image"
+       : /* outputs */
+       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
+       );
+
+ fallback_image:
+//     post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+               failover_process(bist, cpu_init_detectedx);
+#endif
+       real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       int needs_reset;
+       unsigned bsp_apicid = 0;
+
+       struct mem_controller ctrl[8];
+       unsigned nodes;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+       }
+
+//     post_code(0x32);
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       setup_s2891_resource_map();
+#if 0
+       dump_pci_device(PCI_DEV(0, 0x18, 0));
+       dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
+       needs_reset = setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       needs_reset |= ht_setup_chains_x();
+
+       needs_reset |= ck804_early_setup_x();
+
+       if (needs_reset) {
+               printk_info("ht reset -\r\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+       //It's the time to set ctrl now;
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+#if 0
+       dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+       dump_smbus_registers();
+#endif
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+#if 0
+       print_pci_devices();
+#endif
+
+#if 0
+       dump_pci_devices();
+#endif
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s2892/cache_as_ram_auto.c b/src/mainboard/tyan/s2892/cache_as_ram_auto.c
deleted file mode 100644 (file)
index e94017e..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#define post_code(x) outb(x, 0x80)
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define CK804_NUM 1
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-//set GPIO to input mode
-#define CK804_MB_SETUP \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXA_PRSNT2_L*/ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/ \
-
-#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-       uint32_t dword;
-       uint8_t byte;
-
-       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
-       dword |= (1<<0);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the ck804 */
-       ck804_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-//     post_code(0x22);
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
- normal_image:
-//     post_code(0x23);
-       __asm__ volatile ("jmp __normal_image"
-       : /* outputs */
-       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
-       );
-
- fallback_image:
-//     post_code(0x25);
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-       #endif
-       real_main(bist, cpu_init_detectedx);
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       int needs_reset;
-       unsigned bsp_apicid = 0;
-
-       struct mem_controller ctrl[8];
-       unsigned nodes;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-       }
-
-//     post_code(0x32);
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       setup_mb_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       needs_reset |= ht_setup_chains_x();
-
-       needs_reset |= ck804_early_setup_x();
-
-       if (needs_reset) {
-               printk_info("ht reset -\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-       //It's the time to set ctrl now;
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-       sdram_initialize(nodes, ctrl);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s2892/romstage.c b/src/mainboard/tyan/s2892/romstage.c
new file mode 100644 (file)
index 0000000..e94017e
--- /dev/null
@@ -0,0 +1,223 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#define post_code(x) outb(x, 0x80)
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define CK804_NUM 1
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+//set GPIO to input mode
+#define CK804_MB_SETUP \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXA_PRSNT2_L*/ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/ \
+
+#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+       uint32_t dword;
+       uint8_t byte;
+
+       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
+       dword |= (1<<0);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the ck804 */
+       ck804_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+//     post_code(0x22);
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+ normal_image:
+//     post_code(0x23);
+       __asm__ volatile ("jmp __normal_image"
+       : /* outputs */
+       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
+       );
+
+ fallback_image:
+//     post_code(0x25);
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+       #endif
+       real_main(bist, cpu_init_detectedx);
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       int needs_reset;
+       unsigned bsp_apicid = 0;
+
+       struct mem_controller ctrl[8];
+       unsigned nodes;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+       }
+
+//     post_code(0x32);
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       setup_mb_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       needs_reset |= ht_setup_chains_x();
+
+       needs_reset |= ck804_early_setup_x();
+
+       if (needs_reset) {
+               printk_info("ht reset -\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+       //It's the time to set ctrl now;
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+       sdram_initialize(nodes, ctrl);
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s2895/cache_as_ram_auto.c b/src/mainboard/tyan/s2895/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 78ddd1c..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
-#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
-#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
-
-#define SUPERIO_GPIO_IO_BASE 0x400
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, LPC47B397_SP1)
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static void sio_gpio_setup(void){
-
-       unsigned value;
-
-       /*Enable onboard scsi*/
-       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x2c, (1<<7)|(0<<2)|(0<<1)|(0<<0)); // GP21, offset 0x2c, DISABLE_SCSI_L
-       value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x4c);
-       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x4c, (value|(1<<1)));
-
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define CK804_NUM 2
-#define CK804_USE_NIC 1
-#define CK804_USE_ACI 1
-
-#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
-
-//set GPIO to input mode
-#define CK804_MB_SETUP \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 5, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M9,GPIO6, PCIXB2_PRSNT1_L*/  \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXB2_PRSNT2_L*/ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/  \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 7, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M5,GPIO8, PCIXA_PRSNT2_L*/   \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/  \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/
-
-#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-static void sio_setup(void)
-{
-
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xac, 0x047f0400);
-
-       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
-       dword |= (1<<29)|(1<<0);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xa4);
-       dword |= (1<<16);
-       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
-
-       lpc47b397_enable_serial(SUPERIO_GPIO_DEV, SUPERIO_GPIO_IO_BASE);
-       value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x77);
-       value &= 0xbf;
-       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x77, value);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-       if (last_boot_normal_x) {
-       goto normal_image;
-       } else {
-       goto fallback_image;
-       }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the ck804 */
-       ck804_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-//     post_code(0x22);
-       if (bios_reset_detected() && last_boot_normal_x) {
-       goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-       goto normal_image;
-       }
-       else {
-       goto fallback_image;
-       }
- normal_image:
-//     post_code(0x23);
-       __asm__ volatile ("jmp __normal_image"
-       : /* outputs */
-       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
-       );
-
- fallback_image:
-//     post_code(0x25);
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-       : /* outputs */
-       : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-       )
-#endif
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-       #else
-       real_main(bist, cpu_init_detectedx);
-       #endif
-#else
-       #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-       #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       int needs_reset;
-       unsigned bsp_apicid = 0;
-
-       struct mem_controller ctrl[8];
-       unsigned nodes;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx);
-       }
-
-//     post_code(0x32);
-
-       lpc47b397_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       sio_gpio_setup();
-
-       setup_mb_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       needs_reset |= ht_setup_chains_x();
-
-       needs_reset |= ck804_early_setup_x();
-
-       if (needs_reset) {
-               printk_info("ht reset -\n");
-               soft_reset();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       nodes = get_nodes();
-       //It's the time to set ctrl now;
-       fill_mem_ctrl(nodes, ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-       post_cache_as_ram();
-}
-#endif
diff --git a/src/mainboard/tyan/s2895/romstage.c b/src/mainboard/tyan/s2895/romstage.c
new file mode 100644 (file)
index 0000000..78ddd1c
--- /dev/null
@@ -0,0 +1,291 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
+#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
+#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
+
+#define SUPERIO_GPIO_IO_BASE 0x400
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, LPC47B397_SP1)
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static void sio_gpio_setup(void){
+
+       unsigned value;
+
+       /*Enable onboard scsi*/
+       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x2c, (1<<7)|(0<<2)|(0<<1)|(0<<0)); // GP21, offset 0x2c, DISABLE_SCSI_L
+       value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x4c);
+       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x4c, (value|(1<<1)));
+
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define CK804_NUM 2
+#define CK804_USE_NIC 1
+#define CK804_USE_ACI 1
+
+#include "southbridge/nvidia/ck804/ck804_early_setup_ss.h"
+
+//set GPIO to input mode
+#define CK804_MB_SETUP \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 5, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M9,GPIO6, PCIXB2_PRSNT1_L*/  \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+15, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M8,GPIO16, PCIXB2_PRSNT2_L*/ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+44, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P5,GPIO45, PCIXA_PRSNT1_L*/  \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+ 7, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* M5,GPIO8, PCIXA_PRSNT2_L*/   \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+16, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* K4,GPIO17, PCIXB_PRSNT1_L*/  \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+45, ~(0xff),((0<<4)|(0<<2)|(0<<0)),/* P7,GPIO46, PCIXB_PRSNT2_L*/
+
+#include "southbridge/nvidia/ck804/ck804_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+static void sio_setup(void)
+{
+
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xac, 0x047f0400);
+
+       byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
+       dword |= (1<<29)|(1<<0);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xa4);
+       dword |= (1<<16);
+       pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
+
+       lpc47b397_enable_serial(SUPERIO_GPIO_DEV, SUPERIO_GPIO_IO_BASE);
+       value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x77);
+       value &= 0xbf;
+       lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x77, value);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+       if (last_boot_normal_x) {
+       goto normal_image;
+       } else {
+       goto fallback_image;
+       }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the ck804 */
+       ck804_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+//     post_code(0x22);
+       if (bios_reset_detected() && last_boot_normal_x) {
+       goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+       goto normal_image;
+       }
+       else {
+       goto fallback_image;
+       }
+ normal_image:
+//     post_code(0x23);
+       __asm__ volatile ("jmp __normal_image"
+       : /* outputs */
+       : "a" (bist), "b"(cpu_init_detectedx) /* inputs */
+       );
+
+ fallback_image:
+//     post_code(0x25);
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+       : /* outputs */
+       : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+       )
+#endif
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+       #else
+       real_main(bist, cpu_init_detectedx);
+       #endif
+#else
+       #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+       #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+               (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+               (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+               (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+               (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       int needs_reset;
+       unsigned bsp_apicid = 0;
+
+       struct mem_controller ctrl[8];
+       unsigned nodes;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx);
+       }
+
+//     post_code(0x32);
+
+       lpc47b397_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       sio_gpio_setup();
+
+       setup_mb_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       needs_reset |= ht_setup_chains_x();
+
+       needs_reset |= ck804_early_setup_x();
+
+       if (needs_reset) {
+               printk_info("ht reset -\n");
+               soft_reset();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       nodes = get_nodes();
+       //It's the time to set ctrl now;
+       fill_mem_ctrl(nodes, ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+       post_cache_as_ram();
+}
+#endif
index 7ca52cccd32331df0c8c3a5125f065a9b86241f3..4da637b84aa2b5b805fb8012e9395ab363feacc7 100644 (file)
@@ -25,7 +25,7 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
@@ -36,7 +36,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/southbridge/nvidia/mcp55/romstrap.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -57,11 +57,11 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/tyan/s2912/cache_as_ram_auto.c b/src/mainboard/tyan/s2912/cache_as_ram_auto.c
deleted file mode 100644 (file)
index ce46630..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define K8_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-//used by init_cpus and fidvid
-#define K8_SET_FIDVID 0
-//if we want to wait for core1 done before DQS training, set it to 0
-#define K8_SET_FIDVID_CORE0_ONLY 1
-
-#if CONFIG_K8_REV_F_SUPPORT == 1
-#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
-#endif
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdk8/amdk8_f.h"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-
-#include "northbridge/amd/amdk8/raminit_f.c"
-
-#include "lib/generic_sdram.c"
-
-#include "resourcemap.c"
-
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-
-#define MCP55_PCI_E_X_0 1
-
-#define MCP55_MB_SETUP \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#include "cpu/amd/model_fxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-       /*serial 0 */
-       dword |= (1<<0);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-       dword |= (1<<16);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the mcp55 */
-       mcp55_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
- normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
-                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
-                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
-#endif
-       };
-
-       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       int needs_reset = 0;
-       unsigned bsp_apicid = 0;
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-
-       setup_mb_resource_map();
-
-       uart_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-
-#if CONFIG_USBDEBUG_DIRECT
-       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-       console_init();
-       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
-
-       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
-
-#if CONFIG_MEM_TRAIN_SEQ == 1
-       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
-#endif
-       setup_coherent_ht_domain(); // routing table and start other core0
-
-       wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-       // It is said that we should start core1 after all core0 launched
-       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
-        * So here need to make sure last core0 is started, esp for two way system,
-        * (there may be apic id conflicts in that case)
-        */
-       start_other_cores();
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       /* it will set up chains and store link pair for optimization later */
-       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
-
-#if K8_SET_FIDVID == 1
-
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-       }
-
-       enable_fid_change();
-
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-       init_fidvid_bsp(bsp_apicid);
-
-       // show final fid and vid
-       {
-               msr_t msr;
-               msr=rdmsr(0xc0010042);
-               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
-
-       }
-#endif
-
-       needs_reset |= optimize_link_coherent_ht();
-       needs_reset |= optimize_link_incoherent_ht(sysinfo);
-       needs_reset |= mcp55_early_setup_x();
-
-       // 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();
-       }
-
-       allow_all_aps_stop(bsp_apicid);
-
-       //It's the time to set ctrl in sysinfo now;
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-
-       enable_smbus();
-
-       memreset_setup();
-
-       //do we need apci timer, tsc...., only debug need it for better output
-       /* all ap stopped? */
-//     init_timer(); // Need to use TMICT to synconize FID/VID
-
-       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
-
-       post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
-
-}
-
-
-#endif
diff --git a/src/mainboard/tyan/s2912/romstage.c b/src/mainboard/tyan/s2912/romstage.c
new file mode 100644 (file)
index 0000000..ce46630
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define K8_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+//used by init_cpus and fidvid
+#define K8_SET_FIDVID 0
+//if we want to wait for core1 done before DQS training, set it to 0
+#define K8_SET_FIDVID_CORE0_ONLY 1
+
+#if CONFIG_K8_REV_F_SUPPORT == 1
+#define K8_REV_F_SUPPORT_F0_F1_WORKAROUND 0
+#endif
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdk8/amdk8_f.h"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+
+#include "northbridge/amd/amdk8/raminit_f.c"
+
+#include "lib/generic_sdram.c"
+
+#include "resourcemap.c"
+
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+
+#define MCP55_PCI_E_X_0 1
+
+#define MCP55_MB_SETUP \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#include "cpu/amd/model_fxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+       /*serial 0 */
+       dword |= (1<<0);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+       dword |= (1<<16);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the mcp55 */
+       mcp55_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+ normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                       (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+                       (0xa<<3)|1, (0xa<<3)|3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                       (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+                       (0xa<<3)|5, (0xa<<3)|7, 0, 0,
+#endif
+       };
+
+       struct sys_info *sysinfo = (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       int needs_reset = 0;
+       unsigned bsp_apicid = 0;
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+
+       setup_mb_resource_map();
+
+       uart_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+
+#if CONFIG_USBDEBUG_DIRECT
+       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+       console_init();
+       print_debug("*sysinfo range: ["); print_debug_hex32(sysinfo); print_debug(",");  print_debug_hex32((unsigned long)sysinfo+sizeof(struct sys_info)); print_debug(")\r\n");
+
+       print_debug("bsp_apicid="); print_debug_hex8(bsp_apicid); print_debug("\r\n");
+
+#if CONFIG_MEM_TRAIN_SEQ == 1
+       set_sysinfo_in_ram(0); // in BSP so could hold all ap until sysinfo is in ram
+#endif
+       setup_coherent_ht_domain(); // routing table and start other core0
+
+       wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+       // It is said that we should start core1 after all core0 launched
+       /* becase optimize_link_coherent_ht is moved out from setup_coherent_ht_domain,
+        * So here need to make sure last core0 is started, esp for two way system,
+        * (there may be apic id conflicts in that case)
+        */
+       start_other_cores();
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       /* it will set up chains and store link pair for optimization later */
+       ht_setup_chains_x(sysinfo); // it will init sblnk and sbbusn, nodes, sbdn
+
+#if K8_SET_FIDVID == 1
+
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("begin msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+       }
+
+       enable_fid_change();
+
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+       init_fidvid_bsp(bsp_apicid);
+
+       // show final fid and vid
+       {
+               msr_t msr;
+               msr=rdmsr(0xc0010042);
+               print_debug("end   msr fid, vid "); print_debug_hex32( msr.hi ); print_debug_hex32(msr.lo); print_debug("\r\n");
+
+       }
+#endif
+
+       needs_reset |= optimize_link_coherent_ht();
+       needs_reset |= optimize_link_incoherent_ht(sysinfo);
+       needs_reset |= mcp55_early_setup_x();
+
+       // 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();
+       }
+
+       allow_all_aps_stop(bsp_apicid);
+
+       //It's the time to set ctrl in sysinfo now;
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+
+       enable_smbus();
+
+       memreset_setup();
+
+       //do we need apci timer, tsc...., only debug need it for better output
+       /* all ap stopped? */
+//     init_timer(); // Need to use TMICT to synconize FID/VID
+
+       sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);
+
+       post_cache_as_ram(); // bsp swtich stack to ram and copy sysinfo ram now
+
+}
+
+
+#endif
index 9e6bad7132fea6a8a701d6cb7eafdddb33cafa5c..8d0dfbe13a1f0b272e653263473c72c216e2537f 100644 (file)
@@ -25,14 +25,14 @@ driver-y +=  mainboard.o
 obj-y += get_bus_conf.o
 obj-$(CONFIG_GENERATE_MP_TABLE) += mptable.o
 obj-$(CONFIG_GENERATE_PIRQ_TABLE) += irq_tables.o
-obj-$(CONFIG_USE_INIT) += cache_as_ram_auto.o
+obj-$(CONFIG_USE_INIT) += romstage.o
 obj-$(CONFIG_AP_CODE_IN_CAR) += apc_auto.o
 
 # This is part of the conversion to init-obj and away from included code. 
 initobj-y += crt0.o
 crt0s := $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/amd/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/32bit/entry32.lds
@@ -50,11 +50,11 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/apc_auto.o: $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/apc_romstage.c -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/tyan/s2912_fam10/cache_as_ram_auto.c b/src/mainboard/tyan/s2912_fam10/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 1216c29..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2007 AMD
- * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#define RAMINIT_SYSINFO 1
-
-#define FAM10_SCAN_PCI_BUS 0
-#define FAM10_ALLOCATE_IO_RANGE 1
-
-#define QRANK_DIMM_SUPPORT 1
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-
-#define FAM10_SET_FIDVID 1
-#define FAM10_SET_FIDVID_CORE_RANGE 0
-
-#define DBGP_DEFAULT 7
-
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-
-static void post_code(u8 value) {
-       outb(value, 0x80);
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#if CONFIG_USBDEBUG_DIRECT
-#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
-#include "pc80/usbdebug_direct_serial.c"
-#endif
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_10xxx_rev.h>
-
-#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
-#include "northbridge/amd/amdfam10/raminit.h"
-#include "northbridge/amd/amdfam10/amdfam10.h"
-
-#endif
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdfam10/reset_test.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-#include "superio/winbond/w83627hf/w83627hf_early_init.c"
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdfam10/debug.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-
-#include "northbridge/amd/amdfam10/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-}
-
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-       /* nothing to do */
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/amd/amdfam10/amdfam10.h"
-#include "northbridge/amd/amdht/ht_wrapper.c"
-
-#include "include/cpu/x86/mem.h"
-#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
-#include "northbridge/amd/amdfam10/raminit_amdmct.c"
-#include "northbridge/amd/amdfam10/amdfam10_pci.c"
-
-#include "resourcemap.c"
-
-#include "cpu/amd/quadcore/quadcore.c"
-
-#define MCP55_NUM 1
-#define MCP55_USE_NIC 1
-
-#define MCP55_PCI_E_X_0 1
-
-#define MCP55_MB_SETUP \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
-       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
-
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
-#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_10xxx/init_cpus.c"
-
-#include "cpu/amd/model_10xxx/fidvid.c"
-
-#endif
-
-#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
-
-#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
-#include "northbridge/amd/amdfam10/early_ht.c"
-
-
-static void sio_setup(void)
-{
-
-       unsigned value;
-       uint32_t dword;
-       uint8_t byte;
-
-       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
-       byte |= 0x20;
-       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
-       /*serial 0 */
-       dword |= (1<<0);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
-
-       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
-       dword |= (1<<16);
-       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
-
-}
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       unsigned last_boot_normal_x = last_boot_normal();
-
-       /* Is this a cpu only reset? or Is this a secondary cpu? */
-       if ((cpu_init_detectedx) || (!boot_cpu())) {
-               if (last_boot_normal_x) {
-                       goto normal_image;
-               } else {
-                       goto fallback_image;
-               }
-       }
-
-       /* Nothing special needs to be done to find bus 0 */
-       /* Allow the HT devices to be found */
-
-       set_bsp_node_CHtExtNodeCfgEn();
-       enumerate_ht_chain();
-
-       sio_setup();
-
-       /* Setup the mcp55 */
-       mcp55_enable_rom();
-
-       /* Is this a deliberate reset by the bios */
-       if (bios_reset_detected() && last_boot_normal_x) {
-               goto normal_image;
-       }
-       /* This is the primary cpu how should I boot? */
-       else if (do_normal_boot()) {
-               goto normal_image;
-       }
-       else {
-               goto fallback_image;
-       }
- normal_image:
-       __asm__ volatile ("jmp __normal_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               );
-
- fallback_image:
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-       __asm__ volatile ("jmp __fallback_image"
-               : /* outputs */
-               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-               )
-#endif
-       ;
-}
-#endif
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-#if CONFIG_HAVE_FAILOVER_BOOT==1
-    #if CONFIG_USE_FAILOVER_IMAGE==1
-       failover_process(bist, cpu_init_detectedx);
-    #else
-       real_main(bist, cpu_init_detectedx);
-    #endif
-#else
-    #if CONFIG_USE_FALLBACK_IMAGE == 1
-       failover_process(bist, cpu_init_detectedx);
-    #endif
-       real_main(bist, cpu_init_detectedx);
-#endif
-}
-
-#if CONFIG_USE_FAILOVER_IMAGE==0
-#include "spd_addr.h"
-#include "cpu/amd/microcode/microcode.c"
-#include "cpu/amd/model_10xxx/update_microcode.c"
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-
-       u32 bsp_apicid = 0;
-       u32 val;
-       u32 wants_reset;
-       msr_t msr;
-
-       post_code(0x30);
-
-       if (bist == 0) {
-               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
-       }
-
-       post_code(0x32);
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-       printk_debug("\n");
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-#if CONFIG_USBDEBUG_DIRECT
-       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
-       early_usbdebug_direct_init();
-#endif
-
-       val = cpuid_eax(1);
-       printk_debug("BSP Family_Model: %08x \n", val);
-       printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
-       printk_debug("bsp_apicid = %02x \n", bsp_apicid);
-       printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
-
-       /* Setup sysinfo defaults */
-       set_sysinfo_in_ram(0);
-
-       update_microcode(val);
-       post_code(0x33);
-
-       cpuSetAMDMSR();
-       post_code(0x34);
-
-       amd_ht_init(sysinfo);
-       post_code(0x35);
-
-       /* Setup nodes PCI space and start core 0 AP init. */
-       finalize_node_setup(sysinfo);
-
-       /* Setup any mainboard PCI settings etc. */
-       setup_mb_resource_map();
-       post_code(0x36);
-
-       /* wait for all the APs core0 started by finalize_node_setup. */
-       /* FIXME: A bunch of cores are going to start output to serial at once.
-        * It would be nice to fixup prink spinlocks for ROM XIP mode.
-        * I think it could be done by putting the spinlock flag in the cache
-        * of the BSP located right after sysinfo.
-        */
-       wait_all_core0_started();
-
-#if CONFIG_LOGICAL_CPUS==1
-       /* Core0 on each node is configured. Now setup any additional cores. */
-       printk_debug("start_other_cores()\n");
-       start_other_cores();
-       post_code(0x37);
-       wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       post_code(0x38);
-
-#if FAM10_SET_FIDVID == 1
-       msr = rdmsr(0xc0010071);
-       printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-
-       /* FIXME: The sb fid change may survive the warm reset and only
-        * need to be done once.*/
-       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
-
-       post_code(0x39);
-
-       if (!warm_reset_detect(0)) {                    // BSP is node 0
-               init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
-       } else {
-               init_fidvid_stage2(bsp_apicid, 0);      // BSP is node 0
-       }
-
-       post_code(0x3A);
-
-       /* show final fid and vid */
-       msr=rdmsr(0xc0010071);
-       printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
-#endif
-
-       wants_reset = mcp55_early_setup_x();
-
-       /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
-       if (!warm_reset_detect(0)) {
-               print_info("...WARM RESET...\n\n\n");
-               soft_reset();
-               die("After soft_reset_x - shouldn't see this message!!!\n");
-       }
-
-       if (wants_reset)
-               printk_debug("mcp55_early_setup_x wanted additional reset!\n");
-
-       post_code(0x3B);
-
-       /* It's the time to set ctrl in sysinfo now; */
-       printk_debug("fill_mem_ctrl()\n");
-       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
-       post_code(0x3D);
-
-       printk_debug("enable_smbus()\n");
-       enable_smbus();
-       post_code(0x3E);
-
-       memreset_setup();
-       post_code(0x40);
-
-       printk_debug("raminit_amdmct()\n");
-       raminit_amdmct(sysinfo);
-       post_code(0x41);
-
-       printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
-       post_cache_as_ram();    // BSP switch stack to ram, copy then execute LB.
-       post_code(0x43);        // Should never see this post code.
-}
-
-
-#endif
diff --git a/src/mainboard/tyan/s2912_fam10/romstage.c b/src/mainboard/tyan/s2912_fam10/romstage.c
new file mode 100644 (file)
index 0000000..1216c29
--- /dev/null
@@ -0,0 +1,382 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 AMD
+ * Written by Yinghai Lu <yinghailu@amd.com> for AMD.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#define RAMINIT_SYSINFO 1
+
+#define FAM10_SCAN_PCI_BUS 0
+#define FAM10_ALLOCATE_IO_RANGE 1
+
+#define QRANK_DIMM_SUPPORT 1
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+
+#define FAM10_SET_FIDVID 1
+#define FAM10_SET_FIDVID_CORE_RANGE 0
+
+#define DBGP_DEFAULT 7
+
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+
+static void post_code(u8 value) {
+       outb(value, 0x80);
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#if CONFIG_USBDEBUG_DIRECT
+#include "southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c"
+#include "pc80/usbdebug_direct_serial.c"
+#endif
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_10xxx_rev.h>
+
+#include "southbridge/nvidia/mcp55/mcp55_early_smbus.c"
+#include "northbridge/amd/amdfam10/raminit.h"
+#include "northbridge/amd/amdfam10/amdfam10.h"
+
+#endif
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdfam10/reset_test.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+#include "superio/winbond/w83627hf/w83627hf_early_init.c"
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdfam10/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+#include "northbridge/amd/amdfam10/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/nvidia/mcp55/mcp55_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+}
+
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+       /* nothing to do */
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/amd/amdfam10/amdfam10.h"
+#include "northbridge/amd/amdht/ht_wrapper.c"
+
+#include "include/cpu/x86/mem.h"
+#include "northbridge/amd/amdfam10/raminit_sysinfo_in_ram.c"
+#include "northbridge/amd/amdfam10/raminit_amdmct.c"
+#include "northbridge/amd/amdfam10/amdfam10_pci.c"
+
+#include "resourcemap.c"
+
+#include "cpu/amd/quadcore/quadcore.c"
+
+#define MCP55_NUM 1
+#define MCP55_USE_NIC 1
+
+#define MCP55_PCI_E_X_0 1
+
+#define MCP55_MB_SETUP \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+37, 0x00, 0x44,/* GPIO38 PCI_REQ3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+38, 0x00, 0x44,/* GPIO39 PCI_GNT3 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+39, 0x00, 0x44,/* GPIO40 PCI_GNT2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+40, 0x00, 0x44,/* GPIO41 PCI_REQ2 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+59, 0x00, 0x60,/* GPIP60 FANCTL0 */ \
+       RES_PORT_IO_8, SYSCTRL_IO_BASE + 0xc0+60, 0x00, 0x60,/* GPIO61 FANCTL1 */
+
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_ss.h"
+#include "southbridge/nvidia/mcp55/mcp55_early_setup_car.c"
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_10xxx/init_cpus.c"
+
+#include "cpu/amd/model_10xxx/fidvid.c"
+
+#endif
+
+#if ((CONFIG_HAVE_FAILOVER_BOOT==1) && (CONFIG_USE_FAILOVER_IMAGE == 1)) || ((CONFIG_HAVE_FAILOVER_BOOT==0) && (CONFIG_USE_FALLBACK_IMAGE == 1))
+
+#include "southbridge/nvidia/mcp55/mcp55_enable_rom.c"
+#include "northbridge/amd/amdfam10/early_ht.c"
+
+
+static void sio_setup(void)
+{
+
+       unsigned value;
+       uint32_t dword;
+       uint8_t byte;
+
+       byte = pci_read_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b);
+       byte |= 0x20;
+       pci_write_config8(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0x7b, byte);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0);
+       /*serial 0 */
+       dword |= (1<<0);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa0, dword);
+
+       dword = pci_read_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4);
+       dword |= (1<<16);
+       pci_write_config32(PCI_DEV(0, MCP55_DEVN_BASE+1 , 0), 0xa4, dword);
+
+}
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       unsigned last_boot_normal_x = last_boot_normal();
+
+       /* Is this a cpu only reset? or Is this a secondary cpu? */
+       if ((cpu_init_detectedx) || (!boot_cpu())) {
+               if (last_boot_normal_x) {
+                       goto normal_image;
+               } else {
+                       goto fallback_image;
+               }
+       }
+
+       /* Nothing special needs to be done to find bus 0 */
+       /* Allow the HT devices to be found */
+
+       set_bsp_node_CHtExtNodeCfgEn();
+       enumerate_ht_chain();
+
+       sio_setup();
+
+       /* Setup the mcp55 */
+       mcp55_enable_rom();
+
+       /* Is this a deliberate reset by the bios */
+       if (bios_reset_detected() && last_boot_normal_x) {
+               goto normal_image;
+       }
+       /* This is the primary cpu how should I boot? */
+       else if (do_normal_boot()) {
+               goto normal_image;
+       }
+       else {
+               goto fallback_image;
+       }
+ normal_image:
+       __asm__ volatile ("jmp __normal_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               );
+
+ fallback_image:
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+       __asm__ volatile ("jmp __fallback_image"
+               : /* outputs */
+               : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+               )
+#endif
+       ;
+}
+#endif
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+#if CONFIG_HAVE_FAILOVER_BOOT==1
+    #if CONFIG_USE_FAILOVER_IMAGE==1
+       failover_process(bist, cpu_init_detectedx);
+    #else
+       real_main(bist, cpu_init_detectedx);
+    #endif
+#else
+    #if CONFIG_USE_FALLBACK_IMAGE == 1
+       failover_process(bist, cpu_init_detectedx);
+    #endif
+       real_main(bist, cpu_init_detectedx);
+#endif
+}
+
+#if CONFIG_USE_FAILOVER_IMAGE==0
+#include "spd_addr.h"
+#include "cpu/amd/microcode/microcode.c"
+#include "cpu/amd/model_10xxx/update_microcode.c"
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
+
+       u32 bsp_apicid = 0;
+       u32 val;
+       u32 wants_reset;
+       msr_t msr;
+
+       post_code(0x30);
+
+       if (bist == 0) {
+               bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);
+       }
+
+       post_code(0x32);
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+       printk_debug("\n");
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+#if CONFIG_USBDEBUG_DIRECT
+       mcp55_enable_usbdebug_direct(DBGP_DEFAULT);
+       early_usbdebug_direct_init();
+#endif
+
+       val = cpuid_eax(1);
+       printk_debug("BSP Family_Model: %08x \n", val);
+       printk_debug("*sysinfo range: ["); print_debug_hex32((u32)sysinfo); print_debug(","); print_debug_hex32((u32)sysinfo+sizeof(struct sys_info)); print_debug("]\n");
+       printk_debug("bsp_apicid = %02x \n", bsp_apicid);
+       printk_debug("cpu_init_detectedx = %08x \n", cpu_init_detectedx);
+
+       /* Setup sysinfo defaults */
+       set_sysinfo_in_ram(0);
+
+       update_microcode(val);
+       post_code(0x33);
+
+       cpuSetAMDMSR();
+       post_code(0x34);
+
+       amd_ht_init(sysinfo);
+       post_code(0x35);
+
+       /* Setup nodes PCI space and start core 0 AP init. */
+       finalize_node_setup(sysinfo);
+
+       /* Setup any mainboard PCI settings etc. */
+       setup_mb_resource_map();
+       post_code(0x36);
+
+       /* wait for all the APs core0 started by finalize_node_setup. */
+       /* FIXME: A bunch of cores are going to start output to serial at once.
+        * It would be nice to fixup prink spinlocks for ROM XIP mode.
+        * I think it could be done by putting the spinlock flag in the cache
+        * of the BSP located right after sysinfo.
+        */
+       wait_all_core0_started();
+
+#if CONFIG_LOGICAL_CPUS==1
+       /* Core0 on each node is configured. Now setup any additional cores. */
+       printk_debug("start_other_cores()\n");
+       start_other_cores();
+       post_code(0x37);
+       wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       post_code(0x38);
+
+#if FAM10_SET_FIDVID == 1
+       msr = rdmsr(0xc0010071);
+       printk_debug("\nBegin FIDVID MSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+
+       /* FIXME: The sb fid change may survive the warm reset and only
+        * need to be done once.*/
+       enable_fid_change_on_sb(sysinfo->sbbusn, sysinfo->sbdn);
+
+       post_code(0x39);
+
+       if (!warm_reset_detect(0)) {                    // BSP is node 0
+               init_fidvid_bsp(bsp_apicid, sysinfo->nodes);
+       } else {
+               init_fidvid_stage2(bsp_apicid, 0);      // BSP is node 0
+       }
+
+       post_code(0x3A);
+
+       /* show final fid and vid */
+       msr=rdmsr(0xc0010071);
+       printk_debug("End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
+#endif
+
+       wants_reset = mcp55_early_setup_x();
+
+       /* Reset for HT, FIDVID, PLL and errata changes to take affect. */
+       if (!warm_reset_detect(0)) {
+               print_info("...WARM RESET...\n\n\n");
+               soft_reset();
+               die("After soft_reset_x - shouldn't see this message!!!\n");
+       }
+
+       if (wants_reset)
+               printk_debug("mcp55_early_setup_x wanted additional reset!\n");
+
+       post_code(0x3B);
+
+       /* It's the time to set ctrl in sysinfo now; */
+       printk_debug("fill_mem_ctrl()\n");
+       fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);
+       post_code(0x3D);
+
+       printk_debug("enable_smbus()\n");
+       enable_smbus();
+       post_code(0x3E);
+
+       memreset_setup();
+       post_code(0x40);
+
+       printk_debug("raminit_amdmct()\n");
+       raminit_amdmct(sysinfo);
+       post_code(0x41);
+
+       printk_debug("\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
+       post_cache_as_ram();    // BSP switch stack to ram, copy then execute LB.
+       post_code(0x43);        // Should never see this post code.
+}
+
+
+#endif
index 915ee8bd7ca1b95d00bbca7e0ad3c16ce52e25d7..a8abf331ee1f63d725406b9c10d64ac4cc07139e 100644 (file)
@@ -19,7 +19,7 @@
 
 /**
  * This file defines the SPD addresses for the mainboard. Must be included in
- * cache_as_ram_auto.c
+ * romstage.c
  */
 
 #define RC00 0
diff --git a/src/mainboard/tyan/s4880/cache_as_ram_auto.c b/src/mainboard/tyan/s4880/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 9f38ec1..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include <stdlib.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_HUB 0x18
-        int ret;
-        unsigned device=(ctrl->channel0[0])>>8;
-        smbus_write_byte(SMBUS_HUB, 0x01, device);
-        smbus_write_byte(SMBUS_HUB, 0x03, 0);
-}
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_HUB 0x18
-        int ret;
-        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n"); 
-        ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
-        print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
-        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
-        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
-}
-#endif
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define RC0 ((1<<2)<<8)
-#define RC1 ((1<<1)<<8)
-#define RC2 ((1<<4)<<8)
-#define RC3 ((1<<3)<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const struct mem_controller cpu[] = {
-                {
-                        .node_id = 0,
-                        .f0 = PCI_DEV(0, 0x18, 0),
-                        .f1 = PCI_DEV(0, 0x18, 1),
-                        .f2 = PCI_DEV(0, 0x18, 2),
-                        .f3 = PCI_DEV(0, 0x18, 3),
-                        .channel0 = { RC0|DIMM0, RC0|DIMM2, 0, 0 },
-                        .channel1 = { RC0|DIMM1, RC0|DIMM3, 0, 0 },
-                },
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                {
-                        .node_id = 1,
-                        .f0 = PCI_DEV(0, 0x19, 0),
-                        .f1 = PCI_DEV(0, 0x19, 1),
-                        .f2 = PCI_DEV(0, 0x19, 2),
-                        .f3 = PCI_DEV(0, 0x19, 3),
-                        .channel0 = { RC1|DIMM0, RC1|DIMM2 , 0, 0 },
-                        .channel1 = { RC1|DIMM1, RC1|DIMM3 , 0, 0 },
-
-                },
-#endif
-
-#if CONFIG_MAX_PHYSICAL_CPUS > 2
-                {
-                        .node_id = 2,
-                        .f0 = PCI_DEV(0, 0x1a, 0),
-                        .f1 = PCI_DEV(0, 0x1a, 1),
-                        .f2 = PCI_DEV(0, 0x1a, 2),
-                        .f3 = PCI_DEV(0, 0x1a, 3),
-                        .channel0 = { RC2|DIMM0, RC2|DIMM2, 0, 0 },
-                        .channel1 = { RC2|DIMM1, RC2|DIMM3, 0, 0 },
-
-                },
-                {
-                        .node_id = 3,
-                        .f0 = PCI_DEV(0, 0x1b, 0),
-                        .f1 = PCI_DEV(0, 0x1b, 1),
-                        .f2 = PCI_DEV(0, 0x1b, 2),
-                        .f3 = PCI_DEV(0, 0x1b, 3),
-                        .channel0 = { RC3|DIMM0, RC3|DIMM2, 0, 0 },
-                        .channel1 = { RC3|DIMM1, RC3|DIMM3, 0, 0 },
-
-                },
-#endif
-       };
-
-        int needs_reset;
-
-        if (bist == 0) {
-               init_cpus(cpu_init_detectedx);
-        }
-
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_s4880_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-       
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-#endif
-       // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(ARRAY_SIZE(cpu), cpu);
-
-       post_cache_as_ram();
-}
diff --git a/src/mainboard/tyan/s4880/romstage.c b/src/mainboard/tyan/s4880/romstage.c
new file mode 100644 (file)
index 0000000..9f38ec1
--- /dev/null
@@ -0,0 +1,258 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include <stdlib.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_HUB 0x18
+        int ret;
+        unsigned device=(ctrl->channel0[0])>>8;
+        smbus_write_byte(SMBUS_HUB, 0x01, device);
+        smbus_write_byte(SMBUS_HUB, 0x03, 0);
+}
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_HUB 0x18
+        int ret;
+        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n"); 
+        ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
+        print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
+        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
+        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
+}
+#endif
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define RC0 ((1<<2)<<8)
+#define RC1 ((1<<1)<<8)
+#define RC2 ((1<<4)<<8)
+#define RC3 ((1<<3)<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const struct mem_controller cpu[] = {
+                {
+                        .node_id = 0,
+                        .f0 = PCI_DEV(0, 0x18, 0),
+                        .f1 = PCI_DEV(0, 0x18, 1),
+                        .f2 = PCI_DEV(0, 0x18, 2),
+                        .f3 = PCI_DEV(0, 0x18, 3),
+                        .channel0 = { RC0|DIMM0, RC0|DIMM2, 0, 0 },
+                        .channel1 = { RC0|DIMM1, RC0|DIMM3, 0, 0 },
+                },
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                {
+                        .node_id = 1,
+                        .f0 = PCI_DEV(0, 0x19, 0),
+                        .f1 = PCI_DEV(0, 0x19, 1),
+                        .f2 = PCI_DEV(0, 0x19, 2),
+                        .f3 = PCI_DEV(0, 0x19, 3),
+                        .channel0 = { RC1|DIMM0, RC1|DIMM2 , 0, 0 },
+                        .channel1 = { RC1|DIMM1, RC1|DIMM3 , 0, 0 },
+
+                },
+#endif
+
+#if CONFIG_MAX_PHYSICAL_CPUS > 2
+                {
+                        .node_id = 2,
+                        .f0 = PCI_DEV(0, 0x1a, 0),
+                        .f1 = PCI_DEV(0, 0x1a, 1),
+                        .f2 = PCI_DEV(0, 0x1a, 2),
+                        .f3 = PCI_DEV(0, 0x1a, 3),
+                        .channel0 = { RC2|DIMM0, RC2|DIMM2, 0, 0 },
+                        .channel1 = { RC2|DIMM1, RC2|DIMM3, 0, 0 },
+
+                },
+                {
+                        .node_id = 3,
+                        .f0 = PCI_DEV(0, 0x1b, 0),
+                        .f1 = PCI_DEV(0, 0x1b, 1),
+                        .f2 = PCI_DEV(0, 0x1b, 2),
+                        .f3 = PCI_DEV(0, 0x1b, 3),
+                        .channel0 = { RC3|DIMM0, RC3|DIMM2, 0, 0 },
+                        .channel1 = { RC3|DIMM1, RC3|DIMM3, 0, 0 },
+
+                },
+#endif
+       };
+
+        int needs_reset;
+
+        if (bist == 0) {
+               init_cpus(cpu_init_detectedx);
+        }
+
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_s4880_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+       
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+#endif
+       // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(ARRAY_SIZE(cpu), cpu);
+
+       post_cache_as_ram();
+}
diff --git a/src/mainboard/tyan/s4882/cache_as_ram_auto.c b/src/mainboard/tyan/s4882/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 1c8d3b4..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#include <stdint.h>
-#include <string.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <cpu/x86/lapic.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-
-#include <cpu/amd/model_fxx_rev.h>
-#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
-#include "northbridge/amd/amdk8/raminit.h"
-#include "cpu/amd/model_fxx/apic_timer.c"
-#include "lib/delay.c"
-
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
-#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
-
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#include "northbridge/amd/amdk8/setup_resource_map.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
-
-
-#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
-
-static void memreset_setup(void)
-{
-   if (is_cpu_pre_c0()) {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
-   }
-   else {
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
-   }
-        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
-}
-
-static void memreset(int controllers, const struct mem_controller *ctrl)
-{
-   if (is_cpu_pre_c0()) {
-        udelay(800);
-        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
-        udelay(90);
-   }
-}
-static inline void activate_spd_rom(const struct mem_controller *ctrl)
-{
-#define SMBUS_HUB 0x18
-        int ret,i;
-        unsigned device=(ctrl->channel0[0])>>8;
-        /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
-        i=2;
-        do {
-                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
-        } while ((ret!=0) && (i-->0));
-
-        smbus_write_byte(SMBUS_HUB, 0x03, 0);
-}
-#if 0
-static inline void change_i2c_mux(unsigned device)
-{
-#define SMBUS_HUB 0x18
-        int ret, i;
-        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n"); 
-        i=2;
-        do {
-                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
-                print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
-        } while ((ret!=0) && (i-->0));
-        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
-        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
-}
-#endif
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#define QRANK_DIMM_SUPPORT 1
-
-#include "northbridge/amd/amdk8/raminit.c"
-#include "northbridge/amd/amdk8/coherent_ht.c"
-#include "lib/generic_sdram.c"
-
- /* tyan does not want the default */
-#include "resourcemap.c" 
-
-#if CONFIG_LOGICAL_CPUS==1
-#define SET_NB_CFG_54 1
-#endif
-#include "cpu/amd/dualcore/dualcore.c"
-
-#define RC0 ((1<<2)<<8)
-#define RC1 ((1<<1)<<8)
-#define RC2 ((1<<4)<<8)
-#define RC3 ((1<<3)<<8)
-
-#define DIMM0 0x50
-#define DIMM1 0x51
-#define DIMM2 0x52
-#define DIMM3 0x53
-
-#include "cpu/amd/car/copy_and_run.c"
-
-#include "cpu/amd/car/post_cache_as_ram.c"
-
-#include "cpu/amd/model_fxx/init_cpus.c"
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-
-#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
-#include "northbridge/amd/amdk8/early_ht.c"
-
-void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-        unsigned last_boot_normal_x = last_boot_normal();
-
-        /* Is this a cpu only reset? or Is this a secondary cpu? */
-        if ((cpu_init_detectedx) || (!boot_cpu())) {
-                if (last_boot_normal_x) {
-                        goto normal_image;
-                } else {
-                        goto fallback_image;
-                }
-        }
-
-        /* Nothing special needs to be done to find bus 0 */
-        /* Allow the HT devices to be found */
-
-        enumerate_ht_chain();
-
-        amd8111_enable_rom();
-
-        /* Is this a deliberate reset by the bios */
-        if (bios_reset_detected() && last_boot_normal_x) {
-                goto normal_image;
-        }
-        /* This is the primary cpu how should I boot? */
-        else if (do_normal_boot()) {
-                goto normal_image;
-        }
-        else {
-                goto fallback_image;
-        }
- normal_image:
-        __asm__ volatile ("jmp __normal_image"
-                : /* outputs */
-                : "a" (bist), "b" ( cpu_init_detectedx ) /* inputs */
-                );
-
- fallback_image:
-       ;
-}
-#endif
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
-
-void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-
-#if CONFIG_USE_FALLBACK_IMAGE == 1
-        failover_process(bist, cpu_init_detectedx);
-#endif
-        real_main(bist, cpu_init_detectedx);
-
-}
-
-void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
-{
-       static const uint16_t spd_addr [] = {
-                        RC0|DIMM0, RC0|DIMM2, 0, 0,
-                        RC0|DIMM1, RC0|DIMM3, 0, 0,
-#if CONFIG_MAX_PHYSICAL_CPUS > 1
-                        RC1|DIMM0, RC1|DIMM2, 0, 0,
-                        RC1|DIMM1, RC1|DIMM3, 0, 0,
-#endif
-#if CONFIG_MAX_PHYSICAL_CPUS > 2
-                        RC2|DIMM0, RC2|DIMM2, 0, 0,
-                        RC2|DIMM1, RC2|DIMM3, 0, 0,
-                        RC3|DIMM0, RC3|DIMM2, 0, 0,
-                        RC3|DIMM1, RC3|DIMM3, 0, 0,
-#endif
-       };
-
-        int needs_reset;
-        unsigned bsp_apicid = 0;
-
-        struct mem_controller ctrl[8];
-        unsigned nodes;
-
-        if (bist == 0) {
-                bsp_apicid = init_cpus(cpu_init_detectedx);
-        }
-
-       
-       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-        uart_init();
-        console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-        setup_s4882_resource_map();
-
-       needs_reset = setup_coherent_ht_domain();
-
-        wait_all_core0_started();
-#if CONFIG_LOGICAL_CPUS==1
-        // It is said that we should start core1 after all core0 launched
-        start_other_cores();
-        wait_all_other_cores_started(bsp_apicid);
-#endif
-
-       // automatically set that for you, but you might meet tight space
-        needs_reset |= ht_setup_chains_x();
-
-               if (needs_reset) {
-                       print_info("ht reset -\r\n");
-                       soft_reset();
-               }
-
-        allow_all_aps_stop(bsp_apicid);
-
-        nodes = get_nodes();
-        //It's the time to set ctrl now;
-        fill_mem_ctrl(nodes, ctrl, spd_addr);
-       
-       enable_smbus();
-
-       memreset_setup();
-       sdram_initialize(nodes, ctrl);
-
-       post_cache_as_ram();
-
-}
diff --git a/src/mainboard/tyan/s4882/romstage.c b/src/mainboard/tyan/s4882/romstage.c
new file mode 100644 (file)
index 0000000..1c8d3b4
--- /dev/null
@@ -0,0 +1,248 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#include <stdint.h>
+#include <string.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <cpu/x86/lapic.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+
+#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/incoherent_ht.c"
+#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
+#include "northbridge/amd/amdk8/raminit.h"
+#include "cpu/amd/model_fxx/apic_timer.c"
+#include "lib/delay.c"
+
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/amd/amdk8/reset_test.c"
+#include "northbridge/amd/amdk8/debug.c"
+#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#include "northbridge/amd/amdk8/setup_resource_map.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
+
+#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"
+
+static void memreset_setup(void)
+{
+   if (is_cpu_pre_c0()) {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
+   }
+   else {
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
+   }
+        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
+}
+
+static void memreset(int controllers, const struct mem_controller *ctrl)
+{
+   if (is_cpu_pre_c0()) {
+        udelay(800);
+        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
+        udelay(90);
+   }
+}
+static inline void activate_spd_rom(const struct mem_controller *ctrl)
+{
+#define SMBUS_HUB 0x18
+        int ret,i;
+        unsigned device=(ctrl->channel0[0])>>8;
+        /* the very first write always get COL_STS=1 and ABRT_STS=1, so try another time*/
+        i=2;
+        do {
+                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
+        } while ((ret!=0) && (i-->0));
+
+        smbus_write_byte(SMBUS_HUB, 0x03, 0);
+}
+#if 0
+static inline void change_i2c_mux(unsigned device)
+{
+#define SMBUS_HUB 0x18
+        int ret, i;
+        print_debug("change_i2c_mux i="); print_debug_hex8(device); print_debug("\r\n"); 
+        i=2;
+        do {
+                ret = smbus_write_byte(SMBUS_HUB, 0x01, device);
+                print_debug("change_i2c_mux 1 ret="); print_debug_hex32(ret); print_debug("\r\n");
+        } while ((ret!=0) && (i-->0));
+        ret = smbus_write_byte(SMBUS_HUB, 0x03, 0);
+        print_debug("change_i2c_mux 2 ret="); print_debug_hex32(ret); print_debug("\r\n");
+}
+#endif
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#define QRANK_DIMM_SUPPORT 1
+
+#include "northbridge/amd/amdk8/raminit.c"
+#include "northbridge/amd/amdk8/coherent_ht.c"
+#include "lib/generic_sdram.c"
+
+ /* tyan does not want the default */
+#include "resourcemap.c" 
+
+#if CONFIG_LOGICAL_CPUS==1
+#define SET_NB_CFG_54 1
+#endif
+#include "cpu/amd/dualcore/dualcore.c"
+
+#define RC0 ((1<<2)<<8)
+#define RC1 ((1<<1)<<8)
+#define RC2 ((1<<4)<<8)
+#define RC3 ((1<<3)<<8)
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+
+#include "cpu/amd/car/copy_and_run.c"
+
+#include "cpu/amd/car/post_cache_as_ram.c"
+
+#include "cpu/amd/model_fxx/init_cpus.c"
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+
+#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
+#include "northbridge/amd/amdk8/early_ht.c"
+
+void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+        unsigned last_boot_normal_x = last_boot_normal();
+
+        /* Is this a cpu only reset? or Is this a secondary cpu? */
+        if ((cpu_init_detectedx) || (!boot_cpu())) {
+                if (last_boot_normal_x) {
+                        goto normal_image;
+                } else {
+                        goto fallback_image;
+                }
+        }
+
+        /* Nothing special needs to be done to find bus 0 */
+        /* Allow the HT devices to be found */
+
+        enumerate_ht_chain();
+
+        amd8111_enable_rom();
+
+        /* Is this a deliberate reset by the bios */
+        if (bios_reset_detected() && last_boot_normal_x) {
+                goto normal_image;
+        }
+        /* This is the primary cpu how should I boot? */
+        else if (do_normal_boot()) {
+                goto normal_image;
+        }
+        else {
+                goto fallback_image;
+        }
+ normal_image:
+        __asm__ volatile ("jmp __normal_image"
+                : /* outputs */
+                : "a" (bist), "b" ( cpu_init_detectedx ) /* inputs */
+                );
+
+ fallback_image:
+       ;
+}
+#endif
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
+
+void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+
+#if CONFIG_USE_FALLBACK_IMAGE == 1
+        failover_process(bist, cpu_init_detectedx);
+#endif
+        real_main(bist, cpu_init_detectedx);
+
+}
+
+void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
+{
+       static const uint16_t spd_addr [] = {
+                        RC0|DIMM0, RC0|DIMM2, 0, 0,
+                        RC0|DIMM1, RC0|DIMM3, 0, 0,
+#if CONFIG_MAX_PHYSICAL_CPUS > 1
+                        RC1|DIMM0, RC1|DIMM2, 0, 0,
+                        RC1|DIMM1, RC1|DIMM3, 0, 0,
+#endif
+#if CONFIG_MAX_PHYSICAL_CPUS > 2
+                        RC2|DIMM0, RC2|DIMM2, 0, 0,
+                        RC2|DIMM1, RC2|DIMM3, 0, 0,
+                        RC3|DIMM0, RC3|DIMM2, 0, 0,
+                        RC3|DIMM1, RC3|DIMM3, 0, 0,
+#endif
+       };
+
+        int needs_reset;
+        unsigned bsp_apicid = 0;
+
+        struct mem_controller ctrl[8];
+        unsigned nodes;
+
+        if (bist == 0) {
+                bsp_apicid = init_cpus(cpu_init_detectedx);
+        }
+
+       
+       w83627hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+        uart_init();
+        console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+        setup_s4882_resource_map();
+
+       needs_reset = setup_coherent_ht_domain();
+
+        wait_all_core0_started();
+#if CONFIG_LOGICAL_CPUS==1
+        // It is said that we should start core1 after all core0 launched
+        start_other_cores();
+        wait_all_other_cores_started(bsp_apicid);
+#endif
+
+       // automatically set that for you, but you might meet tight space
+        needs_reset |= ht_setup_chains_x();
+
+               if (needs_reset) {
+                       print_info("ht reset -\r\n");
+                       soft_reset();
+               }
+
+        allow_all_aps_stop(bsp_apicid);
+
+        nodes = get_nodes();
+        //It's the time to set ctrl now;
+        fill_mem_ctrl(nodes, ctrl, spd_addr);
+       
+       enable_smbus();
+
+       memreset_setup();
+       sdram_initialize(nodes, ctrl);
+
+       post_cache_as_ram();
+
+}
diff --git a/src/mainboard/via/epia-cn/auto.c b/src/mainboard/via/epia-cn/auto.c
deleted file mode 100644 (file)
index 4e60569..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 VIA Technologies, Inc.
- * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cn700/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "southbridge/via/vt8235/vt8235_early_serial.c"
-
-static void memreset_setup(void)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/cn700/raminit.c"
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-       u8 reg;
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
-       if (dev == PCI_DEV_INVALID)
-               die("Southbridge not found!!!\n");
-
-       /* bit=0 means enable function (per CX700 datasheet)
-        *   5 16.1 USB 2
-        *   4 16.0 USB 1
-        *   3 15.0 SATA and PATA
-        *   2 16.2 USB 3
-        *   1 16.4 USB EHCI
-        */
-       pci_write_config8(dev, 0x50, 0x80);
-
-       /* bit=1 means enable internal function (per CX700 datasheet)
-        *   3 Internal RTC
-        *   2 Internal PS2 Mouse
-        *   1 Internal KBC Configuration
-        *   0 Internal Keyboard Controller
-        */
-       pci_write_config8(dev, 0x51, 0x1d);
-}
-
-static const struct mem_controller ctrl = {
-       .d0f0 = 0x0000,
-       .d0f2 = 0x2000,
-       .d0f3 = 0x3000,
-       .d0f4 = 0x4000,
-       .d0f7 = 0x7000,
-       .d1f0 = 0x8000,
-       .channel0 = { 0x50 },
-};
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       device_t dev;
-
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
-
-       enable_vt8235_serial();
-       uart_init();
-       console_init();
-
-       print_spew("In auto.c:main()\r\n");
-
-       enable_smbus();
-       smbus_fixup(&ctrl);
-
-       if (bist == 0) {
-               print_debug("doing early_mtrr\r\n");
-               early_mtrr_init();
-       }
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       ddr_ram_setup(&ctrl);
-
-       /* ram_check(0, 640 * 1024); */
-
-       print_spew("Leaving auto.c:main()\r\n");
-}
diff --git a/src/mainboard/via/epia-cn/romstage.c b/src/mainboard/via/epia-cn/romstage.c
new file mode 100644 (file)
index 0000000..c03cb16
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 VIA Technologies, Inc.
+ * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cn700/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "southbridge/via/vt8235/vt8235_early_serial.c"
+
+static void memreset_setup(void)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/cn700/raminit.c"
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+       u8 reg;
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
+       if (dev == PCI_DEV_INVALID)
+               die("Southbridge not found!!!\n");
+
+       /* bit=0 means enable function (per CX700 datasheet)
+        *   5 16.1 USB 2
+        *   4 16.0 USB 1
+        *   3 15.0 SATA and PATA
+        *   2 16.2 USB 3
+        *   1 16.4 USB EHCI
+        */
+       pci_write_config8(dev, 0x50, 0x80);
+
+       /* bit=1 means enable internal function (per CX700 datasheet)
+        *   3 Internal RTC
+        *   2 Internal PS2 Mouse
+        *   1 Internal KBC Configuration
+        *   0 Internal Keyboard Controller
+        */
+       pci_write_config8(dev, 0x51, 0x1d);
+}
+
+static const struct mem_controller ctrl = {
+       .d0f0 = 0x0000,
+       .d0f2 = 0x2000,
+       .d0f3 = 0x3000,
+       .d0f4 = 0x4000,
+       .d0f7 = 0x7000,
+       .d1f0 = 0x8000,
+       .channel0 = { 0x50 },
+};
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       device_t dev;
+
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
+
+       enable_vt8235_serial();
+       uart_init();
+       console_init();
+
+       print_spew("In romstage.c:main()\r\n");
+
+       enable_smbus();
+       smbus_fixup(&ctrl);
+
+       if (bist == 0) {
+               print_debug("doing early_mtrr\r\n");
+               early_mtrr_init();
+       }
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       ddr_ram_setup(&ctrl);
+
+       /* ram_check(0, 640 * 1024); */
+
+       print_spew("Leaving romstage.c:main()\r\n");
+}
index 95364b5a5a4c92a9ceb003e0f20728ecc2baef8b..3c82c8513df45a2b87c4365deb6d8075aaa2b169 100644 (file)
@@ -41,7 +41,7 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/northbridge/via/vx800/romstrap.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/fpu_enable.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 crt0s += $(src)/cpu/x86/mmx_disable.inc
 
 ifdef POST_EVALUATION
@@ -53,8 +53,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        iasl -p dsdt -tc $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        mv dsdt.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/via/epia-m/auto.c b/src/mainboard/via/epia-m/auto.c
deleted file mode 100644 (file)
index 77cac78..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#if 0
-#include <cpu/x86/lapic.h>
-#endif
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/vt8623/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "lib/debug.c"
-#include "southbridge/via/vt8235/vt8235_early_smbus.c"
-#include "southbridge/via/vt8235/vt8235_early_serial.c"
-
-static void memreset_setup(void)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/vt8623/raminit.c"
-
-static void enable_mainboard_devices(void) 
-{
-       device_t dev;
-  
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
-                               PCI_DEVICE_ID_VIA_8235), 0);
-  
-       if (dev == PCI_DEV_INVALID) {
-               die("Southbridge not found!!!\n");
-       }
-       pci_write_config8(dev, 0x50, 0x80);
-       pci_write_config8(dev, 0x51, 0x1f);
-#if 0
-       // This early setup switches IDE into compatibility mode before PCI gets 
-       // a chance to assign I/Os
-       // movl    $CONFIG_ADDR(0, 0x89, 0x42), %eax
-       // //      movb    $0x09, %dl
-       // movb    $0x00, %dl
-       // PCI_WRITE_CONFIG_BYTE
-#endif
-       /* we do this here as in V2, we can not yet do raw operations 
-        * to pci!
-        */
-        dev += 0x100; /* ICKY */
-
-       pci_write_config8(dev, 0x04, 7);
-       pci_write_config8(dev, 0x40, 3);
-       pci_write_config8(dev, 0x42, 0);
-       pci_write_config8(dev, 0x3c, 0xe);
-       pci_write_config8(dev, 0x3d, 0);
-}
-
-static void enable_shadow_ram(void) 
-{
-       device_t dev = 0; /* no need to look up 0:0.0 */
-       unsigned char shadowreg;
-       /* dev 0 for southbridge */
-       shadowreg = pci_read_config8(dev, 0x63);
-       /* 0xf0000-0xfffff */
-       shadowreg |= 0x30;
-       pci_write_config8(dev, 0x63, shadowreg);
-}
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       device_t dev;
-
-       /*
-        * Enable VGA; 32MB buffer.
-        */
-       pci_write_config8(0, 0xe1, 0xdd);
-
-       /*
-        * Disable the firewire stuff, which apparently steps on IO 0+ on
-        * reset. Doh!
-        */
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
-                               PCI_DEVICE_ID_VIA_6305), 0);
-       if (dev != PCI_DEV_INVALID) {
-               pci_write_config8(dev, 0x15, 0x1c);
-       }
-
-       enable_vt8235_serial();
-       uart_init();
-       console_init();
-
-       enable_smbus();
-
-       print_spew("In auto.c:main()\r\n");
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       // init_timer();
-
-       outb(5, 0x80);  
-
-       print_debug(" Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       print_debug(" Enabling shadow ram\r\n");
-       enable_shadow_ram();
-
-       ddr_ram_setup((const struct mem_controller *)0);
-       
-       /* Check all of memory */
-#if 0
-       ram_check(0x00000000, msr.lo);
-#endif
-#if 0
-       static const struct {
-               unsigned long lo, hi;
-       } check_addrs[] = {
-               /* Check 16MB of memory @ 0*/
-               { 0x00000000, 0x01000000 },
-#if TOTAL_CPUS > 1
-               /* Check 16MB of memory @ 2GB */
-               { 0x80000000, 0x81000000 },
-#endif
-       };
-       int i;
-       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
-               ram_check(check_addrs[i].lo, check_addrs[i].hi);
-       }
-#endif
-
-       if (bist == 0) {
-               print_debug(" Doing MTRR init.\r\n");
-               early_mtrr_init();
-       }
-
-       //dump_pci_devices();
-       
-       print_spew("Leaving auto.c:main()\r\n");
-}
diff --git a/src/mainboard/via/epia-m/romstage.c b/src/mainboard/via/epia-m/romstage.c
new file mode 100644 (file)
index 0000000..8b8a96a
--- /dev/null
@@ -0,0 +1,154 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#if 0
+#include <cpu/x86/lapic.h>
+#endif
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/vt8623/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "lib/debug.c"
+#include "southbridge/via/vt8235/vt8235_early_smbus.c"
+#include "southbridge/via/vt8235/vt8235_early_serial.c"
+
+static void memreset_setup(void)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/vt8623/raminit.c"
+
+static void enable_mainboard_devices(void) 
+{
+       device_t dev;
+  
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+                               PCI_DEVICE_ID_VIA_8235), 0);
+  
+       if (dev == PCI_DEV_INVALID) {
+               die("Southbridge not found!!!\n");
+       }
+       pci_write_config8(dev, 0x50, 0x80);
+       pci_write_config8(dev, 0x51, 0x1f);
+#if 0
+       // This early setup switches IDE into compatibility mode before PCI gets 
+       // a chance to assign I/Os
+       // movl    $CONFIG_ADDR(0, 0x89, 0x42), %eax
+       // //      movb    $0x09, %dl
+       // movb    $0x00, %dl
+       // PCI_WRITE_CONFIG_BYTE
+#endif
+       /* we do this here as in V2, we can not yet do raw operations 
+        * to pci!
+        */
+        dev += 0x100; /* ICKY */
+
+       pci_write_config8(dev, 0x04, 7);
+       pci_write_config8(dev, 0x40, 3);
+       pci_write_config8(dev, 0x42, 0);
+       pci_write_config8(dev, 0x3c, 0xe);
+       pci_write_config8(dev, 0x3d, 0);
+}
+
+static void enable_shadow_ram(void) 
+{
+       device_t dev = 0; /* no need to look up 0:0.0 */
+       unsigned char shadowreg;
+       /* dev 0 for southbridge */
+       shadowreg = pci_read_config8(dev, 0x63);
+       /* 0xf0000-0xfffff */
+       shadowreg |= 0x30;
+       pci_write_config8(dev, 0x63, shadowreg);
+}
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       device_t dev;
+
+       /*
+        * Enable VGA; 32MB buffer.
+        */
+       pci_write_config8(0, 0xe1, 0xdd);
+
+       /*
+        * Disable the firewire stuff, which apparently steps on IO 0+ on
+        * reset. Doh!
+        */
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+                               PCI_DEVICE_ID_VIA_6305), 0);
+       if (dev != PCI_DEV_INVALID) {
+               pci_write_config8(dev, 0x15, 0x1c);
+       }
+
+       enable_vt8235_serial();
+       uart_init();
+       console_init();
+
+       enable_smbus();
+
+       print_spew("In romstage.c:main()\r\n");
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       // init_timer();
+
+       outb(5, 0x80);  
+
+       print_debug(" Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       print_debug(" Enabling shadow ram\r\n");
+       enable_shadow_ram();
+
+       ddr_ram_setup((const struct mem_controller *)0);
+       
+       /* Check all of memory */
+#if 0
+       ram_check(0x00000000, msr.lo);
+#endif
+#if 0
+       static const struct {
+               unsigned long lo, hi;
+       } check_addrs[] = {
+               /* Check 16MB of memory @ 0*/
+               { 0x00000000, 0x01000000 },
+#if TOTAL_CPUS > 1
+               /* Check 16MB of memory @ 2GB */
+               { 0x80000000, 0x81000000 },
+#endif
+       };
+       int i;
+       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
+               ram_check(check_addrs[i].lo, check_addrs[i].hi);
+       }
+#endif
+
+       if (bist == 0) {
+               print_debug(" Doing MTRR init.\r\n");
+               early_mtrr_init();
+       }
+
+       //dump_pci_devices();
+       
+       print_spew("Leaving romstage.c:main()\r\n");
+}
index 880c22efb7aa86ebe1665b46138f5ce4eff1f819..5202e44e8565ef9ecca4524e69787a294b877cda 100644 (file)
@@ -42,15 +42,15 @@ crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/northbridge/via/vx800/romstrap.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/via/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ifdef POST_EVALUATION
 
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/cache_as_ram_auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/via/epia-m700/cache_as_ram_auto.c b/src/mainboard/via/epia-m700/cache_as_ram_auto.c
deleted file mode 100644 (file)
index 45e8118..0000000
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 One Laptop per Child, Association, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-/*
- * Part of this file is from cx700 port, part of is from cn700 port,
- * and acpi_is_wakeup_early_via_VX800() is part of Rudolf's S3 patch.
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/vx800/vx800.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#if CONFIG_USE_INIT == 0
-#include <string.h>
-#endif
-#include "cpu/x86/lapic/boot_cpu.c"
-
-/* This file contains the board-special SI value for raminit.c. */
-#include "driving_clk_phase_data.c"
-
-#include "northbridge/via/vx800/raminit.h"
-#include "northbridge/via/vx800/raminit.c"
-#include "cpu/x86/car/copy_and_run.c"
-#include "wakeup.h"
-
-#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
-
-/*
- * This acpi_is_wakeup_early_via_VX800 is from Rudolf's patch on the list:
- * http://www.coreboot.org/pipermail/coreboot/2008-January/028787.html.
- */
-void jason_tsc_count_car(void)
-{
-#if 0
-       unsigned long long start;
-       asm volatile ("rdtsc" : "=A" (start));
-       start >>= 20;
-       print_emerg("jason_tsc_count_car=  ");
-       print_emerg_hex32((unsigned long) start);
-       print_emerg("\n");
-#endif
-}
-
-int acpi_is_wakeup_early_via_vx800(void)
-{
-       device_t dev;
-       u16 tmp, result;
-
-       print_debug("In acpi_is_wakeup_early_via_vx800\r\n");
-       /* Power management controller */
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
-                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
-
-       if (dev == PCI_DEV_INVALID)
-               die("Power management controller not found\r\n");
-
-       /* Set ACPI base address to I/O VX800_ACPI_IO_BASE. */
-       pci_write_config16(dev, 0x88, VX800_ACPI_IO_BASE | 0x1);
-
-       /* Enable ACPI accessm RTC signal gated with PSON. */
-       pci_write_config8(dev, 0x81, 0x84);
-
-       tmp = inw(VX800_ACPI_IO_BASE + 0x04);
-       result = ((tmp & (7 << 10)) >> 10) == 1 ? 3 : 0;
-       print_debug("         boot_mode=");
-       print_debug_hex16(result);
-       print_debug("\r\n");
-       return result;
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-/* All content of this function came from the cx700 port of coreboot. */
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-       uint16_t values;
-
-#if 0
-       /*
-        * Add and close this switch, since some line cause error, some
-        * written at elsewhere (stage1 stage2).
-        */
-       u8 regdata;
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
-                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
-
-       /* Disable GP3. */
-       pci_write_config8(dev, 0x98, 0x00);
-
-       pci_write_config8(dev, 0x50, 0x80);     /* Disable mc97. */
-
-       /*
-        * Martin: Disable internal KBC configuration.
-        *
-        * Internal Config is needed to decide which key can be pressed to
-        * resume from s3.
-        */
-       pci_write_config8(dev, 0x51, 0x2d);
-
-       /* This causes irq0 can not be triggerd, since bit 5 was set to 0. */
-       /* pci_write_config8(dev, 0x58, 0x42); */
-
-       /* These writing may... TODO */
-       regdata = pci_read_config8(dev, 0x58);
-       regdata |= 0x41;
-       pci_write_config8(dev, 0x58, regdata);
-       pci_write_config8(dev, 0x59, 0x80);
-       pci_write_config8(dev, 0x5b, 0x01);
-#endif
-
-       print_debug("In enable_mainboard_devices \r\n");
-
-       /* Enable P2P Bridge Header for external PCI bus. */
-       dev = pci_locate_device(PCI_ID(0x1106, 0xa353), 0);
-       pci_write_config8(dev, 0x4f, 0x41);
-
-       /*
-        * "5324" already is the default value of the PCI IDE device, cancel
-        * this PCI write.
-        *
-        * [william 20080124]: Fix bug that can not boot Ubuntu at the
-        * beginning time.
-        */
-#if 0
-       dev = 0;
-       dev = pci_locate_device(PCI_ID(0x1106, PCI_DEVICE_ID_VIA_VX855_IDE), 0);
-       values = pci_read_config16(dev, 0xBA);
-       values &= ~0xffff;
-       values |= 0x5324;
-       pci_write_config16(dev, 0xBA, values);
-#endif
-}
-
-/*
- * Most content of this function came from the cx700 port of coreboot.
- * Turn on the shadow of E-seg.
- */
-static void enable_shadow_ram(void)
-{
-       uint8_t shadowreg;
-
-       /*
-        * Changed the value from 0x2a to 0x3f. "read only" may block "write"?
-        * and maybe in C-seg "write" will be needed?
-        */
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0xff);
-
-       /* 0xf0000-0xfffff - ACPI tables */
-       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
-       shadowreg |= 0x30;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
-
-       /* 0xe0000-0xeffff - elfload? */
-       /*
-        * In s3 resume process, wakeup.c, I use E-seg to hold the code
-        * (which can not locate in the area to be covered) that will copy
-        * 0-A-seg and F-seg from TOP-mem back to their normal location.
-        */
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x82, 0xff);
-
-#if 0
-       /* Enable shadow RAM as normal DRAM */
-       /* 0xc0000-0xcffff - VGA BIOS */
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0x2a);
-       pci_write_config8(PCI_DEV(0, 0, 7), 0x61, 0x00);
-       /* 0xd0000-0xdffff - ?? */
-       /* pci_write_config8(PCI_DEV(0, 0, 3), 0x81, 0xff); */
-       /* pci_write_config8(PCI_DEV(0, 0, 7), 0x62, 0xff); */
-
-       /* Do it again for the vlink controller. */
-       shadowreg = pci_read_config8(PCI_DEV(0, 0, 7), 0x63);
-       shadowreg |= 0x30;
-       pci_write_config8(PCI_DEV(0, 0, 7), 0x63, shadowreg);
-#endif
-}
-
-/*
- * Added this table 2008-11-28.
- * This table contains the value needed to be set before begin to init DRAM.
- * Note: REV_Bx should be checked for changes when porting a new board!
- */
-static const struct VIA_PCI_REG_INIT_TABLE mNbStage1InitTbl[] = {
-       /* VT3409 no PCI-E */
-       0x00, 0xFF, NB_APIC_REG(0x61), 0xFF, 0x0E,      // Set Exxxxxxx as pcie mmio config range
-       0x00, 0xFF, NB_APIC_REG(0x60), 0xF4, 0x0B,      // Support extended cfg address of pcie
-       // 0x00, 0xFF, NB_APIC_REG(0x42), 0xF9, 0x02, // APIC Interrupt((BT_INTR)) Control
-       // Set ROMSIP value by software
-
-       /*
-       0x00, 0xFF, NB_HOST_REG(0x70), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pullup Driving = 3
-       0x00, 0xFF, NB_HOST_REG(0x71), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pulldown Driving = 3
-       0x00, 0xFF, NB_HOST_REG(0x72), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pullup Driving = 3
-       0x00, 0xFF, NB_HOST_REG(0x73), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pulldown Driving = 3
-       0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0x21, // Memory I/F timing ctrl
-       0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0xE1, // Memory I/F timing ctrl
-       0x00, 0xFF, NB_HOST_REG(0x75), 0xFF, 0x18, // AGTL+ I/O Circuit
-       0x00, 0xFF, NB_HOST_REG(0x76), 0xFB, 0x0C, // AGTL+ Compensation Status
-       0x00, 0xFF, NB_HOST_REG(0x78), 0xFF, 0x33, // 2X AGTL+ Auto Compensation Offset
-       0x00, 0xFF, NB_HOST_REG(0x79), 0xFF, 0x33, // 4X AGTL+ Auto Compensation Offset
-       0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x72, // AGTL Compensation Status
-       0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x77, // AGTL Compensation Status
-       0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x44, // Input Host Address / Host Strobe Delay Control for HA Group
-       0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x22, // Input Host Address / Host Strobe Delay Control for HA Group
-       0x00, 0xFF, NB_HOST_REG(0x7C), 0xFF, 0x00, // Output Delay Control of PAD for HA Group
-       0x00, 0xFF, NB_HOST_REG(0x7D), 0xFF, 0xAA, // Host Address / Address Clock Output Delay Control (Only for P4 Bus)
-       0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-       0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-       0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-       0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-       0x00, 0xFF, NB_HOST_REG(0x80), 0x3F, 0x44, // Host Data Receiving Strobe Delay Ctrl 1
-       0x00, 0xFF, NB_HOST_REG(0x81), 0xFF, 0x44, // Host Data Receiving Strobe Delay Ctrl 2
-       0x00, 0xFF, NB_HOST_REG(0x82), 0xFF, 0x00, // Output Delay of PAD for HDSTB
-       0x00, 0xFF, NB_HOST_REG(0x83), 0xFF, 0x00, // Output Delay of PAD for HD
-       0x00, 0xFF, NB_HOST_REG(0x84), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 0)
-       0x00, 0xFF, NB_HOST_REG(0x85), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 1)
-       0x00, 0xFF, NB_HOST_REG(0x86), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 2)
-       0x00, 0xFF, NB_HOST_REG(0x87), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 3)
-       */
-
-       // CPU Host Bus Control
-       0x00, 0xFF, NB_HOST_REG(0x50), 0x1F, 0x08,      // Request phase ctrl: Dynamic Defer Snoop Stall Count = 8
-       // 0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7F,   // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
-       0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7C,      // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
-       0x00, 0xFF, NB_HOST_REG(0x52), 0xCB, 0xCB,      // CPU I/F Ctrl-2: Enable all for performance
-       // 0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x88,   // Arbitration: Host/Master Occupancy timer = 8*4 HCLK
-       0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x44,      // Arbitration: Host/Master Occupancy timer = 4*4 HCLK
-       0x00, 0xFF, NB_HOST_REG(0x54), 0x1E, 0x1C,      // Misc Ctrl: Enable 8QW burst Mem Access
-       // 0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x06,   // Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x04,      // Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x56), 0xF7, 0x63,      // Write Policy 1
-       // 0x00, 0xFF, NB_HOST_REG(0x59), 0x3D, 0x01,   // CPU Miscellaneous Control 1, enable Lowest-Priority IPL
-       // 0x00, 0xFF, NB_HOST_REG(0x5c), 0xFF, 0x00,   // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x5D), 0xFF, 0xA2,      // Write Policy
-       0x00, 0xFF, NB_HOST_REG(0x5E), 0xFF, 0x88,      // Bandwidth Timer
-       0x00, 0xFF, NB_HOST_REG(0x5F), 0x46, 0x46,      // CPU Misc Ctrl
-       // 0x00, 0xFF, NB_HOST_REG(0x90), 0xFF, 0x0B,   // CPU Miscellaneous Control 3
-       // 0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0B,   // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0A,      // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x98), 0xC1, 0x41,      // CPU Miscellaneous Control 3
-       0x00, 0xFF, NB_HOST_REG(0x99), 0x0E, 0x06,      // CPU Miscellaneous Control 4
-
-       // Set APIC and SMRAM
-       0x00, 0xFF, NB_HOST_REG(0x97), 0xFF, 0x00,      // APIC Related Control
-       0x00, 0xFF, NB_DRAMC_REG(0x86), 0xD6, 0x29,     // SMM and APIC Decoding: enable APIC, MSI and SMRAM A-Seg
-       0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  // End of the table
-};
-
-#define USE_VCP     1          /* 0 means "use DVP". */
-#define USE_COM1    1
-#define USE_COM2    0
-
-#define gCom1Base   0x3f8
-#define gCom2Base   0x2f8
-
-void EmbedComInit(void)
-{
-       u8 ByteVal;
-       u16 ComBase;
-
-       /* Enable NB multiple function control. */
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 0), 0x4f);
-       ByteVal = ByteVal | 0x01;
-       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, ByteVal);
-
-       /* VGA enable. */
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA1);
-       ByteVal = ByteVal | 0x80;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0xA1, ByteVal);
-
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA7);
-       ByteVal = ByteVal | 0x08;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0xA7, ByteVal);
-
-       /* Enable P2P IO/mem. */
-       ByteVal = pci_read_config8(PCI_DEV(0, 1, 0), 0x4);
-       ByteVal = ByteVal | 0x07;
-       pci_write_config8(PCI_DEV(0, 1, 0), 0x4, ByteVal);
-
-       /* Turn on graphic chip I/O port port access. */
-       ByteVal = inb(0x3C3);
-       ByteVal = ByteVal | 0x01;
-       outb(ByteVal, 0x3C3);
-
-       /* Turn off graphic chip register protection. */
-       outb(0x10, 0x3C4);
-       ByteVal = inb(0x3C5);
-       ByteVal = ByteVal | 0x01;
-       outb(ByteVal, 0x3C5);
-
-       /* South module pad share enable 0x3C5.78[7]. */
-       outb(0x78, 0x3C4);
-       ByteVal = inb(0x3C5);
-       ByteVal = ByteVal | 0x80;
-       outb(ByteVal, 0x3C5);
-
-       /* Enable UART function multiplex with DVP or VCP pad D17F0Rx46[7,6]. */
-       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0x46);
-       if (USE_VCP == 1)
-               ByteVal = (ByteVal & 0x3F) | 0x40; /* Multiplex with VCP. */
-       else
-               ByteVal = (ByteVal & 0x3F) | 0xC0; /* Multiplex with DVP. */
-       pci_write_config8(PCI_DEV(0, 17, 0), 0x46, ByteVal);
-
-       /* Enable embedded COM1 and COM2 D17F0RxB0[5,4]. */
-       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xB0);
-       ByteVal = ByteVal & 0xcf;
-       /* Multiplex with VCP. */
-       if (USE_COM1 == 1)
-               ByteVal = ByteVal | 0x10;
-       if (USE_COM2 == 1)
-               ByteVal = ByteVal | 0x20;
-       pci_write_config8(PCI_DEV(0, 17, 0), 0xB0, ByteVal);
-
-       if (USE_COM1 == 1)
-               ComBase = gCom1Base;
-       else
-               ComBase = gCom2Base;
-
-//noharddrive
-
-       /* Set embedded COM1 I/O base = 0x3E8 (D17F0RB4, ByteVal = 0xFD) */
-       if (USE_COM1 == 1) {
-               ByteVal = (u8) ((gCom1Base >> 3) | 0x80);
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB4, ByteVal);
-               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
-               ByteVal = (ByteVal & 0xf0) | 0x04;
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
-       }
-
-       /* Set embedded COM2 I/O base = 0x2E8 (D17F0RB5, ByteVal = 0xDD). */
-       if (USE_COM2 == 1) {
-               ByteVal = (u8) ((gCom2Base >> 3) | 0x80);
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB5, ByteVal);
-               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
-               ByteVal = (ByteVal & 0x0f) | 0x30;
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
-       }
-       /* No port 80 biger then 0x10. */
-
-       /* Disable interrupt. */
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal & 0x7F, ComBase + 3);
-       outb(0x00, ComBase + 1);
-
-       /* Set BAUD rate. */
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal | 0x80, ComBase + 3);
-       outb(0x01, ComBase);
-       outb(0x00, ComBase + 1);
-
-       /* Set frame format. */
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal & 0x3F, ComBase + 3);
-       outb(0x03, ComBase + 3);
-       outb(0x00, ComBase + 2);
-       outb(0x00, ComBase + 4);
-
-       /* SOutput("Embedded COM output\n"); */
-       /* while(1); */
-}
-
-/* cache_as_ram.inc jumps to here. */
-void amd64_main(unsigned long bist)
-{
-       unsigned cpu_reset = 0;
-       u16 boot_mode;
-       u8 rambits, Data8, Data;
-       device_t device;
-       /* device_t dev; */
-
-       /*
-        * Enable multifunction for northbridge. These 4 lines (until
-        * console_init()) are the same with epia-cn port.
-        */
-       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
-       /* EmbedComInit(); */
-       w83697hf_set_clksel_48(SERIAL_DEV);
-       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       /* enable_vx800_serial(); */
-       /* uart_init(); */
-
-       /*
-        * 1. D15F0
-        * a) RxBAh = 71h
-        * b) RxBBh = 05h
-        * c) RxBEh = 71h
-        * d) RxBFh = 05h
-        *
-        * 2. D17F0
-        * a) RxA0h = 06h
-        * b) RxA1h = 11h
-        * c) RxA2h = 27h
-        * d) RxA3h = 32h
-        * e) Rx79h = 40h
-        * f) Rx72h = 27h
-        * g) Rx73h = 32h
-       */
-
-       jason_tsc_count_car();
-
-       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBA,
-                          PCI_DEVICE_ID_VIA_VX855_IDE);
-       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBE,
-                          PCI_DEVICE_ID_VIA_VX855_IDE);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA0, PCI_VENDOR_ID_VIA);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA2,
-                          PCI_DEVICE_ID_VIA_VX855_LPC);
-       Data8 = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x79);
-       Data8 &= ~0x40;
-       Data8 |= 0x40;
-       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x79, Data8);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0x72,
-                          PCI_DEVICE_ID_VIA_VX855_LPC);
-
-       /*
-        * There are two function definitions of console_init(), while the
-        * src/arch/i386/lib is the right one.
-        */
-       console_init();
-
-       /* Decide if this is a s3 wakeup or a normal boot. */
-       boot_mode = acpi_is_wakeup_early_via_vx800();
-
-       /*
-        * 2008-11-27 Add this, to transfer "cpu restart" to "cold boot".
-        * When this boot is not a S3 resume, and PCI registers had been
-        * written, then this must be a CPU restart (result of OS reboot cmd),
-        * so we need a real "cold boot".
-        */
-       jason_tsc_count_car();
-       if ((boot_mode != 3)
-           && (pci_read_config8(PCI_DEV(0, 0, 3), 0x80) != 0)) {
-               outb(6, 0xcf9);
-       }
-
-       /* x86 cold boot I/O cmd. */
-       /* These 2 lines are the same with epia-cn port. */
-       enable_smbus();
-       jason_tsc_count_car();
-
-       /* This fix does help vx800!, but vx855 doesn't need this. */
-       /* smbus_fixup(&ctrl); */
-
-       if (bist == 0) {
-               /*
-                * CAR needs MTRR until memory is ok, so disable this
-                * early_mtrr_init() call.
-                */
-#if 0
-                print_debug("doing early_mtrr\r\n");
-                early_mtrr_init();
-#endif
-       }
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       /*
-        * Get NB chip revision from D0F4RxF6, revision will be used in
-        * via_pci_inittable.
-        */
-       device = PCI_DEV(0, 0, 4);
-       Data = pci_read_config8(device, 0xf6);
-       print_debug("NB chip revision =");
-       print_debug_hex8(Data);
-       print_debug("\r\n");
-
-       /* Make NB ready before DRAM init. */
-       via_pci_inittable(Data, mNbStage1InitTbl);
-
-       /*
-        * When resume from s3, DRAM init is skipped, so need to recovery
-        * any PCI register related to DRAM init. d0f3 didn't lose its power
-        * during whole s3 time, so any register not belonging to d0f3 needs
-        * to be recovered.
-        */
-#if 1
-       if (boot_mode == 3) {
-               u8 i;
-               u8 ramregs[] = { 0x43, 0x42, 0x41, 0x40 };
-               DRAM_SYS_ATTR DramAttr;
-
-               print_debug("This is an S3 wakeup\r\n");
-
-               memset(&DramAttr, 0, sizeof(DRAM_SYS_ATTR));
-               /*
-                * Step 1: DRAM detection; DDR1 or DDR2; Get SPD Data;
-                * Rank Presence; 64 or 128bit; Unbuffered or registered;
-                * 1T or 2T.
-                */
-               DRAMDetect(&DramAttr);
-
-               /*
-                * Begin to get RAM size, 43,42 41 40 contains the end
-                * address of last rank in DDR2 slot.
-                */
-               device = PCI_DEV(0, 0, 3);
-               for (rambits = 0, i = 0; i < ARRAY_SIZE(ramregs); i++) {
-                       rambits = pci_read_config8(device, ramregs[i]);
-                       if (rambits != 0)
-                               break;
-               }
-
-               DRAMDRDYSetting(&DramAttr);
-
-               Data = 0x80;    /* This value is same with DevInit.c. */
-               pci_write_config8(PCI_DEV(0, 0, 4), 0xa3, Data);
-               pci_write_config8(PCI_DEV(0, 17, 7), 0x60, rambits << 2);
-               Data = pci_read_config8(MEMCTRL, 0x88);
-               pci_write_config8(PCI_DEV(0, 17, 7), 0xE5, Data);
-
-               /* Just copy this function from draminit to here! */
-               DRAMRegFinalValue(&DramAttr);
-
-               /* Just copy this function from draminit to here! */
-               SetUMARam();
-
-               print_debug("Resume from S3, RAM init was ignored\r\n");
-       } else {
-               ddr2_ram_setup();
-               ram_check(0, 640 * 1024);
-       }
-#endif
-
-       /* ddr2_ram_setup(); */
-       /* This line is the same with cx700 port. */
-       enable_shadow_ram();
-
-       jason_tsc_count_car();
-
-       /*
-        * For coreboot most time of S3 resume is the same as normal boot,
-        * so some memory area under 1M become dirty, so before this happen,
-        * I need to backup the content of mem to top-mem. 
-        *
-        * I will reserve the 1M top-men in LBIO table in coreboot_table.c
-        * and recovery the content of 1M-mem in wakeup.c.
-        */
-#if PAYLOAD_IS_SEABIOS == 1
-       if (boot_mode == 3) {
-               /* An idea of Libo.Feng at amd.com in http://www.coreboot.org/pipermail/coreboot/2008-December/043111.html
-                *
-                * I want move the 1M data, I have to set some MTRRs myself.
-                * Setting MTRR before back memory save s3 resume time about
-                * 0.14 seconds.
-                *
-                * !!! Since CAR stack uses cache, and we are using cache
-                * here, we must be careful:
-                *
-                * 1. during this MTRR code, must no function call (after
-                *    this MTRR, I think it should be OK to use function).
-                * 2. Before stack switch, no use variable that have value
-                *    set before this.
-                * 3. Due to 2, take care of "cpu_reset", I directlly set it
-                *    to ZERO.
-                */
-               u32 memtop = *(u32 *) WAKE_MEM_INFO;
-               u32 memtop1 = *(u32 *) WAKE_MEM_INFO - 0x100000;
-               u32 memtop2 = *(u32 *) WAKE_MEM_INFO - 0x200000;
-               u32 memtop3 = *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000;
-               u32 memtop4 =
-                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000 + 0xe0000;
-#if 0
-               __asm__ volatile (
-                       "movl $0x204, %%ecx\n\t"
-                       "xorl %%edx, %%edx\n\t"
-                       "movl %0,%%eax\n\t"
-                       "orl $(0 | 6), %%eax\n\t"
-                       "wrmsr\n\t"
-
-                       "movl $0x205, %%ecx\n\t"
-                       "xorl %%edx, %%edx\n\t"
-                       "movl $0x100000,%%eax\n\t"
-                       "decl %%eax\n\t"
-                       "notl %%eax\n\t"
-                       "orl $(0 | 0x800), %%eax\n\t"
-                       "wrmsr\n\t"
-                       ::"g"(memtop2)
-               );
-
-               __asm__ volatile (
-                       "movl $0x206, %%ecx\n\t"
-                       "xorl %%edx, %%edx\n\t"
-                       "movl %0,%%eax\n\t"
-                       "orl $(0 | 6), %%eax\n\t"
-                       "wrmsr\n\t"
-
-                       "movl $0x207, %%ecx\n\t"
-                       "xorl %%edx, %%edx\n\t"
-                       "movl $0x100000,%%eax\n\t"
-                       "decl %%eax\n\t"
-                       "notl %%eax\n\t"
-                       "orl $(0 | 0x800), %%eax\n\t"
-                       "wrmsr\n\t"
-                       ::"g"(memtop1)
-               );
-
-               __asm__ volatile (
-                       "movl $0x208, %ecx\n\t"
-                       "xorl %edx, %edx\n\t"
-                       "movl $0,%eax\n\t"
-                       "orl $(0 | 6), %eax\n\t"
-                       "wrmsr\n\t"
-
-                       "movl $0x209, %ecx\n\t"
-                       "xorl %edx, %edx\n\t"
-                       "movl $0x100000,%eax\n\t"
-                       "decl %eax\n\t"
-                       "notl %eax\n\t"
-                       "orl $(0 | 0x800), %eax\n\t"
-                       "wrmsr\n\t"
-               );
-#endif
-
-               /* 
-                * WAKE_MEM_INFO is inited in get_set_top_available_mem()
-                * in tables.c these two memcpy() not not be enabled if set
-                * the MTRR around this two lines.
-                */
-#if 0
-               __asm__ volatile (
-                       "movl $0, %%esi\n\t"
-                       "movl %0, %%edi\n\t"
-                       "movl $0xa0000, %%ecx\n\t"
-                       "shrl $2, %%ecx\n\t"
-                       "rep movsd\n\t"
-                       ::"g"(memtop3)
-               );
-
-               __asm__ volatile (
-                       "movl $0xe0000, %%esi\n\t"
-                       "movl %0, %%edi\n\t"
-                       "movl $0x20000, %%ecx\n\t"
-                       "shrl $2, %%ecx\n\t"
-                       "rep movsd\n\t"
-                       ::"g"(memtop4)
-               );
-#endif
-               /* This can have function call, because no variable used before this. */
-               print_debug("Copy memory to high memory to protect s3 wakeup vector code \r\n");
-               memcpy((unsigned char *)((*(u32 *) WAKE_MEM_INFO) - 64 * 1024 -
-                                0x100000), (unsigned char *)0, 0xa0000);
-               memcpy((unsigned char *)((*(u32 *) WAKE_MEM_INFO) - 64 * 1024 -
-                0x100000 + 0xe0000), (unsigned char *)0xe0000, 0x20000);
-
-               /* Restore the MTRR previously modified. */
-#if 0
-               __asm__ volatile (
-                       "wbinvd\n\t"
-                       "xorl %edx, %edx\n\t"
-                       "xorl %eax, %eax\n\t"
-                       "movl $0x204, %ecx\n\t"
-                       "wrmsr\n\t"
-                       "movl $0x205, %ecx\n\t"
-                       "wrmsr\n\t"
-                       "movl $0x206, %ecx\n\t"
-                       "wrmsr\n\t"
-                       "movl $0x207, %ecx\n\t"
-                       "wrmsr\n\t"
-                       "movl $0x208, %ecx\n\t"
-                       "wrmsr\n\t"
-                       "movl $0x209, %ecx\n\t"
-                       "wrmsr\n\t"
-               );
-#endif
-       }
-
-#endif
-
-/*
- * The following code is copied from tyan\s2735\cache_as_ram_auto.c.
- * Only the code around CLEAR_FIRST_1M_RAM is changed. Removed all the code
- * around CLEAR_FIRST_1M_RAM and #include "cpu/x86/car/cache_as_ram_post.c".
- * The CLEAR_FIRST_1M_RAM seems to make cpu/x86/car/cache_as_ram_post.c stop
- * at somewhere, and cpu/x86/car/cache_as_ram_post.c do not cache my
- * $CONFIG_XIP_ROM_BASE+SIZE area.
- *
- * Use #include "cpu/via/car/cache_as_ram_post.c". This version post.c have
- * some diff with x86-version.
- */
-#if 1
-       {
-               /*
-                * Check value of esp to verify if we have enough ROM for
-                * stack in Cache as RAM.
-                */
-               unsigned v_esp;
-               __asm__ volatile ("movl %%esp, %0\n\t":"=a" (v_esp));
-#if CONFIG_USE_INIT
-               printk_debug("v_esp=%08x\r\n", v_esp);
-#else
-               print_debug("v_esp=");
-               print_debug_hex32(v_esp);
-               print_debug("\r\n");
-#endif
-       }
-#endif
-
-#if 1
-cpu_reset_x:
-
-       /* It seems that cpu_reset is not used before this, so I just reset
-        * it, (this is because the s3 resume, setting in MTRR and copy data
-        * may destroy stack.
-        */
-       cpu_reset = 0;
-
-#if CONFIG_USE_INIT
-       printk_debug("cpu_reset = %08x\r\n", cpu_reset);
-#else
-       print_debug("cpu_reset = ");
-       print_debug_hex32(cpu_reset);
-       print_debug("\r\n");
-#endif
-
-       if (cpu_reset == 0)
-               print_debug("Clearing initial memory region: ");
-       print_debug("No cache as ram now - ");
-
-       /* Store cpu_reset to ebx. */
-       __asm__ volatile ("movl %0, %%ebx\n\t"::"a" (cpu_reset));
-
-       /*
-        * Cancel these lines, CLEAR_FIRST_1M_RAM cause the
-        * cpu/x86/car/cache_as_ram_post.c stop at somewhere.
-        */
-#if 0
-       if (cpu_reset == 0) {
-#define CLEAR_FIRST_1M_RAM 1
-#include "cpu/via/car/cache_as_ram_post.c"
-       } else {
-#undef CLEAR_FIRST_1M_RAM 
-#include "cpu/via/car/cache_as_ram_post.c"
-       }
-#endif
-
-#include "cpu/via/car/cache_as_ram_post.c"
-/* #include "cpu/x86/car/cache_as_ram_post.c" */
-       __asm__ volatile (
-               /* Set new esp *//* before CONFIG_RAMBASE */
-               "subl %0, %%ebp\n\t"
-               "subl %0, %%esp\n\t"::
-               "a" ((CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE) - CONFIG_RAMBASE)
-       );
-
-       {
-               unsigned new_cpu_reset;
-
-               /* Get back cpu_reset from ebx. */
-               __asm__ volatile ("movl %%ebx, %0\n\t":"=a" (new_cpu_reset));
-
-               /* We can't go back anymore, we lost old stack data in CAR. */
-               if (new_cpu_reset == 0)
-                       print_debug("Use Ram as Stack now - done\r\n");
-               else
-                       print_debug("Use Ram as Stack now - \r\n");
-
-#if CONFIG_USE_INIT
-               printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
-#else
-               print_debug("new_cpu_reset = ");
-               print_debug_hex32(new_cpu_reset);
-               print_debug("\r\n");
-#endif
-
-               jason_tsc_count_car();
-               /* Copy and execute coreboot_ram. */
-               copy_and_run(new_cpu_reset);
-               /* We will not return. */
-       }
-#endif
-
-       print_debug("should not be here -\r\n");
-}
diff --git a/src/mainboard/via/epia-m700/romstage.c b/src/mainboard/via/epia-m700/romstage.c
new file mode 100644 (file)
index 0000000..5da2dfe
--- /dev/null
@@ -0,0 +1,816 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 One Laptop per Child, Association, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+/*
+ * Part of this file is from cx700 port, part of is from cn700 port,
+ * and acpi_is_wakeup_early_via_VX800() is part of Rudolf's S3 patch.
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/vx800/vx800.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#if CONFIG_USE_INIT == 0
+#include <string.h>
+#endif
+#include "cpu/x86/lapic/boot_cpu.c"
+
+/* This file contains the board-special SI value for raminit.c. */
+#include "driving_clk_phase_data.c"
+
+#include "northbridge/via/vx800/raminit.h"
+#include "northbridge/via/vx800/raminit.c"
+#include "cpu/x86/car/copy_and_run.c"
+#include "wakeup.h"
+
+#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
+
+/*
+ * This acpi_is_wakeup_early_via_VX800 is from Rudolf's patch on the list:
+ * http://www.coreboot.org/pipermail/coreboot/2008-January/028787.html.
+ */
+void jason_tsc_count_car(void)
+{
+#if 0
+       unsigned long long start;
+       asm volatile ("rdtsc" : "=A" (start));
+       start >>= 20;
+       print_emerg("jason_tsc_count_car=  ");
+       print_emerg_hex32((unsigned long) start);
+       print_emerg("\n");
+#endif
+}
+
+int acpi_is_wakeup_early_via_vx800(void)
+{
+       device_t dev;
+       u16 tmp, result;
+
+       print_debug("In acpi_is_wakeup_early_via_vx800\r\n");
+       /* Power management controller */
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
+
+       if (dev == PCI_DEV_INVALID)
+               die("Power management controller not found\r\n");
+
+       /* Set ACPI base address to I/O VX800_ACPI_IO_BASE. */
+       pci_write_config16(dev, 0x88, VX800_ACPI_IO_BASE | 0x1);
+
+       /* Enable ACPI accessm RTC signal gated with PSON. */
+       pci_write_config8(dev, 0x81, 0x84);
+
+       tmp = inw(VX800_ACPI_IO_BASE + 0x04);
+       result = ((tmp & (7 << 10)) >> 10) == 1 ? 3 : 0;
+       print_debug("         boot_mode=");
+       print_debug_hex16(result);
+       print_debug("\r\n");
+       return result;
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+/* All content of this function came from the cx700 port of coreboot. */
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+       uint16_t values;
+
+#if 0
+       /*
+        * Add and close this switch, since some line cause error, some
+        * written at elsewhere (stage1 stage2).
+        */
+       u8 regdata;
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
+
+       /* Disable GP3. */
+       pci_write_config8(dev, 0x98, 0x00);
+
+       pci_write_config8(dev, 0x50, 0x80);     /* Disable mc97. */
+
+       /*
+        * Martin: Disable internal KBC configuration.
+        *
+        * Internal Config is needed to decide which key can be pressed to
+        * resume from s3.
+        */
+       pci_write_config8(dev, 0x51, 0x2d);
+
+       /* This causes irq0 can not be triggerd, since bit 5 was set to 0. */
+       /* pci_write_config8(dev, 0x58, 0x42); */
+
+       /* These writing may... TODO */
+       regdata = pci_read_config8(dev, 0x58);
+       regdata |= 0x41;
+       pci_write_config8(dev, 0x58, regdata);
+       pci_write_config8(dev, 0x59, 0x80);
+       pci_write_config8(dev, 0x5b, 0x01);
+#endif
+
+       print_debug("In enable_mainboard_devices \r\n");
+
+       /* Enable P2P Bridge Header for external PCI bus. */
+       dev = pci_locate_device(PCI_ID(0x1106, 0xa353), 0);
+       pci_write_config8(dev, 0x4f, 0x41);
+
+       /*
+        * "5324" already is the default value of the PCI IDE device, cancel
+        * this PCI write.
+        *
+        * [william 20080124]: Fix bug that can not boot Ubuntu at the
+        * beginning time.
+        */
+#if 0
+       dev = 0;
+       dev = pci_locate_device(PCI_ID(0x1106, PCI_DEVICE_ID_VIA_VX855_IDE), 0);
+       values = pci_read_config16(dev, 0xBA);
+       values &= ~0xffff;
+       values |= 0x5324;
+       pci_write_config16(dev, 0xBA, values);
+#endif
+}
+
+/*
+ * Most content of this function came from the cx700 port of coreboot.
+ * Turn on the shadow of E-seg.
+ */
+static void enable_shadow_ram(void)
+{
+       uint8_t shadowreg;
+
+       /*
+        * Changed the value from 0x2a to 0x3f. "read only" may block "write"?
+        * and maybe in C-seg "write" will be needed?
+        */
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0xff);
+
+       /* 0xf0000-0xfffff - ACPI tables */
+       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
+       shadowreg |= 0x30;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
+
+       /* 0xe0000-0xeffff - elfload? */
+       /*
+        * In s3 resume process, wakeup.c, I use E-seg to hold the code
+        * (which can not locate in the area to be covered) that will copy
+        * 0-A-seg and F-seg from TOP-mem back to their normal location.
+        */
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x82, 0xff);
+
+#if 0
+       /* Enable shadow RAM as normal DRAM */
+       /* 0xc0000-0xcffff - VGA BIOS */
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0x2a);
+       pci_write_config8(PCI_DEV(0, 0, 7), 0x61, 0x00);
+       /* 0xd0000-0xdffff - ?? */
+       /* pci_write_config8(PCI_DEV(0, 0, 3), 0x81, 0xff); */
+       /* pci_write_config8(PCI_DEV(0, 0, 7), 0x62, 0xff); */
+
+       /* Do it again for the vlink controller. */
+       shadowreg = pci_read_config8(PCI_DEV(0, 0, 7), 0x63);
+       shadowreg |= 0x30;
+       pci_write_config8(PCI_DEV(0, 0, 7), 0x63, shadowreg);
+#endif
+}
+
+/*
+ * Added this table 2008-11-28.
+ * This table contains the value needed to be set before begin to init DRAM.
+ * Note: REV_Bx should be checked for changes when porting a new board!
+ */
+static const struct VIA_PCI_REG_INIT_TABLE mNbStage1InitTbl[] = {
+       /* VT3409 no PCI-E */
+       0x00, 0xFF, NB_APIC_REG(0x61), 0xFF, 0x0E,      // Set Exxxxxxx as pcie mmio config range
+       0x00, 0xFF, NB_APIC_REG(0x60), 0xF4, 0x0B,      // Support extended cfg address of pcie
+       // 0x00, 0xFF, NB_APIC_REG(0x42), 0xF9, 0x02, // APIC Interrupt((BT_INTR)) Control
+       // Set ROMSIP value by software
+
+       /*
+       0x00, 0xFF, NB_HOST_REG(0x70), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pullup Driving = 3
+       0x00, 0xFF, NB_HOST_REG(0x71), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pulldown Driving = 3
+       0x00, 0xFF, NB_HOST_REG(0x72), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pullup Driving = 3
+       0x00, 0xFF, NB_HOST_REG(0x73), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pulldown Driving = 3
+       0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0x21, // Memory I/F timing ctrl
+       0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0xE1, // Memory I/F timing ctrl
+       0x00, 0xFF, NB_HOST_REG(0x75), 0xFF, 0x18, // AGTL+ I/O Circuit
+       0x00, 0xFF, NB_HOST_REG(0x76), 0xFB, 0x0C, // AGTL+ Compensation Status
+       0x00, 0xFF, NB_HOST_REG(0x78), 0xFF, 0x33, // 2X AGTL+ Auto Compensation Offset
+       0x00, 0xFF, NB_HOST_REG(0x79), 0xFF, 0x33, // 4X AGTL+ Auto Compensation Offset
+       0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x72, // AGTL Compensation Status
+       0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x77, // AGTL Compensation Status
+       0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x44, // Input Host Address / Host Strobe Delay Control for HA Group
+       0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x22, // Input Host Address / Host Strobe Delay Control for HA Group
+       0x00, 0xFF, NB_HOST_REG(0x7C), 0xFF, 0x00, // Output Delay Control of PAD for HA Group
+       0x00, 0xFF, NB_HOST_REG(0x7D), 0xFF, 0xAA, // Host Address / Address Clock Output Delay Control (Only for P4 Bus)
+       0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+       0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+       0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+       0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+       0x00, 0xFF, NB_HOST_REG(0x80), 0x3F, 0x44, // Host Data Receiving Strobe Delay Ctrl 1
+       0x00, 0xFF, NB_HOST_REG(0x81), 0xFF, 0x44, // Host Data Receiving Strobe Delay Ctrl 2
+       0x00, 0xFF, NB_HOST_REG(0x82), 0xFF, 0x00, // Output Delay of PAD for HDSTB
+       0x00, 0xFF, NB_HOST_REG(0x83), 0xFF, 0x00, // Output Delay of PAD for HD
+       0x00, 0xFF, NB_HOST_REG(0x84), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 0)
+       0x00, 0xFF, NB_HOST_REG(0x85), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 1)
+       0x00, 0xFF, NB_HOST_REG(0x86), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 2)
+       0x00, 0xFF, NB_HOST_REG(0x87), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 3)
+       */
+
+       // CPU Host Bus Control
+       0x00, 0xFF, NB_HOST_REG(0x50), 0x1F, 0x08,      // Request phase ctrl: Dynamic Defer Snoop Stall Count = 8
+       // 0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7F,   // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
+       0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7C,      // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
+       0x00, 0xFF, NB_HOST_REG(0x52), 0xCB, 0xCB,      // CPU I/F Ctrl-2: Enable all for performance
+       // 0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x88,   // Arbitration: Host/Master Occupancy timer = 8*4 HCLK
+       0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x44,      // Arbitration: Host/Master Occupancy timer = 4*4 HCLK
+       0x00, 0xFF, NB_HOST_REG(0x54), 0x1E, 0x1C,      // Misc Ctrl: Enable 8QW burst Mem Access
+       // 0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x06,   // Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x04,      // Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x56), 0xF7, 0x63,      // Write Policy 1
+       // 0x00, 0xFF, NB_HOST_REG(0x59), 0x3D, 0x01,   // CPU Miscellaneous Control 1, enable Lowest-Priority IPL
+       // 0x00, 0xFF, NB_HOST_REG(0x5c), 0xFF, 0x00,   // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x5D), 0xFF, 0xA2,      // Write Policy
+       0x00, 0xFF, NB_HOST_REG(0x5E), 0xFF, 0x88,      // Bandwidth Timer
+       0x00, 0xFF, NB_HOST_REG(0x5F), 0x46, 0x46,      // CPU Misc Ctrl
+       // 0x00, 0xFF, NB_HOST_REG(0x90), 0xFF, 0x0B,   // CPU Miscellaneous Control 3
+       // 0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0B,   // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0A,      // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x98), 0xC1, 0x41,      // CPU Miscellaneous Control 3
+       0x00, 0xFF, NB_HOST_REG(0x99), 0x0E, 0x06,      // CPU Miscellaneous Control 4
+
+       // Set APIC and SMRAM
+       0x00, 0xFF, NB_HOST_REG(0x97), 0xFF, 0x00,      // APIC Related Control
+       0x00, 0xFF, NB_DRAMC_REG(0x86), 0xD6, 0x29,     // SMM and APIC Decoding: enable APIC, MSI and SMRAM A-Seg
+       0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  // End of the table
+};
+
+#define USE_VCP     1          /* 0 means "use DVP". */
+#define USE_COM1    1
+#define USE_COM2    0
+
+#define gCom1Base   0x3f8
+#define gCom2Base   0x2f8
+
+void EmbedComInit(void)
+{
+       u8 ByteVal;
+       u16 ComBase;
+
+       /* Enable NB multiple function control. */
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 0), 0x4f);
+       ByteVal = ByteVal | 0x01;
+       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, ByteVal);
+
+       /* VGA enable. */
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA1);
+       ByteVal = ByteVal | 0x80;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0xA1, ByteVal);
+
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA7);
+       ByteVal = ByteVal | 0x08;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0xA7, ByteVal);
+
+       /* Enable P2P IO/mem. */
+       ByteVal = pci_read_config8(PCI_DEV(0, 1, 0), 0x4);
+       ByteVal = ByteVal | 0x07;
+       pci_write_config8(PCI_DEV(0, 1, 0), 0x4, ByteVal);
+
+       /* Turn on graphic chip I/O port port access. */
+       ByteVal = inb(0x3C3);
+       ByteVal = ByteVal | 0x01;
+       outb(ByteVal, 0x3C3);
+
+       /* Turn off graphic chip register protection. */
+       outb(0x10, 0x3C4);
+       ByteVal = inb(0x3C5);
+       ByteVal = ByteVal | 0x01;
+       outb(ByteVal, 0x3C5);
+
+       /* South module pad share enable 0x3C5.78[7]. */
+       outb(0x78, 0x3C4);
+       ByteVal = inb(0x3C5);
+       ByteVal = ByteVal | 0x80;
+       outb(ByteVal, 0x3C5);
+
+       /* Enable UART function multiplex with DVP or VCP pad D17F0Rx46[7,6]. */
+       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0x46);
+       if (USE_VCP == 1)
+               ByteVal = (ByteVal & 0x3F) | 0x40; /* Multiplex with VCP. */
+       else
+               ByteVal = (ByteVal & 0x3F) | 0xC0; /* Multiplex with DVP. */
+       pci_write_config8(PCI_DEV(0, 17, 0), 0x46, ByteVal);
+
+       /* Enable embedded COM1 and COM2 D17F0RxB0[5,4]. */
+       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xB0);
+       ByteVal = ByteVal & 0xcf;
+       /* Multiplex with VCP. */
+       if (USE_COM1 == 1)
+               ByteVal = ByteVal | 0x10;
+       if (USE_COM2 == 1)
+               ByteVal = ByteVal | 0x20;
+       pci_write_config8(PCI_DEV(0, 17, 0), 0xB0, ByteVal);
+
+       if (USE_COM1 == 1)
+               ComBase = gCom1Base;
+       else
+               ComBase = gCom2Base;
+
+//noharddrive
+
+       /* Set embedded COM1 I/O base = 0x3E8 (D17F0RB4, ByteVal = 0xFD) */
+       if (USE_COM1 == 1) {
+               ByteVal = (u8) ((gCom1Base >> 3) | 0x80);
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB4, ByteVal);
+               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
+               ByteVal = (ByteVal & 0xf0) | 0x04;
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
+       }
+
+       /* Set embedded COM2 I/O base = 0x2E8 (D17F0RB5, ByteVal = 0xDD). */
+       if (USE_COM2 == 1) {
+               ByteVal = (u8) ((gCom2Base >> 3) | 0x80);
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB5, ByteVal);
+               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
+               ByteVal = (ByteVal & 0x0f) | 0x30;
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
+       }
+       /* No port 80 biger then 0x10. */
+
+       /* Disable interrupt. */
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal & 0x7F, ComBase + 3);
+       outb(0x00, ComBase + 1);
+
+       /* Set BAUD rate. */
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal | 0x80, ComBase + 3);
+       outb(0x01, ComBase);
+       outb(0x00, ComBase + 1);
+
+       /* Set frame format. */
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal & 0x3F, ComBase + 3);
+       outb(0x03, ComBase + 3);
+       outb(0x00, ComBase + 2);
+       outb(0x00, ComBase + 4);
+
+       /* SOutput("Embedded COM output\n"); */
+       /* while(1); */
+}
+
+/* cache_as_ram.inc jumps to here. */
+void amd64_main(unsigned long bist)
+{
+       unsigned cpu_reset = 0;
+       u16 boot_mode;
+       u8 rambits, Data8, Data;
+       device_t device;
+       /* device_t dev; */
+
+       /*
+        * Enable multifunction for northbridge. These 4 lines (until
+        * console_init()) are the same with epia-cn port.
+        */
+       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
+       /* EmbedComInit(); */
+       w83697hf_set_clksel_48(SERIAL_DEV);
+       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       /* enable_vx800_serial(); */
+       /* uart_init(); */
+
+       /*
+        * 1. D15F0
+        * a) RxBAh = 71h
+        * b) RxBBh = 05h
+        * c) RxBEh = 71h
+        * d) RxBFh = 05h
+        *
+        * 2. D17F0
+        * a) RxA0h = 06h
+        * b) RxA1h = 11h
+        * c) RxA2h = 27h
+        * d) RxA3h = 32h
+        * e) Rx79h = 40h
+        * f) Rx72h = 27h
+        * g) Rx73h = 32h
+       */
+
+       jason_tsc_count_car();
+
+       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBA,
+                          PCI_DEVICE_ID_VIA_VX855_IDE);
+       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBE,
+                          PCI_DEVICE_ID_VIA_VX855_IDE);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA0, PCI_VENDOR_ID_VIA);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA2,
+                          PCI_DEVICE_ID_VIA_VX855_LPC);
+       Data8 = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x79);
+       Data8 &= ~0x40;
+       Data8 |= 0x40;
+       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x79, Data8);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0x72,
+                          PCI_DEVICE_ID_VIA_VX855_LPC);
+
+       /*
+        * There are two function definitions of console_init(), while the
+        * src/arch/i386/lib is the right one.
+        */
+       console_init();
+
+       /* Decide if this is a s3 wakeup or a normal boot. */
+       boot_mode = acpi_is_wakeup_early_via_vx800();
+
+       /*
+        * 2008-11-27 Add this, to transfer "cpu restart" to "cold boot".
+        * When this boot is not a S3 resume, and PCI registers had been
+        * written, then this must be a CPU restart (result of OS reboot cmd),
+        * so we need a real "cold boot".
+        */
+       jason_tsc_count_car();
+       if ((boot_mode != 3)
+           && (pci_read_config8(PCI_DEV(0, 0, 3), 0x80) != 0)) {
+               outb(6, 0xcf9);
+       }
+
+       /* x86 cold boot I/O cmd. */
+       /* These 2 lines are the same with epia-cn port. */
+       enable_smbus();
+       jason_tsc_count_car();
+
+       /* This fix does help vx800!, but vx855 doesn't need this. */
+       /* smbus_fixup(&ctrl); */
+
+       if (bist == 0) {
+               /*
+                * CAR needs MTRR until memory is ok, so disable this
+                * early_mtrr_init() call.
+                */
+#if 0
+                print_debug("doing early_mtrr\r\n");
+                early_mtrr_init();
+#endif
+       }
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       /*
+        * Get NB chip revision from D0F4RxF6, revision will be used in
+        * via_pci_inittable.
+        */
+       device = PCI_DEV(0, 0, 4);
+       Data = pci_read_config8(device, 0xf6);
+       print_debug("NB chip revision =");
+       print_debug_hex8(Data);
+       print_debug("\r\n");
+
+       /* Make NB ready before DRAM init. */
+       via_pci_inittable(Data, mNbStage1InitTbl);
+
+       /*
+        * When resume from s3, DRAM init is skipped, so need to recovery
+        * any PCI register related to DRAM init. d0f3 didn't lose its power
+        * during whole s3 time, so any register not belonging to d0f3 needs
+        * to be recovered.
+        */
+#if 1
+       if (boot_mode == 3) {
+               u8 i;
+               u8 ramregs[] = { 0x43, 0x42, 0x41, 0x40 };
+               DRAM_SYS_ATTR DramAttr;
+
+               print_debug("This is an S3 wakeup\r\n");
+
+               memset(&DramAttr, 0, sizeof(DRAM_SYS_ATTR));
+               /*
+                * Step 1: DRAM detection; DDR1 or DDR2; Get SPD Data;
+                * Rank Presence; 64 or 128bit; Unbuffered or registered;
+                * 1T or 2T.
+                */
+               DRAMDetect(&DramAttr);
+
+               /*
+                * Begin to get RAM size, 43,42 41 40 contains the end
+                * address of last rank in DDR2 slot.
+                */
+               device = PCI_DEV(0, 0, 3);
+               for (rambits = 0, i = 0; i < ARRAY_SIZE(ramregs); i++) {
+                       rambits = pci_read_config8(device, ramregs[i]);
+                       if (rambits != 0)
+                               break;
+               }
+
+               DRAMDRDYSetting(&DramAttr);
+
+               Data = 0x80;    /* This value is same with DevInit.c. */
+               pci_write_config8(PCI_DEV(0, 0, 4), 0xa3, Data);
+               pci_write_config8(PCI_DEV(0, 17, 7), 0x60, rambits << 2);
+               Data = pci_read_config8(MEMCTRL, 0x88);
+               pci_write_config8(PCI_DEV(0, 17, 7), 0xE5, Data);
+
+               /* Just copy this function from draminit to here! */
+               DRAMRegFinalValue(&DramAttr);
+
+               /* Just copy this function from draminit to here! */
+               SetUMARam();
+
+               print_debug("Resume from S3, RAM init was ignored\r\n");
+       } else {
+               ddr2_ram_setup();
+               ram_check(0, 640 * 1024);
+       }
+#endif
+
+       /* ddr2_ram_setup(); */
+       /* This line is the same with cx700 port. */
+       enable_shadow_ram();
+
+       jason_tsc_count_car();
+
+       /*
+        * For coreboot most time of S3 resume is the same as normal boot,
+        * so some memory area under 1M become dirty, so before this happen,
+        * I need to backup the content of mem to top-mem. 
+        *
+        * I will reserve the 1M top-men in LBIO table in coreboot_table.c
+        * and recovery the content of 1M-mem in wakeup.c.
+        */
+#if PAYLOAD_IS_SEABIOS == 1
+       if (boot_mode == 3) {
+               /* An idea of Libo.Feng at amd.com in http://www.coreboot.org/pipermail/coreboot/2008-December/043111.html
+                *
+                * I want move the 1M data, I have to set some MTRRs myself.
+                * Setting MTRR before back memory save s3 resume time about
+                * 0.14 seconds.
+                *
+                * !!! Since CAR stack uses cache, and we are using cache
+                * here, we must be careful:
+                *
+                * 1. during this MTRR code, must no function call (after
+                *    this MTRR, I think it should be OK to use function).
+                * 2. Before stack switch, no use variable that have value
+                *    set before this.
+                * 3. Due to 2, take care of "cpu_reset", I directlly set it
+                *    to ZERO.
+                */
+               u32 memtop = *(u32 *) WAKE_MEM_INFO;
+               u32 memtop1 = *(u32 *) WAKE_MEM_INFO - 0x100000;
+               u32 memtop2 = *(u32 *) WAKE_MEM_INFO - 0x200000;
+               u32 memtop3 = *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000;
+               u32 memtop4 =
+                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000 + 0xe0000;
+#if 0
+               __asm__ volatile (
+                       "movl $0x204, %%ecx\n\t"
+                       "xorl %%edx, %%edx\n\t"
+                       "movl %0,%%eax\n\t"
+                       "orl $(0 | 6), %%eax\n\t"
+                       "wrmsr\n\t"
+
+                       "movl $0x205, %%ecx\n\t"
+                       "xorl %%edx, %%edx\n\t"
+                       "movl $0x100000,%%eax\n\t"
+                       "decl %%eax\n\t"
+                       "notl %%eax\n\t"
+                       "orl $(0 | 0x800), %%eax\n\t"
+                       "wrmsr\n\t"
+                       ::"g"(memtop2)
+               );
+
+               __asm__ volatile (
+                       "movl $0x206, %%ecx\n\t"
+                       "xorl %%edx, %%edx\n\t"
+                       "movl %0,%%eax\n\t"
+                       "orl $(0 | 6), %%eax\n\t"
+                       "wrmsr\n\t"
+
+                       "movl $0x207, %%ecx\n\t"
+                       "xorl %%edx, %%edx\n\t"
+                       "movl $0x100000,%%eax\n\t"
+                       "decl %%eax\n\t"
+                       "notl %%eax\n\t"
+                       "orl $(0 | 0x800), %%eax\n\t"
+                       "wrmsr\n\t"
+                       ::"g"(memtop1)
+               );
+
+               __asm__ volatile (
+                       "movl $0x208, %ecx\n\t"
+                       "xorl %edx, %edx\n\t"
+                       "movl $0,%eax\n\t"
+                       "orl $(0 | 6), %eax\n\t"
+                       "wrmsr\n\t"
+
+                       "movl $0x209, %ecx\n\t"
+                       "xorl %edx, %edx\n\t"
+                       "movl $0x100000,%eax\n\t"
+                       "decl %eax\n\t"
+                       "notl %eax\n\t"
+                       "orl $(0 | 0x800), %eax\n\t"
+                       "wrmsr\n\t"
+               );
+#endif
+
+               /* 
+                * WAKE_MEM_INFO is inited in get_set_top_available_mem()
+                * in tables.c these two memcpy() not not be enabled if set
+                * the MTRR around this two lines.
+                */
+#if 0
+               __asm__ volatile (
+                       "movl $0, %%esi\n\t"
+                       "movl %0, %%edi\n\t"
+                       "movl $0xa0000, %%ecx\n\t"
+                       "shrl $2, %%ecx\n\t"
+                       "rep movsd\n\t"
+                       ::"g"(memtop3)
+               );
+
+               __asm__ volatile (
+                       "movl $0xe0000, %%esi\n\t"
+                       "movl %0, %%edi\n\t"
+                       "movl $0x20000, %%ecx\n\t"
+                       "shrl $2, %%ecx\n\t"
+                       "rep movsd\n\t"
+                       ::"g"(memtop4)
+               );
+#endif
+               /* This can have function call, because no variable used before this. */
+               print_debug("Copy memory to high memory to protect s3 wakeup vector code \r\n");
+               memcpy((unsigned char *)((*(u32 *) WAKE_MEM_INFO) - 64 * 1024 -
+                                0x100000), (unsigned char *)0, 0xa0000);
+               memcpy((unsigned char *)((*(u32 *) WAKE_MEM_INFO) - 64 * 1024 -
+                0x100000 + 0xe0000), (unsigned char *)0xe0000, 0x20000);
+
+               /* Restore the MTRR previously modified. */
+#if 0
+               __asm__ volatile (
+                       "wbinvd\n\t"
+                       "xorl %edx, %edx\n\t"
+                       "xorl %eax, %eax\n\t"
+                       "movl $0x204, %ecx\n\t"
+                       "wrmsr\n\t"
+                       "movl $0x205, %ecx\n\t"
+                       "wrmsr\n\t"
+                       "movl $0x206, %ecx\n\t"
+                       "wrmsr\n\t"
+                       "movl $0x207, %ecx\n\t"
+                       "wrmsr\n\t"
+                       "movl $0x208, %ecx\n\t"
+                       "wrmsr\n\t"
+                       "movl $0x209, %ecx\n\t"
+                       "wrmsr\n\t"
+               );
+#endif
+       }
+
+#endif
+
+/*
+ * The following code is copied from tyan\s2735\romstage.c.
+ * Only the code around CLEAR_FIRST_1M_RAM is changed. Removed all the code
+ * around CLEAR_FIRST_1M_RAM and #include "cpu/x86/car/cache_as_ram_post.c".
+ * The CLEAR_FIRST_1M_RAM seems to make cpu/x86/car/cache_as_ram_post.c stop
+ * at somewhere, and cpu/x86/car/cache_as_ram_post.c do not cache my
+ * $CONFIG_XIP_ROM_BASE+SIZE area.
+ *
+ * Use #include "cpu/via/car/cache_as_ram_post.c". This version post.c have
+ * some diff with x86-version.
+ */
+#if 1
+       {
+               /*
+                * Check value of esp to verify if we have enough ROM for
+                * stack in Cache as RAM.
+                */
+               unsigned v_esp;
+               __asm__ volatile ("movl %%esp, %0\n\t":"=a" (v_esp));
+#if CONFIG_USE_INIT
+               printk_debug("v_esp=%08x\r\n", v_esp);
+#else
+               print_debug("v_esp=");
+               print_debug_hex32(v_esp);
+               print_debug("\r\n");
+#endif
+       }
+#endif
+
+#if 1
+cpu_reset_x:
+
+       /* It seems that cpu_reset is not used before this, so I just reset
+        * it, (this is because the s3 resume, setting in MTRR and copy data
+        * may destroy stack.
+        */
+       cpu_reset = 0;
+
+#if CONFIG_USE_INIT
+       printk_debug("cpu_reset = %08x\r\n", cpu_reset);
+#else
+       print_debug("cpu_reset = ");
+       print_debug_hex32(cpu_reset);
+       print_debug("\r\n");
+#endif
+
+       if (cpu_reset == 0)
+               print_debug("Clearing initial memory region: ");
+       print_debug("No cache as ram now - ");
+
+       /* Store cpu_reset to ebx. */
+       __asm__ volatile ("movl %0, %%ebx\n\t"::"a" (cpu_reset));
+
+       /*
+        * Cancel these lines, CLEAR_FIRST_1M_RAM cause the
+        * cpu/x86/car/cache_as_ram_post.c stop at somewhere.
+        */
+#if 0
+       if (cpu_reset == 0) {
+#define CLEAR_FIRST_1M_RAM 1
+#include "cpu/via/car/cache_as_ram_post.c"
+       } else {
+#undef CLEAR_FIRST_1M_RAM 
+#include "cpu/via/car/cache_as_ram_post.c"
+       }
+#endif
+
+#include "cpu/via/car/cache_as_ram_post.c"
+/* #include "cpu/x86/car/cache_as_ram_post.c" */
+       __asm__ volatile (
+               /* Set new esp *//* before CONFIG_RAMBASE */
+               "subl %0, %%ebp\n\t"
+               "subl %0, %%esp\n\t"::
+               "a" ((CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE) - CONFIG_RAMBASE)
+       );
+
+       {
+               unsigned new_cpu_reset;
+
+               /* Get back cpu_reset from ebx. */
+               __asm__ volatile ("movl %%ebx, %0\n\t":"=a" (new_cpu_reset));
+
+               /* We can't go back anymore, we lost old stack data in CAR. */
+               if (new_cpu_reset == 0)
+                       print_debug("Use Ram as Stack now - done\r\n");
+               else
+                       print_debug("Use Ram as Stack now - \r\n");
+
+#if CONFIG_USE_INIT
+               printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
+#else
+               print_debug("new_cpu_reset = ");
+               print_debug_hex32(new_cpu_reset);
+               print_debug("\r\n");
+#endif
+
+               jason_tsc_count_car();
+               /* Copy and execute coreboot_ram. */
+               copy_and_run(new_cpu_reset);
+               /* We will not return. */
+       }
+#endif
+
+       print_debug("should not be here -\r\n");
+}
index 8914faa6e7ba5c97d55043e4dcba8b6233c88383..f8d0e6fd9c802385a2bdda939cd495a065975fc3 100644 (file)
@@ -38,7 +38,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/fpu_enable.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 crt0s += $(src)/cpu/x86/mmx_disable.inc
 
 ifdef POST_EVALUATION
@@ -50,8 +50,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        iasl -p dsdt -tc $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        mv dsdt.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/via/epia-n/auto.c b/src/mainboard/via/epia-n/auto.c
deleted file mode 100644 (file)
index 8c87137..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 VIA Technologies, Inc.
- * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cn400/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
-
-/*
- * NOOB ::                     
- * d0f0 - Device 0 Function 0 etc. 
- */
-static const struct mem_controller ctrl = {
-       .d0f0 = 0x0000,
-       .d0f2 = 0x2000,
-       .d0f3 = 0x3000,
-       .d0f4 = 0x4000,
-       .d0f7 = 0x7000,
-       .d1f0 = 0x8000,
-       .channel0 = { 0x50 },
-};
-
-
-static void memreset_setup(void)
-{
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/cn400/raminit.c"
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-       u8 reg;
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
-       if (dev == PCI_DEV_INVALID)
-               die("Southbridge not found!!!\n");
-
-       /* bit=0 means enable function (per VT8237R datasheet)
-        *   7 17.6 MC97
-        *   6 17.5 AC97
-        *   5 16.1 USB 2
-        *   4 16.0 USB 1
-        *   3 15.0 SATA and PATA
-        *   2 16.2 USB 3
-        *   1 16.4 USB EHCI
-        */
-       pci_write_config8(dev, 0x50, 0xC0);
-
-       /*bit=0 means enable internal function (per VT8237R datasheet)
-        *   7 USB Device Mode
-        *bit=1 means enable internal function (per VT8237R datasheet)
-        *   6 Reserved
-        *   5 LAN Controller Clock Gating
-        *   4 LAN Controller
-        *   3 Internal RTC
-        *   2 Internal PS2 Mouse
-        *   1 Internal KBC Configuration
-        *   0 Internal Keyboard Controller
-        */
-       pci_write_config8(dev, 0x51, 0x9d);
-}
-
-static void enable_shadow_ram(void) 
-{
-       unsigned char shadowreg;
-       
-       shadowreg = pci_read_config8(ctrl.d0f3, 0x82);
-       /* 0xf0000-0xfffff Read/Write*/
-       shadowreg |= 0x30;
-       pci_write_config8(ctrl.d0f3, 0x82, shadowreg);
-}
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       device_t dev;
-
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
-
-       w83697hf_set_clksel_48(SERIAL_DEV);
-
-       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-
-       uart_init();
-       console_init();
-
-       print_spew("In auto.c:main()\r\n");
-
-       enable_smbus();
-       smbus_fixup(&ctrl);
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       print_debug("Enable F-ROM Shadow RAM\r\n");
-       enable_shadow_ram();
-       
-       /* setup cpu */
-       print_debug("Setup CPU Interface\r\n");
-       c3_cpu_setup(ctrl.d0f2);        
-
-
-       ddr_ram_setup();
-
-       if (bist == 0) {
-               print_debug("doing early_mtrr\r\n");
-               early_mtrr_init();
-       }
-       
-       //ram_check(0, 640 * 1024);
-
-       print_spew("Leaving auto.c:main()\r\n");
-}
diff --git a/src/mainboard/via/epia-n/romstage.c b/src/mainboard/via/epia-n/romstage.c
new file mode 100644 (file)
index 0000000..9f05325
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 VIA Technologies, Inc.
+ * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cn400/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "superio/winbond/w83697hf/w83697hf_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1)
+
+/*
+ * NOOB ::                     
+ * d0f0 - Device 0 Function 0 etc. 
+ */
+static const struct mem_controller ctrl = {
+       .d0f0 = 0x0000,
+       .d0f2 = 0x2000,
+       .d0f3 = 0x3000,
+       .d0f4 = 0x4000,
+       .d0f7 = 0x7000,
+       .d1f0 = 0x8000,
+       .channel0 = { 0x50 },
+};
+
+
+static void memreset_setup(void)
+{
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/cn400/raminit.c"
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+       u8 reg;
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT8237R_LPC), 0);
+       if (dev == PCI_DEV_INVALID)
+               die("Southbridge not found!!!\n");
+
+       /* bit=0 means enable function (per VT8237R datasheet)
+        *   7 17.6 MC97
+        *   6 17.5 AC97
+        *   5 16.1 USB 2
+        *   4 16.0 USB 1
+        *   3 15.0 SATA and PATA
+        *   2 16.2 USB 3
+        *   1 16.4 USB EHCI
+        */
+       pci_write_config8(dev, 0x50, 0xC0);
+
+       /*bit=0 means enable internal function (per VT8237R datasheet)
+        *   7 USB Device Mode
+        *bit=1 means enable internal function (per VT8237R datasheet)
+        *   6 Reserved
+        *   5 LAN Controller Clock Gating
+        *   4 LAN Controller
+        *   3 Internal RTC
+        *   2 Internal PS2 Mouse
+        *   1 Internal KBC Configuration
+        *   0 Internal Keyboard Controller
+        */
+       pci_write_config8(dev, 0x51, 0x9d);
+}
+
+static void enable_shadow_ram(void) 
+{
+       unsigned char shadowreg;
+       
+       shadowreg = pci_read_config8(ctrl.d0f3, 0x82);
+       /* 0xf0000-0xfffff Read/Write*/
+       shadowreg |= 0x30;
+       pci_write_config8(ctrl.d0f3, 0x82, shadowreg);
+}
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       device_t dev;
+
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
+
+       w83697hf_set_clksel_48(SERIAL_DEV);
+
+       w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+
+       uart_init();
+       console_init();
+
+       print_spew("In romstage.c:main()\r\n");
+
+       enable_smbus();
+       smbus_fixup(&ctrl);
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       print_debug("Enable F-ROM Shadow RAM\r\n");
+       enable_shadow_ram();
+       
+       /* setup cpu */
+       print_debug("Setup CPU Interface\r\n");
+       c3_cpu_setup(ctrl.d0f2);        
+
+
+       ddr_ram_setup();
+
+       if (bist == 0) {
+               print_debug("doing early_mtrr\r\n");
+               early_mtrr_init();
+       }
+       
+       //ram_check(0, 640 * 1024);
+
+       print_spew("Leaving romstage.c:main()\r\n");
+}
index 37e9ba6933ee00e987efb20ccb8cbdf4d0dfd6ab..4be56312fd319bcccdc77ef2a4f476bdd468ae19 100644 (file)
@@ -34,7 +34,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/x86/fpu_enable.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 crt0s += $(src)/cpu/x86/mmx_disable.inc
 
 ifdef POST_EVALUATION
@@ -46,8 +46,8 @@ $(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        iasl -p dsdt -tc $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
        mv dsdt.hex $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/via/epia/auto.c b/src/mainboard/via/epia/auto.c
deleted file mode 100644 (file)
index a40a9b2..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include <stdlib.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/vt8601/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "lib/debug.c"
-#include "southbridge/via/vt8231/vt8231_early_smbus.c"
-#include "southbridge/via/vt8231/vt8231_early_serial.c"
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/vt8601/raminit.c"
-/*
-  #include "lib/generic_sdram.c"
-*/
-
-static void enable_mainboard_devices(void) 
-{
-       device_t dev;
-       /* dev 0 for southbridge */
-  
-       dev = pci_locate_device(PCI_ID(0x1106,0x8231), 0);
-  
-       if (dev == PCI_DEV_INVALID) {
-               die("Southbridge not found!!!\n");
-       }
-
-       pci_write_config8(dev, 0x50, 7);
-       pci_write_config8(dev, 0x51, 0xff);
-#if 0
-       // This early setup switches IDE into compatibility mode before PCI gets 
-       // a chance to assign I/Os
-       //   movl    $CONFIG_ADDR(0, 0x89, 0x42), %eax
-       //   movb    $0x09, %dl
-       //   movb    $0x00, %dl
-       //   PCI_WRITE_CONFIG_BYTE
-       //
-#endif
-       /* we do this here as in V2, we can not yet do raw operations 
-        * to pci!
-        */
-       /* changed this to work correctly on later revisions of LB.
-       * The original dev += 0x100; stopped working. It also appears
-       * that if this is not set here, but in ide_init() only, the IDE
-       * does not work at all. I assume it needs to be set before something else,
-       * possibly before enabling the IDE peripheral, or it is a timing issue.
-       * Ben Hewson 29 Apr 2007.
-       */
-
-       dev = pci_locate_device(PCI_ID(0x1106,0x0571), 0);
-       pci_write_config8(dev, 0x42, 0);
-}
-
-static void enable_shadow_ram(void) 
-{
-       device_t dev = 0;
-       unsigned char shadowreg;
-
-       shadowreg = pci_read_config8(dev, 0x63);
-       /* 0xf0000-0xfffff */
-       shadowreg |= 0x30;
-       pci_write_config8(dev, 0x63, shadowreg);
-}
-
-static void main(unsigned long bist)
-{
-       unsigned long x;
-       
-       if (bist == 0) {
-               early_mtrr_init();
-       }
-       enable_vt8231_serial();
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-       
-       enable_mainboard_devices();
-       enable_smbus();
-       enable_shadow_ram();
-
-       /*
-         this is way more generic than we need.
-         sdram_initialize(ARRAY_SIZE(cpu), cpu);
-       */
-       sdram_set_registers((const struct mem_controller *) 0);
-       sdram_set_spd_registers((const struct mem_controller *) 0);
-       sdram_enable(0, (const struct mem_controller *) 0);
-       
-       /* Check all of memory */
-#if 0
-       ram_check(0x00000000, msr.lo);
-#endif
-#if 0
-       static const struct {
-               unsigned long lo, hi;
-       } check_addrs[] = {
-               /* Check 16MB of memory @ 0*/
-               { 0x00000000, 0x01000000 },
-#if TOTAL_CPUS > 1
-               /* Check 16MB of memory @ 2GB */
-               { 0x80000000, 0x81000000 },
-#endif
-       };
-       int i;
-       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
-               ram_check(check_addrs[i].lo, check_addrs[i].hi);
-       }
-#endif
-}
diff --git a/src/mainboard/via/epia/romstage.c b/src/mainboard/via/epia/romstage.c
new file mode 100644 (file)
index 0000000..a40a9b2
--- /dev/null
@@ -0,0 +1,128 @@
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include <stdlib.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/vt8601/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "lib/debug.c"
+#include "southbridge/via/vt8231/vt8231_early_smbus.c"
+#include "southbridge/via/vt8231/vt8231_early_serial.c"
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/vt8601/raminit.c"
+/*
+  #include "lib/generic_sdram.c"
+*/
+
+static void enable_mainboard_devices(void) 
+{
+       device_t dev;
+       /* dev 0 for southbridge */
+  
+       dev = pci_locate_device(PCI_ID(0x1106,0x8231), 0);
+  
+       if (dev == PCI_DEV_INVALID) {
+               die("Southbridge not found!!!\n");
+       }
+
+       pci_write_config8(dev, 0x50, 7);
+       pci_write_config8(dev, 0x51, 0xff);
+#if 0
+       // This early setup switches IDE into compatibility mode before PCI gets 
+       // a chance to assign I/Os
+       //   movl    $CONFIG_ADDR(0, 0x89, 0x42), %eax
+       //   movb    $0x09, %dl
+       //   movb    $0x00, %dl
+       //   PCI_WRITE_CONFIG_BYTE
+       //
+#endif
+       /* we do this here as in V2, we can not yet do raw operations 
+        * to pci!
+        */
+       /* changed this to work correctly on later revisions of LB.
+       * The original dev += 0x100; stopped working. It also appears
+       * that if this is not set here, but in ide_init() only, the IDE
+       * does not work at all. I assume it needs to be set before something else,
+       * possibly before enabling the IDE peripheral, or it is a timing issue.
+       * Ben Hewson 29 Apr 2007.
+       */
+
+       dev = pci_locate_device(PCI_ID(0x1106,0x0571), 0);
+       pci_write_config8(dev, 0x42, 0);
+}
+
+static void enable_shadow_ram(void) 
+{
+       device_t dev = 0;
+       unsigned char shadowreg;
+
+       shadowreg = pci_read_config8(dev, 0x63);
+       /* 0xf0000-0xfffff */
+       shadowreg |= 0x30;
+       pci_write_config8(dev, 0x63, shadowreg);
+}
+
+static void main(unsigned long bist)
+{
+       unsigned long x;
+       
+       if (bist == 0) {
+               early_mtrr_init();
+       }
+       enable_vt8231_serial();
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+       
+       enable_mainboard_devices();
+       enable_smbus();
+       enable_shadow_ram();
+
+       /*
+         this is way more generic than we need.
+         sdram_initialize(ARRAY_SIZE(cpu), cpu);
+       */
+       sdram_set_registers((const struct mem_controller *) 0);
+       sdram_set_spd_registers((const struct mem_controller *) 0);
+       sdram_enable(0, (const struct mem_controller *) 0);
+       
+       /* Check all of memory */
+#if 0
+       ram_check(0x00000000, msr.lo);
+#endif
+#if 0
+       static const struct {
+               unsigned long lo, hi;
+       } check_addrs[] = {
+               /* Check 16MB of memory @ 0*/
+               { 0x00000000, 0x01000000 },
+#if TOTAL_CPUS > 1
+               /* Check 16MB of memory @ 2GB */
+               { 0x80000000, 0x81000000 },
+#endif
+       };
+       int i;
+       for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {
+               ram_check(check_addrs[i].lo, check_addrs[i].hi);
+       }
+#endif
+}
diff --git a/src/mainboard/via/pc2500e/auto.c b/src/mainboard/via/pc2500e/auto.c
deleted file mode 100644 (file)
index 4897306..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "option_table.h"
-#include "pc80/mc146818rtc_early.c"
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cn700/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
-#include "superio/ite/it8716f/it8716f_early_serial.c"
-
-#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
-
-static int spd_read_byte(u16 device, u16 address)
-{
-       return smbus_read_byte(device, address);
-}
-
-#include "northbridge/via/cn700/raminit.c"
-
-static const struct mem_controller ctrl = {
-       .d0f0 = 0x0000,
-       .d0f2 = 0x2000,
-       .d0f3 = 0x3000,
-       .d0f4 = 0x4000,
-       .d0f7 = 0x7000,
-       .d1f0 = 0x8000,
-       .channel0 = { 0x50 }, /* TODO: CN700 currently only supports 1 DIMM. */
-};
-
-static void main(unsigned long bist)
-{
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
-
-       it8716f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
-       uart_init();
-       console_init();
-
-       enable_smbus();
-       smbus_fixup(&ctrl);
-
-       if (bist == 0)
-               early_mtrr_init();
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       ddr_ram_setup(&ctrl);
-
-       /* ram_check(0, 640 * 1024); */
-}
diff --git a/src/mainboard/via/pc2500e/romstage.c b/src/mainboard/via/pc2500e/romstage.c
new file mode 100644 (file)
index 0000000..4897306
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "option_table.h"
+#include "pc80/mc146818rtc_early.c"
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cn700/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "southbridge/via/vt8237r/vt8237r_early_smbus.c"
+#include "superio/ite/it8716f/it8716f_early_serial.c"
+
+#define SERIAL_DEV PNP_DEV(0x2e, IT8716F_SP1)
+
+static int spd_read_byte(u16 device, u16 address)
+{
+       return smbus_read_byte(device, address);
+}
+
+#include "northbridge/via/cn700/raminit.c"
+
+static const struct mem_controller ctrl = {
+       .d0f0 = 0x0000,
+       .d0f2 = 0x2000,
+       .d0f3 = 0x3000,
+       .d0f4 = 0x4000,
+       .d0f7 = 0x7000,
+       .d1f0 = 0x8000,
+       .channel0 = { 0x50 }, /* TODO: CN700 currently only supports 1 DIMM. */
+};
+
+static void main(unsigned long bist)
+{
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(ctrl.d0f0, 0x4f, 0x01);
+
+       it8716f_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
+       uart_init();
+       console_init();
+
+       enable_smbus();
+       smbus_fixup(&ctrl);
+
+       if (bist == 0)
+               early_mtrr_init();
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       ddr_ram_setup(&ctrl);
+
+       /* ram_check(0, 640 * 1024); */
+}
index 09de4d12324d1f583ec0bf75b8fef807575325c7..8f321c2e4b9df6ff666696a7a47756b6de7feb79 100644 (file)
@@ -32,7 +32,7 @@ crt0s += $(src)/cpu/x86/32bit/entry32.inc
 crt0s += $(src)/cpu/x86/16bit/reset16.inc
 crt0s += $(src)/arch/i386/lib/id.inc
 crt0s += $(src)/cpu/via/car/cache_as_ram.inc
-crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/auto.inc
+crt0s += $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc
 
 ldscripts := $(src)/arch/i386/init/ldscript_fallback_cbfs.lb
 ldscripts += $(src)/cpu/x86/16bit/entry16.lds
@@ -49,8 +49,8 @@ $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.d
 $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/mainboard/$(MAINBOARDDIR)/dsdt.c
        $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
 
-$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/auto.c $(obj)/option_table.h
-       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/auto.c -o $@
+$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/option_table.h
+       $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S  $(src)/mainboard/$(MAINBOARDDIR)/romstage.c -o $@
        perl -e 's/\.rodata/.rom.data/g' -pi $@
        perl -e 's/\.text/.section .rom.text/g' -pi $@
 
diff --git a/src/mainboard/via/vt8454c/auto.c b/src/mainboard/via/vt8454c/auto.c
deleted file mode 100644 (file)
index e206509..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * This file is part of the coreboot project.
- * 
- * Copyright (C) 2007-2009 coresystems GmbH
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 2 of
- * the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/cx700/raminit.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-
-#define DEACTIVATE_CAR 1
-#define DEACTIVATE_CAR_FILE "cpu/via/car/cache_as_ram_post.c"
-#include "cpu/x86/car/copy_and_run.c"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#include "cpu/x86/lapic/boot_cpu.c"
-#include "northbridge/via/cx700/cx700_early_smbus.c"
-#include "debug.c"
-
-#include "northbridge/via/cx700/cx700_early_serial.c"
-#include "northbridge/via/cx700/raminit.c"
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-
-       dev = pci_locate_device(PCI_ID(0x1106, 0x8324), 0);
-       if (dev == PCI_DEV_INVALID) {
-               die("LPC bridge not found!!!\n");
-       }
-       // Disable GP3 
-       pci_write_config8(dev, 0x98, 0x00);
-
-       // Disable mc97
-       pci_write_config8(dev, 0x50, 0x80);
-
-       // Disable internal KBC Configuration
-       pci_write_config8(dev, 0x51, 0x2d);
-       pci_write_config8(dev, 0x58, 0x42);
-       pci_write_config8(dev, 0x59, 0x80);
-       pci_write_config8(dev, 0x5b, 0x01);
-
-       // Enable P2P Bridge Header for External PCI BUS.
-       dev = pci_locate_device(PCI_ID(0x1106, 0x324e), 0);
-       if (dev == PCI_DEV_INVALID) {
-               die("P2P bridge not found!!!\n");
-       }
-       pci_write_config8(dev, 0x4f, 0x41);
-
-       // Switch SATA to non-RAID mode
-       dev = pci_locate_device(PCI_ID(0x1106, 0x0581), 0);
-       if (dev != PCI_DEV_INVALID) {
-               pci_write_config16(dev, 0xBA, 0x5324);
-       }
-}
-
-static void enable_shadow_ram(const struct mem_controller *ctrl)
-{
-       u8 shadowreg;
-
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0x2a);
-
-       /* 0xf0000-0xfffff - ACPI tables */
-       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
-       shadowreg |= 0x30;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
-}
-
-static void main(unsigned long bist)
-{
-       /* Set statically so it should work with cx700 as well */
-       static const struct mem_controller cx700[] = {
-               {
-                       .channel0 = {0x50, 0x51},
-               },
-       };
-
-       enable_smbus();
-
-       enable_cx700_serial();
-       uart_init();
-       console_init();
-
-       /* Halt if there was a built in self test failure */
-       report_bist_failure(bist);
-
-       enable_mainboard_devices();
-
-       /* Allows access to all northbridge devices */
-       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
-
-       sdram_set_registers(cx700);
-       enable_shadow_ram(cx700);
-       sdram_enable(cx700);
-
-#ifdef DEACTIVATE_CAR
-       print_debug("Deactivating CAR");
-#include DEACTIVATE_CAR_FILE
-       print_debug(" - Done.\r\n");
-#endif
-       copy_and_run(0);
-}
-
-void amd64_main(unsigned long bist) {
-       main(bist);
-}
diff --git a/src/mainboard/via/vt8454c/romstage.c b/src/mainboard/via/vt8454c/romstage.c
new file mode 100644 (file)
index 0000000..e206509
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * This file is part of the coreboot project.
+ * 
+ * Copyright (C) 2007-2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/cx700/raminit.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+
+#define DEACTIVATE_CAR 1
+#define DEACTIVATE_CAR_FILE "cpu/via/car/cache_as_ram_post.c"
+#include "cpu/x86/car/copy_and_run.c"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#include "cpu/x86/lapic/boot_cpu.c"
+#include "northbridge/via/cx700/cx700_early_smbus.c"
+#include "debug.c"
+
+#include "northbridge/via/cx700/cx700_early_serial.c"
+#include "northbridge/via/cx700/raminit.c"
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+
+       dev = pci_locate_device(PCI_ID(0x1106, 0x8324), 0);
+       if (dev == PCI_DEV_INVALID) {
+               die("LPC bridge not found!!!\n");
+       }
+       // Disable GP3 
+       pci_write_config8(dev, 0x98, 0x00);
+
+       // Disable mc97
+       pci_write_config8(dev, 0x50, 0x80);
+
+       // Disable internal KBC Configuration
+       pci_write_config8(dev, 0x51, 0x2d);
+       pci_write_config8(dev, 0x58, 0x42);
+       pci_write_config8(dev, 0x59, 0x80);
+       pci_write_config8(dev, 0x5b, 0x01);
+
+       // Enable P2P Bridge Header for External PCI BUS.
+       dev = pci_locate_device(PCI_ID(0x1106, 0x324e), 0);
+       if (dev == PCI_DEV_INVALID) {
+               die("P2P bridge not found!!!\n");
+       }
+       pci_write_config8(dev, 0x4f, 0x41);
+
+       // Switch SATA to non-RAID mode
+       dev = pci_locate_device(PCI_ID(0x1106, 0x0581), 0);
+       if (dev != PCI_DEV_INVALID) {
+               pci_write_config16(dev, 0xBA, 0x5324);
+       }
+}
+
+static void enable_shadow_ram(const struct mem_controller *ctrl)
+{
+       u8 shadowreg;
+
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0x2a);
+
+       /* 0xf0000-0xfffff - ACPI tables */
+       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
+       shadowreg |= 0x30;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
+}
+
+static void main(unsigned long bist)
+{
+       /* Set statically so it should work with cx700 as well */
+       static const struct mem_controller cx700[] = {
+               {
+                       .channel0 = {0x50, 0x51},
+               },
+       };
+
+       enable_smbus();
+
+       enable_cx700_serial();
+       uart_init();
+       console_init();
+
+       /* Halt if there was a built in self test failure */
+       report_bist_failure(bist);
+
+       enable_mainboard_devices();
+
+       /* Allows access to all northbridge devices */
+       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
+
+       sdram_set_registers(cx700);
+       enable_shadow_ram(cx700);
+       sdram_enable(cx700);
+
+#ifdef DEACTIVATE_CAR
+       print_debug("Deactivating CAR");
+#include DEACTIVATE_CAR_FILE
+       print_debug(" - Done.\r\n");
+#endif
+       copy_and_run(0);
+}
+
+void amd64_main(unsigned long bist) {
+       main(bist);
+}
index b0aee4bccc825fedcfacbf045fcce930050a3d4e..bb0f865a0033067f0c7304197486ebbf63d2dca9 100644 (file)
@@ -18,7 +18,7 @@
  */
 
 /*
- * Generic FAM10 debug code, used by mainboard specific car_auto.c
+ * Generic FAM10 debug code, used by mainboard specific romstage.c
  */
 
 #include "amdfam10_pci.c"
index 55e232f95a9f2f80a43a480060bb8d0881203f1c..f9e9671a3e9004102c99f7324d52dd6e125e54ce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * generic K8 debug code, used by mainboard specific auto.c
+ * generic K8 debug code, used by mainboard specific romstage.c
  *
  */
 
index e97930e97873937bb448dc2de83ea161f43b01c5..75ed33ea40726559027ee507ee569d533170a5e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * generic debug code, used by mainboard specific auto.c
+ * generic debug code, used by mainboard specific romstage.c
  *
  */
 #if 1
index 46d629b01ec9c5c2580cf85684a68d6b25d3c7bc..4083add6f1b2ded8ecb6fc1e263be406ed195d7b 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 /*
- * generic K8 debug code, used by mainboard specific auto.c
+ * generic K8 debug code, used by mainboard specific romstage.c
  *
  */
 #if 1
index 67670f9844e49cdebc9600ccd5c098a48d3cc814..7b854455a9680c5569af723aaa6a13a0e051774c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * generic K8 debug code, used by mainboard specific auto.c
+ * generic K8 debug code, used by mainboard specific romstage.c
  *
  */
 #if 1
index 4083cef2c1bde92e40b39eb5df05168a169d0a84..124ef147c396522aed26950e0ad07b5786109af5 100644 (file)
@@ -2796,7 +2796,7 @@ static void sdram_enable_memory_clocks(struct sys_info *sysinfo)
         * signals to be disabled.
         * If other similar mainboard occur, it would make sense to make
         * this an entry in the sysinfo structure, and pre-initialize that
-        * structure in the mainboard's auto.c main() function.
+        * structure in the mainboard's romstage.c main() function.
         * For now an #ifdef will do.
         */
 
index 218ae0a7a1ca4e4a24416dc10ce64ac459a574af..ed79744db4da9bf58679d34ef76d4e9f6723db38 100644 (file)
@@ -188,7 +188,7 @@ static unsigned int get_spd_data(const struct mem_controller *ctrl, unsigned int
        smbus_wait_until_ready();
 
        /* Fetch the SMBus address of the SPD ROM from
-        * the ctrl struct in auto.c in case they are at
+        * the ctrl struct in romstage.c in case they are at
         * non-standard positions.
         * SMBus Address shifted by 1
         */
diff --git a/src/northbridge/via/vx800/examples/cache_as_ram_auto.c b/src/northbridge/via/vx800/examples/cache_as_ram_auto.c
deleted file mode 100644 (file)
index fa8962b..0000000
+++ /dev/null
@@ -1,660 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2009 One Laptop per Child, Association, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-#define ASSEMBLY 1
-#define __PRE_RAM__
-#define RAMINIT_SYSINFO 1
-#define CACHE_AS_RAM_ADDRESS_DEBUG 0
-
-#include <stdint.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <arch/io.h>
-#include <device/pnp_def.h>
-#include <arch/romcc_io.h>
-#include <arch/hlt.h>
-#include "pc80/serial.c"
-#include "arch/i386/lib/console.c"
-#include "lib/ramtest.c"
-#include "northbridge/via/vx800/vx800.h"
-#include "cpu/x86/mtrr/earlymtrr.c"
-#include "cpu/x86/bist.h"
-#include "pc80/udelay_io.c"
-#include "lib/delay.c"
-#if CONFIG_USE_INIT == 0
-#include "lib/memcpy.c"
-#endif
-#include "cpu/x86/lapic/boot_cpu.c"
-
-#include "driving_clk_phase_data.c"
-
-#include "northbridge/via/vx800/raminit.h"
-#include "northbridge/via/vx800/raminit.c"
-#include "cpu/x86/car/copy_and_run.c"
-
-int acpi_is_wakeup_early_via_vx800(void)
-{
-       device_t dev;
-       u16 tmp, result;
-
-       print_debug("In acpi_is_wakeup_early_via_vx800\r\n");
-       /* Power management controller */
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
-                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
-
-       if (dev == PCI_DEV_INVALID)
-               die("Power management controller not found\r\n");
-
-       /* Set ACPI base address to I/O VX800_ACPI_IO_BASE. */
-       pci_write_config16(dev, 0x88, VX800_ACPI_IO_BASE | 0x1);
-
-       /* Enable ACPI accessm RTC signal gated with PSON. */
-       pci_write_config8(dev, 0x81, 0x84);
-
-       tmp = inw(VX800_ACPI_IO_BASE + 0x04);
-       result = ((tmp & (7 << 10)) >> 10) == 1 ? 3 : 0;
-       print_debug("         boot_mode=");
-       print_debug_hex16(result);
-       print_debug("\r\n");
-       return result;
-}
-
-static inline int spd_read_byte(unsigned device, unsigned address)
-{
-       return smbus_read_byte(device, address);
-}
-
-
-static void enable_mainboard_devices(void)
-{
-       device_t dev;
-       uint16_t values;
-
-       print_debug("In enable_mainboard_devices \r\n");
-
-       /*
-          Enable P2P Bridge Header for External PCI BUS.
-        */
-       dev = pci_locate_device(PCI_ID(0x1106, 0xa353), 0);
-       pci_write_config8(dev, 0x4f, 0x41);
-}
-
-static void enable_shadow_ram(void)
-{
-       uint8_t shadowreg;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0xff);
-       /* 0xf0000-0xfffff - ACPI tables */
-       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
-       shadowreg |= 0x30;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
-       /* 0xe0000-0xeffff - elfload? */
-
-       pci_write_config8(PCI_DEV(0, 0, 3), 0x82, 0xff);
-
-}
-
-
-/*
-this table contains the value needed to be set before begin to init dram.
-Note: REV_Bx should be cared when porting a new board!!!!! */
-static const struct VIA_PCI_REG_INIT_TABLE mNbStage1InitTbl[] = {
-       //VT3409 no pcie
-       0x00, 0xFF, NB_APIC_REG(0x61), 0xFF, 0x0E,      // Set Exxxxxxx as pcie mmio config range
-       0x00, 0xFF, NB_APIC_REG(0x60), 0xF4, 0x0B,      // Support extended cfg address of pcie
-       //0x00, 0xFF, NB_APIC_REG(0x42), 0xF9, 0x02, // APIC Interrupt((BT_INTR)) Control
-       // Set ROMSIP value by software
-
-       /*0x00, 0xFF, NB_HOST_REG(0x70), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pullup Driving = 3
-          0x00, 0xFF, NB_HOST_REG(0x71), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pulldown Driving = 3
-          0x00, 0xFF, NB_HOST_REG(0x72), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pullup Driving = 3
-          0x00, 0xFF, NB_HOST_REG(0x73), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pulldown Driving = 3
-          0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0x21, // Memory I/F timing ctrl
-          0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0xE1, // Memory I/F timing ctrl
-          0x00, 0xFF, NB_HOST_REG(0x75), 0xFF, 0x18, // AGTL+ I/O Circuit
-          0x00, 0xFF, NB_HOST_REG(0x76), 0xFB, 0x0C, // AGTL+ Compensation Status
-          0x00, 0xFF, NB_HOST_REG(0x78), 0xFF, 0x33, // 2X AGTL+ Auto Compensation Offset
-          0x00, 0xFF, NB_HOST_REG(0x79), 0xFF, 0x33, // 4X AGTL+ Auto Compensation Offset
-          0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x72, // AGTL Compensation Status
-          0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x77, // AGTL Compensation Status
-          0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x44, // Input Host Address / Host Strobe Delay Control for HA Group
-          0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x22, // Input Host Address / Host Strobe Delay Control for HA Group
-          0x00, 0xFF, NB_HOST_REG(0x7C), 0xFF, 0x00, // Output Delay Control of PAD for HA Group
-          0x00, 0xFF, NB_HOST_REG(0x7D), 0xFF, 0xAA, // Host Address / Address Clock Output Delay Control (Only for P4 Bus)
-          0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-          0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-          0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-          0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
-          0x00, 0xFF, NB_HOST_REG(0x80), 0x3F, 0x44, // Host Data Receiving Strobe Delay Ctrl 1
-          0x00, 0xFF, NB_HOST_REG(0x81), 0xFF, 0x44, // Host Data Receiving Strobe Delay Ctrl 2
-          0x00, 0xFF, NB_HOST_REG(0x82), 0xFF, 0x00, // Output Delay of PAD for HDSTB
-          0x00, 0xFF, NB_HOST_REG(0x83), 0xFF, 0x00, // Output Delay of PAD for HD
-          0x00, 0xFF, NB_HOST_REG(0x84), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 0)
-          0x00, 0xFF, NB_HOST_REG(0x85), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 1)
-          0x00, 0xFF, NB_HOST_REG(0x86), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 2)
-          0x00, 0xFF, NB_HOST_REG(0x87), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 3) */
-
-
-       // CPU Host Bus Control
-       0x00, 0xFF, NB_HOST_REG(0x50), 0x1F, 0x08,      // Request phase ctrl: Dynamic Defer Snoop Stall Count = 8
-       //0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7F, // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
-       0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7C,      // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
-       0x00, 0xFF, NB_HOST_REG(0x52), 0xCB, 0xCB,      // CPU I/F Ctrl-2: Enable all for performance
-       //0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x88, // Arbitration: Host/Master Occupancy timer = 8*4 HCLK
-       0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x44,      // Arbitration: Host/Master Occupancy timer = 4*4 HCLK
-       0x00, 0xFF, NB_HOST_REG(0x54), 0x1E, 0x1C,      // Misc Ctrl: Enable 8QW burst Mem Access
-       //0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x06, // Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x04,      // Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x56), 0xF7, 0x63,      // Write Policy 1
-       //0x00, 0xFF, NB_HOST_REG(0x59), 0x3D, 0x01, // CPU Miscellaneous Control 1, enable Lowest-Priority IPL
-       //0x00, 0xFF, NB_HOST_REG(0x5c), 0xFF, 0x00, // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x5D), 0xFF, 0xA2,      // Write Policy
-       0x00, 0xFF, NB_HOST_REG(0x5E), 0xFF, 0x88,      // Bandwidth Timer
-       0x00, 0xFF, NB_HOST_REG(0x5F), 0x46, 0x46,      // CPU Misc Ctrl
-       // 0x00, 0xFF, NB_HOST_REG(0x90), 0xFF, 0x0B, // CPU Miscellaneous Control 3
-       //0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0B, // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0A,      // CPU Miscellaneous Control 2
-       0x00, 0xFF, NB_HOST_REG(0x98), 0xC1, 0x41,      // CPU Miscellaneous Control 3
-       0x00, 0xFF, NB_HOST_REG(0x99), 0x0E, 0x06,      // CPU Miscellaneous Control 4
-
-
-       // Set APIC and SMRAM
-       0x00, 0xFF, NB_HOST_REG(0x97), 0xFF, 0x00,      // APIC Related Control
-       0x00, 0xFF, NB_DRAMC_REG(0x86), 0xD6, 0x29,     // SMM and APIC Decoding: enable APIC, MSI and SMRAM A-Seg
-       0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  // End of the table
-};
-
-#define USE_VCP     1          //0 means use DVP
-#define USE_COM1    1
-#define USE_COM2    0
-
-#define gCom1Base   0x3f8
-#define gCom2Base   0x2f8
-void EmbedComInit()
-{
-       u8 ByteVal;
-       u16 ComBase;
-
-       //enable NB multiple function control
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 0), 0x4f);
-       ByteVal = ByteVal | 0x01;
-       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, ByteVal);
-
-       //VGA Enable
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA1);
-       ByteVal = ByteVal | 0x80;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0xA1, ByteVal);
-
-       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA7);
-       ByteVal = ByteVal | 0x08;
-       pci_write_config8(PCI_DEV(0, 0, 3), 0xA7, ByteVal);
-
-       //Enable p2p  IO/mem
-       ByteVal = pci_read_config8(PCI_DEV(0, 1, 0), 0x4);
-       ByteVal = ByteVal | 0x07;
-       pci_write_config8(PCI_DEV(0, 1, 0), 0x4, ByteVal);
-
-       //Turn on Graphic chip IO port port access
-       ByteVal = inb(0x3C3);
-       ByteVal = ByteVal | 0x01;
-       outb(ByteVal, 0x3C3);
-
-       //Turn off Graphic chip Register protection
-       outb(0x10, 0x3C4);
-       ByteVal = inb(0x3C5);
-       ByteVal = ByteVal | 0x01;
-       outb(ByteVal, 0x3C5);
-
-       //south module pad share enable 0x3C5.78[7]
-       outb(0x78, 0x3C4);
-       ByteVal = inb(0x3C5);
-       ByteVal = ByteVal | 0x80;
-       outb(ByteVal, 0x3C5);
-
-       //enable  UART Function multiplex with DVP or VCP pad D17F0Rx46[7,6]
-       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0x46);
-       //multiplex with VCP
-       if (USE_VCP == 1)
-               ByteVal = (ByteVal & 0x3F) | 0x40;
-       //multiplex with DVP
-       else
-               ByteVal = (ByteVal & 0x3F) | 0xC0;
-       pci_write_config8(PCI_DEV(0, 17, 0), 0x46, ByteVal);
-
-
-
-       //enable embeded com1 and com2 D17F0RxB0[5,4]
-       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xB0);
-       ByteVal = ByteVal & 0xcf;
-       //multiplex with VCP
-       if (USE_COM1 == 1)
-               ByteVal = ByteVal | 0x10;
-       if (USE_COM2 == 1)
-               ByteVal = ByteVal | 0x20;
-       pci_write_config8(PCI_DEV(0, 17, 0), 0xB0, ByteVal);
-
-       if (USE_COM1 == 1)
-               ComBase = gCom1Base;
-       else
-               ComBase = gCom2Base;
-
-//noharddrive
-
-       //set embeded com1 IO base = 0x3E8
-       //D17F0RB4
-       //ByteVal = 0xFD;
-       if (USE_COM1 == 1) {
-               ByteVal = (u8) ((gCom1Base >> 3) | 0x80);
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB4, ByteVal);
-               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
-               ByteVal = (ByteVal & 0xf0) | 0x04;
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
-       }
-       //set embeded com2 IO base = 0x2E8
-       //D17F0RB5
-       //ByteVal = 0xDD;
-       if (USE_COM2 == 1) {
-               ByteVal = (u8) ((gCom2Base >> 3) | 0x80);
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB5, ByteVal);
-               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
-               ByteVal = (ByteVal & 0x0f) | 0x30;
-               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
-       }
-       //no port 80 biger then 0x10
-
-       //disable interrupt
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal & 0x7F, ComBase + 3);
-       outb(0x00, ComBase + 1);
-
-       //set baudrate
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal | 0x80, ComBase + 3);
-       outb(0x01, ComBase);
-       outb(0x00, ComBase + 1);
-
-       //set  frame  fromat
-       ByteVal = inb(ComBase + 3);
-       outb(ByteVal & 0x3F, ComBase + 3);
-       outb(0x03, ComBase + 3);
-       outb(0x00, ComBase + 2);
-       outb(0x00, ComBase + 4);
-
-       //SOutput("Embeded com output\n");
-       //while(1);
-}
-
-/* cache_as_ram.inc jump to here
-*/
-void amd64_main(unsigned long bist)
-{
-       unsigned cpu_reset = 0;
-       u16 boot_mode;
-       u8 rambits;
-
-       //device_t dev;
-       /* Enable multifunction for northbridge. */
-       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
-       EmbedComInit();
-       //enable_vx800_serial();
-       //uart_init();
-
-
-/*     1.    D15F0
-
-a)      RxBAh = 71h
-
-b)      RxBBh = 05h
-
-c)      RxBEh = 71h
-
-d)      RxBFh = 05h
-
-2.    D17F0
-
-a)      RxA0h = 06h
-
-b)      RxA1h = 11h
-
-c)      RxA2h = 27h
-
-d)      RxA3h = 32h
-
-e)      Rx79h = 40h
-
-f)      Rx72h = 27h
-
-g)      Rx73h = 32h
-*/
-
-       u8 Data8;
-
-       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBA,
-                          PCI_DEVICE_ID_VIA_VX855_IDE);
-       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBE,
-                          PCI_DEVICE_ID_VIA_VX855_IDE);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA0, PCI_VENDOR_ID_VIA);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA2,
-                          PCI_DEVICE_ID_VIA_VX855_LPC);
-       Data8 = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x79);
-       Data8 &= ~0x40;
-       Data8 |= 0x40;
-       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x79, Data8);
-       pci_write_config16(PCI_DEV(0, 0x11, 0), 0x72,
-                          PCI_DEVICE_ID_VIA_VX855_LPC);
-
-       console_init();         //there are to function defination of console_init(), while the src/archi386/lib is the right one
-
-       /* decide if this is a s3 wakeup or a normal boot */
-       boot_mode = acpi_is_wakeup_early_via_vx800();
-       /*add this, to transfer "cpu restart" to "cold boot"
-          When this boot is not a S3 resume, and PCI registers had been written, 
-          then this must be a cpu restart(result of os reboot cmd). so we need a real "cold boot". */
-       if ((boot_mode != 3)
-           && (pci_read_config8(PCI_DEV(0, 0, 3), 0x80) != 0)) {
-               outb(6, 0xcf9);
-       }
-
-       /*x86 cold boot I/O cmd */
-       enable_smbus();
-       //smbus_fixup(&ctrl);// this fix does help vx800!, but vx855 no need this 
-
-       if (bist == 0) {
-               // CAR need mtrr untill mem is ok, so i disable this early_mtrr_init();
-               //print_debug("doing early_mtrr\r\n");
-               //early_mtrr_init();
-       }
-
-       /* Halt if there was a built-in self test failure. */
-       report_bist_failure(bist);
-
-       print_debug("Enabling mainboard devices\r\n");
-       enable_mainboard_devices();
-
-       u8 Data;
-       device_t device;
-       /* Get NB Chip revision from D0F4RxF6, revision will be used in via_pci_inittable */
-       device = PCI_DEV(0, 0, 4);
-       Data = pci_read_config8(device, 0xf6);
-       print_debug("NB chip revision =");
-       print_debug_hex8(Data);
-       print_debug("\r\n");
-       /* make NB ready before draminit */
-       via_pci_inittable(Data, mNbStage1InitTbl);
-
-       /*add this.
-          When resume from s3, draminit is skiped, so need to recovery any PCI register related to draminit.
-          and d0f3 didnt lost its Power during whole s3 time, so any register not belongs to d0f3 need to be recoveried . */
-#if 1
-       if (boot_mode == 3) {
-               u8 i;
-               u8 ramregs[] = { 0x43, 0x42, 0x41, 0x40 };
-               DRAM_SYS_ATTR DramAttr;
-
-               print_debug("This is a S3 wakeup\r\n");
-
-               memset(&DramAttr, 0, sizeof(DRAM_SYS_ATTR));
-               /*Step1 DRAM Detection; DDR1 or DDR2; Get SPD Data; Rank Presence;64 or 128bit; Unbuffered or registered; 1T or 2T */
-               DRAMDetect(&DramAttr);
-
-               /*begin to get ram size, 43,42 41 40 contains the end address of last rank in ddr2-slot */
-               device = PCI_DEV(0, 0, 3);
-               for (rambits = 0, i = 0; i < ARRAY_SIZE(ramregs); i++) {
-                       rambits = pci_read_config8(device, ramregs[i]);
-                       if (rambits != 0)
-                               break;
-               }
-
-               DRAMDRDYSetting(&DramAttr);
-
-               Data = 0x80;    // this value is same with dev_init.c
-               pci_write_config8(PCI_DEV(0, 0, 4), 0xa3, Data);
-               pci_write_config8(PCI_DEV(0, 17, 7), 0x60, rambits << 2);
-               Data = pci_read_config8(MEMCTRL, 0x88);
-               pci_write_config8(PCI_DEV(0, 17, 7), 0xE5, Data);
-
-               DRAMRegFinalValue(&DramAttr);   // I just copy this function from draminit to here!
-               SetUMARam();    // I just copy this function from draminit to here!
-               print_debug("Resume from S3, RAM init was ignored\r\n");
-       } else {
-               ddr2_ram_setup();
-               ram_check(0, 640 * 1024);
-       }
-#endif
-       //ddr2_ram_setup();
-       /*this line is the same with cx700 port . */
-       enable_shadow_ram();
-
-       /*
-          For coreboot most time of S3 resume is the same as normal boot, so some memory area under 1M become dirty,
-          so before this happen, I need to backup the content of mem to top-mem. 
-          I will reserve the 1M top-men in LBIO table in coreboot_table.c and recovery the content of 1M-mem in wakeup.c
-        */
-#if PAYLOAD_IS_SEABIOS==1      //
-       if (boot_mode == 3) {
-               /*   some idea of Libo.Feng at amd.com in  http://www.coreboot.org/pipermail/coreboot/2008-December/043111.html
-                  I want move the 1M data, I have to set some MTRRs myself. */
-               /* seting mtrr before back memoy save s3 resume time about 0.14 seconds */
-               /*because CAR stack use cache, and here to use cache , must be careful, 
-                  1 during these mtrr code, must no function call, (after this mtrr, I think it should be ok to use function)
-                  2 before stack switch, no use variable that have value set before this
-                  3 due to 2, take care of "cpu_reset", I directlly set it to ZERO.
-                */
-               u32 memtop = *(u32 *) WAKE_MEM_INFO;
-               u32 memtop1 = *(u32 *) WAKE_MEM_INFO - 0x100000;
-               u32 memtop2 = *(u32 *) WAKE_MEM_INFO - 0x200000;
-               u32 memtop3 =
-                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000;
-               u32 memtop4 =
-                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000 +
-                   0xe0000;
-               /*      __asm__ volatile (              
-                  "movl    $0x204, %%ecx\n\t"
-                  "xorl    %%edx, %%edx\n\t"
-                  "movl     %0,%%eax\n\t"
-                  "orl     $(0 | 6), %%eax\n\t"
-                  "wrmsr\n\t"
-
-                  "movl    $0x205, %%ecx\n\t"
-                  "xorl    %%edx, %%edx\n\t"
-                  "movl   $0x100000,%%eax\n\t"
-                  "decl                %%eax\n\t"
-                  "notl                %%eax\n\t"
-                  "orl    $(0 | 0x800), %%eax\n\t"
-                  "wrmsr\n\t"
-                  ::"g"(memtop2)
-                  );
-                  __asm__ volatile (           
-                  "movl    $0x206, %%ecx\n\t"
-                  "xorl    %%edx, %%edx\n\t"
-                  "movl     %0,%%eax\n\t"
-                  "orl     $(0 | 6), %%eax\n\t"
-                  "wrmsr\n\t"
-
-                  "movl    $0x207, %%ecx\n\t"
-                  "xorl    %%edx, %%edx\n\t"
-                  "movl   $0x100000,%%eax\n\t"
-                  "decl                %%eax\n\t"
-                  "notl                %%eax\n\t"
-                  "orl    $(0 | 0x800), %%eax\n\t"
-                  "wrmsr\n\t"
-                  ::"g"(memtop1)
-                  );
-                  __asm__ volatile (       
-                  "movl    $0x208, %ecx\n\t"
-                  "xorl    %edx, %edx\n\t"
-                  "movl    $0,%eax\n\t"
-                  "orl     $(0 | 6), %eax\n\t"
-                  "wrmsr\n\t"
-
-                  "movl    $0x209, %ecx\n\t"
-                  "xorl    %edx, %edx\n\t"
-                  "movl     $0x100000,%eax\n\t"
-                  "decl                %eax\n\t"
-                  "notl                %eax\n\t"
-                  "orl     $(0 | 0x800), %eax\n\t"
-                  "wrmsr\n\t"
-                  );
-                */
-               // WAKE_MEM_INFO is  inited in get_set_top_available_mem in tables.c
-               // these two memcpy not not be enabled if set the MTRR around this two lines.
-               /*__asm__ volatile (            
-                               "movl    $0, %%esi\n\t"
-        "movl    %0, %%edi\n\t"
-               "movl    $0xa0000, %%ecx\n\t"
-               "shrl    $2, %%ecx\n\t"
-        "rep movsd\n\t"    
-        ::"g"(memtop3)        
-       );
-       __asm__ volatile (              
-                               "movl    $0xe0000, %%esi\n\t"
-        "movl    %0, %%edi\n\t"
-               "movl    $0x20000, %%ecx\n\t"
-               "shrl    $2, %%ecx\n\t"
-        "rep movsd\n\t"    
-        ::"g"(memtop4)        
-       );*/
-               print_debug("copy memory to high memory to protect s3 wakeup vector code \r\n");        //this can have function call, because no variable used before this
-               memcpy((unsigned char *) ((*(u32 *) WAKE_MEM_INFO) -
-                                         64 * 1024 - 0x100000),
-                      (unsigned char *) 0, 0xa0000);
-               memcpy((unsigned char *) ((*(u32 *) WAKE_MEM_INFO) -
-                                         64 * 1024 - 0x100000 + 0xe0000),
-                      (unsigned char *) 0xe0000, 0x20000);
-
-               /* restore the MTRR previously modified. */
-/*             __asm__ volatile (      
-        "wbinvd\n\t"                           
-        "xorl    %edx, %edx\n\t"
-               "xorl    %eax, %eax\n\t"
-               "movl    $0x204, %ecx\n\t"
-        "wrmsr\n\t"
-                               "movl    $0x205, %ecx\n\t"                                      
-        "wrmsr\n\t"        
-                               "movl    $0x206, %ecx\n\t"
-        "wrmsr\n\t"
-                               "movl    $0x207, %ecx\n\t"                     
-        "wrmsr\n\t"        
-                               "movl    $0x208, %ecx\n\t"                     
-        "wrmsr\n\t"        
-                               "movl    $0x209, %ecx\n\t"                     
-        "wrmsr\n\t"        
-               );*/
-       }
-#endif
-/*
-the following code is  copied from src\mainboard\tyan\s2735\cache_as_ram_auto.c
-Only the code around CLEAR_FIRST_1M_RAM is changed.
-I remove all the code around CLEAR_FIRST_1M_RAM and #include "cpu/x86/car/cache_as_ram_post.c"
-the CLEAR_FIRST_1M_RAM seems to make cpu/x86/car/cache_as_ram_post.c stop at somewhere, 
-and cpu/x86/car/cache_as_ram_post.c  do not cache my $CONFIG_XIP_ROM_BASE+SIZE area.
-
-So,I use: #include "cpu/via/car/cache_as_ram_post.c". my via-version post.c have some diff withx86-version
-*/
-#if 1
-       {
-               /* Check value of esp to verify if we have enough rom for stack in Cache as RAM */
-               unsigned v_esp;
-               __asm__ volatile ("movl   %%esp, %0\n\t":"=a" (v_esp)
-                   );
-#if CONFIG_USE_INIT
-               printk_debug("v_esp=%08x\r\n", v_esp);
-#else
-               print_debug("v_esp=");
-               print_debug_hex32(v_esp);
-               print_debug("\r\n");
-#endif
-       }
-
-#endif
-#if 1
-
-      cpu_reset_x:
-// it seems that cpu_reset is not used before this, so I just reset it, (this is because the s3 resume, setting in mtrr and copy data may destroy 
-//stack
-       cpu_reset = 0;
-#if CONFIG_USE_INIT
-       printk_debug("cpu_reset = %08x\r\n", cpu_reset);
-#else
-       print_debug("cpu_reset = ");
-       print_debug_hex32(cpu_reset);
-       print_debug("\r\n");
-#endif
-
-       if (cpu_reset == 0) {
-               print_debug("Clearing initial memory region: ");
-       }
-       print_debug("No cache as ram now - ");
-
-       /* store cpu_reset to ebx */
-       __asm__ volatile ("movl %0, %%ebx\n\t"::"a" (cpu_reset)
-           );
-
-
-/* cancel these lines, CLEAR_FIRST_1M_RAM cause the cpu/x86/car/cache_as_ram_post.c stop at somewhere
-
-       if(cpu_reset==0) {
-#define CLEAR_FIRST_1M_RAM 1
-#include "cpu/via/car/cache_as_ram_post.c"     
-       }
-       else {
-#undef CLEAR_FIRST_1M_RAM 
-#include "cpu/via/car/cache_as_ram_post.c"
-       }
-*/
-#include "cpu/via/car/cache_as_ram_post.c"
-//#include "cpu/x86/car/cache_as_ram_post.c"    
-       __asm__ volatile (
-                                /* set new esp *//* before CONFIG_RAMBASE */
-                                "subl   %0, %%ebp\n\t"
-                                "subl   %0, %%esp\n\t"::
-                                "a" ((CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE) -
-                                     CONFIG_RAMBASE)
-           );
-
-       {
-               unsigned new_cpu_reset;
-
-               /* get back cpu_reset from ebx */
-               __asm__ volatile ("movl %%ebx, %0\n\t":"=a" (new_cpu_reset)
-                   );
-
-               /* We can not go back any more, we lost old stack data in cache as ram */
-               if (new_cpu_reset == 0) {
-                       print_debug("Use Ram as Stack now - done\r\n");
-               } else {
-                       print_debug("Use Ram as Stack now - \r\n");
-               }
-#if CONFIG_USE_INIT
-               printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
-#else
-               print_debug("new_cpu_reset = ");
-               print_debug_hex32(new_cpu_reset);
-               print_debug("\r\n");
-#endif
-               /*copy and execute coreboot_ram */
-               copy_and_run(new_cpu_reset);
-               /* We will not return */
-       }
-#endif
-
-
-       print_debug("should not be here -\r\n");
-
-}
diff --git a/src/northbridge/via/vx800/examples/romstage.c b/src/northbridge/via/vx800/examples/romstage.c
new file mode 100644 (file)
index 0000000..c1de3f3
--- /dev/null
@@ -0,0 +1,660 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 One Laptop per Child, Association, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#define ASSEMBLY 1
+#define __PRE_RAM__
+#define RAMINIT_SYSINFO 1
+#define CACHE_AS_RAM_ADDRESS_DEBUG 0
+
+#include <stdint.h>
+#include <device/pci_def.h>
+#include <device/pci_ids.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include <arch/romcc_io.h>
+#include <arch/hlt.h>
+#include "pc80/serial.c"
+#include "arch/i386/lib/console.c"
+#include "lib/ramtest.c"
+#include "northbridge/via/vx800/vx800.h"
+#include "cpu/x86/mtrr/earlymtrr.c"
+#include "cpu/x86/bist.h"
+#include "pc80/udelay_io.c"
+#include "lib/delay.c"
+#if CONFIG_USE_INIT == 0
+#include "lib/memcpy.c"
+#endif
+#include "cpu/x86/lapic/boot_cpu.c"
+
+#include "driving_clk_phase_data.c"
+
+#include "northbridge/via/vx800/raminit.h"
+#include "northbridge/via/vx800/raminit.c"
+#include "cpu/x86/car/copy_and_run.c"
+
+int acpi_is_wakeup_early_via_vx800(void)
+{
+       device_t dev;
+       u16 tmp, result;
+
+       print_debug("In acpi_is_wakeup_early_via_vx800\r\n");
+       /* Power management controller */
+       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+                                      PCI_DEVICE_ID_VIA_VX855_LPC), 0);
+
+       if (dev == PCI_DEV_INVALID)
+               die("Power management controller not found\r\n");
+
+       /* Set ACPI base address to I/O VX800_ACPI_IO_BASE. */
+       pci_write_config16(dev, 0x88, VX800_ACPI_IO_BASE | 0x1);
+
+       /* Enable ACPI accessm RTC signal gated with PSON. */
+       pci_write_config8(dev, 0x81, 0x84);
+
+       tmp = inw(VX800_ACPI_IO_BASE + 0x04);
+       result = ((tmp & (7 << 10)) >> 10) == 1 ? 3 : 0;
+       print_debug("         boot_mode=");
+       print_debug_hex16(result);
+       print_debug("\r\n");
+       return result;
+}
+
+static inline int spd_read_byte(unsigned device, unsigned address)
+{
+       return smbus_read_byte(device, address);
+}
+
+
+static void enable_mainboard_devices(void)
+{
+       device_t dev;
+       uint16_t values;
+
+       print_debug("In enable_mainboard_devices \r\n");
+
+       /*
+          Enable P2P Bridge Header for External PCI BUS.
+        */
+       dev = pci_locate_device(PCI_ID(0x1106, 0xa353), 0);
+       pci_write_config8(dev, 0x4f, 0x41);
+}
+
+static void enable_shadow_ram(void)
+{
+       uint8_t shadowreg;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x80, 0xff);
+       /* 0xf0000-0xfffff - ACPI tables */
+       shadowreg = pci_read_config8(PCI_DEV(0, 0, 3), 0x83);
+       shadowreg |= 0x30;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x83, shadowreg);
+       /* 0xe0000-0xeffff - elfload? */
+
+       pci_write_config8(PCI_DEV(0, 0, 3), 0x82, 0xff);
+
+}
+
+
+/*
+this table contains the value needed to be set before begin to init dram.
+Note: REV_Bx should be cared when porting a new board!!!!! */
+static const struct VIA_PCI_REG_INIT_TABLE mNbStage1InitTbl[] = {
+       //VT3409 no pcie
+       0x00, 0xFF, NB_APIC_REG(0x61), 0xFF, 0x0E,      // Set Exxxxxxx as pcie mmio config range
+       0x00, 0xFF, NB_APIC_REG(0x60), 0xF4, 0x0B,      // Support extended cfg address of pcie
+       //0x00, 0xFF, NB_APIC_REG(0x42), 0xF9, 0x02, // APIC Interrupt((BT_INTR)) Control
+       // Set ROMSIP value by software
+
+       /*0x00, 0xFF, NB_HOST_REG(0x70), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pullup Driving = 3
+          0x00, 0xFF, NB_HOST_REG(0x71), 0x77, 0x33, // 2x Host Adr Strobe/Pad Pulldown Driving = 3
+          0x00, 0xFF, NB_HOST_REG(0x72), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pullup Driving = 3
+          0x00, 0xFF, NB_HOST_REG(0x73), 0x77, 0x33, // 4x Host Dat Strobe/Pad Pulldown Driving = 3
+          0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0x21, // Memory I/F timing ctrl
+          0x00, 0xFF, NB_HOST_REG(0x74), 0xFF, 0xE1, // Memory I/F timing ctrl
+          0x00, 0xFF, NB_HOST_REG(0x75), 0xFF, 0x18, // AGTL+ I/O Circuit
+          0x00, 0xFF, NB_HOST_REG(0x76), 0xFB, 0x0C, // AGTL+ Compensation Status
+          0x00, 0xFF, NB_HOST_REG(0x78), 0xFF, 0x33, // 2X AGTL+ Auto Compensation Offset
+          0x00, 0xFF, NB_HOST_REG(0x79), 0xFF, 0x33, // 4X AGTL+ Auto Compensation Offset
+          0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x72, // AGTL Compensation Status
+          0x00, 0xFF, NB_HOST_REG(0x7A), 0x3F, 0x77, // AGTL Compensation Status
+          0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x44, // Input Host Address / Host Strobe Delay Control for HA Group
+          0x00, 0xFF, NB_HOST_REG(0x7B), 0xFF, 0x22, // Input Host Address / Host Strobe Delay Control for HA Group
+          0x00, 0xFF, NB_HOST_REG(0x7C), 0xFF, 0x00, // Output Delay Control of PAD for HA Group
+          0x00, 0xFF, NB_HOST_REG(0x7D), 0xFF, 0xAA, // Host Address / Address Clock Output Delay Control (Only for P4 Bus)
+          0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+          0x00, 0xFF, NB_HOST_REG(0x7E), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+          0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x10, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+          0x00, 0xFF, NB_HOST_REG(0x7F), 0xFF, 0x40, // Host Address CKG Rising / Falling Time Control (Only for P4 Bus)
+          0x00, 0xFF, NB_HOST_REG(0x80), 0x3F, 0x44, // Host Data Receiving Strobe Delay Ctrl 1
+          0x00, 0xFF, NB_HOST_REG(0x81), 0xFF, 0x44, // Host Data Receiving Strobe Delay Ctrl 2
+          0x00, 0xFF, NB_HOST_REG(0x82), 0xFF, 0x00, // Output Delay of PAD for HDSTB
+          0x00, 0xFF, NB_HOST_REG(0x83), 0xFF, 0x00, // Output Delay of PAD for HD
+          0x00, 0xFF, NB_HOST_REG(0x84), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 0)
+          0x00, 0xFF, NB_HOST_REG(0x85), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 1)
+          0x00, 0xFF, NB_HOST_REG(0x86), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 2)
+          0x00, 0xFF, NB_HOST_REG(0x87), 0xFF, 0x44, // Host Data / Strobe CKG Control (Group 3) */
+
+
+       // CPU Host Bus Control
+       0x00, 0xFF, NB_HOST_REG(0x50), 0x1F, 0x08,      // Request phase ctrl: Dynamic Defer Snoop Stall Count = 8
+       //0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7F, // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
+       0x00, 0xFF, NB_HOST_REG(0x51), 0xFF, 0x7C,      // CPU I/F Ctrl-1: Disable Fast DRDY and RAW
+       0x00, 0xFF, NB_HOST_REG(0x52), 0xCB, 0xCB,      // CPU I/F Ctrl-2: Enable all for performance
+       //0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x88, // Arbitration: Host/Master Occupancy timer = 8*4 HCLK
+       0x00, 0xFF, NB_HOST_REG(0x53), 0xFF, 0x44,      // Arbitration: Host/Master Occupancy timer = 4*4 HCLK
+       0x00, 0xFF, NB_HOST_REG(0x54), 0x1E, 0x1C,      // Misc Ctrl: Enable 8QW burst Mem Access
+       //0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x06, // Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x55), 0x06, 0x04,      // Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x56), 0xF7, 0x63,      // Write Policy 1
+       //0x00, 0xFF, NB_HOST_REG(0x59), 0x3D, 0x01, // CPU Miscellaneous Control 1, enable Lowest-Priority IPL
+       //0x00, 0xFF, NB_HOST_REG(0x5c), 0xFF, 0x00, // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x5D), 0xFF, 0xA2,      // Write Policy
+       0x00, 0xFF, NB_HOST_REG(0x5E), 0xFF, 0x88,      // Bandwidth Timer
+       0x00, 0xFF, NB_HOST_REG(0x5F), 0x46, 0x46,      // CPU Misc Ctrl
+       // 0x00, 0xFF, NB_HOST_REG(0x90), 0xFF, 0x0B, // CPU Miscellaneous Control 3
+       //0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0B, // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x96), 0x0B, 0x0A,      // CPU Miscellaneous Control 2
+       0x00, 0xFF, NB_HOST_REG(0x98), 0xC1, 0x41,      // CPU Miscellaneous Control 3
+       0x00, 0xFF, NB_HOST_REG(0x99), 0x0E, 0x06,      // CPU Miscellaneous Control 4
+
+
+       // Set APIC and SMRAM
+       0x00, 0xFF, NB_HOST_REG(0x97), 0xFF, 0x00,      // APIC Related Control
+       0x00, 0xFF, NB_DRAMC_REG(0x86), 0xD6, 0x29,     // SMM and APIC Decoding: enable APIC, MSI and SMRAM A-Seg
+       0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  // End of the table
+};
+
+#define USE_VCP     1          //0 means use DVP
+#define USE_COM1    1
+#define USE_COM2    0
+
+#define gCom1Base   0x3f8
+#define gCom2Base   0x2f8
+void EmbedComInit()
+{
+       u8 ByteVal;
+       u16 ComBase;
+
+       //enable NB multiple function control
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 0), 0x4f);
+       ByteVal = ByteVal | 0x01;
+       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, ByteVal);
+
+       //VGA Enable
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA1);
+       ByteVal = ByteVal | 0x80;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0xA1, ByteVal);
+
+       ByteVal = pci_read_config8(PCI_DEV(0, 0, 3), 0xA7);
+       ByteVal = ByteVal | 0x08;
+       pci_write_config8(PCI_DEV(0, 0, 3), 0xA7, ByteVal);
+
+       //Enable p2p  IO/mem
+       ByteVal = pci_read_config8(PCI_DEV(0, 1, 0), 0x4);
+       ByteVal = ByteVal | 0x07;
+       pci_write_config8(PCI_DEV(0, 1, 0), 0x4, ByteVal);
+
+       //Turn on Graphic chip IO port port access
+       ByteVal = inb(0x3C3);
+       ByteVal = ByteVal | 0x01;
+       outb(ByteVal, 0x3C3);
+
+       //Turn off Graphic chip Register protection
+       outb(0x10, 0x3C4);
+       ByteVal = inb(0x3C5);
+       ByteVal = ByteVal | 0x01;
+       outb(ByteVal, 0x3C5);
+
+       //south module pad share enable 0x3C5.78[7]
+       outb(0x78, 0x3C4);
+       ByteVal = inb(0x3C5);
+       ByteVal = ByteVal | 0x80;
+       outb(ByteVal, 0x3C5);
+
+       //enable  UART Function multiplex with DVP or VCP pad D17F0Rx46[7,6]
+       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0x46);
+       //multiplex with VCP
+       if (USE_VCP == 1)
+               ByteVal = (ByteVal & 0x3F) | 0x40;
+       //multiplex with DVP
+       else
+               ByteVal = (ByteVal & 0x3F) | 0xC0;
+       pci_write_config8(PCI_DEV(0, 17, 0), 0x46, ByteVal);
+
+
+
+       //enable embeded com1 and com2 D17F0RxB0[5,4]
+       ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xB0);
+       ByteVal = ByteVal & 0xcf;
+       //multiplex with VCP
+       if (USE_COM1 == 1)
+               ByteVal = ByteVal | 0x10;
+       if (USE_COM2 == 1)
+               ByteVal = ByteVal | 0x20;
+       pci_write_config8(PCI_DEV(0, 17, 0), 0xB0, ByteVal);
+
+       if (USE_COM1 == 1)
+               ComBase = gCom1Base;
+       else
+               ComBase = gCom2Base;
+
+//noharddrive
+
+       //set embeded com1 IO base = 0x3E8
+       //D17F0RB4
+       //ByteVal = 0xFD;
+       if (USE_COM1 == 1) {
+               ByteVal = (u8) ((gCom1Base >> 3) | 0x80);
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB4, ByteVal);
+               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
+               ByteVal = (ByteVal & 0xf0) | 0x04;
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
+       }
+       //set embeded com2 IO base = 0x2E8
+       //D17F0RB5
+       //ByteVal = 0xDD;
+       if (USE_COM2 == 1) {
+               ByteVal = (u8) ((gCom2Base >> 3) | 0x80);
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB5, ByteVal);
+               ByteVal = pci_read_config8(PCI_DEV(0, 17, 0), 0xb2);
+               ByteVal = (ByteVal & 0x0f) | 0x30;
+               pci_write_config8(PCI_DEV(0, 17, 0), 0xB2, ByteVal);
+       }
+       //no port 80 biger then 0x10
+
+       //disable interrupt
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal & 0x7F, ComBase + 3);
+       outb(0x00, ComBase + 1);
+
+       //set baudrate
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal | 0x80, ComBase + 3);
+       outb(0x01, ComBase);
+       outb(0x00, ComBase + 1);
+
+       //set  frame  fromat
+       ByteVal = inb(ComBase + 3);
+       outb(ByteVal & 0x3F, ComBase + 3);
+       outb(0x03, ComBase + 3);
+       outb(0x00, ComBase + 2);
+       outb(0x00, ComBase + 4);
+
+       //SOutput("Embeded com output\n");
+       //while(1);
+}
+
+/* cache_as_ram.inc jump to here
+*/
+void amd64_main(unsigned long bist)
+{
+       unsigned cpu_reset = 0;
+       u16 boot_mode;
+       u8 rambits;
+
+       //device_t dev;
+       /* Enable multifunction for northbridge. */
+       pci_write_config8(PCI_DEV(0, 0, 0), 0x4f, 0x01);
+       EmbedComInit();
+       //enable_vx800_serial();
+       //uart_init();
+
+
+/*     1.    D15F0
+
+a)      RxBAh = 71h
+
+b)      RxBBh = 05h
+
+c)      RxBEh = 71h
+
+d)      RxBFh = 05h
+
+2.    D17F0
+
+a)      RxA0h = 06h
+
+b)      RxA1h = 11h
+
+c)      RxA2h = 27h
+
+d)      RxA3h = 32h
+
+e)      Rx79h = 40h
+
+f)      Rx72h = 27h
+
+g)      Rx73h = 32h
+*/
+
+       u8 Data8;
+
+       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBA,
+                          PCI_DEVICE_ID_VIA_VX855_IDE);
+       pci_write_config16(PCI_DEV(0, 0xf, 0), 0xBE,
+                          PCI_DEVICE_ID_VIA_VX855_IDE);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA0, PCI_VENDOR_ID_VIA);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0xA2,
+                          PCI_DEVICE_ID_VIA_VX855_LPC);
+       Data8 = pci_read_config8(PCI_DEV(0, 0x11, 0), 0x79);
+       Data8 &= ~0x40;
+       Data8 |= 0x40;
+       pci_write_config8(PCI_DEV(0, 0x11, 0), 0x79, Data8);
+       pci_write_config16(PCI_DEV(0, 0x11, 0), 0x72,
+                          PCI_DEVICE_ID_VIA_VX855_LPC);
+
+       console_init();         //there are to function defination of console_init(), while the src/archi386/lib is the right one
+
+       /* decide if this is a s3 wakeup or a normal boot */
+       boot_mode = acpi_is_wakeup_early_via_vx800();
+       /*add this, to transfer "cpu restart" to "cold boot"
+          When this boot is not a S3 resume, and PCI registers had been written, 
+          then this must be a cpu restart(result of os reboot cmd). so we need a real "cold boot". */
+       if ((boot_mode != 3)
+           && (pci_read_config8(PCI_DEV(0, 0, 3), 0x80) != 0)) {
+               outb(6, 0xcf9);
+       }
+
+       /*x86 cold boot I/O cmd */
+       enable_smbus();
+       //smbus_fixup(&ctrl);// this fix does help vx800!, but vx855 no need this 
+
+       if (bist == 0) {
+               // CAR need mtrr untill mem is ok, so i disable this early_mtrr_init();
+               //print_debug("doing early_mtrr\r\n");
+               //early_mtrr_init();
+       }
+
+       /* Halt if there was a built-in self test failure. */
+       report_bist_failure(bist);
+
+       print_debug("Enabling mainboard devices\r\n");
+       enable_mainboard_devices();
+
+       u8 Data;
+       device_t device;
+       /* Get NB Chip revision from D0F4RxF6, revision will be used in via_pci_inittable */
+       device = PCI_DEV(0, 0, 4);
+       Data = pci_read_config8(device, 0xf6);
+       print_debug("NB chip revision =");
+       print_debug_hex8(Data);
+       print_debug("\r\n");
+       /* make NB ready before draminit */
+       via_pci_inittable(Data, mNbStage1InitTbl);
+
+       /*add this.
+          When resume from s3, draminit is skiped, so need to recovery any PCI register related to draminit.
+          and d0f3 didnt lost its Power during whole s3 time, so any register not belongs to d0f3 need to be recoveried . */
+#if 1
+       if (boot_mode == 3) {
+               u8 i;
+               u8 ramregs[] = { 0x43, 0x42, 0x41, 0x40 };
+               DRAM_SYS_ATTR DramAttr;
+
+               print_debug("This is a S3 wakeup\r\n");
+
+               memset(&DramAttr, 0, sizeof(DRAM_SYS_ATTR));
+               /*Step1 DRAM Detection; DDR1 or DDR2; Get SPD Data; Rank Presence;64 or 128bit; Unbuffered or registered; 1T or 2T */
+               DRAMDetect(&DramAttr);
+
+               /*begin to get ram size, 43,42 41 40 contains the end address of last rank in ddr2-slot */
+               device = PCI_DEV(0, 0, 3);
+               for (rambits = 0, i = 0; i < ARRAY_SIZE(ramregs); i++) {
+                       rambits = pci_read_config8(device, ramregs[i]);
+                       if (rambits != 0)
+                               break;
+               }
+
+               DRAMDRDYSetting(&DramAttr);
+
+               Data = 0x80;    // this value is same with dev_init.c
+               pci_write_config8(PCI_DEV(0, 0, 4), 0xa3, Data);
+               pci_write_config8(PCI_DEV(0, 17, 7), 0x60, rambits << 2);
+               Data = pci_read_config8(MEMCTRL, 0x88);
+               pci_write_config8(PCI_DEV(0, 17, 7), 0xE5, Data);
+
+               DRAMRegFinalValue(&DramAttr);   // I just copy this function from draminit to here!
+               SetUMARam();    // I just copy this function from draminit to here!
+               print_debug("Resume from S3, RAM init was ignored\r\n");
+       } else {
+               ddr2_ram_setup();
+               ram_check(0, 640 * 1024);
+       }
+#endif
+       //ddr2_ram_setup();
+       /*this line is the same with cx700 port . */
+       enable_shadow_ram();
+
+       /*
+          For coreboot most time of S3 resume is the same as normal boot, so some memory area under 1M become dirty,
+          so before this happen, I need to backup the content of mem to top-mem. 
+          I will reserve the 1M top-men in LBIO table in coreboot_table.c and recovery the content of 1M-mem in wakeup.c
+        */
+#if PAYLOAD_IS_SEABIOS==1      //
+       if (boot_mode == 3) {
+               /*   some idea of Libo.Feng at amd.com in  http://www.coreboot.org/pipermail/coreboot/2008-December/043111.html
+                  I want move the 1M data, I have to set some MTRRs myself. */
+               /* seting mtrr before back memoy save s3 resume time about 0.14 seconds */
+               /*because CAR stack use cache, and here to use cache , must be careful, 
+                  1 during these mtrr code, must no function call, (after this mtrr, I think it should be ok to use function)
+                  2 before stack switch, no use variable that have value set before this
+                  3 due to 2, take care of "cpu_reset", I directlly set it to ZERO.
+                */
+               u32 memtop = *(u32 *) WAKE_MEM_INFO;
+               u32 memtop1 = *(u32 *) WAKE_MEM_INFO - 0x100000;
+               u32 memtop2 = *(u32 *) WAKE_MEM_INFO - 0x200000;
+               u32 memtop3 =
+                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000;
+               u32 memtop4 =
+                   *(u32 *) WAKE_MEM_INFO - 64 * 1024 - 0x100000 +
+                   0xe0000;
+               /*      __asm__ volatile (              
+                  "movl    $0x204, %%ecx\n\t"
+                  "xorl    %%edx, %%edx\n\t"
+                  "movl     %0,%%eax\n\t"
+                  "orl     $(0 | 6), %%eax\n\t"
+                  "wrmsr\n\t"
+
+                  "movl    $0x205, %%ecx\n\t"
+                  "xorl    %%edx, %%edx\n\t"
+                  "movl   $0x100000,%%eax\n\t"
+                  "decl                %%eax\n\t"
+                  "notl                %%eax\n\t"
+                  "orl    $(0 | 0x800), %%eax\n\t"
+                  "wrmsr\n\t"
+                  ::"g"(memtop2)
+                  );
+                  __asm__ volatile (           
+                  "movl    $0x206, %%ecx\n\t"
+                  "xorl    %%edx, %%edx\n\t"
+                  "movl     %0,%%eax\n\t"
+                  "orl     $(0 | 6), %%eax\n\t"
+                  "wrmsr\n\t"
+
+                  "movl    $0x207, %%ecx\n\t"
+                  "xorl    %%edx, %%edx\n\t"
+                  "movl   $0x100000,%%eax\n\t"
+                  "decl                %%eax\n\t"
+                  "notl                %%eax\n\t"
+                  "orl    $(0 | 0x800), %%eax\n\t"
+                  "wrmsr\n\t"
+                  ::"g"(memtop1)
+                  );
+                  __asm__ volatile (       
+                  "movl    $0x208, %ecx\n\t"
+                  "xorl    %edx, %edx\n\t"
+                  "movl    $0,%eax\n\t"
+                  "orl     $(0 | 6), %eax\n\t"
+                  "wrmsr\n\t"
+
+                  "movl    $0x209, %ecx\n\t"
+                  "xorl    %edx, %edx\n\t"
+                  "movl     $0x100000,%eax\n\t"
+                  "decl                %eax\n\t"
+                  "notl                %eax\n\t"
+                  "orl     $(0 | 0x800), %eax\n\t"
+                  "wrmsr\n\t"
+                  );
+                */
+               // WAKE_MEM_INFO is  inited in get_set_top_available_mem in tables.c
+               // these two memcpy not not be enabled if set the MTRR around this two lines.
+               /*__asm__ volatile (            
+                               "movl    $0, %%esi\n\t"
+        "movl    %0, %%edi\n\t"
+               "movl    $0xa0000, %%ecx\n\t"
+               "shrl    $2, %%ecx\n\t"
+        "rep movsd\n\t"    
+        ::"g"(memtop3)        
+       );
+       __asm__ volatile (              
+                               "movl    $0xe0000, %%esi\n\t"
+        "movl    %0, %%edi\n\t"
+               "movl    $0x20000, %%ecx\n\t"
+               "shrl    $2, %%ecx\n\t"
+        "rep movsd\n\t"    
+        ::"g"(memtop4)        
+       );*/
+               print_debug("copy memory to high memory to protect s3 wakeup vector code \r\n");        //this can have function call, because no variable used before this
+               memcpy((unsigned char *) ((*(u32 *) WAKE_MEM_INFO) -
+                                         64 * 1024 - 0x100000),
+                      (unsigned char *) 0, 0xa0000);
+               memcpy((unsigned char *) ((*(u32 *) WAKE_MEM_INFO) -
+                                         64 * 1024 - 0x100000 + 0xe0000),
+                      (unsigned char *) 0xe0000, 0x20000);
+
+               /* restore the MTRR previously modified. */
+/*             __asm__ volatile (      
+        "wbinvd\n\t"                           
+        "xorl    %edx, %edx\n\t"
+               "xorl    %eax, %eax\n\t"
+               "movl    $0x204, %ecx\n\t"
+        "wrmsr\n\t"
+                               "movl    $0x205, %ecx\n\t"                                      
+        "wrmsr\n\t"        
+                               "movl    $0x206, %ecx\n\t"
+        "wrmsr\n\t"
+                               "movl    $0x207, %ecx\n\t"                     
+        "wrmsr\n\t"        
+                               "movl    $0x208, %ecx\n\t"                     
+        "wrmsr\n\t"        
+                               "movl    $0x209, %ecx\n\t"                     
+        "wrmsr\n\t"        
+               );*/
+       }
+#endif
+/*
+the following code is  copied from src/mainboard/tyan/s2735/romstage.c
+Only the code around CLEAR_FIRST_1M_RAM is changed.
+I remove all the code around CLEAR_FIRST_1M_RAM and #include "cpu/x86/car/cache_as_ram_post.c"
+the CLEAR_FIRST_1M_RAM seems to make cpu/x86/car/cache_as_ram_post.c stop at somewhere, 
+and cpu/x86/car/cache_as_ram_post.c  do not cache my $CONFIG_XIP_ROM_BASE+SIZE area.
+
+So, I use: #include "cpu/via/car/cache_as_ram_post.c". my via-version post.c have some diff with x86-version
+*/
+#if 1
+       {
+               /* Check value of esp to verify if we have enough rom for stack in Cache as RAM */
+               unsigned v_esp;
+               __asm__ volatile ("movl   %%esp, %0\n\t":"=a" (v_esp)
+                   );
+#if CONFIG_USE_INIT
+               printk_debug("v_esp=%08x\r\n", v_esp);
+#else
+               print_debug("v_esp=");
+               print_debug_hex32(v_esp);
+               print_debug("\r\n");
+#endif
+       }
+
+#endif
+#if 1
+
+      cpu_reset_x:
+// it seems that cpu_reset is not used before this, so I just reset it, (this is because the s3 resume, setting in mtrr and copy data may destroy 
+//stack
+       cpu_reset = 0;
+#if CONFIG_USE_INIT
+       printk_debug("cpu_reset = %08x\r\n", cpu_reset);
+#else
+       print_debug("cpu_reset = ");
+       print_debug_hex32(cpu_reset);
+       print_debug("\r\n");
+#endif
+
+       if (cpu_reset == 0) {
+               print_debug("Clearing initial memory region: ");
+       }
+       print_debug("No cache as ram now - ");
+
+       /* store cpu_reset to ebx */
+       __asm__ volatile ("movl %0, %%ebx\n\t"::"a" (cpu_reset)
+           );
+
+
+/* cancel these lines, CLEAR_FIRST_1M_RAM cause the cpu/x86/car/cache_as_ram_post.c stop at somewhere
+
+       if(cpu_reset==0) {
+#define CLEAR_FIRST_1M_RAM 1
+#include "cpu/via/car/cache_as_ram_post.c"     
+       }
+       else {
+#undef CLEAR_FIRST_1M_RAM 
+#include "cpu/via/car/cache_as_ram_post.c"
+       }
+*/
+#include "cpu/via/car/cache_as_ram_post.c"
+//#include "cpu/x86/car/cache_as_ram_post.c"    
+       __asm__ volatile (
+                                /* set new esp *//* before CONFIG_RAMBASE */
+                                "subl   %0, %%ebp\n\t"
+                                "subl   %0, %%esp\n\t"::
+                                "a" ((CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE) -
+                                     CONFIG_RAMBASE)
+           );
+
+       {
+               unsigned new_cpu_reset;
+
+               /* get back cpu_reset from ebx */
+               __asm__ volatile ("movl %%ebx, %0\n\t":"=a" (new_cpu_reset)
+                   );
+
+               /* We can not go back any more, we lost old stack data in cache as ram */
+               if (new_cpu_reset == 0) {
+                       print_debug("Use Ram as Stack now - done\r\n");
+               } else {
+                       print_debug("Use Ram as Stack now - \r\n");
+               }
+#if CONFIG_USE_INIT
+               printk_debug("new_cpu_reset = %08x\r\n", new_cpu_reset);
+#else
+               print_debug("new_cpu_reset = ");
+               print_debug_hex32(new_cpu_reset);
+               print_debug("\r\n");
+#endif
+               /*copy and execute coreboot_ram */
+               copy_and_run(new_cpu_reset);
+               /* We will not return */
+       }
+#endif
+
+
+       print_debug("should not be here -\r\n");
+
+}
index 8f62c1be2cf32432e95907e8cca06606523ed4da..3fc1fa6ea78693a527b1a30f2192d9873da77347 100644 (file)
@@ -40,7 +40,7 @@
 #ifndef __ACPI__
 #define DEBUG_PERIODIC_SMIS 0
 
-/* __ROMCC__ is set by auto.c to make sure
+/* __ROMCC__ is set by romstage.c to make sure
  * none of the stage2 data structures are included.
  */
 #if !defined( __ROMCC__ ) && !defined(__PRE_RAM__)
index 21973ce3d6b9ff7e4b23bf8cce75071d1b7e16f7..2b9b24579b3174b34fc9838f72ef965c61550b19 100644 (file)
@@ -265,7 +265,7 @@ static void azalia_init(struct device *dev)
        pci_write_config8(dev, 0x3c, 0x0a); // unused?
 
        // TODO Actually check if we're AC97 or HDA instead of hardcoding this
-       // here, in Config.lb and/or auto.c.
+       // here, in devicetree.cb and/or romstage.c.
        reg8 = pci_read_config8(dev, 0x40);
        reg8 |= (1 << 3); // Clear Clock Detect Bit
        pci_write_config8(dev, 0x40, reg8);
@@ -279,7 +279,7 @@ static void azalia_init(struct device *dev)
 
        //
        reg8 = pci_read_config8(dev, 0x40); // Audio Control
-       reg8 |= 1; // Select Azalia mode. This needs to be controlled via Config.lb
+       reg8 |= 1; // Select Azalia mode. This needs to be controlled via devicetree.cb
        pci_write_config8(dev, 0x40, reg8);
 
        reg8 = pci_read_config8(dev, 0x4d); // Docking Status
index c17ab2edd953d08708fdb845a680412043b4d92a..a151ca06c956d5be60e2c2657ad361c41ddb4619 100644 (file)
@@ -13,7 +13,7 @@ static void ide_init(struct device *dev)
        if (!conf->enable_native_ide) {
                // Run the IDE controller in 'compatiblity mode - i.e. don't use PCI
                // interrupts.  Using PCI ints confuses linux for some reason.
-               /* Setting reg 0x42 here does not work. It is set in mainboard/auto.c
+               /* Setting reg 0x42 here does not work. It is set in mainboard/romstage.c
                * It probably can only be changed while the IDE is disabled
                * or it is possibly a timing issue. Ben Hewson 29 Apr 2007.
                */