Hi Jonathan,

please use plain text, no HTML....

On Wednesday 16 August 2006 13:58, Jonathan Sturges wrote:
> PCI: No IRQ known for interrupt pin A of device 00:13.0. Please try
> using pci=biosirq.
> usb-ohci.c: found OHCI device with no IRQ assigned. check BIOS
> settings!
> ...which basically means the entries for these devices in the IRQ map
> are either wrong, or missing.  What's needed now is a way to determine
> those interrupts, and put them in the map.  Did you have to go through
> a similar process on your board, and if so, can you detail what you
> did?

Yes, similar to my experience. I tried (no chance to read back any values due 
to WinCE-Bootloader instead of BIOS) with this irq map and it works.
Source attached.

Juergen
/**
 * 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, which BIOS sets up
 *
 * Documentation at : http://www.microsoft.com/whdc/archive/pciirq.mspx
 **/

#include <arch/pirq_routing.h>

/*
 *   northbridge     slot#1    slot#2    slot#3    slot#4
                  RealTec8139C  free      free      free
 *     INT A          INTA      INTD      INTC      INTB
 *     INT B          INTB      INTA      INTD      INTC
 *     INT C          INTC      INTB      INTA      INTD
 *     INT D          INTD      INTC      INTB      INTA
 */

/**
 * mask of available IRQs for the PCI bus
 **/
#define AVAIL_IRQS 0xdeb8
/* 0xDEB8 = 1101 1110 1011 1000
 *                         ^____ IRQ3
 *                       ^______ IRQ4
 *                      ^_______ IRQ5
 *                    ^_________ IRQ7
 *                 ^____________ IRQ9
 *                ^_____________ IRQ10
 *               ^______________ IRQ11
 *             ^________________ IRQ12
 *           ^__________________ IRQ14
 *          ^___________________ IRQ15
 */
#define CHECKSUM 0xBF

const struct irq_routing_table intel_irq_routing_table = {
	.signature = PIRQ_SIGNATURE,  /* u32 signature */
	.version = PIRQ_VERSION,    /* u16 version   */
	.size = 32+16*IRQ_SLOT_COUNT,	 /* there can be total 2 devices on the bus */
	.rtr_bus = 0x00,		 /* Where the interrupt router lies (bus) */
	.rtr_devfn = (0x12<<3)|0x0,   /* Where the interrupt router lies (dev) */
	.exclusive_irqs = 0x800,		 /* IRQs devoted exclusively to PCI usage */
	.rtr_vendor = 0x1078,		 /* Vendor */
	.rtr_device = 0x2,		 /* Device */
	.miniport_data = 0,		 /* Crap (miniport) */
	.checksum = CHECKSUM,	/*  this hase to set to some value that would give 0 after the sum of all bytes for this structure (including checksum) */
/*
 * Definition for "slot#1". There is no real slot, the network device is soldered...
 */
	.slots = {
		[0] = {
			.bus = 0x00,
			.devfn = (0x0e<<3)|0x0,
			.irq = {
				[0] = {
					.link = 0x01,			/* INT A */
					.bitmap = AVAIL_IRQS
				},
				[1] = {
					.link = 0x02,			/* INT B */
					.bitmap = AVAIL_IRQS
				},
				[2] = {
					.link = 0x03,			/* INT C */
					.bitmap = AVAIL_IRQS
				},
				[3] = {
					.link = 0x04,			/* INT D */
					.bitmap = AVAIL_IRQS
				}
			},
			.slot = 0x1,
		},
		{
			.bus = 0x00,
/*			.devfn = (0x0f<<3)|0x0, */
			.devfn = (0x13<<3)|0x0,	/* This enables USB OHCI to IRQ 11 ??? */
			.irq = {
				[0] = {
					.link = 0x02,
					.bitmap = AVAIL_IRQS
					},
				[1] = {
					.link = 0x03,
					.bitmap = AVAIL_IRQS
					},
				[2] = {
					.link = 0x04,
					.bitmap = AVAIL_IRQS
					},
				[3] = {
					.link = 0x01,
					.bitmap = AVAIL_IRQS
				}
			},
			.slot = 0x2,
		}
	}
};

/**
 * copy the IRQ routing table to memory
 * @addr destination address (between 0xF0000...0x100000)
 **/
unsigned long write_pirq_routing_table(unsigned long addr)
{
	return copy_pirq_routing_table(addr);
}

/* end of file irq_tables.c */
-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.openbios.org/mailman/listinfo/linuxbios

Reply via email to