This commit is contained in:
Andrew Ip 2003-04-27 15:05:23 +00:00
parent 710b5a4d21
commit 9d9dac5134
10 changed files with 0 additions and 612 deletions

View file

@ -1,29 +0,0 @@
# These are keyword-value pairs.
# a : separates the keyword from the value
# the value is arbitrary text delimited by newline.
# continuation, if needed, will be via the \ at the end of a line
# comments are indicated by a '#' as the first character.
# the keywords are case-INSENSITIVE
owner: Andrew Ip
email: aip@cwlinux.com
#status: One of unsupported, unstable, stable
status: unstable
explanation: initial release
flash-types: SST 39SF020A
payload-types: etherboot, memtest
# e.g. linux, plan 9, wince, etc.
OS-types: linux
# e.g. "Plan 9 interrupts don't work on this chipset"
OS-issues:
console-types: serial
# vga is unsupported, unstable, or stable
vga: unsupported
# Last-known-good follows the internationl date standard: day/month/year
last-known-good: 0/0/0000
Comments: superio has problem with baudrate setting. It always is 57600
even 115200 is configured during cold boot. However, it works when the system
is warm reboot from award bios.
Links:
Mainboard-revision:
# What other mainboards are like this one? List them here.
AKA:

View file

@ -1,8 +0,0 @@
movl $0x0, %ecx
CALLSP(dumpdev)
movl $CONFIG_ADDR(0,0x88,0), %ecx
CALLSP(dumpdev)
movl $CONFIG_ADDR(0,0x89,0), %ecx
CALLSP(dumpdev)

View file

@ -1 +0,0 @@
CALLSP(dumpnorth)

View file

@ -1,5 +0,0 @@
mov $0x00000000, %eax
mov $0x0009ffff, %ebx
mov $16, %ecx
CALLSP(ramtest)

View file

@ -1,65 +0,0 @@
/* Dump the first 64 longs for devfn 0, bus 0
* i.e. the north bridge.
*/
#define CS_WRITE_BYTE(addr, byte) \
movl $addr, %eax ; \
movl $byte, %edx ; \
PCI_WRITE_CONFIG_BYTE
#define CS_WRITE_WORD(addr, word) \
movl $addr, %eax ; \
movl $word, %ecx ; \
PCI_WRITE_CONFIG_WORD
#define CS_WRITE_LONG(addr, dword) \
movl $addr, %eax ; \
movl $dword, %ecx ; \
PCI_WRITE_CONFIG_DWORD
#define DEVFN(device, function) (((device) << 3) + (function))
#ifndef CONFIG_ADDR
#define CONFIG_ADDR(bus,devfn,where) (((bus) << 16) | ((devfn) << 8) | (where))
#endif
jmp dumpdev_skip
.section ".rom.data"
dd_banner: .string "dump device: "
dd_ret: .string "\r\n"
dd_done: .string "Done.\r\n"
dd_before: .string "Before setting values: \r\n"
dd_after: .string "After setting values: \r\n"
.previous
# expects device devfn in %ecx
dumpdev:
mov %esp, %ebp
CONSOLE_INFO_TX_STRING($dd_banner)
CONSOLE_INFO_TX_HEX32(%ecx)
CONSOLE_INFO_TX_STRING($dd_ret)
# xorl %ecx, %ecx
1:
CONSOLE_INFO_TX_HEX8(%cl)
CONSOLE_INFO_TX_CHAR($':')
CONSOLE_INFO_TX_CHAR($' ')
2:
movl %ecx, %eax
PCI_READ_CONFIG_BYTE
CONSOLE_INFO_TX_HEX8(%al)
CONSOLE_INFO_TX_CHAR($' ')
incl %ecx
testb $0xf, %cl
jnz 2b
CONSOLE_INFO_TX_CHAR($'\r')
CONSOLE_INFO_TX_CHAR($'\n')
cmpb $0, %cl
jne 1b
CONSOLE_INFO_TX_STRING($dd_done)
mov %ebp, %esp
RETSP
dumpdev_skip:

View file

