global_data.h 4.28 KB
Newer Older
Simon Glass's avatar
Simon Glass committed
1 2 3 4 5
/*
 * Copyright (c) 2012 The Chromium OS Authors.
 * (C) Copyright 2002-2010
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
6
 * SPDX-License-Identifier:	GPL-2.0+
Simon Glass's avatar
Simon Glass committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 */

#ifndef __ASM_GENERIC_GBL_DATA_H
#define __ASM_GENERIC_GBL_DATA_H
/*
 * The following data structure is placed in some memory which is
 * available very early after boot (like DPRAM on MPC8xx/MPC82xx, or
 * some locked parts of the data cache) to allow for a minimum set of
 * global variables during system initialization (until we have set
 * up the memory controller so that we can use RAM).
 *
 * Keep it *SMALL* and remember to set GENERATED_GBL_DATA_SIZE > sizeof(gd_t)
 *
 * Each architecture has its own private fields. For now all are private
 */

#ifndef __ASSEMBLY__
24 25
#include <linux/list.h>

Simon Glass's avatar
Simon Glass committed
26 27 28
typedef struct global_data {
	bd_t *bd;
	unsigned long flags;
29
	unsigned int baudrate;
Simon Glass's avatar
Simon Glass committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
	unsigned long cpu_clk;	/* CPU clock in Hz!		*/
	unsigned long bus_clk;
	/* We cannot bracket this with CONFIG_PCI due to mpc5xxx */
	unsigned long pci_clk;
	unsigned long mem_clk;
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
	unsigned long fb_base;	/* Base address of framebuffer mem */
#endif
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
	unsigned long post_log_word;  /* Record POST activities */
	unsigned long post_log_res; /* success of POST test */
	unsigned long post_init_f_time;  /* When post_init_f started */
#endif
#ifdef CONFIG_BOARD_TYPES
	unsigned long board_type;
#endif
	unsigned long have_console;	/* serial_init() was called */
#ifdef CONFIG_PRE_CONSOLE_BUFFER
	unsigned long precon_buf_idx;	/* Pre-Console buffer index */
#endif
#ifdef CONFIG_MODEM_SUPPORT
	unsigned long do_mdm_init;
	unsigned long be_quiet;
#endif
	unsigned long env_addr;	/* Address  of Environment struct */
	unsigned long env_valid;	/* Checksum of Environment valid? */

	unsigned long ram_top;	/* Top address of RAM used by U-Boot */

	unsigned long relocaddr;	/* Start address of U-Boot in RAM */
	phys_size_t ram_size;	/* RAM size */
	unsigned long mon_len;	/* monitor len */
	unsigned long irq_sp;		/* irq stack pointer */
	unsigned long start_addr_sp;	/* start_addr_stackpointer */
	unsigned long reloc_off;
	struct global_data *new_gd;	/* relocated global data */
66 67

#ifdef CONFIG_DM
68 69
	struct udevice	*dm_root;	/* Root instance for Driver Model */
	struct udevice	*dm_root_f;	/* Pre-relocation root instance */
70 71 72
	struct list_head uclass_root;	/* Head of core tree */
#endif

Simon Glass's avatar
Simon Glass committed
73
	const void *fdt_blob;	/* Our device tree, NULL if none */
74 75
	void *new_fdt;		/* Relocated FDT */
	unsigned long fdt_size;	/* Space reserved for relocated FDT */
Martin Dorwig's avatar
Martin Dorwig committed
76
	struct jt_funcs *jt;		/* jump table */
Simon Glass's avatar
Simon Glass committed
77
	char env_buf[32];	/* buffer for getenv() before reloc. */
78 79
#ifdef CONFIG_TRACE
	void		*trace_buff;	/* The trace buffer */
80 81 82
#endif
#if defined(CONFIG_SYS_I2C)
	int		cur_i2c_bus;	/* current used i2c bus */
83 84 85
#endif
#ifdef CONFIG_SYS_I2C_MXC
	void *srdata[10];
86
#endif
Rob Herring's avatar
Rob Herring committed
87 88
	unsigned long timebase_h;
	unsigned long timebase_l;
89 90 91 92
#ifdef CONFIG_SYS_MALLOC_F_LEN
	unsigned long malloc_base;	/* base address of early malloc() */
	unsigned long malloc_limit;	/* limit address */
	unsigned long malloc_ptr;	/* current address */
93 94 95
#endif
#ifdef CONFIG_PCI
	struct pci_controller *hose;	/* PCI hose for early use */
96
	phys_addr_t pci_ram_top;	/* top of region accessible to PCI */
97 98 99
#endif
#ifdef CONFIG_PCI_BOOTDELAY
	int pcidelay_done;
100
#endif
101
	struct udevice *cur_serial_dev;	/* current serial device */
Simon Glass's avatar
Simon Glass committed
102 103 104 105 106
	struct arch_global_data arch;	/* architecture-specific data */
} gd_t;
#endif

/*
107
 * Global Data Flags - the top 16 bits are reserved for arch-specific flags
Simon Glass's avatar
Simon Glass committed
108 109 110 111 112 113 114 115 116
 */
#define GD_FLG_RELOC		0x00001	/* Code was relocated to RAM	   */
#define GD_FLG_DEVINIT		0x00002	/* Devices have been initialized   */
#define GD_FLG_SILENT		0x00004	/* Silent mode			   */
#define GD_FLG_POSTFAIL		0x00008	/* Critical POST test failed	   */
#define GD_FLG_POSTSTOP		0x00010	/* POST seqeunce aborted	   */
#define GD_FLG_LOGINIT		0x00020	/* Log Buffer has been initialized */
#define GD_FLG_DISABLE_CONSOLE	0x00040	/* Disable console (in & out)	   */
#define GD_FLG_ENV_READY	0x00080	/* Env. imported into hash table   */
117
#define GD_FLG_SERIAL_READY	0x00100	/* Pre-reloc serial console ready  */
118
#define GD_FLG_FULL_MALLOC_INIT	0x00200	/* Full malloc() is ready	   */
119
#define GD_FLG_SPL_INIT		0x00400	/* spl_init() has been called	   */
Simon Glass's avatar
Simon Glass committed
120 121

#endif /* __ASM_GENERIC_GBL_DATA_H */