blob: cefc6339102e64ead58196812c85e161b0facc71 [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 Glassa9a44262015-04-29 22:25:59 -060026/* Length of the public header on Intel microcode blobs */
27#define UCODE_HEADER_LEN 0x30
28
Simon Glassbe36df62014-11-10 18:00:24 -070029#ifndef __ASSEMBLY__
30
Simon Glasse0e7bd02015-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 Glass8b73e9f2016-03-11 22:06:59 -070039#define IO_PORT_RESET 0xcf9
Simon Glassf226c412014-11-12 22:42:19 -070040
Simon Glasse0e7bd02015-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 Glassbe36df62014-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
wdenk67ff36c2002-11-19 23:01:07 +000069#endif