mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
IOAPIC: Divide setup_ioapic() in two parts.
Currently some southbridge codes implement the set_ioapic_id() part locally and do not implement the load_vectors() part at all. This change allows clean-up of those southbridges without introducing changed behaviour. Change-Id: Ic5e860b9b669ecd1e9ddac4bbb92d80bdb9c2fca Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: http://review.coreboot.org/300 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
parent
e614353194
commit
db4f875a41
2 changed files with 15 additions and 5 deletions
|
@ -39,6 +39,7 @@
|
||||||
#define SMI (2 << 8)
|
#define SMI (2 << 8)
|
||||||
#define INT (1 << 8)
|
#define INT (1 << 8)
|
||||||
|
|
||||||
|
void set_ioapic_id(u32 ioapic_base, u8 ioapic_id);
|
||||||
void setup_ioapic(u32 ioapic_base, u8 ioapic_id);
|
void setup_ioapic(u32 ioapic_base, u8 ioapic_id);
|
||||||
void clear_ioapic(u32 ioapic_base);
|
void clear_ioapic(u32 ioapic_base);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -74,11 +74,9 @@ void clear_ioapic(u32 ioapic_base)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_ioapic(u32 ioapic_base, u8 ioapic_id)
|
void set_ioapic_id(u32 ioapic_base, u8 ioapic_id)
|
||||||
{
|
{
|
||||||
u32 bsp_lapicid = lapicid();
|
u32 bsp_lapicid = lapicid();
|
||||||
u32 low, high;
|
|
||||||
u32 i, ioapic_interrupts;
|
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "IOAPIC: Initializing IOAPIC at 0x%08x\n",
|
printk(BIOS_DEBUG, "IOAPIC: Initializing IOAPIC at 0x%08x\n",
|
||||||
ioapic_base);
|
ioapic_base);
|
||||||
|
@ -92,6 +90,13 @@ void setup_ioapic(u32 ioapic_base, u8 ioapic_id)
|
||||||
(io_apic_read(ioapic_base, 0x00) & 0xf0ffffff) |
|
(io_apic_read(ioapic_base, 0x00) & 0xf0ffffff) |
|
||||||
(ioapic_id << 24));
|
(ioapic_id << 24));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void load_vectors(u32 ioapic_base)
|
||||||
|
{
|
||||||
|
u32 bsp_lapicid = lapicid();
|
||||||
|
u32 low, high;
|
||||||
|
u32 i, ioapic_interrupts;
|
||||||
|
|
||||||
ioapic_interrupts = ioapic_interrupt_count(ioapic_base);
|
ioapic_interrupts = ioapic_interrupt_count(ioapic_base);
|
||||||
|
|
||||||
|
@ -123,10 +128,8 @@ void setup_ioapic(u32 ioapic_base, u8 ioapic_id)
|
||||||
|
|
||||||
printk(BIOS_SPEW, "IOAPIC: reg 0x%08x value 0x%08x 0x%08x\n",
|
printk(BIOS_SPEW, "IOAPIC: reg 0x%08x value 0x%08x 0x%08x\n",
|
||||||
0, high, low);
|
0, high, low);
|
||||||
|
|
||||||
low = DISABLED;
|
low = DISABLED;
|
||||||
high = NONE;
|
high = NONE;
|
||||||
|
|
||||||
for (i = 1; i < ioapic_interrupts; i++) {
|
for (i = 1; i < ioapic_interrupts; i++) {
|
||||||
io_apic_write(ioapic_base, i * 2 + 0x10, low);
|
io_apic_write(ioapic_base, i * 2 + 0x10, low);
|
||||||
io_apic_write(ioapic_base, i * 2 + 0x11, high);
|
io_apic_write(ioapic_base, i * 2 + 0x11, high);
|
||||||
|
@ -135,3 +138,9 @@ void setup_ioapic(u32 ioapic_base, u8 ioapic_id)
|
||||||
i, high, low);
|
i, high, low);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup_ioapic(u32 ioapic_base, u8 ioapic_id)
|
||||||
|
{
|
||||||
|
set_ioapic_id(ioapic_base, ioapic_id);
|
||||||
|
load_vectors(ioapic_base);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue