[coreboot] IOAPIC Initialisation - How much do you have to do ??

Harrison, Jon (SELEX GALILEO, UK) jon.harrison at selexgalileo.com
Thu Jul 23 17:17:48 CEST 2009


Hi Guys,

I've mad a fair bit of progress (for me!!) on the EPIA-N(L)/CN400 build.

I've got to within a Gnat's proverbial of getting a linux distro to
boot.

I'm still missing something to get the IRQs through to the CPU, or at
least I think that's what's going on.

Below are the initial debug/info messages from the kernel (up to the
first point where things look suspicious i.e. Timer not connected to
IOAPIC).

Up to this point things look (almost)identical to the dmesg when booting
from Award.

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.25-14.fc9.i686 (mockbuild@) (gcc version 4.3.0
20080428 (Red Hat 4.3.0-8) (GCC) ) #1 SMP Thu May 1 06:28:41 EDT 20
08
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 0000000000001000 type 16
 BIOS-e820: 0000000000001000 - 00000000000a0000 (usable)
 BIOS-e820: 0000000000100000 - 000000003bff0000 (usable)
 BIOS-e820: 000000003bff0000 - 000000003c000000 type 16
 BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
 BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
63MB HIGHMEM available.
896MB LOWMEM available.
Scan SMP from c0000000 for 1024 bytes.
Scan SMP from c009fc00 for 1024 bytes.
Scan SMP from c00f0000 for 65536 bytes.
Using x86 segment limits to approximate NX protection
Entering add_active_range(0, 0, 245744) 0 entries of 256 used
Zone PFN ranges:
  DMA             0 ->     4096
  Normal       4096 ->   229376
  HighMem    229376 ->   245744
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0:        0 ->   245744
On node 0 totalpages: 245744
  DMA zone: 32 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 4064 pages, LIFO batch:0
  Normal zone: 1760 pages used for memmap
  Normal zone: 223520 pages, LIFO batch:31
  HighMem zone: 127 pages used for memmap
  HighMem zone: 16241 pages, LIFO batch:3
  Movable zone: 0 pages used for memmap
DMI not present or invalid.
Using APIC driver default
ACPI: RSDP 000F0400, 0024 (r2 CORE  )
ACPI: RSDT 3BFF0424, 002C (r1 CORE   RSDT            0 CORE        0)
ACPI: FACP 3BFF14C1, 00F4 (r4 COREBO COREBOOT        0 CORE       2A)
ACPI: DSDT 3BFF04C0, 1001 (r1 CBT-V2 CBT-DSDT        1 INTL 20061109)
ACPI: FACS 3BFF0480, 0040
ACPI: APIC 3BFF15B5, 005A (r1 CORE   MADT            0 CORE        0)
ACPI: no DMI BIOS year, acpi=force is required to enable ACPI
ACPI: acpi=force override
ACPI: PM-Timer IO Port: 0x408
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
Processor #0 6:9 APIC version 17
ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 2, version 3, address 0xfec00000, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
Enabling APIC mode:  Flat.  Using 1 I/O APICs
Using ACPI (MADT) for SMP configuration information
Allocating PCI resources starting at 40000000 (gap: 3c000000:c2c00000)
PM: Registered nosave memory: 00000000000a0000 - 0000000000100000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages:
243825
Kernel command line: ro root=/dev/sda5 acpi=force console=ttyS0,115200n8
debug
mapped APIC to ffffb000 (fee00000)
mapped IOAPIC to ffffa000 (fec00000)
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
CPU 0 irqstacks, hard=c07b9000 soft=c0799000
PID hash table entries: 4096 (order: 12, 16384 bytes)
Detected 800.042 MHz processor.
Console: colour VGA+ 80x25
console [ttyS0] enabled
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 966672k/982976k available (2236k kernel code, 15640k reserved,
1121k data, 284k init, 65472k highmem)
virtual kernel memory layout:
    fixmap  : 0xffc53000 - 0xfffff000   (3760 kB)
    pkmap   : 0xff400000 - 0xff800000   (4096 kB)
    vmalloc : 0xf8800000 - 0xff3fe000   ( 107 MB)
    lowmem  : 0xc0000000 - 0xf8000000   ( 896 MB)
      .init : 0xc074f000 - 0xc0796000   ( 284 kB)
      .data : 0xc062f37d - 0xc0747800   (1121 kB)
      .text : 0xc0400000 - 0xc062f37d   (2236 kB)
