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

Reply via email to