create some technologic systems ts530 infrastructure
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1628 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
40ab2d1213
commit
198409afe0
|
@ -0,0 +1,5 @@
|
||||||
|
extern struct chip_control mainboard_technologic_ts5300_control;
|
||||||
|
|
||||||
|
struct mainboard_technologic_ts5300_config {
|
||||||
|
int nothing;
|
||||||
|
};
|
|
@ -0,0 +1,74 @@
|
||||||
|
entries
|
||||||
|
|
||||||
|
#start-bit length config config-ID name
|
||||||
|
#0 8 r 0 seconds
|
||||||
|
#8 8 r 0 alarm_seconds
|
||||||
|
#16 8 r 0 minutes
|
||||||
|
#24 8 r 0 alarm_minutes
|
||||||
|
#32 8 r 0 hours
|
||||||
|
#40 8 r 0 alarm_hours
|
||||||
|
#48 8 r 0 day_of_week
|
||||||
|
#56 8 r 0 day_of_month
|
||||||
|
#64 8 r 0 month
|
||||||
|
#72 8 r 0 year
|
||||||
|
#80 4 r 0 rate_select
|
||||||
|
#84 3 r 0 REF_Clock
|
||||||
|
#87 1 r 0 UIP
|
||||||
|
#88 1 r 0 auto_switch_DST
|
||||||
|
#89 1 r 0 24_hour_mode
|
||||||
|
#90 1 r 0 binary_values_enable
|
||||||
|
#91 1 r 0 square-wave_out_enable
|
||||||
|
#92 1 r 0 update_finished_enable
|
||||||
|
#93 1 r 0 alarm_interrupt_enable
|
||||||
|
#94 1 r 0 periodic_interrupt_enable
|
||||||
|
#95 1 r 0 disable_clock_updates
|
||||||
|
#96 288 r 0 temporary_filler
|
||||||
|
0 384 r 0 reserved_memory
|
||||||
|
384 1 e 4 boot_option
|
||||||
|
385 1 e 4 last_boot
|
||||||
|
386 1 e 1 ECC_memory
|
||||||
|
388 4 r 0 reboot_bits
|
||||||
|
392 3 e 5 baud_rate
|
||||||
|
400 1 e 1 power_on_after_fail
|
||||||
|
412 4 e 6 debug_level
|
||||||
|
416 4 e 7 boot_first
|
||||||
|
420 4 e 7 boot_second
|
||||||
|
424 4 e 7 boot_third
|
||||||
|
428 4 h 0 boot_index
|
||||||
|
432 8 h 0 boot_countdown
|
||||||
|
1008 16 h 0 check_sum
|
||||||
|
|
||||||
|
enumerations
|
||||||
|
|
||||||
|
#ID value text
|
||||||
|
1 0 Disable
|
||||||
|
1 1 Enable
|
||||||
|
2 0 Enable
|
||||||
|
2 1 Disable
|
||||||
|
4 0 Fallback
|
||||||
|
4 1 Normal
|
||||||
|
5 0 115200
|
||||||
|
5 1 57600
|
||||||
|
5 2 38400
|
||||||
|
5 3 19200
|
||||||
|
5 4 9600
|
||||||
|
5 5 4800
|
||||||
|
5 6 2400
|
||||||
|
5 7 1200
|
||||||
|
6 6 Notice
|
||||||
|
6 7 Info
|
||||||
|
6 8 Debug
|
||||||
|
6 9 Spew
|
||||||
|
7 0 Network
|
||||||
|
7 1 HDD
|
||||||
|
7 2 Floppy
|
||||||
|
7 8 Fallback_Network
|
||||||
|
7 9 Fallback_HDD
|
||||||
|
7 10 Fallback_Floppy
|
||||||
|
#7 3 ROM
|
||||||
|
|
||||||
|
checksums
|
||||||
|
|
||||||
|
checksum 392 1007 1008
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
|
||||||
|
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
|
|
@ -0,0 +1,29 @@
|
||||||
|
#define ASSEMBLY 1
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <device/pci_def.h>
|
||||||
|
#include <device/pci_ids.h>
|
||||||
|
#include <arch/io.h>
|
||||||
|
#include "arch/romcc_io.h"
|
||||||
|
#include "pc80/mc146818rtc_early.c"
|
||||||
|
#include "cpu/p6/boot_cpu.c"
|
||||||
|
|
||||||
|
static void main(void)
|
||||||
|
{
|
||||||
|
/* 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");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -0,0 +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.
|
||||||
|
|
||||||
|
#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) */
|
||||||
|
{ 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) */
|
||||||
|
{
|
||||||
|
/* 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},
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
#include <console/console.h>
|
||||||
|
#include <device/device.h>
|
||||||
|
#include <device/pci.h>
|
||||||
|
#include <device/pci_ids.h>
|
||||||
|
#include <device/pci_ops.h>
|
||||||
|
|
||||||
|
#include <arch/io.h>
|
||||||
|
#include <device/chip.h>
|
||||||
|
#include "chip.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
mainboard_scan_bus(device_t root, int maxbus)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
printk_spew("%s: root %p maxbus %d\n", __FUNCTION__, root, maxbus);
|
||||||
|
retval = pci_scan_bus(root->bus, 0, 0xff, maxbus);
|
||||||
|
printk_spew("DONE %s: return %d\n", __FUNCTION__, maxbus);
|
||||||
|
return maxbus;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct device_operations mainboard_operations = {
|
||||||
|
.read_resources = root_dev_read_resources,
|
||||||
|
.set_resources = root_dev_set_resources,
|
||||||
|
.enable_resources = enable_childrens_resources,
|
||||||
|
.init = 0,
|
||||||
|
.scan_bus = mainboard_scan_bus,
|
||||||
|
.enable = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void enumerate(struct chip *chip)
|
||||||
|
{
|
||||||
|
struct chip *child;
|
||||||
|
dev_root.ops = &mainboard_operations;
|
||||||
|
chip->dev = &dev_root;
|
||||||
|
chip->bus = 0;
|
||||||
|
for(child = chip->children; child; child = child->next) {
|
||||||
|
child->bus = &dev_root.link[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
struct chip_control mainboard_technologic_ts5300_control = {
|
||||||
|
.enumerate = enumerate,
|
||||||
|
.name = "Technologic Systems TS5300 mainboard ",
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
#if 0
|
||||||
|
//#include "arch/romcc_io.h"
|
||||||
|
#include <arch/io.h>
|
||||||
|
|
||||||
|
typedef unsigned device_t;
|
||||||
|
|
||||||
|
#define PCI_DEV(BUS, DEV, FN) ( \
|
||||||
|
(((BUS) & 0xFF) << 16) | \
|
||||||
|
(((DEV) & 0x1f) << 11) | \
|
||||||
|
(((FN) & 0x7) << 8))
|
||||||
|
|
||||||
|
static void pci_write_config8(device_t dev, unsigned where, unsigned char value)
|
||||||
|
{
|
||||||
|
unsigned addr;
|
||||||
|
addr = dev | where;
|
||||||
|
outl(0x80000000 | (addr & ~3), 0xCF8);
|
||||||
|
outb(value, 0xCFC + (addr & 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void pci_write_config32(device_t dev, unsigned where, unsigned value)
|
||||||
|
{
|
||||||
|
unsigned addr;
|
||||||
|
addr = dev | where;
|
||||||
|
outl(0x80000000 | (addr & ~3), 0xCF8);
|
||||||
|
outl(value, 0xCFC);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned pci_read_config32(device_t dev, unsigned where)
|
||||||
|
{
|
||||||
|
unsigned addr;
|
||||||
|
addr = dev | where;
|
||||||
|
outl(0x80000000 | (addr & ~3), 0xCF8);
|
||||||
|
return inl(0xCFC);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "../../../northbridge/amd/amdk8/reset_test.c"
|
||||||
|
|
||||||
|
void hard_reset(void)
|
||||||
|
{
|
||||||
|
set_bios_reset();
|
||||||
|
pci_write_config8(PCI_DEV(1, 0x04, 0), 0x47, 1);
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue