1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2001 3*4882a593Smuzhiyun * Erik Theisen, Wave 7 Optics, etheisen@mindspring.com. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <linux/kconfig.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 11*4882a593Smuzhiyun #define __ASSEMBLY__ /* Dirty trick to get only #defines */ 12*4882a593Smuzhiyun #endif 13*4882a593Smuzhiyun #define __ASM_STUB_PROCESSOR_H__ /* don't include asm/processor. */ 14*4882a593Smuzhiyun #include <config.h> 15*4882a593Smuzhiyun #undef __ASSEMBLY__ 16*4882a593Smuzhiyun #include <environment.h> 17*4882a593Smuzhiyun #include <linux/stringify.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* Handle HOSTS that have prepended crap on symbol names, not TARGETS. */ 20*4882a593Smuzhiyun #if defined(__APPLE__) 21*4882a593Smuzhiyun /* Leading underscore on symbols */ 22*4882a593Smuzhiyun # define SYM_CHAR "_" 23*4882a593Smuzhiyun #else /* No leading character on symbols */ 24*4882a593Smuzhiyun # define SYM_CHAR 25*4882a593Smuzhiyun #endif 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun * Generate embedded environment table 29*4882a593Smuzhiyun * inside U-Boot image, if needed. 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun #if defined(ENV_IS_EMBEDDED) || defined(CONFIG_BUILD_ENVCRC) 32*4882a593Smuzhiyun /* 33*4882a593Smuzhiyun * Put the environment in the .text section when we are building 34*4882a593Smuzhiyun * U-Boot proper. The host based program "tools/envcrc" does not need 35*4882a593Smuzhiyun * a seperate section. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun #if defined(USE_HOSTCC) /* Native for 'tools/envcrc' */ 38*4882a593Smuzhiyun # define __UBOOT_ENV_SECTION__ /*XXX DO_NOT_DEL_THIS_COMMENT*/ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #else /* Environment is embedded in U-Boot's .text section */ 41*4882a593Smuzhiyun /* XXX - This only works with GNU C */ 42*4882a593Smuzhiyun # define __UBOOT_ENV_SECTION__ __attribute__ ((section(".text"))) 43*4882a593Smuzhiyun #endif 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* 46*4882a593Smuzhiyun * Macros to generate global absolutes. 47*4882a593Smuzhiyun */ 48*4882a593Smuzhiyun #if defined(__bfin__) 49*4882a593Smuzhiyun # define GEN_SET_VALUE(name, value) \ 50*4882a593Smuzhiyun asm(".set " GEN_SYMNAME(name) ", " GEN_VALUE(value)) 51*4882a593Smuzhiyun #else 52*4882a593Smuzhiyun # define GEN_SET_VALUE(name, value) \ 53*4882a593Smuzhiyun asm(GEN_SYMNAME(name) " = " GEN_VALUE(value)) 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun #define GEN_SYMNAME(str) SYM_CHAR #str 56*4882a593Smuzhiyun #define GEN_VALUE(str) #str 57*4882a593Smuzhiyun #define GEN_ABS(name, value) \ 58*4882a593Smuzhiyun asm(".globl " GEN_SYMNAME(name)); \ 59*4882a593Smuzhiyun GEN_SET_VALUE(name, value) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * Check to see if we are building with a 63*4882a593Smuzhiyun * computed CRC. Otherwise define it as ~0. 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun #if !defined(ENV_CRC) 66*4882a593Smuzhiyun # define ENV_CRC (~0) 67*4882a593Smuzhiyun #endif 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #define DEFAULT_ENV_INSTANCE_EMBEDDED 70*4882a593Smuzhiyun #include <env_default.h> 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #ifdef CONFIG_ENV_ADDR_REDUND 73*4882a593Smuzhiyun env_t redundand_environment __UBOOT_ENV_SECTION__ = { 74*4882a593Smuzhiyun 0, /* CRC Sum: invalid */ 75*4882a593Smuzhiyun 0, /* Flags: invalid */ 76*4882a593Smuzhiyun { 77*4882a593Smuzhiyun "\0" 78*4882a593Smuzhiyun } 79*4882a593Smuzhiyun }; 80*4882a593Smuzhiyun #endif /* CONFIG_ENV_ADDR_REDUND */ 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* 83*4882a593Smuzhiyun * These will end up in the .text section 84*4882a593Smuzhiyun * if the environment strings are embedded 85*4882a593Smuzhiyun * in the image. When this is used for 86*4882a593Smuzhiyun * tools/envcrc, they are placed in the 87*4882a593Smuzhiyun * .data/.sdata section. 88*4882a593Smuzhiyun * 89*4882a593Smuzhiyun */ 90*4882a593Smuzhiyun unsigned long env_size __UBOOT_ENV_SECTION__ = sizeof(env_t); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* 93*4882a593Smuzhiyun * Add in absolutes. 94*4882a593Smuzhiyun */ 95*4882a593Smuzhiyun GEN_ABS(env_offset, CONFIG_ENV_OFFSET); 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #endif /* ENV_IS_EMBEDDED */ 98