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