Checking if this processor honours the WP bit even in supervisor
mode...Ok.
CPA: page pool initialized 1 of 1 pages preallocated
SLUB: Genslabs=12, HWalign=32, Order=0-1, MinObjects=4, CPUs=1, Nodes=1
Calibrating delay using timer specific routine.. 1602.08 BogoMIPS
(lpj=801043)
Security Framework initialized
SELinux:  Initializing.
SELinux:  Starting in permissive mode
selinux_register_security:  Registering secondary module capability
Capability LSM initialized as secondary
Mount-cache hash table entries: 512
Initializing cgroup subsys ns
Initializing cgroup subsys cpuacct
CPU: L1 I Cache: 64K (32 bytes/line), D cache 64K (32 bytes/line)
CPU: L2 Cache: 64K (32 bytes/line)
Compat vDSO mapped to ffffe000.
Checking 'hlt' instruction... OK.
SMP alternatives: switching to UP code
Freeing SMP alternatives: 20k freed
ACPI: Core revision 20070126
CPU0: Centaur VIA Nehemiah stepping 0a
Total of 1 processors activated (1602.08 BogoMIPS).
ENABLING IO-APIC IRQs
..TIMER: vector=0x31 apic1=0 pin1=2 apic2=-1 pin2=-1
..MP-BIOS bug: 8254 timer not connected to IO-APIC             <<-------
Whoops !!!
...trying to set up timer (IRQ0) through the 8259A ...  failed.
...trying to set up timer as Virtual Wire IRQ... works.        <<-------
Hmm I thought I'd done this ?
Brought up 1 CPUs

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

I guess either the timer's not running or the IOAPIC setup is wrong
somehow.

I don't understand how the timer IRQ/IOAPIC relationship is defined, 
is this just hardwired as part of the PC-AT / IA32 architecture ?

Anyway (having previously seem that my pci irq fixups in CBOOT seem to
have worked OK)
I can see that the PCI routing Table is also as expected::

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
 
ACPI FADT declares the system doesn't support MSI, so disable it
ACPI: bus type pci registered
PCI: Using configuration type 1
Setting up standard PCI resources
ACPI: EC: Look up EC in DSDT
ACPI: Interpreter enabled
ACPI: (supports S0 S5)
ACPI: Using IOAPIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (0000:00)
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 6 7 *10 11 12)
ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 6 7 10 *11 12)
ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 6 7 10 11 *12)
ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 6 7 10 *11 12), disabled.
ACPI: PCI Interrupt Link [ATAI] (IRQs *20)
ACPI: PCI Interrupt Link [USBI] (IRQs *21)
ACPI: PCI Interrupt Link [VT8I] (IRQs *22)
ACPI: PCI Interrupt Link [NICI] (IRQs *23)

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

ACPI: PCI Interrupt Link [USBI] enabled at IRQ 21
ACPI: PCI Interrupt 0000:00:10.4[C] -> Link [USBI] -> GSI 21 (level,
low) -> IRQ 21
ehci_hcd 0000:00:10.4: EHCI Host Controller
ehci_hcd 0000:00:10.4: new USB bus registered, assigned bus number 1
ehci_hcd 0000:00:10.4: irq 21, io mem 0xfebffd00
ehci_hcd 0000:00:10.4: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 8 ports detected
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 2.6.25-14.fc9.i686 ehci_hcd
usb usb1: SerialNumber: 0000:00:10.4
Loading ohci-hcdohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller
(OHCI) Driver    <<--- Hmm a bit scrambled
 module
Loading uhci-hcdUSB Universal Host Controller Interface driver v3.0
 module
ACPI: PCI Interrupt 0000:00:10.0[A] -> Link [USBI] -> GSI 21 (level,
low) -> IRQ 21
uhci_hcd 0000:00:10.0: UHCI Host Controller
uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 2
uhci_hcd 0000:00:10.0: irq 21, io base 0x00001000
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: UHCI Host Controller
usb usb2: Manufacturer: Linux 2.6.25-14.fc9.i686 uhci_hcd
usb usb2: SerialNumber: 0000:00:10.0
[snip]

uhci_hcd 0000:00:10.0: Unlink after no-IRQ?  Controller is probably
using the wrong IRQ.  <<---- Whoops !!

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Hence my conclusion that there is still some link I am missing.
How does the irq_tables relate to all of this ?
The Award BIOS includes an MPTable, is this likely to be significant ?

Any help appreciated .

Thanks,
Jon
SELEX Sensors and Airborne Systems Limited
Registered Office: Sigma House, Christopher Martin Road, Basildon, Essex SS14 3EL
A company registered in England & Wales.  Company no. 02426132
********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************





More information about the coreboot mailing list