]> git.sur5r.net Git - u-boot/blob - arch/x86/include/asm/global_data.h
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[u-boot] / arch / x86 / include / asm / global_data.h
1 /*
2  * (C) Copyright 2002-2010
3  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #ifndef __ASM_GBL_DATA_H
9 #define __ASM_GBL_DATA_H
10
11 #ifndef __ASSEMBLY__
12
13 #include <asm/processor.h>
14
15 enum pei_boot_mode_t {
16         PEI_BOOT_NONE = 0,
17         PEI_BOOT_SOFT_RESET,
18         PEI_BOOT_RESUME,
19
20 };
21
22 struct memory_area {
23         uint64_t start;
24         uint64_t size;
25 };
26
27 struct memory_info {
28         int num_areas;
29         uint64_t total_memory;
30         uint64_t total_32bit_memory;
31         struct memory_area area[CONFIG_NR_DRAM_BANKS];
32 };
33
34 #define MAX_MTRR_REQUESTS       8
35
36 /**
37  * A request for a memory region to be set up in a particular way. These
38  * requests are processed before board_init_r() is called. They are generally
39  * optional and can be ignored with some performance impact.
40  */
41 struct mtrr_request {
42         int type;               /* MTRR_TYPE_... */
43         uint64_t start;
44         uint64_t size;
45 };
46
47 /* Architecture-specific global data */
48 struct arch_global_data {
49         u64 gdt[X86_GDT_NUM_ENTRIES] __aligned(16);
50         struct global_data *gd_addr;    /* Location of Global Data */
51         uint8_t x86;                    /* CPU family */
52         uint8_t x86_vendor;             /* CPU vendor */
53         uint8_t x86_model;
54         uint8_t x86_mask;
55         uint32_t x86_device;
56         uint64_t tsc_base;              /* Initial value returned by rdtsc() */
57         void *new_fdt;                  /* Relocated FDT */
58         uint32_t bist;                  /* Built-in self test value */
59         enum pei_boot_mode_t pei_boot_mode;
60         const struct pch_gpio_map *gpio_map;    /* board GPIO map */
61         struct memory_info meminfo;     /* Memory information */
62 #ifdef CONFIG_HAVE_FSP
63         void *hob_list;                 /* FSP HOB list */
64 #endif
65         struct mtrr_request mtrr_req[MAX_MTRR_REQUESTS];
66         int mtrr_req_count;
67         int has_mtrr;
68         /* MRC training data to save for the next boot */
69         char *mrc_output;
70         unsigned int mrc_output_len;
71         ulong table;                    /* Table pointer from previous loader */
72 };
73
74 #endif
75
76 #include <asm-generic/global_data.h>
77
78 #ifndef __ASSEMBLY__
79 # ifdef CONFIG_EFI_APP
80
81 #define gd global_data_ptr
82
83 #define DECLARE_GLOBAL_DATA_PTR   extern struct global_data *global_data_ptr
84 # else
85 static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
86 {
87         gd_t *gd_ptr;
88
89         asm volatile("fs movl 0, %0\n" : "=r" (gd_ptr));
90
91         return gd_ptr;
92 }
93
94 #define gd      get_fs_gd_ptr()
95
96 #define DECLARE_GLOBAL_DATA_PTR
97 # endif
98
99 #endif
100
101 /*
102  * Our private Global Data Flags
103  */
104 #define GD_FLG_COLD_BOOT        0x10000 /* Cold Boot */
105 #define GD_FLG_WARM_BOOT        0x20000 /* Warm Boot */
106
107 #endif /* __ASM_GBL_DATA_H */