get ts5300 compiling, it's mostly a copy of msm586seg

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2130 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer 2005-12-04 17:08:31 +00:00
parent 648e8da0c2
commit a09ab6dc53
5 changed files with 172 additions and 168 deletions

View File

@ -30,6 +30,8 @@ static void memreset(int controllers, const struct mem_controller *ctrl)
{
}
static inline void activate_spd_rom(const struct mem_controller *ctrl)
{
/* nothing to do */
@ -59,6 +61,102 @@ static inline void dumpmem(void){
}
}
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;
@ -67,6 +165,7 @@ static void main(unsigned long bist)
setupsc520();
irqinit();
uart_init();
console_init();
for(i = 0; i < 100; i++)
@ -117,11 +216,11 @@ static void main(unsigned long bist)
// Check 32MB of memory @ 0
ram_check(0x00000000, 0x02000000);
#endif
#if 0
#if 1
{
volatile unsigned char *src = (unsigned char *) 0x2000000 + 0x70000;
volatile unsigned char *src = (unsigned char *) 0x2000000 + 0x60000;
volatile unsigned char *dst = (unsigned char *) 0x4000;
for(i = 0; i < 0x10000; i++) {
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");

View File

@ -1,128 +0,0 @@
static void print_debug_pci_dev(unsigned dev)
{
print_debug("PCI: ");
print_debug_hex8((dev >> 16) & 0xff);
print_debug_char(':');
print_debug_hex8((dev >> 11) & 0x1f);
print_debug_char('.');
print_debug_hex8((dev >> 8) & 7);
}
static void print_pci_devices(void)
{
device_t dev;
for(dev = PCI_DEV(0, 0, 0);
dev <= PCI_DEV(0, 0x1f, 0x7);
dev += PCI_DEV(0,0,1)) {
uint32_t id;
id = pci_read_config32(dev, PCI_VENDOR_ID);
if (((id & 0xffff) == 0x0000) || ((id & 0xffff) == 0xffff) ||
(((id >> 16) & 0xffff) == 0xffff) ||
(((id >> 16) & 0xffff) == 0x0000)) {
continue;
}
print_debug_pci_dev(dev);
print_debug("\r\n");
}
}
static void dump_pci_device(unsigned dev)
{
int i;
print_debug_pci_dev(dev);
print_debug("\r\n");
for(i = 0; i <= 255; i++) {
unsigned char val;
if ((i & 0x0f) == 0) {
print_debug_hex8(i);
print_debug_char(':');
}
val = pci_read_config8(dev, i);
print_debug_char(' ');
print_debug_hex8(val);
if ((i & 0x0f) == 0x0f) {
print_debug("\r\n");
}
}
}
static void dump_pci_devices(void)
{
device_t dev;
for(dev = PCI_DEV(0, 0, 0);
dev <= PCI_DEV(0, 0x1f, 0x7);
dev += PCI_DEV(0,0,1)) {
uint32_t id;
id = pci_read_config32(dev, PCI_VENDOR_ID);
if (((id & 0xffff) == 0x0000) || ((id & 0xffff) == 0xffff) ||
(((id >> 16) & 0xffff) == 0xffff) ||
(((id >> 16) & 0xffff) == 0x0000)) {
continue;
}
dump_pci_device(dev);
}
}
#if 0
static void dump_spd_registers(const struct mem_controller *ctrl)
{
int i;
print_debug("\r\n");
for(i = 0; i < 4; i++) {
unsigned device;
device = ctrl->channel0[i];
if (device) {
int j;
print_debug("dimm: ");
print_debug_hex8(i);
print_debug(".0: ");
print_debug_hex8(device);
for(j = 0; j < 256; j++) {
int status;
unsigned char byte;
if ((j & 0xf) == 0) {
print_debug("\r\n");
print_debug_hex8(j);
print_debug(": ");
}
status = smbus_read_byte(device, j);
if (status < 0) {
print_debug("bad device\r\n");
break;
}
byte = status & 0xff;
print_debug_hex8(byte);
print_debug_char(' ');
}
print_debug("\r\n");
}
device = ctrl->channel1[i];
if (device) {
int j;
print_debug("dimm: ");
print_debug_hex8(i);
print_debug(".1: ");
print_debug_hex8(device);
for(j = 0; j < 256; j++) {
int status;
unsigned char byte;
if ((j & 0xf) == 0) {
print_debug("\r\n");
print_debug_hex8(j);
print_debug(": ");
}
status = smbus_read_byte(device, j);
if (status < 0) {
print_debug("bad device\r\n");
break;
}
byte = status & 0xff;
print_debug_hex8(byte);
print_debug_char(' ');
}
print_debug("\r\n");
}
}
}
#endif

View File

@ -5,25 +5,28 @@
#include <arch/io.h>
#include "arch/romcc_io.h"
#include "pc80/mc146818rtc_early.c"
#include "cpu/p6/boot_cpu.c"
static void main(void)
static unsigned long main(unsigned long bist)
{
/* for now, just always assume failure */
#if 0
/* Is this a cpu reset? */
if (cpu_init_detected()) {
if (last_boot_normal()) {
asm("jmp __normal_image");
} else {
asm("jmp __cpu_reset");
}
}
/* This is the primary cpu how should I boot? */
else if (do_normal_boot()) {
asm("jmp __normal_image");
if (do_normal_boot()) {
goto normal_image;
}
#endif
else {
goto fallback_image;
}
normal_image:
asm volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist) /* inputs */
: /* clobbers */
);
cpu_reset:
asm volatile ("jmp __cpu_reset"
: /* outputs */
: "a"(bist) /* inputs */
: /* clobbers */
);
fallback_image:
return bist;
}

View File

@ -1,29 +1,28 @@
// This pirq table is dummy and only here for existance.
// It MUST be replaced as soon as LinuxBIOS is operable on this board.
/* This file was generated by getpir.c, do not modify!
(but if you do, please run checkpir on it to verify)
* Contains the IRQ Routing Table dumped directly from your memory, which BIOS sets up
*
* Documentation at : http://www.microsoft.com/hwdev/busbios/PCIIRQ.HTM
*/
#include <arch/pirq_routing.h>
const struct irq_routing_table intel_irq_routing_table = {
PIRQ_SIGNATURE, /* u32 signature */
PIRQ_VERSION, /* u16 version */
32+16*5, /* there can be total 5 devices on the bus */
0, /* Where the interrupt router lies (bus) */
0x88, /* Where the interrupt router lies (dev) */
0x1c20, /* IRQs devoted exclusively to PCI usage */
0x1106, /* Vendor */
0x8231, /* Device */
0, /* Crap (miniport) */
PIRQ_SIGNATURE, /* u32 signature */
PIRQ_VERSION, /* u16 version */
32+16*7, /* there can be total 7 devices on the bus */
0x00, /* Where the interrupt router lies (bus) */
(0x00<<3)|0x0, /* Where the interrupt router lies (dev) */
0, /* IRQs devoted exclusively to PCI usage */
0x8086, /* Vendor */
0x122e, /* Device */
0, /* Crap (miniport) */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
0x5e, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
0x50, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
{
/* 8231 ethernet */
{0,0x90, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0x1, 0},
/* 8231 internal */
{0,0x88, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x2, 0},
/* PCI slot */
{0,0xa0, {{0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}, {0x2, 0xdeb8}}, 0, 0},
{0,0x50, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x3, 0},
{0,0x98, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x4, 0},
/* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
{0x00,(0x12<<3)|0x0, {{0x30, 0x8000}, {0x00, 0x0}, {0x00, 0x0}, {0x00, 0x00}}, 0x0, 0x0},
{0x00,(0x14<<3)|0x0, {{0x30, 0x8000}, {0x31, 0x0}, {0x32, 0x0}, {0x33, 0x00}}, 0x0, 0x0},
}
};
unsigned long write_pirq_routing_table(unsigned long addr)

View File

@ -0,0 +1,31 @@
target technologic_ts5300
mainboard technologic/ts5300
option DEFAULT_CONSOLE_LOGLEVEL=10
option MAXIMUM_CONSOLE_LOGLEVEL=10
option CONFIG_COMPRESS=0
option CONFIG_CONSOLE_VGA=1
#romimage "normal"
# option USE_FALLBACK_IMAGE=0
# option ROM_IMAGE_SIZE=0x10000
# option LINUXBIOS_EXTRA_VERSION=".0Normal"
# payload /etc/hosts
#end
romimage "fallback"
option FALLBACK_SIZE = 256 * 1024
# option ROM_SIZE=512*1024
# option ROM_SECTION_SIZE=512*1024
option USE_FALLBACK_IMAGE=1
# option ROM_IMAGE_SIZE=32 * 1024 # 0x8000
option ROM_IMAGE_SIZE=128 * 1024 # 0x10000
# option ROM_IMAGE_SIZE=512 * 1024 # 0x10000
option LINUXBIOS_EXTRA_VERSION=".0Fallback"
payload /dev/null
end
buildrom ./linuxbios.rom ROM_SIZE "fallback"