sc520 support -- ethernet works

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2047 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Ronald G. Minnich 2005-09-23 17:08:58 +00:00
parent a25120a30f
commit 87888630b2
5 changed files with 65 additions and 11 deletions

View File

@ -37,11 +37,31 @@ static void cpu_init(device_t dev)
}
/* Ollie says: make a northbridge/amd/sc520. Ron sez:
* there is no real northbridge, keep it here in cpu.
* Ron wins, he's writing the code.
*/
void sc520_enable_resources(struct device *dev) {
unsigned char command;
printk_spew("%s\n", __FUNCTION__);
command = pci_read_config8(dev, PCI_COMMAND);
printk_spew("========>%s, command 0x%x\n", __FUNCTION__, command);
command |= PCI_COMMAND_MEMORY | PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
printk_spew("========>%s, command 0x%x\n", __FUNCTION__, command);
pci_write_config8(dev, PCI_COMMAND, command);
command = pci_read_config8(dev, PCI_COMMAND);
printk_spew("========>%s, command 0x%x\n", __FUNCTION__, command);
/*
*/
}
static struct device_operations cpu_operations = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
.enable_resources = sc520_enable_resources,
.init = cpu_init,
.enable = 0,
.ops_pci = 0,
@ -166,10 +186,29 @@ static unsigned int pci_domain_scan_bus(device_t dev, unsigned int max)
return max;
}
static void enable_resources(device_t dev) {
printk_spew("%s\n", __FUNCTION__);
printk_spew("THIS IS FOR THE SC520 =============================\n");
/*
command = pci_read_config8(dev, PCI_COMMAND);
printk_spew("%s, command 0x%x\n", __FUNCTION__, command);
command |= PCI_COMMAND_MEMORY;
printk_spew("%s, command 0x%x\n", __FUNCTION__, command);
pci_write_config8(dev, PCI_COMMAND, command);
command = pci_read_config8(dev, PCI_COMMAND);
printk_spew("%s, command 0x%x\n", __FUNCTION__, command);
*/
enable_childrens_resources(dev);
printk_spew("%s\n", __FUNCTION__);
}
static struct device_operations pci_domain_ops = {
.read_resources = pci_domain_read_resources,
.set_resources = pci_domain_set_resources,
.enable_resources = enable_childrens_resources,
.enable_resources = enable_resources,
.init = 0,
.scan_bus = pci_domain_scan_bus,
};

View File

@ -134,6 +134,9 @@ chip cpu/amd/sc520
device pci_domain 0 on
device pci 0.0 on end
chip drivers/pci/onboard
device pci 12.0 on end # enet
end
chip drivers/pci/onboard
device pci 14.0 on end # 69000
register "rom_address" = "0x2000000"

View File

@ -21,13 +21,8 @@ const struct irq_routing_table intel_irq_routing_table = {
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) */
{
/* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
{0x00,(0x09<<3)|0x0, {{0x30, 0x8e80}, {0x31, 0x8e80}, {0x32, 0x8e80}, {0x33, 0x08e80}}, 0x1, 0x0},
{0x00,(0x0a<<3)|0x0, {{0x31, 0x8e80}, {0x32, 0x8e80}, {0x33, 0x8e80}, {0x30, 0x08e80}}, 0x2, 0x0},
{0x00,(0x0b<<3)|0x0, {{0x32, 0x8e80}, {0x33, 0x8e80}, {0x30, 0x8e80}, {0x31, 0x08e80}}, 0x3, 0x0},
{0x00,(0x0c<<3)|0x0, {{0x33, 0x8e80}, {0x30, 0x8e80}, {0x31, 0x8e80}, {0x32, 0x08e80}}, 0x4, 0x0},
{0x00,(0x0f<<3)|0x0, {{0x32, 0x8e80}, {0x00, 0x8e80}, {0x00, 0x8e80}, {0x00, 0x08e80}}, 0x0, 0x0},
{0x00,(0x12<<3)|0x0, {{0x30, 0x8e80}, {0x00, 0x8e80}, {0x00, 0x8e80}, {0x00, 0x08e80}}, 0x0, 0x0},
{0x00,(0x14<<3)|0x0, {{0x30, 0x8e80}, {0x31, 0x8e80}, {0x32, 0x8e80}, {0x33, 0x08e80}}, 0x0, 0x0},
{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

@ -35,6 +35,7 @@ static void irqdump()
- set ADDDECTL (now done in raminit.c in cpu/amd/sc520
*/
static void enable_dev(struct device *dev) {
extern unsigned char *rom_start, *rom_end;
volatile struct mmcrpic *pic = MMCRPIC;
volatile struct mmcr *mmcr = MMCRDEFAULT;
@ -132,6 +133,12 @@ static void enable_dev(struct device *dev) {
*/
/* follow fuctory here */
mmcr->dmacontrol.extchanmapa = 0x3210;
/* hack for IDIOTIC need to fix rom_start */
printk_err("Patching rom_start due to sc520 limits\n");
rom_start = 0x2000000 + 0x40000;
rom_end = rom_start + PAYLOAD_SIZE - 1;
}
struct chip_operations mainboard_digitallogic_msm586seg_ops = {

View File

@ -9,8 +9,18 @@
#define CONFIG_ROM_STREAM_START 0xffff0000UL
#endif
static const unsigned char *rom_start = (void *)CONFIG_ROM_STREAM_START;
static const unsigned char *rom_end = (void *)(CONFIG_ROM_STREAM_START + PAYLOAD_SIZE - 1);
/* well, this is a mess, and it will get fixed, but not right away.
* until we stop using 'ld' for building the rom image, that is.
* problem is, that on the sc520, ROM_STREAM_START has to be at 0x2000000.
* but if you set CONFIG_ROM_STREAM_START to that, then ld will try to
* build a giant image: 0x0-0x2000000, i.e. almost 4 GB.
* so make this non-static, non-const for now.
*/
/*XXXXXXXXXXXXXX */
/*static const */unsigned char *rom_start = (void *)CONFIG_ROM_STREAM_START;
/*static const */unsigned char *rom_end = (void *)(CONFIG_ROM_STREAM_START + PAYLOAD_SIZE - 1);
/*XXXXXXXXXXXXXX */
static const unsigned char *rom;
int stream_init(void)