drivers: loapic: add device tree support for loapic
As per #26393, Local APIC is using Kconfig based option for the base address. This patch adds DTS binding support in the driver, just like its conunter part I/O APIC. Signed-off-by: Umar Nisar <umar.nisar@intel.com>
This commit is contained in:
parent
a4858c40ec
commit
31a6594212
14 changed files with 101 additions and 37 deletions
|
@ -9,12 +9,6 @@ menuconfig LOAPIC
|
|||
|
||||
if LOAPIC
|
||||
|
||||
config LOAPIC_BASE_ADDRESS
|
||||
hex "Local APIC Base Address"
|
||||
default 0xFEE00000
|
||||
help
|
||||
This option specifies the base address of the Local APIC device.
|
||||
|
||||
config X2APIC
|
||||
bool "Access local APIC in x2APIC mode"
|
||||
help
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
|
||||
#define DT_DRV_COMPAT intel_loapic
|
||||
|
||||
/*
|
||||
* driver for x86 CPU local APIC (as an interrupt controller)
|
||||
*/
|
||||
|
@ -59,18 +62,15 @@
|
|||
#define LOAPIC_SPURIOUS_VECTOR_ID CONFIG_LOAPIC_SPURIOUS_VECTOR_ID
|
||||
#endif
|
||||
|
||||
#define LOPIC_SSPND_BITS_PER_IRQ 1 /* Just the one for enable disable*/
|
||||
#define LOPIC_SUSPEND_BITS_REQD (ROUND_UP((LOAPIC_IRQ_COUNT * LOPIC_SSPND_BITS_PER_IRQ), 32))
|
||||
#define LOAPIC_SSPND_BITS_PER_IRQ 1 /* Just the one for enable disable*/
|
||||
#define LOAPIC_SUSPEND_BITS_REQD (ROUND_UP((LOAPIC_IRQ_COUNT * LOAPIC_SSPND_BITS_PER_IRQ), 32))
|
||||
#ifdef CONFIG_PM_DEVICE
|
||||
#include <zephyr/pm/device.h>
|
||||
__pinned_bss
|
||||
uint32_t loapic_suspend_buf[LOPIC_SUSPEND_BITS_REQD / 32] = {0};
|
||||
uint32_t loapic_suspend_buf[LOAPIC_SUSPEND_BITS_REQD / 32] = {0};
|
||||
#endif
|
||||
|
||||
#ifdef DEVICE_MMIO_IS_IN_RAM
|
||||
__pinned_bss
|
||||
mm_reg_t z_loapic_regs;
|
||||
#endif
|
||||
DEVICE_MMIO_TOPLEVEL(LOAPIC_REGS_STR, DT_DRV_INST(0));
|
||||
|
||||
__pinned_func
|
||||
void send_eoi(void)
|
||||
|
@ -87,11 +87,8 @@ __pinned_func
|
|||
void z_loapic_enable(unsigned char cpu_number)
|
||||
{
|
||||
int32_t loApicMaxLvt; /* local APIC Max LVT */
|
||||
DEVICE_MMIO_TOPLEVEL_MAP(LOAPIC_REGS_STR, K_MEM_CACHE_NONE);
|
||||
|
||||
#ifdef DEVICE_MMIO_IS_IN_RAM
|
||||
device_map(&z_loapic_regs, CONFIG_LOAPIC_BASE_ADDRESS, 0x1000,
|
||||
K_MEM_CACHE_NONE);
|
||||
#endif /* DEVICE_MMIO_IS_IN_RAM */
|
||||
#ifndef CONFIG_X2APIC
|
||||
/*
|
||||
* in xAPIC and flat model, bits 24-31 in LDR (Logical APIC ID) are
|
||||
|
@ -340,7 +337,7 @@ static int loapic_suspend(const struct device *port)
|
|||
|
||||
ARG_UNUSED(port);
|
||||
|
||||
(void)memset(loapic_suspend_buf, 0, (LOPIC_SUSPEND_BITS_REQD >> 3));
|
||||
(void)memset(loapic_suspend_buf, 0, (LOAPIC_SUSPEND_BITS_REQD >> 3));
|
||||
|
||||
for (loapic_irq = 0; loapic_irq < LOAPIC_IRQ_COUNT; loapic_irq++) {
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue