blob: 3575d34a535d9b61b909e04b417e24b762c31447 [file] [log] [blame]
wdenkb2184c32002-11-19 23:01:07 +00001/*
2 * (C) Copyright 2002
Albert ARIBAUDfa82f872011-08-04 18:45:45 +02003 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
wdenk8bde7f72003-06-27 21:31:46 +00004 *
Wolfgang Denk1a459662013-07-08 09:37:19 +02005 * SPDX-License-Identifier: GPL-2.0+
wdenkb2184c32002-11-19 23:01:07 +00006 */
7
8#ifndef __ASM_PROCESSOR_H_
9#define __ASM_PROCESSOR_H_ 1
Graeme Russc53fd2b2011-02-12 15:11:30 +110010
Simon Glasse34aef12014-11-14 20:56:29 -070011#define X86_GDT_ENTRY_SIZE 8
Graeme Russ109ad142011-12-31 10:24:36 +110012
Simon Glasse34aef12014-11-14 20:56:29 -070013#define X86_GDT_ENTRY_NULL 0
14#define X86_GDT_ENTRY_UNUSED 1
15#define X86_GDT_ENTRY_32BIT_CS 2
16#define X86_GDT_ENTRY_32BIT_DS 3
17#define X86_GDT_ENTRY_32BIT_FS 4
18#define X86_GDT_ENTRY_16BIT_CS 5
19#define X86_GDT_ENTRY_16BIT_DS 6
20#define X86_GDT_ENTRY_16BIT_FLAT_CS 7
21#define X86_GDT_ENTRY_16BIT_FLAT_DS 8
22#define X86_GDT_NUM_ENTRIES 9
Graeme Russ109ad142011-12-31 10:24:36 +110023
24#define X86_GDT_SIZE (X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
Graeme Russc53fd2b2011-02-12 15:11:30 +110025
Simon Glass21b9b142014-11-10 18:00:24 -070026#ifndef __ASSEMBLY__
27
Simon Glassff6a8f32015-04-28 20:11:29 -060028/*
29 * This register is documented in (for example) the Intel Atom Processor E3800
30 * Product Family Datasheet in "PCU - Power Management Controller (PMC)".
31 *
32 * RST_CNT: Reset Control Register (RST_CNT) Offset cf9.
33 *
34 * The naming follows Intel's naming.
35 */
Simon Glassf5fbbe92014-11-12 22:42:19 -070036#define PORT_RESET 0xcf9
37
Simon Glassff6a8f32015-04-28 20:11:29 -060038enum {
39 SYS_RST = 1 << 1, /* 0 for soft reset, 1 for hard reset */
40 RST_CPU = 1 << 2, /* initiate reset */
41 FULL_RST = 1 << 3, /* full power cycle */
42};
43
44/**
45 * x86_full_reset() - reset everything: perform a full power cycle
46 */
47void x86_full_reset(void);
48
Simon Glass21b9b142014-11-10 18:00:24 -070049static inline __attribute__((always_inline)) void cpu_hlt(void)
50{
51 asm("hlt");
52}
53
54static inline ulong cpu_get_sp(void)
55{
56 ulong result;
57
58 asm volatile(
59 "mov %%esp, %%eax"
60 : "=a" (result));
61 return result;
62}
63
64#endif /* __ASSEMBLY__ */
65
wdenkb2184c32002-11-19 23:01:07 +000066#endif