soc/apollolake/acpi: Fill in ACPI MADT table
ACPI MADT tables required to describe the multiprocessor interrupt routing. Apollolake SOC also have the interrupt override table like other x86 silicons. Change-Id: I85976e227963c950aad4476d68581b96e1090559 Signed-off-by: Lance Zhao <lijian.zhao@intel.com> Reviewed-on: https://review.coreboot.org/13373 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
186b9de95d
commit
2fc82d699d
|
@ -11,6 +11,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arch/acpi.h>
|
#include <arch/acpi.h>
|
||||||
|
#include <arch/ioapic.h>
|
||||||
|
#include <arch/smp/mpspec.h>
|
||||||
#include <cpu/x86/smm.h>
|
#include <cpu/x86/smm.h>
|
||||||
#include <soc/acpi.h>
|
#include <soc/acpi.h>
|
||||||
#include <soc/iomap.h>
|
#include <soc/iomap.h>
|
||||||
|
@ -25,17 +27,38 @@ unsigned long acpi_fill_mcfg(unsigned long current)
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
|
||||||
{
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_sci_irq(void)
|
static int acpi_sci_irq(void)
|
||||||
{
|
{
|
||||||
int sci_irq = 9;
|
int sci_irq = 9;
|
||||||
return sci_irq;
|
return sci_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned long acpi_madt_irq_overrides(unsigned long current)
|
||||||
|
{
|
||||||
|
int sci = acpi_sci_irq();
|
||||||
|
uint16_t flags = MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_LOW;;
|
||||||
|
|
||||||
|
/* INT_SRC_OVR */
|
||||||
|
current += acpi_create_madt_irqoverride((void *)current, 0, 0, 2, 0);
|
||||||
|
|
||||||
|
/* SCI */
|
||||||
|
current += acpi_create_madt_irqoverride((void *)current, 0, sci, sci, flags);
|
||||||
|
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
|
{
|
||||||
|
/* Local APICs */
|
||||||
|
current = acpi_create_madt_lapics(current);
|
||||||
|
|
||||||
|
/* IOAPIC */
|
||||||
|
current += acpi_create_madt_ioapic((void *) current,
|
||||||
|
2, IO_APIC_ADDR, 0);
|
||||||
|
|
||||||
|
return acpi_madt_irq_overrides(current);
|
||||||
|
}
|
||||||
|
|
||||||
void soc_fill_common_fadt(acpi_fadt_t * fadt)
|
void soc_fill_common_fadt(acpi_fadt_t * fadt)
|
||||||
{
|
{
|
||||||
const uint16_t pmbase = ACPI_PMIO_BASE;
|
const uint16_t pmbase = ACPI_PMIO_BASE;
|
||||||
|
|
Loading…
Reference in New Issue