Hi, all. This patch include support for VGA. Also it change PIR-table for support add-on PCI cards.
Signed-off-by: Nikolay Petukhov <[EMAIL PROTECTED]> -- Nikolay
diff -Nru LinuxBIOSv2-2975/src/mainboard/iei/juki-511p/irq_tables.c LinuxBIOSv2-2975-juki/src/mainboard/iei/juki-511p/irq_tables.c --- LinuxBIOSv2-2975/src/mainboard/iei/juki-511p/irq_tables.c 2007-06-08 02:52:42.000000000 +0600 +++ LinuxBIOSv2-2975-juki/src/mainboard/iei/juki-511p/irq_tables.c 2007-11-20 16:41:31.000000000 +0500 @@ -19,56 +19,174 @@ */ #include <arch/pirq_routing.h> +#include <console/console.h> +#include <device/pci.h> -#define IRQ_BITMAP_LINK0 0x0800 /* chipset's INTA# input should be routed to IRQ11 */ -#define IRQ_BITMAP_LINK1 0x0400 /* chipset's INTB# input should be routed to IRQ10 */ -#define IRQ_BITMAP_LINK2 0x0000 /* chipset's INTC# input should be routed to nothing (disabled) */ -#define IRQ_BITMAP_LINK3 0x0000 /* chipset's INTD# input should be routed to nothing (disabled) */ +/* Platform IRQs */ +#define PIRQA 11 +#define PIRQB 9 +#define PIRQC 12 +#define PIRQD 10 + +/* Map */ +#define IRQ_BITMAP_LINK0 (1 << PIRQA) +#define IRQ_BITMAP_LINK1 (1 << PIRQB) +#define IRQ_BITMAP_LINK2 (1 << PIRQC) +#define IRQ_BITMAP_LINK3 (1 << PIRQD) +#define IRQ_BITMAP_NOLINK 0x0 + +#define EXCLUSIVE_PCI_IRQS (IRQ_BITMAP_LINK0 | IRQ_BITMAP_LINK1 | IRQ_BITMAP_LINK2 | IRQ_BITMAP_LINK3) const struct irq_routing_table intel_irq_routing_table = { PIRQ_SIGNATURE, /* u32 signature */ PIRQ_VERSION, /* u16 version */ - 32+16*2, /* There can be a total of 2 devices on the bus */ + 32+16*IRQ_SLOT_COUNT, /* There can be a total of IRQ_SLOT_COUNT devices on the bus */ 0x00, /* Where the interrupt router lies (bus) */ (0x12<<3)|0x0, /* Where the interrupt router lies (dev) */ - 0xc00, /* IRQs devoted exclusively to PCI usage */ + EXCLUSIVE_PCI_IRQS, /* IRQs devoted exclusively to PCI usage */ 0x1078, /* Vendor */ 0x2, /* Device */ 0, /* Crap (miniport) */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */ - 0x57, /* u8 checksum. This has to be set to some + 0x22, /* u8 checksum. This has to be set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */ .slots = { [0] = { - .slot = 0x0, /* should be 0 when it is no real slot. My device is soldered */ + .slot = 0x0, /* means also "on board" */ .bus = 0x00, - .devfn = (0x13<<3)|0x0, /* 0x13 is my USB OHCI */ + .devfn = (0x13<<3)|0x0, /* 0x13 is USB OHCI */ .irq = { [0] = { /* <-- 0 means this is INTA# output from the device or slot */ .link = 0x01, /* 0x01 means its connected to INTA# input at chipset */ .bitmap = IRQ_BITMAP_LINK0 }, [1] = { /* <-- 1 means this is INTB# output from the device or slot */ + .link = 0x0, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + }, + [2] = { /* <-- 2 means this is INTC# output from the device or slot */ + .link = 0x03, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + }, + [3] = { /* <-- 3 means this is INTD# output from the device or slot */ + .link = 0x04, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + } + } + }, + + [1] = { + .slot = 0x0, /* means also "on board" */ + .bus = 0x00, + .devfn = (0x0e<<3)|0x0, /* 0x0e is Realtek Network device */ + .irq = { + [0] = { /* <-- 0 means this is INTA# output from the device or slot */ .link = 0x02, /* 0x02 means its connected to INTB# input at chipset */ .bitmap = IRQ_BITMAP_LINK1 }, + [1] = { /* <-- 1 means this is INTB# output from the device or slot */ + .link = 0x0, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + }, [2] = { /* <-- 2 means this is INTC# output from the device or slot */ - .link = 0x03, /* 0x03 means its connected to INTC# input at chipset */ + .link = 0x0, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + }, + [3] = { /* <-- 3 means this is INTD# output from the device or slot */ + .link = 0x0, /* 0x0 means its not connected to at chipset */ + .bitmap = IRQ_BITMAP_NOLINK + } + } + }, + +/* ################### backplane IP-6S ################### */ + +/* PCISA IP-6S*/ + + [2] = { + .slot = 0x1, /* This is real slot. PCISA on IP-6S */ + .bus = 0x00, + .devfn = (0x09<<3)|0x0, /* 0x09 PCISA on IP-6S */ + .irq = { + [0] = { /* <-- 0 means this is INTA# output from the device or slot */ + .link = 0x02, /* 0x02 means its connected to INTB# input at chipset */ + .bitmap = IRQ_BITMAP_LINK1 + }, + [1] = { /* <-- 1 means this is INTB# output from the device or slot */ + .link = 0x04, /* 0x04 means its connected to INTD# input at chipset */ .bitmap = IRQ_BITMAP_LINK2 }, + [2] = { /* <-- 2 means this is INTC# output from the device or slot */ + .link = 0x03, /* 0x03 means its connected to INTC# input at chipset */ + .bitmap = IRQ_BITMAP_LINK3 + }, [3] = { /* <-- 3 means this is INTD# output from the device or slot */ + .link = 0x01, /* 0x01 means its connected to INTA# input at chipset */ + .bitmap = IRQ_BITMAP_LINK0 + } + } + }, + +/* PCI2 IP-6S*/ + + [3] = { + .slot = 0x2, /* This is real PCI slot. */ + .bus = 0x00, + .devfn = (0x0a<<3)|0x0, /* 0x0a PCI2 on IP-6S */ + .irq = { + [0] = { /* <-- 0 means this is INTA# output from the device or slot */ .link = 0x04, /* 0x04 means its connected to INTD# input at chipset */ .bitmap = IRQ_BITMAP_LINK3 + }, + [1] = { /* <-- 1 means this is INTB# output from the device or slot */ + .link = 0x01, /* 0x01 means its connected to INTA# input at chipset */ + .bitmap = IRQ_BITMAP_LINK0 + }, + [2] = { /* <-- 2 means this is INTC# output from the device or slot */ + .link = 0x02, /* 0x02 means its connected to INTB# input at chipset */ + .bitmap = IRQ_BITMAP_LINK1 + }, + [3] = { /* <-- 3 means this is INTD# output from the device or slot */ + .link = 0x03, /* 0x03 means its connected to INTC# input at chipset */ + .bitmap = IRQ_BITMAP_LINK2 } } }, - [1] = { - .slot = 0x0, /* means also "on board" */ +/* PCI3 IP-6S*/ + + [4] = { + .slot = 0x3, /* This is real PCI slot. */ .bus = 0x00, - .devfn = (0x0e<<3)|0x0, /* 0x0e is my Realtek Network device */ + .devfn = (0x0b<<3)|0x0, /* 0x0b PCI3 on IP-6S */ + .irq = { + [0] = { /* <-- 0 means this is INTA# output from the device or slot */ + .link = 0x03, /* 0x03 means its connected to INTC# input at chipset */ + .bitmap = IRQ_BITMAP_LINK2 + }, + [1] = { /* <-- 1 means this is INTB# output from the device or slot */ + .link = 0x04, /* 0x04 means its connected to INTD# input at chipset */ + .bitmap = IRQ_BITMAP_LINK3 + }, + [2] = { /* <-- 2 means this is INTC# output from the device or slot */ + .link = 0x01, /* 0x01 means its connected to INTA# input at chipset */ + .bitmap = IRQ_BITMAP_LINK0 + }, + [3] = { /* <-- 3 means this is INTD# output from the device or slot */ + .link = 0x02, /* 0x02 means its connected to INTB# input at chipset */ + .bitmap = IRQ_BITMAP_LINK1 + } + } + }, + +/* PCI4 IP-6S*/ + + [5] = { + .slot = 0x4, /* This is real PCI slot. */ + .bus = 0x00, + .devfn = (0x0c<<3)|0x0, /* 0x0c PCI4 on IP-6S */ .irq = { [0] = { /* <-- 0 means this is INTA# output from the device or slot */ .link = 0x02, /* 0x02 means its connected to INTB# input at chipset */ @@ -87,7 +205,7 @@ .bitmap = IRQ_BITMAP_LINK0 } } - } + }, } }; @@ -99,5 +217,40 @@ */ unsigned long write_pirq_routing_table(unsigned long addr) { - return copy_pirq_routing_table(addr); + int i, j, k, num_entries; + unsigned char pirq[4]; + uint16_t chipset_irq_map; + uint32_t pciAddr, pirtable_end; + struct irq_routing_table *pirq_tbl; + device_t pdev; + + pirtable_end = copy_pirq_routing_table(addr); + + /* Set up chipset IRQ steering. */ + pdev = dev_find_slot(0, (0x12 << 3)); + pci_write_config8(pdev, 0x5c, (PIRQB << 4 | PIRQA)); + pci_write_config8(pdev, 0x5d, (PIRQD << 4 | PIRQC)); + + pirq_tbl = (struct irq_routing_table *)(addr); + num_entries = (pirq_tbl->size - 32) / 16; + + /* Set PCI IRQs. */ + for (i = 0; i < num_entries; i++) { + printk_debug("PIR Entry %d Dev/Fn: %X Slot: %d\n", i, + pirq_tbl->slots[i].devfn, pirq_tbl->slots[i].slot); + for (j = 0; j < 4; j++) { + printk_debug("INT: %c bitmap: %x ", 'A' + j, + pirq_tbl->slots[i].irq[j].bitmap); + for (k = 0; (!((pirq_tbl->slots[i].irq[j].bitmap >> k) & 1)) && (pirq_tbl->slots[i].irq[j].bitmap != 0); k++) ; /* Finds lsb in bitmap to IRQ#. */ + pirq[j] = k; + printk_debug("PIRQ: %d\n", k); + } + + /* Bus, device, slots IRQs for {A,B,C,D}. */ + pci_assign_irqs(pirq_tbl->slots[i].bus, + pirq_tbl->slots[i].devfn >> 3, pirq); + } + + /* Put the PIR table in memory and checksum. */ + return pirtable_end; } diff -Nru LinuxBIOSv2-2975/src/mainboard/iei/juki-511p/Options.lb LinuxBIOSv2-2975-juki/src/mainboard/iei/juki-511p/Options.lb --- LinuxBIOSv2-2975/src/mainboard/iei/juki-511p/Options.lb 2007-10-11 16:25:35.000000000 +0600 +++ LinuxBIOSv2-2975-juki/src/mainboard/iei/juki-511p/Options.lb 2007-11-20 14:02:26.000000000 +0500 @@ -42,7 +42,10 @@ uses TTYS0_BAUD uses TTYS0_BASE uses TTYS0_LCS +uses CONFIG_GX1_VIDEO +uses CONFIG_GX1_VIDEOMODE uses CONFIG_VIDEO_MB +uses CONFIG_SPLASH_GRAPHIC ## ROM_SIZE is the size of boot ROM that this board will use. default ROM_SIZE = 256*1024 @@ -71,7 +74,7 @@ ## Build code to export a programmable irq routing table ## default HAVE_PIRQ_TABLE=0 -default IRQ_SLOT_COUNT=2 +default IRQ_SLOT_COUNT=6 #object irq_tables.o ## @@ -140,7 +143,10 @@ default CC="$(CROSS_COMPILE)gcc -m32" default HOSTCC="gcc" -default CONFIG_VIDEO_MB = 0 +default CONFIG_GX1_VIDEO = 1 +default CONFIG_GX1_VIDEOMODE = 0 +default CONFIG_VIDEO_MB = 2 +default CONFIG_SPLASH_GRAPHIC = 1 end diff -Nru LinuxBIOSv2-2975/targets/iei/juki-511p/Config.lb LinuxBIOSv2-2975-juki/targets/iei/juki-511p/Config.lb --- LinuxBIOSv2-2975/targets/iei/juki-511p/Config.lb 2007-06-08 02:52:42.000000000 +0600 +++ LinuxBIOSv2-2975-juki/targets/iei/juki-511p/Config.lb 2007-11-20 16:44:42.000000000 +0500 @@ -28,6 +28,9 @@ option CONFIG_COMPRESS=0 option CONFIG_PRECOMPRESSED_PAYLOAD=0 +option DEFAULT_CONSOLE_LOGLEVEL=0 +option MAXIMUM_CONSOLE_LOGLEVEL=0 + romimage "image" option ROM_IMAGE_SIZE=64*1024 option LINUXBIOS_EXTRA_VERSION="-filo"
-- linuxbios mailing list linuxbios@linuxbios.org http://www.linuxbios.org/mailman/listinfo/linuxbios