@ -1,33 +0,0 @@
#
# LinuxBIOS config file for: VIA epia-m mini-itx
#
target /opt/cwlinux/buildrom/epia-m
# via epia
mainboard via/epia-m
# Enable Serial Console for debugging
option SERIAL_CONSOLE=1
# option SERIAL_POST=1
option TTYS0_BAUD=115200
# option TTYS0_BAUD=57600
option DEFAULT_CONSOLE_LOGLEVEL=9
option DEBUG=1
# Use 256KB Standard Flash as Normal BIOS
option RAMTEST=1
option USE_GENERIC_ROM=1
option STD_FLASH=1
#option ZKERNEL_START=0xfffc0000
option ROM_SIZE=262144
# payload size = 192KB
option PAYLOAD_SIZE=196608
# use ELF Loader to load Etherboot
option USE_ELF_BOOT=1
# Use Etherboot as our payload
payload /opt/cwlinux/etherboot/src/bin32/via-rhine.ebi
# payload /opt/cwlinux/memtest86/memtest

View file

@ -1,46 +0,0 @@
/* 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 , wich 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) */
0, /* Where the interrupt router lies (dev) */
0x1c20, /* IRQs devoted exclusively to PCI usage */
0, /* Vendor */
0, /* Device */
0, /* Crap (miniport) */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
#if 0
0x58, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
{
{0,0xa0, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x1, 0},
{0,0x98, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0x2, 0},
{0,0x50, {{0x4, 0xdeb8}, {0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}}, 0x3, 0},
{0,0x68, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x4, 0},
{0,0x8, {{0x1, 0xdeb8}, {0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}}, 0, 0},
{0x50,0, {{0, 0}, {0, 0}, {0, 0}, {0, 0}}, 0, 0}
}
#else
0xab, /* u8 checksum , this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
{
/* ethernet */
{0,0x90, {{0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x1, 0},
/* usb */
{0,0x80, {{0x2, 0xdeb8}, {0x3, 0xdeb8}, {0x4, 0xdeb8}, {0x1, 0xdeb8}}, 0x2, 0},
/* pci */
{0,0xa0, {{0x1, 0xdeb8}, {0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}}, 0, 0},
/* audio */
{0,0x8d, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x4, 0},
/* 1394 */
{0,0x68, {{0x4, 0xdeb8}, {0x3, 0xdeb8}, {0x2, 0xdeb8}, {0x1, 0xdeb8}}, 0x3, 0}
}
#endif
};

View file

@ -1,94 +0,0 @@
#include <printk.h>
#include <pci.h>
#include <pci_ids.h>
#include <cpu/p5/io.h>
#include <types.h>
//static const unsigned char usbIrqs[4] = { 11, 5, 10, 12 };
static const unsigned char usbIrqs[4] = { 11, 12, 10, 5 };
static const unsigned char enetIrqs[4] = { 11, 5, 10, 12 };
static const unsigned char slotIrqs[4] = { 10, 12, 5, 11 };
static const unsigned char firewireIrqs[4] = { 12, 10, 5, 11 };
/*
Our IDSEL mappings are as follows
PCI slot is AD31 (device 15) (00:14.0)
Southbridge is AD28 (device 12) (00:11.0)
*/
static void pci_routing_fixup(void)
{
struct pci_dev *dev;
dev = pci_find_device(PCI_VENDOR_ID_VIA, 0x3177, 0);
if (dev != NULL) {
/*
* initialize PCI interupts - these assignments depend
* on the PCB routing of PINTA-D
*
* PINTA = IRQ11
* PINTB = IRQ12
* PINTC = IRQ10
* PINTD = IRQ5
*/
pci_write_config_byte(dev, 0x55, 0xb0);
pci_write_config_byte(dev, 0x56, 0xac);
pci_write_config_byte(dev, 0x57, 0x50);
}
#if 1
// firewire built into southbridge
printk_info("setting firewire\n");
pci_assign_irqs(0, 0x0d, firewireIrqs);
// Standard usb components
printk_info("setting usb\n");
pci_assign_irqs(0, 0x10, usbIrqs);
// Ethernet built into southbridge
printk_info("setting ethernet\n");
pci_assign_irqs(0, 0x12, enetIrqs);
// PCI slot
printk_info("setting pci slot\n");
pci_assign_irqs(0, 0x14, slotIrqs);
#endif
printk_debug("4d0: 0x%02x\n", inb(0x4d0));
printk_debug("4d1: 0x%02x\n", inb(0x4d1));
#if 0
outb(0, 0x4d0);
outb(0, 0x4d1);
#endif
printk_debug("4d0: 0x%02x\n", inb(0x4d0));
printk_debug("4d1: 0x%02x\n", inb(0x4d1));
}
void
mainboard_fixup()
{
printk_info("Mainboard fixup\n");
northbridge_fixup();
southbridge_fixup();
}
void
final_southbridge_fixup()
{
printk_info("Southbridge fixup\n");
nvram_on();
// keyboard_on();
pci_routing_fixup();
}
void
final_mainboard_fixup()
{
printk_info("Final mainboard fixup\n");
final_southbridge_fixup();
}

