xref: /openbmc/u-boot/arch/x86/include/asm/lapic.h (revision e8f80a5a)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
23eafce05SSimon Glass /*
363d54a67SBin Meng  * From coreboot file of same name
43eafce05SSimon Glass  *
53eafce05SSimon Glass  * Copyright (C) 2014 Google, Inc
63eafce05SSimon Glass  */
73eafce05SSimon Glass 
83eafce05SSimon Glass #ifndef _ARCH_ASM_LAPIC_H
93eafce05SSimon Glass #define _ARCH_ASM_LAPIC_H
103eafce05SSimon Glass 
1163d54a67SBin Meng #define LAPIC_DEFAULT_BASE		0xfee00000
1263d54a67SBin Meng 
1363d54a67SBin Meng #define LAPIC_ID			0x020
1463d54a67SBin Meng #define LAPIC_LVR			0x030
1563d54a67SBin Meng 
1663d54a67SBin Meng #define LAPIC_TASKPRI			0x080
1763d54a67SBin Meng #define LAPIC_TPRI_MASK			0xff
1863d54a67SBin Meng 
1963d54a67SBin Meng #define LAPIC_RRR			0x0c0
2063d54a67SBin Meng 
2163d54a67SBin Meng #define LAPIC_SPIV			0x0f0
2263d54a67SBin Meng #define LAPIC_SPIV_ENABLE		0x100
2363d54a67SBin Meng 
2463d54a67SBin Meng #define LAPIC_ICR			0x300
2563d54a67SBin Meng #define LAPIC_DEST_SELF			0x40000
2663d54a67SBin Meng #define LAPIC_DEST_ALLINC		0x80000
2763d54a67SBin Meng #define LAPIC_DEST_ALLBUT		0xc0000
2863d54a67SBin Meng #define LAPIC_ICR_RR_MASK		0x30000
2963d54a67SBin Meng #define LAPIC_ICR_RR_INVALID		0x00000
3063d54a67SBin Meng #define LAPIC_ICR_RR_INPROG		0x10000
3163d54a67SBin Meng #define LAPIC_ICR_RR_VALID		0x20000
3263d54a67SBin Meng #define LAPIC_INT_LEVELTRIG		0x08000
3363d54a67SBin Meng #define LAPIC_INT_ASSERT		0x04000
3463d54a67SBin Meng #define LAPIC_ICR_BUSY			0x01000
3563d54a67SBin Meng #define LAPIC_DEST_LOGICAL		0x00800
3663d54a67SBin Meng #define LAPIC_DM_FIXED			0x00000
3763d54a67SBin Meng #define LAPIC_DM_LOWEST			0x00100
3863d54a67SBin Meng #define LAPIC_DM_SMI			0x00200
3963d54a67SBin Meng #define LAPIC_DM_REMRD			0x00300
4063d54a67SBin Meng #define LAPIC_DM_NMI			0x00400
4163d54a67SBin Meng #define LAPIC_DM_INIT			0x00500
4263d54a67SBin Meng #define LAPIC_DM_STARTUP		0x00600
4363d54a67SBin Meng #define LAPIC_DM_EXTINT			0x00700
4463d54a67SBin Meng #define LAPIC_VECTOR_MASK		0x000ff
4563d54a67SBin Meng 
4663d54a67SBin Meng #define LAPIC_ICR2			0x310
4763d54a67SBin Meng #define GET_LAPIC_DEST_FIELD(x)		(((x) >> 24) & 0xff)
4863d54a67SBin Meng #define SET_LAPIC_DEST_FIELD(x)		((x) << 24)
4963d54a67SBin Meng 
5063d54a67SBin Meng #define LAPIC_LVT0			0x350
5163d54a67SBin Meng #define LAPIC_LVT1			0x360
5263d54a67SBin Meng #define LAPIC_LVT_MASKED		(1 << 16)
5363d54a67SBin Meng #define LAPIC_LVT_LEVEL_TRIGGER		(1 << 15)
5463d54a67SBin Meng #define LAPIC_LVT_REMOTE_IRR		(1 << 14)
5563d54a67SBin Meng #define LAPIC_INPUT_POLARITY		(1 << 13)
5663d54a67SBin Meng #define LAPIC_SEND_PENDING		(1 << 12)
5763d54a67SBin Meng #define LAPIC_LVT_RESERVED_1		(1 << 11)
5863d54a67SBin Meng #define LAPIC_DELIVERY_MODE_MASK	(7 << 8)
5963d54a67SBin Meng #define LAPIC_DELIVERY_MODE_FIXED	(0 << 8)
6063d54a67SBin Meng #define LAPIC_DELIVERY_MODE_NMI		(4 << 8)
6163d54a67SBin Meng #define LAPIC_DELIVERY_MODE_EXTINT	(7 << 8)
620c9075e9SSimon Glass 
63a2d73fdbSBin Meng unsigned long lapic_read(unsigned long reg);
643eafce05SSimon Glass 
65a2d73fdbSBin Meng void lapic_write(unsigned long reg, unsigned long v);
663eafce05SSimon Glass 
67a2d73fdbSBin Meng void enable_lapic(void);
683eafce05SSimon Glass 
69a2d73fdbSBin Meng void disable_lapic(void);
703eafce05SSimon Glass 
71a2d73fdbSBin Meng unsigned long lapicid(void);
723eafce05SSimon Glass 
73a2d73fdbSBin Meng int lapic_remote_read(int apicid, int reg, unsigned long *pvalue);
740c9075e9SSimon Glass 
750c9075e9SSimon Glass void lapic_setup(void);
760c9075e9SSimon Glass 
773eafce05SSimon Glass #endif
78