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:
Stefan Reinauer 2006-03-19 22:30:42 +00:00
parent 3cb4dc9c6b
commit e2632fdbb9
2 changed files with 104 additions and 193 deletions

View File

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

View File

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