summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarch import user (historical) <svn@openbios.org>2005-07-06 17:16:23 +0000
committerarch import user (historical) <svn@openbios.org>2005-07-06 17:16:23 +0000
commitb2ed53dd5669c2c3839633bd2b3b4af709a5b149 (patch)
treeb1c3e74245a4d94a4874846f8bfce1b741f12553
parent69c79d232e73a9b58a396c743cf0e3d1008ed4f5 (diff)
Revision: linuxbios@linuxbios.org--devel/freebios--devel--2.0--patch-50
Creator: Ronald G. Minnich <rminnich@lanl.gov> This now boots to the point of passing the memory test in auto.c. But: we still don't have it working after the "Jumping to LinuxBIOS" step git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1966 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--src/cpu/amd/sc520/raminit.c109
-rw-r--r--src/mainboard/digitallogic/msm586seg/Config.lb11
-rw-r--r--src/mainboard/digitallogic/msm586seg/auto.c24
-rw-r--r--targets/digitallogic/msm586seg/Config.lb4
4 files changed, 134 insertions, 14 deletions
diff --git a/src/cpu/amd/sc520/raminit.c b/src/cpu/amd/sc520/raminit.c
index c04d9e98ce..aecf2b7723 100644
--- a/src/cpu/amd/sc520/raminit.c
+++ b/src/cpu/amd/sc520/raminit.c
@@ -48,6 +48,90 @@
#define OUTC(addr, val) *(unsigned char *)(addr) = (val)
+void p4(unsigned char c){
+ //print_err("TRY A TX NIBLE\r\n");
+ __console_tx_nibble(c);
+ return;
+ print_err("now do the other\r\n");
+
+ // c = c + '0';
+ // if (c > '9')
+ // c = c + 39;
+ // __console_tx_byte(c);
+ //print_err("NO!\r\n");
+ // return;
+ switch(c) {
+ case 0:
+ print_err("0");
+ break;
+ case 1:
+ print_err("1");
+ break;
+ case 2:
+ print_err("2");
+ break;
+ case 3:
+ print_err("3");
+ break;
+ case 4:
+ print_err("4");
+ break;
+ case 5:
+ print_err("5");
+ break;
+ case 6:
+ print_err("6");
+ break;
+ case 7:
+ print_err("7");
+ break;
+ case 8:
+ print_err("8");
+ break;
+ case 9:
+ print_err("9");
+ break;
+ case 0xa:
+ print_err("a");
+ break;
+ case 0xb:
+ print_err("b");
+ break;
+ case 0xc:
+ print_err("c");
+ break;
+ case 0xd:
+ print_err("d");
+ break;
+ case 0xe:
+ print_err("e");
+ break;
+ case 0xf:
+ print_err("f");
+ break;
+ }
+
+}
+
+void p8(unsigned char c) {
+ /*
+ __console_tx_nibble(c>>4);
+ __console_tx_nibble(c&0xf);
+ */
+ p4(c>>4);
+ p4(c&0xf);
+}
+
+void p16(unsigned short s) {
+ p8(s>>16);
+ p8(s);
+}
+
+void p32(unsigned long l) {
+ p16(l>>16);
+ p16(l);
+}
+
/* sadly, romcc can't quite handle what we want, so we do this ugly thing */
#define drcctl (( volatile unsigned char *)0xfffef010)
@@ -143,6 +227,7 @@ setupsc520(void){
*cp = 4; /* uart 1 clock source */
cp = (unsigned char *)0xfffefcc4;
*cp = 4; /* uart 2 clock source */
+#if 0
/*; set the interrupt mapping registers.*/
cp = (unsigned char *)0x0fffefd20;
*cp = 0x01;
@@ -172,7 +257,9 @@ setupsc520(void){
outl(0x0cf8,0x080000004); /*index the status command register on device 0*/
outl(0xcfc, 0x2); /*set the memory access enable bit*/
OUTC(0x0fffef072, 1); /* enable req bits in SYSARBMENB */
+#endif
+#if 0
/* set up the PAR registers as they are on the MSM586SEG */
@@ -194,7 +281,7 @@ setupsc520(void){
*par++ = 0x545c00c8; /*PAR14: GP BUS MEM:CS5:Base 0xc8, size 0x5c:*/
// *par++ = 0x8a020200; /*PAR15: BOOTCS:code:nocache:write:Base 0x2000000, size 0x80000:*/
-
+#endif
}
@@ -285,6 +372,8 @@ int sizemem(void)
/* setup loop to do 4 external banks starting with bank 3 */
*drcbendadr=0x0ff000000;
+ *drcbendadr=0x0ff;
+
/* issue a NOP to all DRAMs */
/* Setup DRAM control register with Disable refresh,
* disable write buffer Test Mode and NOP command select
@@ -341,10 +430,15 @@ int sizemem(void)
print_err("\r\n");
// continue;
}
+ *drcctl = 2;
+ dummy_write();
+ *drccfg = *drccfg >> 4;
l = *drcbendadr;
l >>= 8;
*drcbendadr = l;
print_err("loop around\r\n");
+ *drcctl = 0;
+ dummy_write();
}
#if 0
/* enable last bank and setup ending address
@@ -588,7 +682,7 @@ bad_ram:
/* this does now work worth shit. */
int
staticmem(void){
- volatile unsigned char *zero = (unsigned char *) 0;
+ volatile unsigned long *zero = (unsigned long *) CACHELINESZ;
/* set up 0x18 .. **/
*drcbendadr = 0x88;
*drcmctl = 0x1e;
@@ -615,9 +709,18 @@ staticmem(void){
print_err("DONE the load mode reg\r\n");
/* normal mode */
+ *drcctl = 0x0;
+ *zero = 0;
+ print_err("DONE one last write and then turn on refresh etc\n");
*drcctl = 0x18;
*zero = 0;
print_err("DONE the normal\r\n");
*zero = 0xdeadbeef;
- print_err(" zero is now "); print_err_hex32(*zero); print_err("\r\n");
+ if (*zero != 0xdeadbeef)
+ print_err("NO LUCK\r\n");
+ else
+ print_err("did a stor and load ...\r\n");
+ // p32(*zero);
+ print_err_hex32(*zero);
+ // print_err(" zero is now "); print_err_hex32(*zero); print_err("\r\n");
}
diff --git a/src/mainboard/digitallogic/msm586seg/Config.lb b/src/mainboard/digitallogic/msm586seg/Config.lb
index 20977e0ac2..9f5bb16f1f 100644
--- a/src/mainboard/digitallogic/msm586seg/Config.lb
+++ b/src/mainboard/digitallogic/msm586seg/Config.lb
@@ -2,8 +2,11 @@
## Compute the location and size of where this firmware image
## (linuxBIOS plus bootloader) will live in the boot rom chip.
##
+default ROM_SIZE = 512 * 1024
+default FALLBACK_SIZE = 0x10000
+
if USE_FALLBACK_IMAGE
- default ROM_SECTION_SIZE = FALLBACK_SIZE
+ default ROM_SECTION_SIZE = 64 * 1024 # FALLBACK_SIZE
default ROM_SECTION_OFFSET = ( ROM_SIZE - FALLBACK_SIZE )
else
default ROM_SECTION_SIZE = ( ROM_SIZE - FALLBACK_SIZE )
@@ -29,7 +32,7 @@ default _ROMBASE = ( CONFIG_ROM_STREAM_START + PAYLOAD_SIZE )
## XIP_ROM_SIZE must be a power of 2.
## XIP_ROM_BASE must be a multiple of XIP_ROM_SIZE
##
-default XIP_ROM_SIZE=65536
+default XIP_ROM_SIZE=32*1024
default XIP_ROM_BASE = ( _ROMBASE + ROM_IMAGE_SIZE - XIP_ROM_SIZE )
##
@@ -61,11 +64,11 @@ end
makerule ./auto.E
depends "$(MAINBOARD)/auto.c option_table.h ./romcc"
- action "./romcc -E -mcpu=p3 -O -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
+ action "./romcc -E -mcpu=i386 -O -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
end
makerule ./auto.inc
depends "$(MAINBOARD)/auto.c option_table.h ./romcc"
- action "./romcc -mcpu=p3 -O -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
+ action "./romcc -mcpu=i386 -O -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
end
##
diff --git a/src/mainboard/digitallogic/msm586seg/auto.c b/src/mainboard/digitallogic/msm586seg/auto.c
index c688569821..7aba46e797 100644
--- a/src/mainboard/digitallogic/msm586seg/auto.c
+++ b/src/mainboard/digitallogic/msm586seg/auto.c
@@ -47,17 +47,26 @@ static inline int spd_read_byte(unsigned device, unsigned address)
static void main(unsigned long bist)
{
+ volatile int i;
+ for(i = 0; i < 100; i++)
+ ;
+
setupsc520();
uart_init();
console_init();
- // while(1)
+ for(i = 0; i < 100; i++)
+ print_err("fill usart\r\n");
+ // while(1)
print_err("HI THERE!\r\n");
- sizemem();
-// staticmem();
+ // sizemem();
+ staticmem();
- while(1)
+ // while(1)
print_err("STATIC MEM DONE\r\n");
+ outb(0xee, 0x80);
+ print_err("loop forever ...\n");
+
#if 0
else {
@@ -82,9 +91,14 @@ static void main(unsigned long bist)
dump_pci_device(PCI_DEV(0, 0, 0));
#endif
-#if 1
+#if 0
print_err("RAM CHECK!\r\n");
// Check 16MB of memory @ 0
ram_check(0x00000000, 0x01000000);
#endif
+#if 1
+ print_err("RAM CHECK!\r\n");
+ // Check 1MB of memory @ 0
+ ram_check(0x00000000, 0x0100000);
+#endif
}
diff --git a/targets/digitallogic/msm586seg/Config.lb b/targets/digitallogic/msm586seg/Config.lb
index 0dc7bd9f6c..507dc39d67 100644
--- a/targets/digitallogic/msm586seg/Config.lb
+++ b/targets/digitallogic/msm586seg/Config.lb
@@ -1,7 +1,7 @@
target msm586seg
mainboard digitallogic/msm586seg
-option ROM_SIZE=64*1024
+option ROM_SIZE=512*1024
option DEFAULT_CONSOLE_LOGLEVEL=10
option MAXIMUM_CONSOLE_LOGLEVEL=10
@@ -14,7 +14,7 @@ option MAXIMUM_CONSOLE_LOGLEVEL=10
romimage "fallback"
option USE_FALLBACK_IMAGE=1
- option ROM_IMAGE_SIZE=0x10000
+ option ROM_IMAGE_SIZE=32 * 1024 # 0x10000
option LINUXBIOS_EXTRA_VERSION=".0Fallback"
payload /etc/hosts
end