mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 08:21:36 +01:00 
			
		
		
		
	The local advanced programmable interrupt controller is not used much in U-Boot but we do need to set it up. Add basic support for this, which will be extended as needed. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * From Coreboot file of same name
 | |
|  *
 | |
|  * Copyright (C) 2014 Google, Inc
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0
 | |
|  */
 | |
| 
 | |
| #ifndef _ARCH_ASM_LAPIC_H
 | |
| #define _ARCH_ASM_LAPIC_H
 | |
| 
 | |
| #include <asm/io.h>
 | |
| #include <asm/lapic_def.h>
 | |
| #include <asm/msr.h>
 | |
| #include <asm/processor.h>
 | |
| 
 | |
| static inline __attribute__((always_inline))
 | |
| 		unsigned long lapic_read(unsigned long reg)
 | |
| {
 | |
| 	return readl(LAPIC_DEFAULT_BASE + reg);
 | |
| }
 | |
| 
 | |
| static inline __attribute__((always_inline))
 | |
| 		void lapic_write(unsigned long reg, unsigned long val)
 | |
| {
 | |
| 	writel(val, LAPIC_DEFAULT_BASE + reg);
 | |
| }
 | |
| 
 | |
| static inline __attribute__((always_inline)) void lapic_wait_icr_idle(void)
 | |
| {
 | |
| 	do { } while (lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY);
 | |
| }
 | |
| 
 | |
| static inline void enable_lapic(void)
 | |
| {
 | |
| 	msr_t msr;
 | |
| 
 | |
| 	msr = msr_read(LAPIC_BASE_MSR);
 | |
| 	msr.hi &= 0xffffff00;
 | |
| 	msr.lo &= 0x000007ff;
 | |
| 	msr.lo |= LAPIC_DEFAULT_BASE | (1 << 11);
 | |
| 	msr_write(LAPIC_BASE_MSR, msr);
 | |
| }
 | |
| 
 | |
| static inline void disable_lapic(void)
 | |
| {
 | |
| 	msr_t msr;
 | |
| 
 | |
| 	msr = msr_read(LAPIC_BASE_MSR);
 | |
| 	msr.lo &= ~(1 << 11);
 | |
| 	msr_write(LAPIC_BASE_MSR, msr);
 | |
| }
 | |
| 
 | |
| static inline __attribute__((always_inline)) unsigned long lapicid(void)
 | |
| {
 | |
| 	return lapic_read(LAPIC_ID) >> 24;
 | |
| }
 | |
| 
 | |
| #endif
 |