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