blob: 7c77b90485842744ebe6359337527891827df0b4 [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 Glass45b5a372015-04-29 22:25:59 -060026/* Length of the public header on Intel microcode blobs */
27#define UCODE_HEADER_LEN 0x30
28
Simon Glass21b9b142014-11-10 18:00:24 -070029#ifndef __ASSEMBLY__
30
Simon Glassff6a8f32015-04-28 20:11:29 -060031/*
32 * This register is documented in (for example) the Intel Atom Processor E3800
33 * Product Family Datasheet in "PCU - Power Management Controller (PMC)".
34 *
35 * RST_CNT: Reset Control Register (RST_CNT) Offset cf9.
36 *
37 * The naming follows Intel's naming.
38 */
Simon Glassf5fbbe92014-11-12 22:42:19 -070039#define PORT_RESET 0xcf9
40
Simon Glassff6a8f32015-04-28 20:11:29 -060041enum {
42 SYS_RST = 1 << 1, /* 0 for soft reset, 1 for hard reset */
43 RST_CPU = 1 << 2, /* initiate reset */
44 FULL_RST = 1 << 3, /* full power cycle */
45};
46
47/**
48 * x86_full_reset() - reset everything: perform a full power cycle
49 */
50void x86_full_reset(void);
51
Simon Glass21b9b142014-11-10 18:00:24 -070052static inline __attribute__((always_inline)) void cpu_hlt(void)
53{
54 asm("hlt");
55}
56
57static inline ulong cpu_get_sp(void)
58{
59 ulong result;
60
61 asm volatile(
62 "mov %%esp, %%eax"
63 : "=a" (result));
64 return result;
65}
66
67#endif /* __ASSEMBLY__ */
68
wdenkb2184c32002-11-19 23:01:07 +000069#endif