xref: /openbmc/u-boot/arch/x86/include/asm/processor.h (revision ff6a8f3c)
1fea25720SGraeme Russ /*
2fea25720SGraeme Russ  * (C) Copyright 2002
3fa82f871SAlbert ARIBAUD  * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
4fea25720SGraeme Russ  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
6fea25720SGraeme Russ  */
7fea25720SGraeme Russ 
8fea25720SGraeme Russ #ifndef __ASM_PROCESSOR_H_
9fea25720SGraeme Russ #define __ASM_PROCESSOR_H_ 1
10fea25720SGraeme Russ 
11109ad143SGraeme Russ #define X86_GDT_ENTRY_SIZE		8
12109ad143SGraeme Russ 
13e34aef1dSSimon Glass #define X86_GDT_ENTRY_NULL		0
14e34aef1dSSimon Glass #define X86_GDT_ENTRY_UNUSED		1
15e34aef1dSSimon Glass #define X86_GDT_ENTRY_32BIT_CS		2
16109ad143SGraeme Russ #define X86_GDT_ENTRY_32BIT_DS		3
17e34aef1dSSimon Glass #define X86_GDT_ENTRY_32BIT_FS		4
18e34aef1dSSimon Glass #define X86_GDT_ENTRY_16BIT_CS		5
19e34aef1dSSimon Glass #define X86_GDT_ENTRY_16BIT_DS		6
20e34aef1dSSimon Glass #define X86_GDT_ENTRY_16BIT_FLAT_CS	7
21e34aef1dSSimon Glass #define X86_GDT_ENTRY_16BIT_FLAT_DS	8
22e34aef1dSSimon Glass #define X86_GDT_NUM_ENTRIES		9
23109ad143SGraeme Russ 
24109ad143SGraeme Russ #define X86_GDT_SIZE		(X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
25fea25720SGraeme Russ 
2621b9b14bSSimon Glass #ifndef __ASSEMBLY__
2721b9b14bSSimon Glass 
28*ff6a8f3cSSimon Glass /*
29*ff6a8f3cSSimon Glass  * This register is documented in (for example) the Intel Atom Processor E3800
30*ff6a8f3cSSimon Glass  * Product Family Datasheet in "PCU - Power Management Controller (PMC)".
31*ff6a8f3cSSimon Glass  *
32*ff6a8f3cSSimon Glass  * RST_CNT: Reset Control Register (RST_CNT) Offset cf9.
33*ff6a8f3cSSimon Glass  *
34*ff6a8f3cSSimon Glass  * The naming follows Intel's naming.
35*ff6a8f3cSSimon Glass  */
36f5fbbe95SSimon Glass #define PORT_RESET		0xcf9
37f5fbbe95SSimon Glass 
38*ff6a8f3cSSimon Glass enum {
39*ff6a8f3cSSimon Glass 	SYS_RST		= 1 << 1,	/* 0 for soft reset, 1 for hard reset */
40*ff6a8f3cSSimon Glass 	RST_CPU		= 1 << 2,	/* initiate reset */
41*ff6a8f3cSSimon Glass 	FULL_RST	= 1 << 3,	/* full power cycle */
42*ff6a8f3cSSimon Glass };
43*ff6a8f3cSSimon Glass 
44*ff6a8f3cSSimon Glass /**
45*ff6a8f3cSSimon Glass  * x86_full_reset() - reset everything: perform a full power cycle
46*ff6a8f3cSSimon Glass  */
47*ff6a8f3cSSimon Glass void x86_full_reset(void);
48*ff6a8f3cSSimon Glass 
4921b9b14bSSimon Glass static inline __attribute__((always_inline)) void cpu_hlt(void)
5021b9b14bSSimon Glass {
5121b9b14bSSimon Glass 	asm("hlt");
5221b9b14bSSimon Glass }
5321b9b14bSSimon Glass 
5421b9b14bSSimon Glass static inline ulong cpu_get_sp(void)
5521b9b14bSSimon Glass {
5621b9b14bSSimon Glass 	ulong result;
5721b9b14bSSimon Glass 
5821b9b14bSSimon Glass 	asm volatile(
5921b9b14bSSimon Glass 		"mov %%esp, %%eax"
6021b9b14bSSimon Glass 		: "=a" (result));
6121b9b14bSSimon Glass 	return result;
6221b9b14bSSimon Glass }
6321b9b14bSSimon Glass 
6421b9b14bSSimon Glass #endif /* __ASSEMBLY__ */
6521b9b14bSSimon Glass 
66fea25720SGraeme Russ #endif
67