global_data.h 2.42 KB
Newer Older
1
/*
2
 * (C) Copyright 2002-2010
3 4
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
5
 * SPDX-License-Identifier:	GPL-2.0+
6 7 8 9
 */

#ifndef	__ASM_GBL_DATA_H
#define __ASM_GBL_DATA_H
10 11 12

#ifndef __ASSEMBLY__

13 14 15 16 17 18 19
enum pei_boot_mode_t {
	PEI_BOOT_NONE = 0,
	PEI_BOOT_SOFT_RESET,
	PEI_BOOT_RESUME,

};

20 21 22 23 24 25 26 27 28 29 30 31
struct memory_area {
	uint64_t start;
	uint64_t size;
};

struct memory_info {
	int num_areas;
	uint64_t total_memory;
	uint64_t total_32bit_memory;
	struct memory_area area[CONFIG_NR_DRAM_BANKS];
};

Simon Glass's avatar
Simon Glass committed
32 33 34 35 36 37 38 39 40 41 42 43 44
#define MAX_MTRR_REQUESTS	8

/**
 * A request for a memory region to be set up in a particular way. These
 * requests are processed before board_init_r() is called. They are generally
 * optional and can be ignored with some performance impact.
 */
struct mtrr_request {
	int type;		/* MTRR_TYPE_... */
	uint64_t start;
	uint64_t size;
};

45 46
/* Architecture-specific global data */
struct arch_global_data {
47 48 49 50 51
	struct global_data *gd_addr;	/* Location of Global Data */
	uint8_t x86;			/* CPU family */
	uint8_t x86_vendor;		/* CPU vendor */
	uint8_t x86_model;
	uint8_t x86_mask;
52
	uint32_t x86_device;
53 54 55
	uint64_t tsc_base;		/* Initial value returned by rdtsc() */
	uint32_t tsc_base_kclocks;	/* Initial tsc as a kclocks value */
	uint32_t tsc_prev;		/* For show_boot_progress() */
56
	uint32_t tsc_mhz;		/* TSC frequency in MHz */
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
Simon Glass's avatar
Simon Glass committed
65 66
	struct mtrr_request mtrr_req[MAX_MTRR_REQUESTS];
	int mtrr_req_count;
67
	int has_mtrr;
68 69 70
	/* MRC training data to save for the next boot */
	char *mrc_output;
	unsigned int mrc_output_len;
71
	void *gdt;			/* Global descriptor table */
72 73
};

74
#endif
75

Simon Glass's avatar
Simon Glass committed
76 77 78
#include <asm-generic/global_data.h>

#ifndef __ASSEMBLY__
79 80 81 82 83 84
# ifdef CONFIG_EFI_APP

#define gd global_data_ptr

#define DECLARE_GLOBAL_DATA_PTR   extern struct global_data *global_data_ptr
# else
Simon Glass's avatar
Simon Glass committed
85
static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
Graeme Russ's avatar
Graeme Russ committed
86 87 88 89 90 91 92 93 94
{
	gd_t *gd_ptr;

	asm volatile("fs movl 0, %0\n" : "=r" (gd_ptr));

	return gd_ptr;
}

#define gd	get_fs_gd_ptr()
95

Simon Glass's avatar
Simon Glass committed
96
#define DECLARE_GLOBAL_DATA_PTR
97
# endif
Simon Glass's avatar
Simon Glass committed
98

99 100
#endif

101 102 103
/*
 * Our private Global Data Flags
 */
Simon Glass's avatar
Simon Glass committed
104 105
#define GD_FLG_COLD_BOOT	0x10000	/* Cold Boot */
#define GD_FLG_WARM_BOOT	0x20000	/* Warm Boot */
106 107

#endif /* __ASM_GBL_DATA_H */