redo ts5300 auto.c
add ts5300 flag as comment in flashrom utility Makefile git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2215 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
3cb4dc9c6b
commit
e2632fdbb9
|
@ -1,5 +1,11 @@
|
|||
/*
|
||||
* TS5300 specific initialization code.
|
||||
* written by Stefan Reinauer <stepan@coresystems.de>
|
||||
* (c) 2006 coresystems GmbH
|
||||
*/
|
||||
|
||||
#define ASSEMBLY 1
|
||||
#define ASM_CONSOLE_LOGLEVEL 8
|
||||
#define ASM_CONSOLE_LOGLEVEL 6
|
||||
#include <stdint.h>
|
||||
#include <device/pci_def.h>
|
||||
#include <arch/io.h>
|
||||
|
@ -11,17 +17,20 @@
|
|||
#include "arch/i386/lib/console.c"
|
||||
#include "ram/ramtest.c"
|
||||
#include "cpu/x86/bist.h"
|
||||
//#include "lib/delay.c"
|
||||
|
||||
#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;
|
||||
/* 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 */
|
||||
/* NOTE: Ron says, move this to mainboard.c */
|
||||
*par++ = 0x00000000;
|
||||
*par++ = 0x340f0070;
|
||||
*par++ = 0x380701f0;
|
||||
|
@ -35,7 +44,7 @@ void setup_pars(void)
|
|||
*par++ = 0x00000000;
|
||||
*par++ = 0x00000000;
|
||||
*par++ = 0x00000000;
|
||||
*par++ = 0x8a07c940;
|
||||
*par++ = 0x8a07c940; /* Flash setup */
|
||||
*par++ = 0x00000000;
|
||||
*par++ = 0xee00400e;
|
||||
}
|
||||
|
@ -44,218 +53,120 @@ void setup_pars(void)
|
|||
|
||||
#include "debug.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;
|
||||
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");
|
||||
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 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;
|
||||
unsigned val;
|
||||
|
||||
TS5300_LED_ON;
|
||||
|
||||
for(i = 0; i < 100; i++)
|
||||
;
|
||||
|
||||
|
||||
setupsc520();
|
||||
irqinit();
|
||||
uart_init();
|
||||
console_init();
|
||||
|
||||
//for(i = 0; i < 100; i++)
|
||||
// print_err("fill usart\r\n");
|
||||
|
||||
print_err("Technologic Systems TS5300 - http://www.embeddedx86.com/\r\n");
|
||||
|
||||
staticmem();
|
||||
|
||||
// sw ctimer millisecond count
|
||||
//print_err("\r\nc60 is "); print_err_hex16(*(unsigned short *)0xfffefc60);
|
||||
//print_err("\r\n");
|
||||
|
||||
print_err("Memory initialized: 32MB\r\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();
|
||||
#if 1
|
||||
identify_system();
|
||||
#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);
|
||||
// Check 32MB of memory @ 0 (very slow!)
|
||||
print_err("Checking memory:\r\n");
|
||||
ram_check(0x00000000, 0x000a0000);
|
||||
ram_check(0x000b0000, 0x02000000);
|
||||
#endif
|
||||
#if 0
|
||||
print_err("RAM CHECK for 32 MB!\r\n");
|
||||
// Check 32MB of memory @ 0
|
||||
ram_check(0x00000000, 0x02000000);
|
||||
#endif
|
||||
|
||||
/* Don't think this is needed for the ts5300.
|
||||
* The MMCRs are at fffef000 and the image is only 64k (without
|
||||
* payload) so it fits exactly between MMCR and 4G
|
||||
*/
|
||||
#if 0
|
||||
{
|
||||
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("FUCK\r\n");
|
||||
|
||||
while(1);
|
||||
#endif
|
||||
TS5300_LED_OFF;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ PROGRAM = flashrom
|
|||
CC = gcc
|
||||
STRIP = strip
|
||||
#CFLAGS = -O2 -g -Wall -Werror
|
||||
CFLAGS = -Os -Wall -Werror -DDISABLE_DOC
|
||||
CFLAGS = -Os -Wall -Werror -DDISABLE_DOC # -DTS5300
|
||||
LDFLAGS = -lpci -static
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue