uboot/arch/x86/include/asm/global_data.h
<<
>>
Prefs
   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
  15enum pei_boot_mode_t {
  16        PEI_BOOT_NONE = 0,
  17        PEI_BOOT_SOFT_RESET,
  18        PEI_BOOT_RESUME,
  19
  20};
  21
  22struct dimm_info {
  23        uint32_t dimm_size;
  24        uint16_t ddr_type;
  25        uint16_t ddr_frequency;
  26        uint8_t rank_per_dimm;
  27        uint8_t channel_num;
  28        uint8_t dimm_num;
  29        uint8_t bank_locator;
  30        /* The 5th byte is '\0' for the end of string */
  31        uint8_t serial[5];
  32        /* The 19th byte is '\0' for the end of string */
  33        uint8_t module_part_number[19];
  34        uint16_t mod_id;
  35        uint8_t mod_type;
  36        uint8_t bus_width;
  37} __packed;
  38
  39struct pei_memory_info {
  40        uint8_t dimm_cnt;
  41        /* Maximum num of dimm is 8 */
  42        struct dimm_info dimm[8];
  43} __packed;
  44
  45struct memory_area {
  46        uint64_t start;
  47        uint64_t size;
  48};
  49
  50struct memory_info {
  51        int num_areas;
  52        uint64_t total_memory;
  53        uint64_t total_32bit_memory;
  54        struct memory_area area[CONFIG_NR_DRAM_BANKS];
  55};
  56
  57#define MAX_MTRR_REQUESTS       8
  58
  59/**
  60 * A request for a memory region to be set up in a particular way. These
  61 * requests are processed before board_init_r() is called. They are generally
  62 * optional and can be ignored with some performance impact.
  63 */
  64struct mtrr_request {
  65        int type;               /* MTRR_TYPE_... */
  66        uint64_t start;
  67        uint64_t size;
  68};
  69
  70/* Architecture-specific global data */
  71struct arch_global_data {
  72        u64 gdt[X86_GDT_NUM_ENTRIES] __aligned(16);
  73        struct global_data *gd_addr;    /* Location of Global Data */
  74        uint8_t x86;                    /* CPU family */
  75        uint8_t x86_vendor;             /* CPU vendor */
  76        uint8_t x86_model;
  77        uint8_t x86_mask;
  78        uint32_t x86_device;
  79        uint64_t tsc_base;              /* Initial value returned by rdtsc() */
  80        unsigned long clock_rate;       /* Clock rate of timer in Hz */
  81        void *new_fdt;                  /* Relocated FDT */
  82        uint32_t bist;                  /* Built-in self test value */
  83        enum pei_boot_mode_t pei_boot_mode;
  84        const struct pch_gpio_map *gpio_map;    /* board GPIO map */
  85        struct memory_info meminfo;     /* Memory information */
  86        struct pei_memory_info pei_meminfo;     /* PEI memory information */
  87#ifdef CONFIG_HAVE_FSP
  88        void *hob_list;                 /* FSP HOB list */
  89#endif
  90        struct mtrr_request mtrr_req[MAX_MTRR_REQUESTS];
  91        int mtrr_req_count;
  92        int has_mtrr;
  93        /* MRC training data to save for the next boot */
  94        char *mrc_output;
  95        unsigned int mrc_output_len;
  96        ulong table;                    /* Table pointer from previous loader */
  97        int turbo_state;                /* Current turbo state */
  98        struct irq_routing_table *pirq_routing_table;
  99#ifdef CONFIG_SEABIOS
 100        u32 high_table_ptr;
 101        u32 high_table_limit;
 102#endif
 103#ifdef CONFIG_HAVE_ACPI_RESUME
 104        int prev_sleep_state;           /* Previous sleep state ACPI_S0/1../5 */
 105        ulong backup_mem;               /* Backup memory address for S3 */
 106#endif
 107};
 108
 109#endif
 110
 111#include <asm-generic/global_data.h>
 112
 113#ifndef __ASSEMBLY__
 114# if defined(CONFIG_EFI_APP) || CONFIG_IS_ENABLED(X86_64)
 115
 116/* TODO(sjg@chromium.org): Consider using a fixed register for gd on x86_64 */
 117#define gd global_data_ptr
 118
 119#define DECLARE_GLOBAL_DATA_PTR   extern struct global_data *global_data_ptr
 120# else
 121static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
 122{
 123        gd_t *gd_ptr;
 124
 125#if CONFIG_IS_ENABLED(X86_64)
 126        asm volatile("fs mov 0, %0\n" : "=r" (gd_ptr));
 127#else
 128        asm volatile("fs movl 0, %0\n" : "=r" (gd_ptr));
 129#endif
 130
 131        return gd_ptr;
 132}
 133
 134#define gd      get_fs_gd_ptr()
 135
 136#define DECLARE_GLOBAL_DATA_PTR
 137# endif
 138
 139#endif
 140
 141/*
 142 * Our private Global Data Flags
 143 */
 144#define GD_FLG_COLD_BOOT        0x10000 /* Cold Boot */
 145#define GD_FLG_WARM_BOOT        0x20000 /* Warm Boot */
 146
 147#endif /* __ASM_GBL_DATA_H */
 148