xref: /openbmc/linux/arch/ia64/include/asm/xtp.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1*b3545192SPeter Zijlstra /* SPDX-License-Identifier: GPL-2.0 */
2*b3545192SPeter Zijlstra #ifndef _ASM_IA64_XTP_H
3*b3545192SPeter Zijlstra #define _ASM_IA64_XTP_H
4*b3545192SPeter Zijlstra 
5*b3545192SPeter Zijlstra #include <asm/io.h>
6*b3545192SPeter Zijlstra 
7*b3545192SPeter Zijlstra #ifdef CONFIG_SMP
8*b3545192SPeter Zijlstra 
9*b3545192SPeter Zijlstra #define XTP_OFFSET		0x1e0008
10*b3545192SPeter Zijlstra 
11*b3545192SPeter Zijlstra #define SMP_IRQ_REDIRECTION	(1 << 0)
12*b3545192SPeter Zijlstra #define SMP_IPI_REDIRECTION	(1 << 1)
13*b3545192SPeter Zijlstra 
14*b3545192SPeter Zijlstra extern unsigned char smp_int_redirect;
15*b3545192SPeter Zijlstra 
16*b3545192SPeter Zijlstra /*
17*b3545192SPeter Zijlstra  * XTP control functions:
18*b3545192SPeter Zijlstra  *	min_xtp   : route all interrupts to this CPU
19*b3545192SPeter Zijlstra  *	normal_xtp: nominal XTP value
20*b3545192SPeter Zijlstra  *	max_xtp   : never deliver interrupts to this CPU.
21*b3545192SPeter Zijlstra  */
22*b3545192SPeter Zijlstra 
23*b3545192SPeter Zijlstra static inline void
min_xtp(void)24*b3545192SPeter Zijlstra min_xtp (void)
25*b3545192SPeter Zijlstra {
26*b3545192SPeter Zijlstra 	if (smp_int_redirect & SMP_IRQ_REDIRECTION)
27*b3545192SPeter Zijlstra 		writeb(0x00, ipi_base_addr + XTP_OFFSET); /* XTP to min */
28*b3545192SPeter Zijlstra }
29*b3545192SPeter Zijlstra 
30*b3545192SPeter Zijlstra static inline void
normal_xtp(void)31*b3545192SPeter Zijlstra normal_xtp (void)
32*b3545192SPeter Zijlstra {
33*b3545192SPeter Zijlstra 	if (smp_int_redirect & SMP_IRQ_REDIRECTION)
34*b3545192SPeter Zijlstra 		writeb(0x08, ipi_base_addr + XTP_OFFSET); /* XTP normal */
35*b3545192SPeter Zijlstra }
36*b3545192SPeter Zijlstra 
37*b3545192SPeter Zijlstra static inline void
max_xtp(void)38*b3545192SPeter Zijlstra max_xtp (void)
39*b3545192SPeter Zijlstra {
40*b3545192SPeter Zijlstra 	if (smp_int_redirect & SMP_IRQ_REDIRECTION)
41*b3545192SPeter Zijlstra 		writeb(0x0f, ipi_base_addr + XTP_OFFSET); /* Set XTP to max */
42*b3545192SPeter Zijlstra }
43*b3545192SPeter Zijlstra 
44*b3545192SPeter Zijlstra #endif /* CONFIG_SMP */
45*b3545192SPeter Zijlstra 
46*b3545192SPeter Zijlstra #endif /* _ASM_IA64_XTP_Hy */
47