1*a47a12beSStefan Roese /* 2*a47a12beSStefan Roese * (C) Copyright 2002 3*a47a12beSStefan Roese * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*a47a12beSStefan Roese * 5*a47a12beSStefan Roese * See file CREDITS for list of people who contributed to this 6*a47a12beSStefan Roese * project. 7*a47a12beSStefan Roese * 8*a47a12beSStefan Roese * This program is free software; you can redistribute it and/or 9*a47a12beSStefan Roese * modify it under the terms of the GNU General Public License as 10*a47a12beSStefan Roese * published by the Free Software Foundation; either version 2 of 11*a47a12beSStefan Roese * the License, or (at your option) any later version. 12*a47a12beSStefan Roese * 13*a47a12beSStefan Roese * This program is distributed in the hope that it will be useful, 14*a47a12beSStefan Roese * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*a47a12beSStefan Roese * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*a47a12beSStefan Roese * GNU General Public License for more details. 17*a47a12beSStefan Roese * 18*a47a12beSStefan Roese * You should have received a copy of the GNU General Public License 19*a47a12beSStefan Roese * along with this program; if not, write to the Free Software 20*a47a12beSStefan Roese * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*a47a12beSStefan Roese * MA 02111-1307 USA 22*a47a12beSStefan Roese */ 23*a47a12beSStefan Roese 24*a47a12beSStefan Roese #ifndef __ASM_GBL_DATA_H 25*a47a12beSStefan Roese #define __ASM_GBL_DATA_H 26*a47a12beSStefan Roese 27*a47a12beSStefan Roese #include "config.h" 28*a47a12beSStefan Roese #include "asm/types.h" 29*a47a12beSStefan Roese 30*a47a12beSStefan Roese /* 31*a47a12beSStefan Roese * The following data structure is placed in some memory wich is 32*a47a12beSStefan Roese * available very early after boot (like DPRAM on MPC8xx/MPC82xx, or 33*a47a12beSStefan Roese * some locked parts of the data cache) to allow for a minimum set of 34*a47a12beSStefan Roese * global variables during system initialization (until we have set 35*a47a12beSStefan Roese * up the memory controller so that we can use RAM). 36*a47a12beSStefan Roese * 37*a47a12beSStefan Roese * Keep it *SMALL* and remember to set CONFIG_SYS_GBL_DATA_SIZE > sizeof(gd_t) 38*a47a12beSStefan Roese */ 39*a47a12beSStefan Roese 40*a47a12beSStefan Roese typedef struct global_data { 41*a47a12beSStefan Roese bd_t *bd; 42*a47a12beSStefan Roese unsigned long flags; 43*a47a12beSStefan Roese unsigned long baudrate; 44*a47a12beSStefan Roese unsigned long cpu_clk; /* CPU clock in Hz! */ 45*a47a12beSStefan Roese unsigned long bus_clk; 46*a47a12beSStefan Roese #if defined(CONFIG_8xx) 47*a47a12beSStefan Roese unsigned long brg_clk; 48*a47a12beSStefan Roese #endif 49*a47a12beSStefan Roese #if defined(CONFIG_CPM2) 50*a47a12beSStefan Roese /* There are many clocks on the MPC8260 - see page 9-5 */ 51*a47a12beSStefan Roese unsigned long vco_out; 52*a47a12beSStefan Roese unsigned long cpm_clk; 53*a47a12beSStefan Roese unsigned long scc_clk; 54*a47a12beSStefan Roese unsigned long brg_clk; 55*a47a12beSStefan Roese #ifdef CONFIG_PCI 56*a47a12beSStefan Roese unsigned long pci_clk; 57*a47a12beSStefan Roese #endif 58*a47a12beSStefan Roese #endif 59*a47a12beSStefan Roese unsigned long mem_clk; 60*a47a12beSStefan Roese #if defined(CONFIG_MPC83xx) 61*a47a12beSStefan Roese /* There are other clocks in the MPC83XX */ 62*a47a12beSStefan Roese u32 csb_clk; 63*a47a12beSStefan Roese #if defined(CONFIG_MPC834x) || defined(CONFIG_MPC831x) || defined(CONFIG_MPC837x) 64*a47a12beSStefan Roese u32 tsec1_clk; 65*a47a12beSStefan Roese u32 tsec2_clk; 66*a47a12beSStefan Roese u32 usbdr_clk; 67*a47a12beSStefan Roese #endif 68*a47a12beSStefan Roese #if defined (CONFIG_MPC834x) 69*a47a12beSStefan Roese u32 usbmph_clk; 70*a47a12beSStefan Roese #endif /* CONFIG_MPC834x */ 71*a47a12beSStefan Roese #if defined(CONFIG_MPC8315) 72*a47a12beSStefan Roese u32 tdm_clk; 73*a47a12beSStefan Roese #endif 74*a47a12beSStefan Roese u32 core_clk; 75*a47a12beSStefan Roese u32 enc_clk; 76*a47a12beSStefan Roese u32 lbiu_clk; 77*a47a12beSStefan Roese u32 lclk_clk; 78*a47a12beSStefan Roese u32 pci_clk; 79*a47a12beSStefan Roese #if defined(CONFIG_MPC837x) || defined(CONFIG_MPC831x) 80*a47a12beSStefan Roese u32 pciexp1_clk; 81*a47a12beSStefan Roese u32 pciexp2_clk; 82*a47a12beSStefan Roese #endif 83*a47a12beSStefan Roese #if defined(CONFIG_MPC837x) || defined(CONFIG_MPC8315) 84*a47a12beSStefan Roese u32 sata_clk; 85*a47a12beSStefan Roese #endif 86*a47a12beSStefan Roese #if defined(CONFIG_MPC8360) 87*a47a12beSStefan Roese u32 mem_sec_clk; 88*a47a12beSStefan Roese #endif /* CONFIG_MPC8360 */ 89*a47a12beSStefan Roese #endif 90*a47a12beSStefan Roese #if defined(CONFIG_FSL_ESDHC) 91*a47a12beSStefan Roese u32 sdhc_clk; 92*a47a12beSStefan Roese #endif 93*a47a12beSStefan Roese #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) 94*a47a12beSStefan Roese u32 lbc_clk; 95*a47a12beSStefan Roese void *cpu; 96*a47a12beSStefan Roese #endif /* CONFIG_MPC85xx || CONFIG_MPC86xx */ 97*a47a12beSStefan Roese #if defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) 98*a47a12beSStefan Roese u32 i2c1_clk; 99*a47a12beSStefan Roese u32 i2c2_clk; 100*a47a12beSStefan Roese #endif 101*a47a12beSStefan Roese #if defined(CONFIG_QE) 102*a47a12beSStefan Roese u32 qe_clk; 103*a47a12beSStefan Roese u32 brg_clk; 104*a47a12beSStefan Roese uint mp_alloc_base; 105*a47a12beSStefan Roese uint mp_alloc_top; 106*a47a12beSStefan Roese #endif /* CONFIG_QE */ 107*a47a12beSStefan Roese #if defined(CONFIG_FSL_LAW) 108*a47a12beSStefan Roese u32 used_laws; 109*a47a12beSStefan Roese #endif 110*a47a12beSStefan Roese #if defined(CONFIG_E500) 111*a47a12beSStefan Roese u32 used_tlb_cams[(CONFIG_SYS_NUM_TLBCAMS+31)/32]; 112*a47a12beSStefan Roese #endif 113*a47a12beSStefan Roese #if defined(CONFIG_MPC5xxx) 114*a47a12beSStefan Roese unsigned long ipb_clk; 115*a47a12beSStefan Roese unsigned long pci_clk; 116*a47a12beSStefan Roese #endif 117*a47a12beSStefan Roese #if defined(CONFIG_MPC512X) 118*a47a12beSStefan Roese u32 ips_clk; 119*a47a12beSStefan Roese u32 csb_clk; 120*a47a12beSStefan Roese u32 pci_clk; 121*a47a12beSStefan Roese #endif /* CONFIG_MPC512X */ 122*a47a12beSStefan Roese #if defined(CONFIG_MPC8220) 123*a47a12beSStefan Roese unsigned long bExtUart; 124*a47a12beSStefan Roese unsigned long inp_clk; 125*a47a12beSStefan Roese unsigned long pci_clk; 126*a47a12beSStefan Roese unsigned long vco_clk; 127*a47a12beSStefan Roese unsigned long pev_clk; 128*a47a12beSStefan Roese unsigned long flb_clk; 129*a47a12beSStefan Roese #endif 130*a47a12beSStefan Roese phys_size_t ram_size; /* RAM size */ 131*a47a12beSStefan Roese unsigned long reset_status; /* reset status register at boot */ 132*a47a12beSStefan Roese #if defined(CONFIG_MPC83xx) 133*a47a12beSStefan Roese unsigned long arbiter_event_attributes; 134*a47a12beSStefan Roese unsigned long arbiter_event_address; 135*a47a12beSStefan Roese #endif 136*a47a12beSStefan Roese unsigned long env_addr; /* Address of Environment struct */ 137*a47a12beSStefan Roese unsigned long env_valid; /* Checksum of Environment valid? */ 138*a47a12beSStefan Roese unsigned long have_console; /* serial_init() was called */ 139*a47a12beSStefan Roese #if defined(CONFIG_SYS_ALLOC_DPRAM) || defined(CONFIG_CPM2) 140*a47a12beSStefan Roese unsigned int dp_alloc_base; 141*a47a12beSStefan Roese unsigned int dp_alloc_top; 142*a47a12beSStefan Roese #endif 143*a47a12beSStefan Roese #if defined(CONFIG_4xx) 144*a47a12beSStefan Roese u32 uart_clk; 145*a47a12beSStefan Roese #endif /* CONFIG_4xx */ 146*a47a12beSStefan Roese #if defined(CONFIG_SYS_GT_6426x) 147*a47a12beSStefan Roese unsigned int mirror_hack[16]; 148*a47a12beSStefan Roese #endif 149*a47a12beSStefan Roese #if defined(CONFIG_A3000) || \ 150*a47a12beSStefan Roese defined(CONFIG_HIDDEN_DRAGON) || \ 151*a47a12beSStefan Roese defined(CONFIG_MUSENKI) || \ 152*a47a12beSStefan Roese defined(CONFIG_SANDPOINT) 153*a47a12beSStefan Roese void * console_addr; 154*a47a12beSStefan Roese #endif 155*a47a12beSStefan Roese unsigned long relocaddr; /* Start address of U-Boot in RAM */ 156*a47a12beSStefan Roese #if defined(CONFIG_LCD) || defined(CONFIG_VIDEO) 157*a47a12beSStefan Roese unsigned long fb_base; /* Base address of framebuffer memory */ 158*a47a12beSStefan Roese #endif 159*a47a12beSStefan Roese #if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER) 160*a47a12beSStefan Roese unsigned long post_log_word; /* Record POST activities */ 161*a47a12beSStefan Roese unsigned long post_init_f_time; /* When post_init_f started */ 162*a47a12beSStefan Roese #endif 163*a47a12beSStefan Roese #ifdef CONFIG_BOARD_TYPES 164*a47a12beSStefan Roese unsigned long board_type; 165*a47a12beSStefan Roese #endif 166*a47a12beSStefan Roese #ifdef CONFIG_MODEM_SUPPORT 167*a47a12beSStefan Roese unsigned long do_mdm_init; 168*a47a12beSStefan Roese unsigned long be_quiet; 169*a47a12beSStefan Roese #endif 170*a47a12beSStefan Roese #if defined(CONFIG_LWMON) || defined(CONFIG_LWMON5) 171*a47a12beSStefan Roese unsigned long kbd_status; 172*a47a12beSStefan Roese #endif 173*a47a12beSStefan Roese #if defined(CONFIG_WD_MAX_RATE) 174*a47a12beSStefan Roese unsigned long long wdt_last; /* trace watch-dog triggering rate */ 175*a47a12beSStefan Roese #endif 176*a47a12beSStefan Roese void **jt; /* jump table */ 177*a47a12beSStefan Roese } gd_t; 178*a47a12beSStefan Roese 179*a47a12beSStefan Roese /* 180*a47a12beSStefan Roese * Global Data Flags 181*a47a12beSStefan Roese */ 182*a47a12beSStefan Roese #define GD_FLG_RELOC 0x00001 /* Code was relocated to RAM */ 183*a47a12beSStefan Roese #define GD_FLG_DEVINIT 0x00002 /* Devices have been initialized */ 184*a47a12beSStefan Roese #define GD_FLG_SILENT 0x00004 /* Silent mode */ 185*a47a12beSStefan Roese #define GD_FLG_POSTFAIL 0x00008 /* Critical POST test failed */ 186*a47a12beSStefan Roese #define GD_FLG_POSTSTOP 0x00010 /* POST seqeunce aborted */ 187*a47a12beSStefan Roese #define GD_FLG_LOGINIT 0x00020 /* Log Buffer has been initialized */ 188*a47a12beSStefan Roese #define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */ 189*a47a12beSStefan Roese 190*a47a12beSStefan Roese #if 1 191*a47a12beSStefan Roese #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r2") 192*a47a12beSStefan Roese #else /* We could use plain global data, but the resulting code is bigger */ 193*a47a12beSStefan Roese #define XTRN_DECLARE_GLOBAL_DATA_PTR extern 194*a47a12beSStefan Roese #define DECLARE_GLOBAL_DATA_PTR XTRN_DECLARE_GLOBAL_DATA_PTR \ 195*a47a12beSStefan Roese gd_t *gd 196*a47a12beSStefan Roese #endif 197*a47a12beSStefan Roese 198*a47a12beSStefan Roese #endif /* __ASM_GBL_DATA_H */ 199