diff options
author | Nico Huber <nico.huber@secunet.com> | 2012-09-24 10:48:43 +0200 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2012-10-29 09:36:33 +0100 |
commit | 23c046b6f16805ff0131460189967bf261d704de (patch) | |
tree | e970aeb53075099b8562069f63c875a18174b769 /src/arch/x86/lib | |
parent | f4ff56f6173df256589dfdaee4cd1e7cafd0202c (diff) |
Fix reading of number of interrupts for IO-APICs
The number read from the io-apic register represents the index of the
highest interrupt redirection entry, i.e. the number of interrupts
minus one.
Change-Id: I54c992e4ff400de24bb9fef5d82251078f92c588
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/1624
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/arch/x86/lib')
-rw-r--r-- | src/arch/x86/lib/ioapic.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/arch/x86/lib/ioapic.c b/src/arch/x86/lib/ioapic.c index 57b99e283e..018a42c173 100644 --- a/src/arch/x86/lib/ioapic.c +++ b/src/arch/x86/lib/ioapic.c @@ -85,8 +85,11 @@ void setup_ioapic(u32 ioapic_base, u8 ioapic_id) /* Read the available number of interrupts. */ ioapic_interrupts = (io_apic_read(ioapic_base, 0x01) >> 16) & 0xff; - if (!ioapic_interrupts || ioapic_interrupts == 0xff) - ioapic_interrupts = 24; + if (ioapic_interrupts == 0xff) + ioapic_interrupts = 23; + ioapic_interrupts += 1; /* Bits 23-16 specify the maximum redirection + entry, which is the number of interrupts + minus 1. */ printk(BIOS_DEBUG, "IOAPIC: %d interrupts\n", ioapic_interrupts); #if CONFIG_IOAPIC_INTERRUPTS_ON_FSB |