This patch implements support for the Intel EP80579 Development Board.
Signed-off-by: Ed Swierk eswierk@arastra.com
Comments below, but this should be the last commit anyway (after all the NB/SB code is committed; I'll try to review that ASAP).
On Wed, Aug 20, 2008 at 09:19:35AM -0700, Ed Swierk wrote:
Index: coreboot-v2-3363/src/mainboard/intel/truxton/Config.lb
--- /dev/null
[...]
+chip northbridge/intel/i3100
device pci_domain 0 on
device pci 00.0 on end # IMCH
device pci 00.1 on end # IMCH error status
device pci 01.0 on end # IMCH EDMA engine
device pci 02.0 on end # PCIe port A/A0
device pci 03.0 on end # PCIe port A1
device pci 04.0 on end
device pci 08.0 off end
device pci 0d.0 off end
device pci 0d.1 off end
What are these? Please add comments. Why are three of them disabled? Not available on this board?
device pci 1f.2 on end # SATA
device pci 1f.3 on end # SMBus
device pci 1f.4 on end
Same here.
end
end
device apic_cluster 0 on
chip cpu/intel/ep80579
device apic 0 on end
end
end
+end
Index: coreboot-v2-3363/src/mainboard/intel/truxton/auto.c
--- /dev/null +++ coreboot-v2-3363/src/mainboard/intel/truxton/auto.c @@ -0,0 +1,114 @@
[...]
+static void main(unsigned long bist) +{
- msr_t msr;
- u16 perf;
- static const struct mem_controller mch[] = {
{
.node_id = 0,
.f0 = PCI_DEV(0, 0x00, 0),
.channel0 = { (0xa<<3)|2, (0xa<<3)|3 },
}
- };
- if (bist == 0) {
/* Skip this if there was a built in self test failure */
early_mtrr_init();
if (memory_initialized()) {
asm volatile ("jmp __cpu_reset");
}
- }
- /* Set up the console */
- i3100_enable_superio();
- i3100_enable_serial(0x4e, I3100_SP1, TTYS0_BASE);
Maybe make the 0x4e a #define (e.g. I3100_SUPERIO_CONFIG_PORT) for better readability.
- uart_init();
- console_init();
- /* Prevent the TCO timer from rebooting us */
- i3100_halt_tco_timer();
- /* Halt if there was a built in self test failure */
- report_bist_failure(bist);
+#if 0
- print_pci_devices();
+#endif
- enable_smbus();
+#if 1
- dump_spd_registers();
+#endif
- sdram_initialize(ARRAY_SIZE(mch), mch);
+#if 1
- dump_pci_devices();
+#endif
- dump_pci_device(PCI_DEV(0, 0x00, 0));
+#if 0
- dump_bar14(PCI_DEV(0, 0x00, 0));
+#endif
+#if 0
- ram_fill(0x00000000, 0x20000000);
- ram_verify(0x00000000, 0x20000000);
+#endif
Remove the "#if 1" please, and turn "#if 0" into regular /*foo*/-style comments if the functions are needed/wanted.
Index: coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c
--- /dev/null +++ coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c @@ -0,0 +1,44 @@ +/*
- This file is part of the coreboot project.
- Copyright (C) 2008 Arastra, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
+#include <arch/pirq_routing.h>
+const struct irq_routing_table intel_irq_routing_table = {
- PIRQ_SIGNATURE, /* u32 signature */
- PIRQ_VERSION, /* u16 version */
- 32+16*IRQ_SLOT_COUNT, /* u16 Table size 32+(16*devices) */
- 0x00, /* u8 Bus 0 */
- (0x1f << 3) | 0x0, /* u8 Device 1f, Function 0 */
- 0x0000, /* u16 reserve IRQ for PCI */
- 0x8086, /* u16 Vendor */
- 0x5031, /* Device ID */
- 0x00000000, /* u32 miniport_data */
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
- 0x5e, /* u8 checksum - mod 256 checksum must give zero */
- { /* bus, devfn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
{0x00, 0xf8, {{0x62, 0xdc78}, {0x61, 0xdcf8}, {0x00, 0x0000}, {0x00, 0x0000}}, 0x00, 0x00},
Please add a coment what device/slot this is.
Index: coreboot-v2-3363/src/mainboard/intel/truxton/mptable.c
--- /dev/null +++ coreboot-v2-3363/src/mainboard/intel/truxton/mptable.c @@ -0,0 +1,199 @@
[...]
+void *smp_write_config_table(void *v) +{
- static const char sig[4] = "PCMP";
- static const char oem[8] = "Intel ";
- static const char productid[12] = "Truxton ";
- struct mp_config_table *mc;
- u8 bus_num;
- u8 bus_isa;
- u8 bus_pea0 = 0;
- u8 bus_pea1 = 0;
- u8 bus_aioc;
- mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
- memset(mc, 0, sizeof(*mc));
- memcpy(mc->mpc_signature, sig, sizeof(sig));
- mc->mpc_length = sizeof(*mc); /* initially just the header */
- mc->mpc_spec = 0x04;
- mc->mpc_checksum = 0; /* not yet computed */
- memcpy(mc->mpc_oem, oem, sizeof(oem));
- memcpy(mc->mpc_productid, productid, sizeof(productid));
- mc->mpc_oemptr = 0;
- mc->mpc_oemsize = 0;
- mc->mpc_entry_count = 0; /* No entries yet... */
- mc->mpc_lapic = LAPIC_ADDR;
- mc->mpe_length = 0;
- mc->mpe_checksum = 0;
- mc->reserved = 0;
- smp_write_processors(mc);
- {
device_t dev;
/* AIOC bridge */
dev = dev_find_slot(0, PCI_DEVFN(0x04,0));
if (dev) {
bus_aioc = pci_read_config8(dev, PCI_SECONDARY_BUS);
bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
bus_isa++;
}
else {
printk_debug("ERROR - could not find PCI 0:04.0\n");
bus_aioc = 0;
bus_isa = 9;
}
/* PCIe A0 */
dev = dev_find_slot(0, PCI_DEVFN(0x02,0));
if (dev) {
bus_pea0 = pci_read_config8(dev, PCI_SECONDARY_BUS);
}
else {
printk_debug("ERROR - could not find PCI 0:02.0\n");
bus_pea0 = 0;
}
/* PCIe A1 */
dev = dev_find_slot(0, PCI_DEVFN(0x03,0));
if (dev) {
bus_pea1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
}
else {
printk_debug("ERROR - could not find PCI 0:03.0\n");
bus_pea1 = 0;
}
- }
Thy is this an extra block? Any technical reason? If yes, it should be documented in a comment, or the block be "inlined".
Uwe.
now let's get some boards with this part on them :-)
ron
On Mon, Aug 25, 2008 at 3:48 PM, ron minnich rminnich@gmail.com wrote:
now let's get some boards with this part on them :-)
Here are a few recently-announced boards, and, umm, a spaceship:
http://www.adiengineering.com/php-bin/ecomm4/products.php?category_id=25&...
http://www.advantech.com/products/1U-Network-Security-Appliance-with-the-Int...
http://www.ibase.com.tw/ecx810.htm
http://us.lannerinc.com/NS04-5130
http://us.lannerinc.com/FW-7570
http://www.portwell.com/products/detail.asp?CUSTCHAR1=CATO-3000
http://lunarnetworks.blogspot.com/2008/08/hermes-spacecraft-looking-to-bring...
--Ed
At long last, here is a new version of the code for the EP80579 development mainboard (codename Truxton). It has been tested on real hardware, booting a Linux kernel payload and running memtest86+ with no errors. This is the final part of the EP80579 (Tolapai) patch set.
I tried to address all your comments from the first version; see inline for exceptions.
Signed-off-by: Ed Swierk eswierk@arastra.com
On Mon, Aug 25, 2008 at 1:49 PM, Uwe Hermann uwe@hermann-uwe.de wrote:
Comments below, but this should be the last commit anyway (after all the NB/SB code is committed; I'll try to review that ASAP).
On Wed, Aug 20, 2008 at 09:19:35AM -0700, Ed Swierk wrote:
Index: coreboot-v2-3363/src/mainboard/intel/truxton/Config.lb
--- /dev/null
[...]
+chip northbridge/intel/i3100
device pci_domain 0 on
device pci 00.0 on end # IMCH
device pci 00.1 on end # IMCH error status
device pci 01.0 on end # IMCH EDMA engine
device pci 02.0 on end # PCIe port A/A0
device pci 03.0 on end # PCIe port A1
device pci 04.0 on end
device pci 08.0 off end
device pci 0d.0 off end
device pci 0d.1 off end
What are these? Please add comments. Why are three of them disabled? Not available on this board?
I don't know what these are, but I found that the latter three have to be set to "off", else the PCI bus setup hangs.
device pci 1f.2 on end # SATA
device pci 1f.3 on end # SMBus
device pci 1f.4 on end
Same here.
I don't know what this is, either, and the datasheet doesn't say. But I figured since this is a development board there's no harm in leaving it on. Perhaps someone else will figure out that it's a built-in MP3 player or something.
end
end
device apic_cluster 0 on
chip cpu/intel/ep80579
device apic 0 on end
end
end
+end
Index: coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c
--- /dev/null +++ coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c @@ -0,0 +1,44 @@ +/*
- This file is part of the coreboot project.
- Copyright (C) 2008 Arastra, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
+#include <arch/pirq_routing.h>
+const struct irq_routing_table intel_irq_routing_table = {
PIRQ_SIGNATURE, /* u32 signature */
PIRQ_VERSION, /* u16 version */
32+16*IRQ_SLOT_COUNT, /* u16 Table size 32+(16*devices) */
0x00, /* u8 Bus 0 */
(0x1f << 3) | 0x0, /* u8 Device 1f, Function 0 */
0x0000, /* u16 reserve IRQ for PCI */
0x8086, /* u16 Vendor */
0x5031, /* Device ID */
0x00000000, /* u32 miniport_data */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
0x5e, /* u8 checksum - mod 256 checksum must give zero */
{ /* bus, devfn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
{0x00, 0xf8, {{0x62, 0xdc78}, {0x61, 0xdcf8}, {0x00, 0x0000}, {0x00, 0x0000}}, 0x00, 0x00},
Please add a coment what device/slot this is.
I have no idea--my understanding of the IRQ routing business is pretty fuzzy. But Linux wasn't happy booting without it, if I recall.
--Ed
Hi Ed,
thanks for the reworked patch.
One thing that caught my eye is the new romcc style which hasn't been adopted in your code yet. Basically, we now build only one romcc copy and use that for fallback and normal images.
On 14.10.2008 00:49, Ed Swierk wrote:
At long last, here is a new version of the code for the EP80579 development mainboard (codename Truxton). It has been tested on real hardware, booting a Linux kernel payload and running memtest86+ with no errors. This is the final part of the EP80579 (Tolapai) patch set.
I tried to address all your comments from the first version; see inline for exceptions.
Signed-off-by: Ed Swierk eswierk@arastra.com
With the romcc changes as indicated above and outlined below, this is Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
On Mon, Aug 25, 2008 at 1:49 PM, Uwe Hermann uwe@hermann-uwe.de wrote:
Comments below, but this should be the last commit anyway (after all the NB/SB code is committed; I'll try to review that ASAP).
On Wed, Aug 20, 2008 at 09:19:35AM -0700, Ed Swierk wrote:
Index: coreboot-v2-3363/src/mainboard/intel/truxton/Config.lb
--- /dev/null
[...]
+chip northbridge/intel/i3100
device pci_domain 0 on
device pci 00.0 on end # IMCH
device pci 00.1 on end # IMCH error status
device pci 01.0 on end # IMCH EDMA engine
device pci 02.0 on end # PCIe port A/A0
device pci 03.0 on end # PCIe port A1
device pci 04.0 on end
device pci 08.0 off end
device pci 0d.0 off end
device pci 0d.1 off end
What are these? Please add comments. Why are three of them disabled? Not available on this board?
I don't know what these are, but I found that the latter three have to be set to "off", else the PCI bus setup hangs.
With your comments that code is good to go.
device pci 1f.2 on end # SATA
device pci 1f.3 on end # SMBus
device pci 1f.4 on end
Same here.
I don't know what this is, either, and the datasheet doesn't say. But I figured since this is a development board there's no harm in leaving it on. Perhaps someone else will figure out that it's a built-in MP3 player or something.
Heh.
end
end
device apic_cluster 0 on
chip cpu/intel/ep80579
device apic 0 on end
end
end
+end
Index: coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c
--- /dev/null +++ coreboot-v2-3363/src/mainboard/intel/truxton/irq_tables.c @@ -0,0 +1,44 @@ +/*
- This file is part of the coreboot project.
- Copyright (C) 2008 Arastra, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
+#include <arch/pirq_routing.h>
+const struct irq_routing_table intel_irq_routing_table = {
PIRQ_SIGNATURE, /* u32 signature */
PIRQ_VERSION, /* u16 version */
32+16*IRQ_SLOT_COUNT, /* u16 Table size 32+(16*devices) */
0x00, /* u8 Bus 0 */
(0x1f << 3) | 0x0, /* u8 Device 1f, Function 0 */
0x0000, /* u16 reserve IRQ for PCI */
0x8086, /* u16 Vendor */
0x5031, /* Device ID */
0x00000000, /* u32 miniport_data */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */
0x5e, /* u8 checksum - mod 256 checksum must give zero */
{ /* bus, devfn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */
{0x00, 0xf8, {{0x62, 0xdc78}, {0x61, 0xdcf8}, {0x00, 0x0000}, {0x00, 0x0000}}, 0x00, 0x00},
Please add a coment what device/slot this is.
I have no idea--my understanding of the IRQ routing business is pretty fuzzy. But Linux wasn't happy booting without it, if I recall.
OK for me.
Index: coreboot-v2/src/mainboard/intel/truxton/Config.lb
--- coreboot-v2/src/mainboard/intel/truxton/Config.lb (revision 0) +++ coreboot-v2/src/mainboard/intel/truxton/Config.lb (revision 0) @@ -0,0 +1,187 @@ +## +## This file is part of the coreboot project. +## +## Copyright (C) 2008 Arastra, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License version 2 as +## published by the Free Software Foundation. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +##
+## +## Compute the location and size of where this firmware image +## (coreboot plus bootloader) will live in the boot ROM chip +## +if USE_FALLBACK_IMAGE
default ROM_SECTION_SIZE = FALLBACK_SIZE
default ROM_SECTION_OFFSET = ( ROM_SIZE - FALLBACK_SIZE )
+else
default ROM_SECTION_SIZE = ( ROM_SIZE - FALLBACK_SIZE )
default ROM_SECTION_OFFSET = 0
+end
+## +## Compute the start location and size size of the coreboot bootloader +## +default PAYLOAD_SIZE = ( ROM_SECTION_SIZE - ROM_IMAGE_SIZE ) +default CONFIG_ROM_PAYLOAD_START = (0xffffffff - ROM_SIZE + ROM_SECTION_OFFSET + 1)
+## +## Compute where this copy of coreboot will start in the boot ROM +## +default _ROMBASE = ( CONFIG_ROM_PAYLOAD_START + PAYLOAD_SIZE )
+## +## Compute a range of ROM that can cached to speed up coreboot, +## execution speed. +## +## XIP_ROM_SIZE must be a power of 2. +## XIP_ROM_BASE must be a multiple of XIP_ROM_SIZE +## +default XIP_ROM_SIZE=131072 +default XIP_ROM_BASE = ( _ROMBASE + ROM_IMAGE_SIZE - XIP_ROM_SIZE )
+## +## Set all of the defaults for an x86 architecture +##
+arch i386 end
+## +## Build the objects we have code for in this directory. +##
+driver mainboard.o +if HAVE_MP_TABLE object mptable.o end +if HAVE_PIRQ_TABLE object irq_tables.o end
+## +## Romcc output +## +makerule ./failover.E
depends "$(MAINBOARD)/../../../arch/i386/lib/failover.c ./romcc"
action "./romcc -E -O --label-prefix=failover -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/../../../arch/i386/lib/failover.c -o $@"
Here would be the changed romcc location
+end
+makerule ./failover.inc
depends "$(MAINBOARD)/../../../arch/i386/lib/failover.c ./romcc"
action "./romcc -O --label-prefix=failover -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/../../../arch/i386/lib/failover.c -o $@"
Same here
+end
+makerule ./auto.E
depends "$(MAINBOARD)/auto.c ./romcc"
action "./romcc -E -mcpu=p4 -O2 -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
And here
+end +makerule ./auto.inc
depends "$(MAINBOARD)/auto.c ./romcc"
action "./romcc -mcpu=p4 -fno-simplify-phi -O2 -I$(TOP)/src -I. $(CPPFLAGS) $(MAINBOARD)/auto.c -o $@"
And here
+end
+## +## Build our 16 bit and 32 bit coreboot entry code +## +mainboardinit cpu/x86/16bit/entry16.inc +mainboardinit cpu/x86/32bit/entry32.inc +ldscript /cpu/x86/16bit/entry16.lds +ldscript /cpu/x86/32bit/entry32.lds
+## +## Build our reset vector (This is where coreboot is entered) +## +if USE_FALLBACK_IMAGE
mainboardinit cpu/x86/16bit/reset16.inc
ldscript /cpu/x86/16bit/reset16.lds
+else
mainboardinit cpu/x86/32bit/reset32.inc
ldscript /cpu/x86/32bit/reset32.lds
+end
+### Should this be in the northbridge code? +mainboardinit arch/i386/lib/cpu_reset.inc
+## +## Include an id string (For safe flashing) +## +mainboardinit arch/i386/lib/id.inc +ldscript /arch/i386/lib/id.lds
+### +### This is the early phase of coreboot startup +### Things are delicate and we test to see if we should +### failover to another image. +### +if USE_FALLBACK_IMAGE
ldscript /arch/i386/lib/failover.lds
mainboardinit ./failover.inc
+end
+### +### O.k. We aren't just an intermediary anymore! +###
+## +## Setup RAM +## +mainboardinit cpu/x86/fpu/enable_fpu.inc +mainboardinit cpu/x86/mmx/enable_mmx.inc +mainboardinit cpu/x86/sse/enable_sse.inc +mainboardinit ./auto.inc +mainboardinit cpu/x86/sse/disable_sse.inc +mainboardinit cpu/x86/mmx/disable_mmx.inc
+## +## Include the secondary Configuration files +## +dir /pc80 +config chip.h
+chip northbridge/intel/i3100
device pci_domain 0 on
device pci 00.0 on end # IMCH
device pci 00.1 on end # IMCH error status
device pci 01.0 on end # IMCH EDMA engine
device pci 02.0 on end # PCIe port A/A0
device pci 03.0 on end # PCIe port A1
device pci 04.0 on end # ?
device pci 08.0 off end # must be off to boot
device pci 0d.0 off end # must be off to boot
device pci 0d.1 off end # must be off to boot
chip southbridge/intel/i3100
# PIRQ line -> legacy IRQ mappings
register "pirq_a_d" = "0x0b070a05"
register "pirq_e_h" = "0x0a808080"
device pci 1d.0 on end # USB (UHCI)
device pci 1d.7 on end # USB (EHCI)
device pci 1f.0 on # LPC bridge
chip superio/intel/i3100
device pnp 4e.4 on # Com1
io 0x60 = 0x3f8
irq 0x70 = 4
end
device pnp 4e.5 on # Com2
io 0x60 = 0x2f8
irq 0x70 = 3
end
end
end
device pci 1f.2 on end # SATA
device pci 1f.3 on end # SMBus
device pci 1f.4 on end # ?
end
end
device apic_cluster 0 on
chip cpu/intel/ep80579
device apic 0 on end
end
end
+end
Regards, Carl-Daniel
On Mon, Oct 13, 2008 at 4:01 PM, Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net wrote:
With the romcc changes as indicated above and outlined below, this is Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Thanks, r3656.
--Ed