blob: 3575d34a535d9b61b909e04b417e24b762c31447 [file] [log] [blame]
wdenk67ff36c2002-11-19 23:01:07 +00001/*
2 * (C) Copyright 2002
Albert ARIBAUD60fbc8d2011-08-04 18:45:45 +02003 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
wdenk57b2d802003-06-27 21:31:46 +00004 *
Wolfgang Denkd79de1d2013-07-08 09:37:19 +02005 * SPDX-License-Identifier: GPL-2.0+
wdenk67ff36c2002-11-19 23:01:07 +00006 */
7
8#ifndef __ASM_PROCESSOR_H_
9#define __ASM_PROCESSOR_H_ 1
Graeme Russ25391d12011-02-12 15:11:30 +110010
Simon Glass9fc71c12014-11-14 20:56:29 -070011#define X86_GDT_ENTRY_SIZE 8
Graeme Russ391bb952011-12-31 10:24:36 +110012
Simon Glass9fc71c12014-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 Russ391bb952011-12-31 10:24:36 +110023
24#define X86_GDT_SIZE (X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
Graeme Russ25391d12011-02-12 15:11:30 +110025
Simon Glassbe36df62014-11-10 18:00:24 -070026#ifndef __ASSEMBLY__
27
Simon Glasse0e7bd02015-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 Glassf226c412014-11-12 22:42:19 -070036#define PORT_RESET 0xcf9
37
Simon Glasse0e7bd02015-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 Glassbe36df62014-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
wdenk67ff36c2002-11-19 23:01:07 +000066#endif