View file

@ -1,28 +0,0 @@
config_ide:
movl $CONFIG_ADDR(0, 0x88, 0x50), %eax
movb $0x00, %dl
PCI_WRITE_CONFIG_BYTE
movl $CONFIG_ADDR(0, 0x89, 0x04), %eax
movb $0x07, %dl
PCI_WRITE_CONFIG_BYTE
movl $CONFIG_ADDR(0, 0x89, 0x40), %eax
movb $0x03, %dl
PCI_WRITE_CONFIG_BYTE
// This early setup switches IDE into compatibility mode before PCI gets
// a chance to assign I/Os
#if (!ENABLE_IDE_NATIVE_MODE)
movl $CONFIG_ADDR(0, 0x89, 0x42), %eax
movb $0x00, %dl
PCI_WRITE_CONFIG_BYTE
movl $CONFIG_ADDR(0, 0x89, 0x3c), %eax
movb $0x0e, %dl
PCI_WRITE_CONFIG_BYTE
movl $CONFIG_ADDR(0, 0x89, 0x3d), %eax
movb $0x00, %dl
PCI_WRITE_CONFIG_BYTE
#endif

View file

@ -1,303 +0,0 @@
#include <pci.h>
#include <pc80/keyboard.h>
#include <pc80/mc146818rtc.h>
#include <printk.h>
#include <pci_ids.h>
#include <arch/io.h>
// #define IDE_NATIVE_MODE 1
void usb_on()
{
unsigned char regval;
/* Base 8235 controller */
struct pci_dev *dev0 = pci_find_device(PCI_VENDOR_ID_VIA, \
0x3177, 0);
/* USB controller 1 */
struct pci_dev *dev1 = pci_find_device(PCI_VENDOR_ID_VIA, \
0x3038, 0);
/* USB controller 2 */
struct pci_dev *dev2 = pci_find_device(PCI_VENDOR_ID_VIA, \
0x3038, \
dev1);
/* USB controller 3 */
struct pci_dev *dev3 = pci_find_device(PCI_VENDOR_ID_VIA, \
0x3038, \
dev2);
#if ENABLE_VT8235_USB
if(dev0) {
pci_read_config_byte(dev0, 0x50, &regval);
regval &= ~(0x36);
pci_write_config_byte(dev0, 0x50, regval);
}
/* enable USB1 */
if(dev1) {
pci_write_config_byte(dev1, 0x3c, 0x05);
pci_write_config_byte(dev1, 0x04, 0x07);
}
/* enable USB2 */
if(dev2) {
pci_write_config_byte(dev2, 0x3c, 0x05);
pci_write_config_byte(dev2, 0x04, 0x07);
}
/* enable USB3 */
if(dev3) {
pci_write_config_byte(dev3, 0x3c, 0x05);
pci_write_config_byte(dev3, 0x04, 0x07);
}
#else
if(dev0) {
pci_read_config_byte(dev0, 0x50, &regval);
regval |= 0x36;
pci_write_config_byte(dev0, 0x50, regval);
}
/* disable USB1 */
if(dev1) {
pci_write_config_byte(dev1, 0x3c, 0x00);
pci_write_config_byte(dev1, 0x04, 0x00);
}
/* disable USB2 */
if(dev2) {
pci_write_config_byte(dev2, 0x3c, 0x00);
pci_write_config_byte(dev2, 0x04, 0x00);
}
/* disable USB3 */
if(dev3) {
pci_write_config_byte(dev3, 0x3c, 0x00);
pci_write_config_byte(dev3, 0x04, 0x00);
}
#endif
}
void keyboard_on()
{
unsigned char regval;
/* Base 8235 controller */
struct pci_dev *dev0 = pci_find_device(PCI_VENDOR_ID_VIA, \
0x3177, 0);
if (dev0) {
pci_read_config_byte(dev0, 0x51, &regval);
// regval |= 0x0f;
/* !!!FIX let's try this */
regval |= 0x1d;
pci_write_config_byte(dev0, 0x51, regval);
}
pc_keyboard_init();
}
void nvram_on()
{
}
/*
* Enable the ethernet device and turn off stepping (because it is integrated
* inside the southbridge)
*/
void ethernet_fixup()
{
struct pci_dev *dev, *edev;
u8 byte;
printk_info("Ethernet fixup\n");
edev = pci_find_device(PCI_VENDOR_ID_VIA, 0x3065, 0);
if (edev != NULL) {
printk_debug("Configuring VIA LAN\n");
/* We don't need stepping - though the device supports it */
pci_read_config_byte(edev, PCI_COMMAND, &byte);
byte &= ~PCI_COMMAND_WAIT;
pci_write_config_byte(edev, PCI_COMMAND, byte);
/* turn on master and pio */
pci_read_config_byte(edev, PCI_COMMAND, &byte);
byte = byte | PCI_COMMAND_MASTER|PCI_COMMAND_IO;
pci_write_config_byte(edev, PCI_COMMAND, byte);
} else {
printk_debug("VIA LAN not found\n");
}
}
void southbridge_fixup()
{
unsigned char enables;
struct pci_dev *dev0;
struct pci_dev *dev1;
struct pci_dev *devpwr;
/* Base 8235 controller */
dev0 = pci_find_device(PCI_VENDOR_ID_VIA, 0x3177, 0);
/* IDE controller */
dev1 = pci_find_device(PCI_VENDOR_ID_VIA, 0x0571, 0);
/* follow award */
enables = pci_read_config_byte(dev0, 0x6C, &enables);
enables = 0x00;
pci_write_config_byte(dev0, 0x6C, enables);
/* Map 4MB of FLASH into the address space */
pci_write_config_byte(dev0, 0x41, 0x7f);
/*
* Set bit 6 of 0x40, because Award does it (IO recovery time)
* IMPORTANT FIX - EISA 0x4d0 decoding must be on so that PCI
* interrupts can be properly marked as level triggered.
*/
enables = pci_read_config_byte(dev0, 0x40, &enables);
enables |= 0x45;
pci_write_config_byte(dev0, 0x40, enables);
/* Set 0x42 to 0xf0 to match Award bios */
enables = pci_read_config_byte(dev0, 0x42, &enables);
enables |= 0xf0;
pci_write_config_byte(dev0, 0x42, enables);
/* Set bit 3 of 0x4f to match award (use INIT# as cpu reset) */
enables = pci_read_config_byte(dev0, 0x4f, &enables);
enables |= 0x08;
pci_write_config_byte(dev0, 0x4f, enables);
/* Set 0x58 to 0x03 to match Award */
pci_write_config_byte(dev0, 0x58, 0x03);
#ifndef DISABLE_SOUTHBRIDGE_COM_PORTS
/* enable com1 and com2. */
enables = pci_read_config_byte(dev0, 0x6e, &enables);
/*
* 0x80 is enable com port b, 0x10 is to make it com2, 0x8 is enable
* com port a as com1
*/
/* following award */
enables = 0x00;
pci_write_config_byte(dev0, 0x6e, enables);
/*
* note: this is also a redo of some port of assembly, but we want
* everything up.
* set com1 to 115 kbaud
* not clear how to do this yet.
* forget it; done in assembly.
*/
#endif
/*
* enable IDE, since Linux won't do it.
* First do some more things to devfn (17,0)
* note: this should already be cleared, according to the book.
*/
pci_read_config_byte(dev0, 0x50, &enables);
printk_debug("IDE enable in reg. 50 is 0x%x\n", enables);
enables &= ~8; // need manifest constant here!
printk_debug("set IDE reg. 50 to 0x%x\n", enables);
pci_write_config_byte(dev0, 0x50, enables);
/* enable serial irq */
pci_write_config_byte(dev0, 0x52, 0x09);
/* dma */
pci_write_config_byte(dev0, 0x53, 0x00);
/* diskable dynamic clock stop */
pci_write_config_byte(dev0, 0x5b, 0x00);
/*
* IDE setup
*/
#if !(ENABLE_IDE_NATIVE_MODE)
/*
* Run the IDE controller in 'compatiblity mode - i.e. don't use PCI
* interrupts. Using PCI ints confuses linux for some reason.
*/
pci_read_config_byte(dev1, 0x42, &enables);
printk_debug("enables in reg 0x42 0x%x\n", enables);
enables &= ~0xc0;
pci_write_config_byte(dev1, 0x42, enables);
pci_read_config_byte(dev1, 0x42, &enables);
printk_debug("enables in reg 0x42 read back as 0x%x\n", enables);
#endif
pci_read_config_byte(dev1, 0x40, &enables);
printk_debug("enables in reg 0x40 0x%x\n", enables);
enables |= 3;
pci_write_config_byte(dev1, 0x40, enables);
pci_read_config_byte(dev1, 0x40, &enables);
printk_debug("enables in reg 0x40 read back as 0x%x\n", enables);
/* Enable prefetch buffers */
pci_read_config_byte(dev1, 0x41, &enables);
enables |= 0xf0;
pci_write_config_byte(dev1, 0x41, enables);
/* Lower thresholds (cause award does it) */
pci_read_config_byte(dev1, 0x43, &enables);
enables &= ~0x0f;
enables |= 0x05;
pci_write_config_byte(dev1, 0x43, enables);
/* PIO read prefetch counter (cause award does it) */
pci_write_config_byte(dev1, 0x44, 0x18);
/* Use memory read multiple */
pci_write_config_byte(dev1, 0x45, 0x1c);
/* address decoding. */
pci_read_config_byte(dev1, 0x9, &enables);
printk_debug("enables in reg 0x9 0x%x\n", enables);
/* by the book, set the low-order nibble to 0xa. */
#if ENABLE_IDE_NATIVE_MODE
enables &= ~0xf;
/* cf/cg silicon needs an 'f' here. */
enables |= 0xf;
#else
enables &= ~0x5;
#endif
pci_write_config_byte(dev1, 0x9, enables);
pci_read_config_byte(dev1, 0x9, &enables);
printk_debug("enables in reg 0x9 read back as 0x%x\n", enables);
/* standard bios sets master bit. */
pci_read_config_byte(dev1, 0x4, &enables);
printk_debug("command in reg 0x4 0x%x\n", enables);
enables |= 5;
/* No need for stepping - kevinh@ispiri.com */
enables &= ~0x80;
pci_write_config_byte(dev1, 0x4, enables);
pci_read_config_byte(dev1, 0x4, &enables);
printk_debug("command in reg 0x4 reads back as 0x%x\n", enables);
#if (!ENABLE_IDE_NATIVE_MODE)
/* Use compatability mode - per award bios */
pci_write_config_dword(dev1, 0x10, 0x0);
pci_write_config_dword(dev1, 0x14, 0x0);
pci_write_config_dword(dev1, 0x18, 0x0);
pci_write_config_dword(dev1, 0x1c, 0x0);
/* Force interrupts to use compat mode - just like Award bios */
/* !!! FIX moved it to ide_config.inc */
#endif
ethernet_fixup();
usb_on();
/* Start the rtc */
rtc_init(0);
}
#endif