Commit d22c338e07cc98276ea5cc4feaa5a370baa63243

Authored by Joe Hershberger
1 parent 228041893c

net: Add link-local addressing support

Code based on networking/zcip.c in busybox
commit 8531d76a15890c2c535908ce888b2e2aed35b172

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>

Showing 8 changed files with 490 additions and 2 deletions Inline Diff

1 # 1 #
2 # (C) Copyright 2000 - 2012 2 # (C) Copyright 2000 - 2012
3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. 3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 # 4 #
5 # See file CREDITS for list of people who contributed to this 5 # See file CREDITS for list of people who contributed to this
6 # project. 6 # project.
7 # 7 #
8 # This program is free software; you can redistribute it and/or 8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License as 9 # modify it under the terms of the GNU General Public License as
10 # published by the Free Software Foundation; either version 2 of 10 # published by the Free Software Foundation; either version 2 of
11 # the License, or (at your option) any later version. 11 # the License, or (at your option) any later version.
12 # 12 #
13 # This program is distributed in the hope that it will be useful, 13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details. 16 # GNU General Public License for more details.
17 # 17 #
18 # You should have received a copy of the GNU General Public License 18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software 19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 # MA 02111-1307 USA 21 # MA 02111-1307 USA
22 # 22 #
23 23
24 Summary: 24 Summary:
25 ======== 25 ========
26 26
27 This directory contains the source code for U-Boot, a boot loader for 27 This directory contains the source code for U-Boot, a boot loader for
28 Embedded boards based on PowerPC, ARM, MIPS and several other 28 Embedded boards based on PowerPC, ARM, MIPS and several other
29 processors, which can be installed in a boot ROM and used to 29 processors, which can be installed in a boot ROM and used to
30 initialize and test the hardware or to download and run application 30 initialize and test the hardware or to download and run application
31 code. 31 code.
32 32
33 The development of U-Boot is closely related to Linux: some parts of 33 The development of U-Boot is closely related to Linux: some parts of
34 the source code originate in the Linux source tree, we have some 34 the source code originate in the Linux source tree, we have some
35 header files in common, and special provision has been made to 35 header files in common, and special provision has been made to
36 support booting of Linux images. 36 support booting of Linux images.
37 37
38 Some attention has been paid to make this software easily 38 Some attention has been paid to make this software easily
39 configurable and extendable. For instance, all monitor commands are 39 configurable and extendable. For instance, all monitor commands are
40 implemented with the same call interface, so that it's very easy to 40 implemented with the same call interface, so that it's very easy to
41 add new commands. Also, instead of permanently adding rarely used 41 add new commands. Also, instead of permanently adding rarely used
42 code (for instance hardware test utilities) to the monitor, you can 42 code (for instance hardware test utilities) to the monitor, you can
43 load and run it dynamically. 43 load and run it dynamically.
44 44
45 45
46 Status: 46 Status:
47 ======= 47 =======
48 48
49 In general, all boards for which a configuration option exists in the 49 In general, all boards for which a configuration option exists in the
50 Makefile have been tested to some extent and can be considered 50 Makefile have been tested to some extent and can be considered
51 "working". In fact, many of them are used in production systems. 51 "working". In fact, many of them are used in production systems.
52 52
53 In case of problems see the CHANGELOG and CREDITS files to find out 53 In case of problems see the CHANGELOG and CREDITS files to find out
54 who contributed the specific port. The MAINTAINERS file lists board 54 who contributed the specific port. The MAINTAINERS file lists board
55 maintainers. 55 maintainers.
56 56
57 57
58 Where to get help: 58 Where to get help:
59 ================== 59 ==================
60 60
61 In case you have questions about, problems with or contributions for 61 In case you have questions about, problems with or contributions for
62 U-Boot you should send a message to the U-Boot mailing list at 62 U-Boot you should send a message to the U-Boot mailing list at
63 <u-boot@lists.denx.de>. There is also an archive of previous traffic 63 <u-boot@lists.denx.de>. There is also an archive of previous traffic
64 on the mailing list - please search the archive before asking FAQ's. 64 on the mailing list - please search the archive before asking FAQ's.
65 Please see http://lists.denx.de/pipermail/u-boot and 65 Please see http://lists.denx.de/pipermail/u-boot and
66 http://dir.gmane.org/gmane.comp.boot-loaders.u-boot 66 http://dir.gmane.org/gmane.comp.boot-loaders.u-boot
67 67
68 68
69 Where to get source code: 69 Where to get source code:
70 ========================= 70 =========================
71 71
72 The U-Boot source code is maintained in the git repository at 72 The U-Boot source code is maintained in the git repository at
73 git://www.denx.de/git/u-boot.git ; you can browse it online at 73 git://www.denx.de/git/u-boot.git ; you can browse it online at
74 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary 74 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary
75 75
76 The "snapshot" links on this page allow you to download tarballs of 76 The "snapshot" links on this page allow you to download tarballs of
77 any version you might be interested in. Official releases are also 77 any version you might be interested in. Official releases are also
78 available for FTP download from the ftp://ftp.denx.de/pub/u-boot/ 78 available for FTP download from the ftp://ftp.denx.de/pub/u-boot/
79 directory. 79 directory.
80 80
81 Pre-built (and tested) images are available from 81 Pre-built (and tested) images are available from
82 ftp://ftp.denx.de/pub/u-boot/images/ 82 ftp://ftp.denx.de/pub/u-boot/images/
83 83
84 84
85 Where we come from: 85 Where we come from:
86 =================== 86 ===================
87 87
88 - start from 8xxrom sources 88 - start from 8xxrom sources
89 - create PPCBoot project (http://sourceforge.net/projects/ppcboot) 89 - create PPCBoot project (http://sourceforge.net/projects/ppcboot)
90 - clean up code 90 - clean up code
91 - make it easier to add custom boards 91 - make it easier to add custom boards
92 - make it possible to add other [PowerPC] CPUs 92 - make it possible to add other [PowerPC] CPUs
93 - extend functions, especially: 93 - extend functions, especially:
94 * Provide extended interface to Linux boot loader 94 * Provide extended interface to Linux boot loader
95 * S-Record download 95 * S-Record download
96 * network boot 96 * network boot
97 * PCMCIA / CompactFlash / ATA disk / SCSI ... boot 97 * PCMCIA / CompactFlash / ATA disk / SCSI ... boot
98 - create ARMBoot project (http://sourceforge.net/projects/armboot) 98 - create ARMBoot project (http://sourceforge.net/projects/armboot)
99 - add other CPU families (starting with ARM) 99 - add other CPU families (starting with ARM)
100 - create U-Boot project (http://sourceforge.net/projects/u-boot) 100 - create U-Boot project (http://sourceforge.net/projects/u-boot)
101 - current project page: see http://www.denx.de/wiki/U-Boot 101 - current project page: see http://www.denx.de/wiki/U-Boot
102 102
103 103
104 Names and Spelling: 104 Names and Spelling:
105 =================== 105 ===================
106 106
107 The "official" name of this project is "Das U-Boot". The spelling 107 The "official" name of this project is "Das U-Boot". The spelling
108 "U-Boot" shall be used in all written text (documentation, comments 108 "U-Boot" shall be used in all written text (documentation, comments
109 in source files etc.). Example: 109 in source files etc.). Example:
110 110
111 This is the README file for the U-Boot project. 111 This is the README file for the U-Boot project.
112 112
113 File names etc. shall be based on the string "u-boot". Examples: 113 File names etc. shall be based on the string "u-boot". Examples:
114 114
115 include/asm-ppc/u-boot.h 115 include/asm-ppc/u-boot.h
116 116
117 #include <asm/u-boot.h> 117 #include <asm/u-boot.h>
118 118
119 Variable names, preprocessor constants etc. shall be either based on 119 Variable names, preprocessor constants etc. shall be either based on
120 the string "u_boot" or on "U_BOOT". Example: 120 the string "u_boot" or on "U_BOOT". Example:
121 121
122 U_BOOT_VERSION u_boot_logo 122 U_BOOT_VERSION u_boot_logo
123 IH_OS_U_BOOT u_boot_hush_start 123 IH_OS_U_BOOT u_boot_hush_start
124 124
125 125
126 Versioning: 126 Versioning:
127 =========== 127 ===========
128 128
129 Starting with the release in October 2008, the names of the releases 129 Starting with the release in October 2008, the names of the releases
130 were changed from numerical release numbers without deeper meaning 130 were changed from numerical release numbers without deeper meaning
131 into a time stamp based numbering. Regular releases are identified by 131 into a time stamp based numbering. Regular releases are identified by
132 names consisting of the calendar year and month of the release date. 132 names consisting of the calendar year and month of the release date.
133 Additional fields (if present) indicate release candidates or bug fix 133 Additional fields (if present) indicate release candidates or bug fix
134 releases in "stable" maintenance trees. 134 releases in "stable" maintenance trees.
135 135
136 Examples: 136 Examples:
137 U-Boot v2009.11 - Release November 2009 137 U-Boot v2009.11 - Release November 2009
138 U-Boot v2009.11.1 - Release 1 in version November 2009 stable tree 138 U-Boot v2009.11.1 - Release 1 in version November 2009 stable tree
139 U-Boot v2010.09-rc1 - Release candiate 1 for September 2010 release 139 U-Boot v2010.09-rc1 - Release candiate 1 for September 2010 release
140 140
141 141
142 Directory Hierarchy: 142 Directory Hierarchy:
143 ==================== 143 ====================
144 144
145 /arch Architecture specific files 145 /arch Architecture specific files
146 /arm Files generic to ARM architecture 146 /arm Files generic to ARM architecture
147 /cpu CPU specific files 147 /cpu CPU specific files
148 /arm720t Files specific to ARM 720 CPUs 148 /arm720t Files specific to ARM 720 CPUs
149 /arm920t Files specific to ARM 920 CPUs 149 /arm920t Files specific to ARM 920 CPUs
150 /at91 Files specific to Atmel AT91RM9200 CPU 150 /at91 Files specific to Atmel AT91RM9200 CPU
151 /imx Files specific to Freescale MC9328 i.MX CPUs 151 /imx Files specific to Freescale MC9328 i.MX CPUs
152 /s3c24x0 Files specific to Samsung S3C24X0 CPUs 152 /s3c24x0 Files specific to Samsung S3C24X0 CPUs
153 /arm925t Files specific to ARM 925 CPUs 153 /arm925t Files specific to ARM 925 CPUs
154 /arm926ejs Files specific to ARM 926 CPUs 154 /arm926ejs Files specific to ARM 926 CPUs
155 /arm1136 Files specific to ARM 1136 CPUs 155 /arm1136 Files specific to ARM 1136 CPUs
156 /ixp Files specific to Intel XScale IXP CPUs 156 /ixp Files specific to Intel XScale IXP CPUs
157 /pxa Files specific to Intel XScale PXA CPUs 157 /pxa Files specific to Intel XScale PXA CPUs
158 /s3c44b0 Files specific to Samsung S3C44B0 CPUs 158 /s3c44b0 Files specific to Samsung S3C44B0 CPUs
159 /sa1100 Files specific to Intel StrongARM SA1100 CPUs 159 /sa1100 Files specific to Intel StrongARM SA1100 CPUs
160 /lib Architecture specific library files 160 /lib Architecture specific library files
161 /avr32 Files generic to AVR32 architecture 161 /avr32 Files generic to AVR32 architecture
162 /cpu CPU specific files 162 /cpu CPU specific files
163 /lib Architecture specific library files 163 /lib Architecture specific library files
164 /blackfin Files generic to Analog Devices Blackfin architecture 164 /blackfin Files generic to Analog Devices Blackfin architecture
165 /cpu CPU specific files 165 /cpu CPU specific files
166 /lib Architecture specific library files 166 /lib Architecture specific library files
167 /x86 Files generic to x86 architecture 167 /x86 Files generic to x86 architecture
168 /cpu CPU specific files 168 /cpu CPU specific files
169 /lib Architecture specific library files 169 /lib Architecture specific library files
170 /m68k Files generic to m68k architecture 170 /m68k Files generic to m68k architecture
171 /cpu CPU specific files 171 /cpu CPU specific files
172 /mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs 172 /mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs
173 /mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs 173 /mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs
174 /mcf532x Files specific to Freescale ColdFire MCF5329 CPUs 174 /mcf532x Files specific to Freescale ColdFire MCF5329 CPUs
175 /mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs 175 /mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs
176 /mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs 176 /mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs
177 /lib Architecture specific library files 177 /lib Architecture specific library files
178 /microblaze Files generic to microblaze architecture 178 /microblaze Files generic to microblaze architecture
179 /cpu CPU specific files 179 /cpu CPU specific files
180 /lib Architecture specific library files 180 /lib Architecture specific library files
181 /mips Files generic to MIPS architecture 181 /mips Files generic to MIPS architecture
182 /cpu CPU specific files 182 /cpu CPU specific files
183 /mips32 Files specific to MIPS32 CPUs 183 /mips32 Files specific to MIPS32 CPUs
184 /xburst Files specific to Ingenic XBurst CPUs 184 /xburst Files specific to Ingenic XBurst CPUs
185 /lib Architecture specific library files 185 /lib Architecture specific library files
186 /nds32 Files generic to NDS32 architecture 186 /nds32 Files generic to NDS32 architecture
187 /cpu CPU specific files 187 /cpu CPU specific files
188 /n1213 Files specific to Andes Technology N1213 CPUs 188 /n1213 Files specific to Andes Technology N1213 CPUs
189 /lib Architecture specific library files 189 /lib Architecture specific library files
190 /nios2 Files generic to Altera NIOS2 architecture 190 /nios2 Files generic to Altera NIOS2 architecture
191 /cpu CPU specific files 191 /cpu CPU specific files
192 /lib Architecture specific library files 192 /lib Architecture specific library files
193 /powerpc Files generic to PowerPC architecture 193 /powerpc Files generic to PowerPC architecture
194 /cpu CPU specific files 194 /cpu CPU specific files
195 /74xx_7xx Files specific to Freescale MPC74xx and 7xx CPUs 195 /74xx_7xx Files specific to Freescale MPC74xx and 7xx CPUs
196 /mpc5xx Files specific to Freescale MPC5xx CPUs 196 /mpc5xx Files specific to Freescale MPC5xx CPUs
197 /mpc5xxx Files specific to Freescale MPC5xxx CPUs 197 /mpc5xxx Files specific to Freescale MPC5xxx CPUs
198 /mpc8xx Files specific to Freescale MPC8xx CPUs 198 /mpc8xx Files specific to Freescale MPC8xx CPUs
199 /mpc8220 Files specific to Freescale MPC8220 CPUs 199 /mpc8220 Files specific to Freescale MPC8220 CPUs
200 /mpc824x Files specific to Freescale MPC824x CPUs 200 /mpc824x Files specific to Freescale MPC824x CPUs
201 /mpc8260 Files specific to Freescale MPC8260 CPUs 201 /mpc8260 Files specific to Freescale MPC8260 CPUs
202 /mpc85xx Files specific to Freescale MPC85xx CPUs 202 /mpc85xx Files specific to Freescale MPC85xx CPUs
203 /ppc4xx Files specific to AMCC PowerPC 4xx CPUs 203 /ppc4xx Files specific to AMCC PowerPC 4xx CPUs
204 /lib Architecture specific library files 204 /lib Architecture specific library files
205 /sh Files generic to SH architecture 205 /sh Files generic to SH architecture
206 /cpu CPU specific files 206 /cpu CPU specific files
207 /sh2 Files specific to sh2 CPUs 207 /sh2 Files specific to sh2 CPUs
208 /sh3 Files specific to sh3 CPUs 208 /sh3 Files specific to sh3 CPUs
209 /sh4 Files specific to sh4 CPUs 209 /sh4 Files specific to sh4 CPUs
210 /lib Architecture specific library files 210 /lib Architecture specific library files
211 /sparc Files generic to SPARC architecture 211 /sparc Files generic to SPARC architecture
212 /cpu CPU specific files 212 /cpu CPU specific files
213 /leon2 Files specific to Gaisler LEON2 SPARC CPU 213 /leon2 Files specific to Gaisler LEON2 SPARC CPU
214 /leon3 Files specific to Gaisler LEON3 SPARC CPU 214 /leon3 Files specific to Gaisler LEON3 SPARC CPU
215 /lib Architecture specific library files 215 /lib Architecture specific library files
216 /api Machine/arch independent API for external apps 216 /api Machine/arch independent API for external apps
217 /board Board dependent files 217 /board Board dependent files
218 /common Misc architecture independent functions 218 /common Misc architecture independent functions
219 /disk Code for disk drive partition handling 219 /disk Code for disk drive partition handling
220 /doc Documentation (don't expect too much) 220 /doc Documentation (don't expect too much)
221 /drivers Commonly used device drivers 221 /drivers Commonly used device drivers
222 /examples Example code for standalone applications, etc. 222 /examples Example code for standalone applications, etc.
223 /fs Filesystem code (cramfs, ext2, jffs2, etc.) 223 /fs Filesystem code (cramfs, ext2, jffs2, etc.)
224 /include Header Files 224 /include Header Files
225 /lib Files generic to all architectures 225 /lib Files generic to all architectures
226 /libfdt Library files to support flattened device trees 226 /libfdt Library files to support flattened device trees
227 /lzma Library files to support LZMA decompression 227 /lzma Library files to support LZMA decompression
228 /lzo Library files to support LZO decompression 228 /lzo Library files to support LZO decompression
229 /net Networking code 229 /net Networking code
230 /post Power On Self Test 230 /post Power On Self Test
231 /rtc Real Time Clock drivers 231 /rtc Real Time Clock drivers
232 /tools Tools to build S-Record or U-Boot images, etc. 232 /tools Tools to build S-Record or U-Boot images, etc.
233 233
234 Software Configuration: 234 Software Configuration:
235 ======================= 235 =======================
236 236
237 Configuration is usually done using C preprocessor defines; the 237 Configuration is usually done using C preprocessor defines; the
238 rationale behind that is to avoid dead code whenever possible. 238 rationale behind that is to avoid dead code whenever possible.
239 239
240 There are two classes of configuration variables: 240 There are two classes of configuration variables:
241 241
242 * Configuration _OPTIONS_: 242 * Configuration _OPTIONS_:
243 These are selectable by the user and have names beginning with 243 These are selectable by the user and have names beginning with
244 "CONFIG_". 244 "CONFIG_".
245 245
246 * Configuration _SETTINGS_: 246 * Configuration _SETTINGS_:
247 These depend on the hardware etc. and should not be meddled with if 247 These depend on the hardware etc. and should not be meddled with if
248 you don't know what you're doing; they have names beginning with 248 you don't know what you're doing; they have names beginning with
249 "CONFIG_SYS_". 249 "CONFIG_SYS_".
250 250
251 Later we will add a configuration tool - probably similar to or even 251 Later we will add a configuration tool - probably similar to or even
252 identical to what's used for the Linux kernel. Right now, we have to 252 identical to what's used for the Linux kernel. Right now, we have to
253 do the configuration by hand, which means creating some symbolic 253 do the configuration by hand, which means creating some symbolic
254 links and editing some configuration files. We use the TQM8xxL boards 254 links and editing some configuration files. We use the TQM8xxL boards
255 as an example here. 255 as an example here.
256 256
257 257
258 Selection of Processor Architecture and Board Type: 258 Selection of Processor Architecture and Board Type:
259 --------------------------------------------------- 259 ---------------------------------------------------
260 260
261 For all supported boards there are ready-to-use default 261 For all supported boards there are ready-to-use default
262 configurations available; just type "make <board_name>_config". 262 configurations available; just type "make <board_name>_config".
263 263
264 Example: For a TQM823L module type: 264 Example: For a TQM823L module type:
265 265
266 cd u-boot 266 cd u-boot
267 make TQM823L_config 267 make TQM823L_config
268 268
269 For the Cogent platform, you need to specify the CPU type as well; 269 For the Cogent platform, you need to specify the CPU type as well;
270 e.g. "make cogent_mpc8xx_config". And also configure the cogent 270 e.g. "make cogent_mpc8xx_config". And also configure the cogent
271 directory according to the instructions in cogent/README. 271 directory according to the instructions in cogent/README.
272 272
273 273
274 Configuration Options: 274 Configuration Options:
275 ---------------------- 275 ----------------------
276 276
277 Configuration depends on the combination of board and CPU type; all 277 Configuration depends on the combination of board and CPU type; all
278 such information is kept in a configuration file 278 such information is kept in a configuration file
279 "include/configs/<board_name>.h". 279 "include/configs/<board_name>.h".
280 280
281 Example: For a TQM823L module, all configuration settings are in 281 Example: For a TQM823L module, all configuration settings are in
282 "include/configs/TQM823L.h". 282 "include/configs/TQM823L.h".
283 283
284 284
285 Many of the options are named exactly as the corresponding Linux 285 Many of the options are named exactly as the corresponding Linux
286 kernel configuration options. The intention is to make it easier to 286 kernel configuration options. The intention is to make it easier to
287 build a config tool - later. 287 build a config tool - later.
288 288
289 289
290 The following options need to be configured: 290 The following options need to be configured:
291 291
292 - CPU Type: Define exactly one, e.g. CONFIG_MPC85XX. 292 - CPU Type: Define exactly one, e.g. CONFIG_MPC85XX.
293 293
294 - Board Type: Define exactly one, e.g. CONFIG_MPC8540ADS. 294 - Board Type: Define exactly one, e.g. CONFIG_MPC8540ADS.
295 295
296 - CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined) 296 - CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined)
297 Define exactly one, e.g. CONFIG_ATSTK1002 297 Define exactly one, e.g. CONFIG_ATSTK1002
298 298
299 - CPU Module Type: (if CONFIG_COGENT is defined) 299 - CPU Module Type: (if CONFIG_COGENT is defined)
300 Define exactly one of 300 Define exactly one of
301 CONFIG_CMA286_60_OLD 301 CONFIG_CMA286_60_OLD
302 --- FIXME --- not tested yet: 302 --- FIXME --- not tested yet:
303 CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P, 303 CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
304 CONFIG_CMA287_23, CONFIG_CMA287_50 304 CONFIG_CMA287_23, CONFIG_CMA287_50
305 305
306 - Motherboard Type: (if CONFIG_COGENT is defined) 306 - Motherboard Type: (if CONFIG_COGENT is defined)
307 Define exactly one of 307 Define exactly one of
308 CONFIG_CMA101, CONFIG_CMA102 308 CONFIG_CMA101, CONFIG_CMA102
309 309
310 - Motherboard I/O Modules: (if CONFIG_COGENT is defined) 310 - Motherboard I/O Modules: (if CONFIG_COGENT is defined)
311 Define one or more of 311 Define one or more of
312 CONFIG_CMA302 312 CONFIG_CMA302
313 313
314 - Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined) 314 - Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined)
315 Define one or more of 315 Define one or more of
316 CONFIG_LCD_HEARTBEAT - update a character position on 316 CONFIG_LCD_HEARTBEAT - update a character position on
317 the LCD display every second with 317 the LCD display every second with
318 a "rotator" |\-/|\-/ 318 a "rotator" |\-/|\-/
319 319
320 - Board flavour: (if CONFIG_MPC8260ADS is defined) 320 - Board flavour: (if CONFIG_MPC8260ADS is defined)
321 CONFIG_ADSTYPE 321 CONFIG_ADSTYPE
322 Possible values are: 322 Possible values are:
323 CONFIG_SYS_8260ADS - original MPC8260ADS 323 CONFIG_SYS_8260ADS - original MPC8260ADS
324 CONFIG_SYS_8266ADS - MPC8266ADS 324 CONFIG_SYS_8266ADS - MPC8266ADS
325 CONFIG_SYS_PQ2FADS - PQ2FADS-ZU or PQ2FADS-VR 325 CONFIG_SYS_PQ2FADS - PQ2FADS-ZU or PQ2FADS-VR
326 CONFIG_SYS_8272ADS - MPC8272ADS 326 CONFIG_SYS_8272ADS - MPC8272ADS
327 327
328 - Marvell Family Member 328 - Marvell Family Member
329 CONFIG_SYS_MVFS - define it if you want to enable 329 CONFIG_SYS_MVFS - define it if you want to enable
330 multiple fs option at one time 330 multiple fs option at one time
331 for marvell soc family 331 for marvell soc family
332 332
333 - MPC824X Family Member (if CONFIG_MPC824X is defined) 333 - MPC824X Family Member (if CONFIG_MPC824X is defined)
334 Define exactly one of 334 Define exactly one of
335 CONFIG_MPC8240, CONFIG_MPC8245 335 CONFIG_MPC8240, CONFIG_MPC8245
336 336
337 - 8xx CPU Options: (if using an MPC8xx CPU) 337 - 8xx CPU Options: (if using an MPC8xx CPU)
338 CONFIG_8xx_GCLK_FREQ - deprecated: CPU clock if 338 CONFIG_8xx_GCLK_FREQ - deprecated: CPU clock if
339 get_gclk_freq() cannot work 339 get_gclk_freq() cannot work
340 e.g. if there is no 32KHz 340 e.g. if there is no 32KHz
341 reference PIT/RTC clock 341 reference PIT/RTC clock
342 CONFIG_8xx_OSCLK - PLL input clock (either EXTCLK 342 CONFIG_8xx_OSCLK - PLL input clock (either EXTCLK
343 or XTAL/EXTAL) 343 or XTAL/EXTAL)
344 344
345 - 859/866/885 CPU options: (if using a MPC859 or MPC866 or MPC885 CPU): 345 - 859/866/885 CPU options: (if using a MPC859 or MPC866 or MPC885 CPU):
346 CONFIG_SYS_8xx_CPUCLK_MIN 346 CONFIG_SYS_8xx_CPUCLK_MIN
347 CONFIG_SYS_8xx_CPUCLK_MAX 347 CONFIG_SYS_8xx_CPUCLK_MAX
348 CONFIG_8xx_CPUCLK_DEFAULT 348 CONFIG_8xx_CPUCLK_DEFAULT
349 See doc/README.MPC866 349 See doc/README.MPC866
350 350
351 CONFIG_SYS_MEASURE_CPUCLK 351 CONFIG_SYS_MEASURE_CPUCLK
352 352
353 Define this to measure the actual CPU clock instead 353 Define this to measure the actual CPU clock instead
354 of relying on the correctness of the configured 354 of relying on the correctness of the configured
355 values. Mostly useful for board bringup to make sure 355 values. Mostly useful for board bringup to make sure
356 the PLL is locked at the intended frequency. Note 356 the PLL is locked at the intended frequency. Note
357 that this requires a (stable) reference clock (32 kHz 357 that this requires a (stable) reference clock (32 kHz
358 RTC clock or CONFIG_SYS_8XX_XIN) 358 RTC clock or CONFIG_SYS_8XX_XIN)
359 359
360 CONFIG_SYS_DELAYED_ICACHE 360 CONFIG_SYS_DELAYED_ICACHE
361 361
362 Define this option if you want to enable the 362 Define this option if you want to enable the
363 ICache only when Code runs from RAM. 363 ICache only when Code runs from RAM.
364 364
365 - 85xx CPU Options: 365 - 85xx CPU Options:
366 CONFIG_SYS_FSL_TBCLK_DIV 366 CONFIG_SYS_FSL_TBCLK_DIV
367 367
368 Defines the core time base clock divider ratio compared to the 368 Defines the core time base clock divider ratio compared to the
369 system clock. On most PQ3 devices this is 8, on newer QorIQ 369 system clock. On most PQ3 devices this is 8, on newer QorIQ
370 devices it can be 16 or 32. The ratio varies from SoC to Soc. 370 devices it can be 16 or 32. The ratio varies from SoC to Soc.
371 371
372 CONFIG_SYS_FSL_PCIE_COMPAT 372 CONFIG_SYS_FSL_PCIE_COMPAT
373 373
374 Defines the string to utilize when trying to match PCIe device 374 Defines the string to utilize when trying to match PCIe device
375 tree nodes for the given platform. 375 tree nodes for the given platform.
376 376
377 - Generic CPU options: 377 - Generic CPU options:
378 CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN 378 CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN
379 379
380 Defines the endianess of the CPU. Implementation of those 380 Defines the endianess of the CPU. Implementation of those
381 values is arch specific. 381 values is arch specific.
382 382
383 - Intel Monahans options: 383 - Intel Monahans options:
384 CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO 384 CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO
385 385
386 Defines the Monahans run mode to oscillator 386 Defines the Monahans run mode to oscillator
387 ratio. Valid values are 8, 16, 24, 31. The core 387 ratio. Valid values are 8, 16, 24, 31. The core
388 frequency is this value multiplied by 13 MHz. 388 frequency is this value multiplied by 13 MHz.
389 389
390 CONFIG_SYS_MONAHANS_TURBO_RUN_MODE_RATIO 390 CONFIG_SYS_MONAHANS_TURBO_RUN_MODE_RATIO
391 391
392 Defines the Monahans turbo mode to oscillator 392 Defines the Monahans turbo mode to oscillator
393 ratio. Valid values are 1 (default if undefined) and 393 ratio. Valid values are 1 (default if undefined) and
394 2. The core frequency as calculated above is multiplied 394 2. The core frequency as calculated above is multiplied
395 by this value. 395 by this value.
396 396
397 - MIPS CPU options: 397 - MIPS CPU options:
398 CONFIG_SYS_INIT_SP_OFFSET 398 CONFIG_SYS_INIT_SP_OFFSET
399 399
400 Offset relative to CONFIG_SYS_SDRAM_BASE for initial stack 400 Offset relative to CONFIG_SYS_SDRAM_BASE for initial stack
401 pointer. This is needed for the temporary stack before 401 pointer. This is needed for the temporary stack before
402 relocation. 402 relocation.
403 403
404 CONFIG_SYS_MIPS_CACHE_MODE 404 CONFIG_SYS_MIPS_CACHE_MODE
405 405
406 Cache operation mode for the MIPS CPU. 406 Cache operation mode for the MIPS CPU.
407 See also arch/mips/include/asm/mipsregs.h. 407 See also arch/mips/include/asm/mipsregs.h.
408 Possible values are: 408 Possible values are:
409 CONF_CM_CACHABLE_NO_WA 409 CONF_CM_CACHABLE_NO_WA
410 CONF_CM_CACHABLE_WA 410 CONF_CM_CACHABLE_WA
411 CONF_CM_UNCACHED 411 CONF_CM_UNCACHED
412 CONF_CM_CACHABLE_NONCOHERENT 412 CONF_CM_CACHABLE_NONCOHERENT
413 CONF_CM_CACHABLE_CE 413 CONF_CM_CACHABLE_CE
414 CONF_CM_CACHABLE_COW 414 CONF_CM_CACHABLE_COW
415 CONF_CM_CACHABLE_CUW 415 CONF_CM_CACHABLE_CUW
416 CONF_CM_CACHABLE_ACCELERATED 416 CONF_CM_CACHABLE_ACCELERATED
417 417
418 CONFIG_SYS_XWAY_EBU_BOOTCFG 418 CONFIG_SYS_XWAY_EBU_BOOTCFG
419 419
420 Special option for Lantiq XWAY SoCs for booting from NOR flash. 420 Special option for Lantiq XWAY SoCs for booting from NOR flash.
421 See also arch/mips/cpu/mips32/start.S. 421 See also arch/mips/cpu/mips32/start.S.
422 422
423 CONFIG_XWAY_SWAP_BYTES 423 CONFIG_XWAY_SWAP_BYTES
424 424
425 Enable compilation of tools/xway-swap-bytes needed for Lantiq 425 Enable compilation of tools/xway-swap-bytes needed for Lantiq
426 XWAY SoCs for booting from NOR flash. The U-Boot image needs to 426 XWAY SoCs for booting from NOR flash. The U-Boot image needs to
427 be swapped if a flash programmer is used. 427 be swapped if a flash programmer is used.
428 428
429 - ARM options: 429 - ARM options:
430 CONFIG_SYS_EXCEPTION_VECTORS_HIGH 430 CONFIG_SYS_EXCEPTION_VECTORS_HIGH
431 431
432 Select high exception vectors of the ARM core, e.g., do not 432 Select high exception vectors of the ARM core, e.g., do not
433 clear the V bit of the c1 register of CP15. 433 clear the V bit of the c1 register of CP15.
434 434
435 CONFIG_SYS_THUMB_BUILD 435 CONFIG_SYS_THUMB_BUILD
436 436
437 Use this flag to build U-Boot using the Thumb instruction 437 Use this flag to build U-Boot using the Thumb instruction
438 set for ARM architectures. Thumb instruction set provides 438 set for ARM architectures. Thumb instruction set provides
439 better code density. For ARM architectures that support 439 better code density. For ARM architectures that support
440 Thumb2 this flag will result in Thumb2 code generated by 440 Thumb2 this flag will result in Thumb2 code generated by
441 GCC. 441 GCC.
442 442
443 - Linux Kernel Interface: 443 - Linux Kernel Interface:
444 CONFIG_CLOCKS_IN_MHZ 444 CONFIG_CLOCKS_IN_MHZ
445 445
446 U-Boot stores all clock information in Hz 446 U-Boot stores all clock information in Hz
447 internally. For binary compatibility with older Linux 447 internally. For binary compatibility with older Linux
448 kernels (which expect the clocks passed in the 448 kernels (which expect the clocks passed in the
449 bd_info data to be in MHz) the environment variable 449 bd_info data to be in MHz) the environment variable
450 "clocks_in_mhz" can be defined so that U-Boot 450 "clocks_in_mhz" can be defined so that U-Boot
451 converts clock data to MHZ before passing it to the 451 converts clock data to MHZ before passing it to the
452 Linux kernel. 452 Linux kernel.
453 When CONFIG_CLOCKS_IN_MHZ is defined, a definition of 453 When CONFIG_CLOCKS_IN_MHZ is defined, a definition of
454 "clocks_in_mhz=1" is automatically included in the 454 "clocks_in_mhz=1" is automatically included in the
455 default environment. 455 default environment.
456 456
457 CONFIG_MEMSIZE_IN_BYTES [relevant for MIPS only] 457 CONFIG_MEMSIZE_IN_BYTES [relevant for MIPS only]
458 458
459 When transferring memsize parameter to linux, some versions 459 When transferring memsize parameter to linux, some versions
460 expect it to be in bytes, others in MB. 460 expect it to be in bytes, others in MB.
461 Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes. 461 Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
462 462
463 CONFIG_OF_LIBFDT 463 CONFIG_OF_LIBFDT
464 464
465 New kernel versions are expecting firmware settings to be 465 New kernel versions are expecting firmware settings to be
466 passed using flattened device trees (based on open firmware 466 passed using flattened device trees (based on open firmware
467 concepts). 467 concepts).
468 468
469 CONFIG_OF_LIBFDT 469 CONFIG_OF_LIBFDT
470 * New libfdt-based support 470 * New libfdt-based support
471 * Adds the "fdt" command 471 * Adds the "fdt" command
472 * The bootm command automatically updates the fdt 472 * The bootm command automatically updates the fdt
473 473
474 OF_CPU - The proper name of the cpus node (only required for 474 OF_CPU - The proper name of the cpus node (only required for
475 MPC512X and MPC5xxx based boards). 475 MPC512X and MPC5xxx based boards).
476 OF_SOC - The proper name of the soc node (only required for 476 OF_SOC - The proper name of the soc node (only required for
477 MPC512X and MPC5xxx based boards). 477 MPC512X and MPC5xxx based boards).
478 OF_TBCLK - The timebase frequency. 478 OF_TBCLK - The timebase frequency.
479 OF_STDOUT_PATH - The path to the console device 479 OF_STDOUT_PATH - The path to the console device
480 480
481 boards with QUICC Engines require OF_QE to set UCC MAC 481 boards with QUICC Engines require OF_QE to set UCC MAC
482 addresses 482 addresses
483 483
484 CONFIG_OF_BOARD_SETUP 484 CONFIG_OF_BOARD_SETUP
485 485
486 Board code has addition modification that it wants to make 486 Board code has addition modification that it wants to make
487 to the flat device tree before handing it off to the kernel 487 to the flat device tree before handing it off to the kernel
488 488
489 CONFIG_OF_BOOT_CPU 489 CONFIG_OF_BOOT_CPU
490 490
491 This define fills in the correct boot CPU in the boot 491 This define fills in the correct boot CPU in the boot
492 param header, the default value is zero if undefined. 492 param header, the default value is zero if undefined.
493 493
494 CONFIG_OF_IDE_FIXUP 494 CONFIG_OF_IDE_FIXUP
495 495
496 U-Boot can detect if an IDE device is present or not. 496 U-Boot can detect if an IDE device is present or not.
497 If not, and this new config option is activated, U-Boot 497 If not, and this new config option is activated, U-Boot
498 removes the ATA node from the DTS before booting Linux, 498 removes the ATA node from the DTS before booting Linux,
499 so the Linux IDE driver does not probe the device and 499 so the Linux IDE driver does not probe the device and
500 crash. This is needed for buggy hardware (uc101) where 500 crash. This is needed for buggy hardware (uc101) where
501 no pull down resistor is connected to the signal IDE5V_DD7. 501 no pull down resistor is connected to the signal IDE5V_DD7.
502 502
503 CONFIG_MACH_TYPE [relevant for ARM only][mandatory] 503 CONFIG_MACH_TYPE [relevant for ARM only][mandatory]
504 504
505 This setting is mandatory for all boards that have only one 505 This setting is mandatory for all boards that have only one
506 machine type and must be used to specify the machine type 506 machine type and must be used to specify the machine type
507 number as it appears in the ARM machine registry 507 number as it appears in the ARM machine registry
508 (see http://www.arm.linux.org.uk/developer/machines/). 508 (see http://www.arm.linux.org.uk/developer/machines/).
509 Only boards that have multiple machine types supported 509 Only boards that have multiple machine types supported
510 in a single configuration file and the machine type is 510 in a single configuration file and the machine type is
511 runtime discoverable, do not have to use this setting. 511 runtime discoverable, do not have to use this setting.
512 512
513 - vxWorks boot parameters: 513 - vxWorks boot parameters:
514 514
515 bootvx constructs a valid bootline using the following 515 bootvx constructs a valid bootline using the following
516 environments variables: bootfile, ipaddr, serverip, hostname. 516 environments variables: bootfile, ipaddr, serverip, hostname.
517 It loads the vxWorks image pointed bootfile. 517 It loads the vxWorks image pointed bootfile.
518 518
519 CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name 519 CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name
520 CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address 520 CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address
521 CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server 521 CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server
522 CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters 522 CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters
523 523
524 CONFIG_SYS_VXWORKS_ADD_PARAMS 524 CONFIG_SYS_VXWORKS_ADD_PARAMS
525 525
526 Add it at the end of the bootline. E.g "u=username pw=secret" 526 Add it at the end of the bootline. E.g "u=username pw=secret"
527 527
528 Note: If a "bootargs" environment is defined, it will overwride 528 Note: If a "bootargs" environment is defined, it will overwride
529 the defaults discussed just above. 529 the defaults discussed just above.
530 530
531 - Cache Configuration: 531 - Cache Configuration:
532 CONFIG_SYS_ICACHE_OFF - Do not enable instruction cache in U-Boot 532 CONFIG_SYS_ICACHE_OFF - Do not enable instruction cache in U-Boot
533 CONFIG_SYS_DCACHE_OFF - Do not enable data cache in U-Boot 533 CONFIG_SYS_DCACHE_OFF - Do not enable data cache in U-Boot
534 CONFIG_SYS_L2CACHE_OFF- Do not enable L2 cache in U-Boot 534 CONFIG_SYS_L2CACHE_OFF- Do not enable L2 cache in U-Boot
535 535
536 - Cache Configuration for ARM: 536 - Cache Configuration for ARM:
537 CONFIG_SYS_L2_PL310 - Enable support for ARM PL310 L2 cache 537 CONFIG_SYS_L2_PL310 - Enable support for ARM PL310 L2 cache
538 controller 538 controller
539 CONFIG_SYS_PL310_BASE - Physical base address of PL310 539 CONFIG_SYS_PL310_BASE - Physical base address of PL310
540 controller register space 540 controller register space
541 541
542 - Serial Ports: 542 - Serial Ports:
543 CONFIG_PL010_SERIAL 543 CONFIG_PL010_SERIAL
544 544
545 Define this if you want support for Amba PrimeCell PL010 UARTs. 545 Define this if you want support for Amba PrimeCell PL010 UARTs.
546 546
547 CONFIG_PL011_SERIAL 547 CONFIG_PL011_SERIAL
548 548
549 Define this if you want support for Amba PrimeCell PL011 UARTs. 549 Define this if you want support for Amba PrimeCell PL011 UARTs.
550 550
551 CONFIG_PL011_CLOCK 551 CONFIG_PL011_CLOCK
552 552
553 If you have Amba PrimeCell PL011 UARTs, set this variable to 553 If you have Amba PrimeCell PL011 UARTs, set this variable to
554 the clock speed of the UARTs. 554 the clock speed of the UARTs.
555 555
556 CONFIG_PL01x_PORTS 556 CONFIG_PL01x_PORTS
557 557
558 If you have Amba PrimeCell PL010 or PL011 UARTs on your board, 558 If you have Amba PrimeCell PL010 or PL011 UARTs on your board,
559 define this to a list of base addresses for each (supported) 559 define this to a list of base addresses for each (supported)
560 port. See e.g. include/configs/versatile.h 560 port. See e.g. include/configs/versatile.h
561 561
562 CONFIG_PL011_SERIAL_RLCR 562 CONFIG_PL011_SERIAL_RLCR
563 563
564 Some vendor versions of PL011 serial ports (e.g. ST-Ericsson U8500) 564 Some vendor versions of PL011 serial ports (e.g. ST-Ericsson U8500)
565 have separate receive and transmit line control registers. Set 565 have separate receive and transmit line control registers. Set
566 this variable to initialize the extra register. 566 this variable to initialize the extra register.
567 567
568 CONFIG_PL011_SERIAL_FLUSH_ON_INIT 568 CONFIG_PL011_SERIAL_FLUSH_ON_INIT
569 569
570 On some platforms (e.g. U8500) U-Boot is loaded by a second stage 570 On some platforms (e.g. U8500) U-Boot is loaded by a second stage
571 boot loader that has already initialized the UART. Define this 571 boot loader that has already initialized the UART. Define this
572 variable to flush the UART at init time. 572 variable to flush the UART at init time.
573 573
574 574
575 - Console Interface: 575 - Console Interface:
576 Depending on board, define exactly one serial port 576 Depending on board, define exactly one serial port
577 (like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2, 577 (like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2,
578 CONFIG_8xx_CONS_SCC1, ...), or switch off the serial 578 CONFIG_8xx_CONS_SCC1, ...), or switch off the serial
579 console by defining CONFIG_8xx_CONS_NONE 579 console by defining CONFIG_8xx_CONS_NONE
580 580
581 Note: if CONFIG_8xx_CONS_NONE is defined, the serial 581 Note: if CONFIG_8xx_CONS_NONE is defined, the serial
582 port routines must be defined elsewhere 582 port routines must be defined elsewhere
583 (i.e. serial_init(), serial_getc(), ...) 583 (i.e. serial_init(), serial_getc(), ...)
584 584
585 CONFIG_CFB_CONSOLE 585 CONFIG_CFB_CONSOLE
586 Enables console device for a color framebuffer. Needs following 586 Enables console device for a color framebuffer. Needs following
587 defines (cf. smiLynxEM, i8042) 587 defines (cf. smiLynxEM, i8042)
588 VIDEO_FB_LITTLE_ENDIAN graphic memory organisation 588 VIDEO_FB_LITTLE_ENDIAN graphic memory organisation
589 (default big endian) 589 (default big endian)
590 VIDEO_HW_RECTFILL graphic chip supports 590 VIDEO_HW_RECTFILL graphic chip supports
591 rectangle fill 591 rectangle fill
592 (cf. smiLynxEM) 592 (cf. smiLynxEM)
593 VIDEO_HW_BITBLT graphic chip supports 593 VIDEO_HW_BITBLT graphic chip supports
594 bit-blit (cf. smiLynxEM) 594 bit-blit (cf. smiLynxEM)
595 VIDEO_VISIBLE_COLS visible pixel columns 595 VIDEO_VISIBLE_COLS visible pixel columns
596 (cols=pitch) 596 (cols=pitch)
597 VIDEO_VISIBLE_ROWS visible pixel rows 597 VIDEO_VISIBLE_ROWS visible pixel rows
598 VIDEO_PIXEL_SIZE bytes per pixel 598 VIDEO_PIXEL_SIZE bytes per pixel
599 VIDEO_DATA_FORMAT graphic data format 599 VIDEO_DATA_FORMAT graphic data format
600 (0-5, cf. cfb_console.c) 600 (0-5, cf. cfb_console.c)
601 VIDEO_FB_ADRS framebuffer address 601 VIDEO_FB_ADRS framebuffer address
602 VIDEO_KBD_INIT_FCT keyboard int fct 602 VIDEO_KBD_INIT_FCT keyboard int fct
603 (i.e. i8042_kbd_init()) 603 (i.e. i8042_kbd_init())
604 VIDEO_TSTC_FCT test char fct 604 VIDEO_TSTC_FCT test char fct
605 (i.e. i8042_tstc) 605 (i.e. i8042_tstc)
606 VIDEO_GETC_FCT get char fct 606 VIDEO_GETC_FCT get char fct
607 (i.e. i8042_getc) 607 (i.e. i8042_getc)
608 CONFIG_CONSOLE_CURSOR cursor drawing on/off 608 CONFIG_CONSOLE_CURSOR cursor drawing on/off
609 (requires blink timer 609 (requires blink timer
610 cf. i8042.c) 610 cf. i8042.c)
611 CONFIG_SYS_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c) 611 CONFIG_SYS_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c)
612 CONFIG_CONSOLE_TIME display time/date info in 612 CONFIG_CONSOLE_TIME display time/date info in
613 upper right corner 613 upper right corner
614 (requires CONFIG_CMD_DATE) 614 (requires CONFIG_CMD_DATE)
615 CONFIG_VIDEO_LOGO display Linux logo in 615 CONFIG_VIDEO_LOGO display Linux logo in
616 upper left corner 616 upper left corner
617 CONFIG_VIDEO_BMP_LOGO use bmp_logo.h instead of 617 CONFIG_VIDEO_BMP_LOGO use bmp_logo.h instead of
618 linux_logo.h for logo. 618 linux_logo.h for logo.
619 Requires CONFIG_VIDEO_LOGO 619 Requires CONFIG_VIDEO_LOGO
620 CONFIG_CONSOLE_EXTRA_INFO 620 CONFIG_CONSOLE_EXTRA_INFO
621 additional board info beside 621 additional board info beside
622 the logo 622 the logo
623 623
624 When CONFIG_CFB_CONSOLE is defined, video console is 624 When CONFIG_CFB_CONSOLE is defined, video console is
625 default i/o. Serial console can be forced with 625 default i/o. Serial console can be forced with
626 environment 'console=serial'. 626 environment 'console=serial'.
627 627
628 When CONFIG_SILENT_CONSOLE is defined, all console 628 When CONFIG_SILENT_CONSOLE is defined, all console
629 messages (by U-Boot and Linux!) can be silenced with 629 messages (by U-Boot and Linux!) can be silenced with
630 the "silent" environment variable. See 630 the "silent" environment variable. See
631 doc/README.silent for more information. 631 doc/README.silent for more information.
632 632
633 - Console Baudrate: 633 - Console Baudrate:
634 CONFIG_BAUDRATE - in bps 634 CONFIG_BAUDRATE - in bps
635 Select one of the baudrates listed in 635 Select one of the baudrates listed in
636 CONFIG_SYS_BAUDRATE_TABLE, see below. 636 CONFIG_SYS_BAUDRATE_TABLE, see below.
637 CONFIG_SYS_BRGCLK_PRESCALE, baudrate prescale 637 CONFIG_SYS_BRGCLK_PRESCALE, baudrate prescale
638 638
639 - Console Rx buffer length 639 - Console Rx buffer length
640 With CONFIG_SYS_SMC_RXBUFLEN it is possible to define 640 With CONFIG_SYS_SMC_RXBUFLEN it is possible to define
641 the maximum receive buffer length for the SMC. 641 the maximum receive buffer length for the SMC.
642 This option is actual only for 82xx and 8xx possible. 642 This option is actual only for 82xx and 8xx possible.
643 If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE 643 If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE
644 must be defined, to setup the maximum idle timeout for 644 must be defined, to setup the maximum idle timeout for
645 the SMC. 645 the SMC.
646 646
647 - Pre-Console Buffer: 647 - Pre-Console Buffer:
648 Prior to the console being initialised (i.e. serial UART 648 Prior to the console being initialised (i.e. serial UART
649 initialised etc) all console output is silently discarded. 649 initialised etc) all console output is silently discarded.
650 Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to 650 Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to
651 buffer any console messages prior to the console being 651 buffer any console messages prior to the console being
652 initialised to a buffer of size CONFIG_PRE_CON_BUF_SZ 652 initialised to a buffer of size CONFIG_PRE_CON_BUF_SZ
653 bytes located at CONFIG_PRE_CON_BUF_ADDR. The buffer is 653 bytes located at CONFIG_PRE_CON_BUF_ADDR. The buffer is
654 a circular buffer, so if more than CONFIG_PRE_CON_BUF_SZ 654 a circular buffer, so if more than CONFIG_PRE_CON_BUF_SZ
655 bytes are output before the console is initialised, the 655 bytes are output before the console is initialised, the
656 earlier bytes are discarded. 656 earlier bytes are discarded.
657 657
658 'Sane' compilers will generate smaller code if 658 'Sane' compilers will generate smaller code if
659 CONFIG_PRE_CON_BUF_SZ is a power of 2 659 CONFIG_PRE_CON_BUF_SZ is a power of 2
660 660
661 - Safe printf() functions 661 - Safe printf() functions
662 Define CONFIG_SYS_VSNPRINTF to compile in safe versions of 662 Define CONFIG_SYS_VSNPRINTF to compile in safe versions of
663 the printf() functions. These are defined in 663 the printf() functions. These are defined in
664 include/vsprintf.h and include snprintf(), vsnprintf() and 664 include/vsprintf.h and include snprintf(), vsnprintf() and
665 so on. Code size increase is approximately 300-500 bytes. 665 so on. Code size increase is approximately 300-500 bytes.
666 If this option is not given then these functions will 666 If this option is not given then these functions will
667 silently discard their buffer size argument - this means 667 silently discard their buffer size argument - this means
668 you are not getting any overflow checking in this case. 668 you are not getting any overflow checking in this case.
669 669
670 - Boot Delay: CONFIG_BOOTDELAY - in seconds 670 - Boot Delay: CONFIG_BOOTDELAY - in seconds
671 Delay before automatically booting the default image; 671 Delay before automatically booting the default image;
672 set to -1 to disable autoboot. 672 set to -1 to disable autoboot.
673 673
674 See doc/README.autoboot for these options that 674 See doc/README.autoboot for these options that
675 work with CONFIG_BOOTDELAY. None are required. 675 work with CONFIG_BOOTDELAY. None are required.
676 CONFIG_BOOT_RETRY_TIME 676 CONFIG_BOOT_RETRY_TIME
677 CONFIG_BOOT_RETRY_MIN 677 CONFIG_BOOT_RETRY_MIN
678 CONFIG_AUTOBOOT_KEYED 678 CONFIG_AUTOBOOT_KEYED
679 CONFIG_AUTOBOOT_PROMPT 679 CONFIG_AUTOBOOT_PROMPT
680 CONFIG_AUTOBOOT_DELAY_STR 680 CONFIG_AUTOBOOT_DELAY_STR
681 CONFIG_AUTOBOOT_STOP_STR 681 CONFIG_AUTOBOOT_STOP_STR
682 CONFIG_AUTOBOOT_DELAY_STR2 682 CONFIG_AUTOBOOT_DELAY_STR2
683 CONFIG_AUTOBOOT_STOP_STR2 683 CONFIG_AUTOBOOT_STOP_STR2
684 CONFIG_ZERO_BOOTDELAY_CHECK 684 CONFIG_ZERO_BOOTDELAY_CHECK
685 CONFIG_RESET_TO_RETRY 685 CONFIG_RESET_TO_RETRY
686 686
687 - Autoboot Command: 687 - Autoboot Command:
688 CONFIG_BOOTCOMMAND 688 CONFIG_BOOTCOMMAND
689 Only needed when CONFIG_BOOTDELAY is enabled; 689 Only needed when CONFIG_BOOTDELAY is enabled;
690 define a command string that is automatically executed 690 define a command string that is automatically executed
691 when no character is read on the console interface 691 when no character is read on the console interface
692 within "Boot Delay" after reset. 692 within "Boot Delay" after reset.
693 693
694 CONFIG_BOOTARGS 694 CONFIG_BOOTARGS
695 This can be used to pass arguments to the bootm 695 This can be used to pass arguments to the bootm
696 command. The value of CONFIG_BOOTARGS goes into the 696 command. The value of CONFIG_BOOTARGS goes into the
697 environment value "bootargs". 697 environment value "bootargs".
698 698
699 CONFIG_RAMBOOT and CONFIG_NFSBOOT 699 CONFIG_RAMBOOT and CONFIG_NFSBOOT
700 The value of these goes into the environment as 700 The value of these goes into the environment as
701 "ramboot" and "nfsboot" respectively, and can be used 701 "ramboot" and "nfsboot" respectively, and can be used
702 as a convenience, when switching between booting from 702 as a convenience, when switching between booting from
703 RAM and NFS. 703 RAM and NFS.
704 704
705 - Pre-Boot Commands: 705 - Pre-Boot Commands:
706 CONFIG_PREBOOT 706 CONFIG_PREBOOT
707 707
708 When this option is #defined, the existence of the 708 When this option is #defined, the existence of the
709 environment variable "preboot" will be checked 709 environment variable "preboot" will be checked
710 immediately before starting the CONFIG_BOOTDELAY 710 immediately before starting the CONFIG_BOOTDELAY
711 countdown and/or running the auto-boot command resp. 711 countdown and/or running the auto-boot command resp.
712 entering interactive mode. 712 entering interactive mode.
713 713
714 This feature is especially useful when "preboot" is 714 This feature is especially useful when "preboot" is
715 automatically generated or modified. For an example 715 automatically generated or modified. For an example
716 see the LWMON board specific code: here "preboot" is 716 see the LWMON board specific code: here "preboot" is
717 modified when the user holds down a certain 717 modified when the user holds down a certain
718 combination of keys on the (special) keyboard when 718 combination of keys on the (special) keyboard when
719 booting the systems 719 booting the systems
720 720
721 - Serial Download Echo Mode: 721 - Serial Download Echo Mode:
722 CONFIG_LOADS_ECHO 722 CONFIG_LOADS_ECHO
723 If defined to 1, all characters received during a 723 If defined to 1, all characters received during a
724 serial download (using the "loads" command) are 724 serial download (using the "loads" command) are
725 echoed back. This might be needed by some terminal 725 echoed back. This might be needed by some terminal
726 emulations (like "cu"), but may as well just take 726 emulations (like "cu"), but may as well just take
727 time on others. This setting #define's the initial 727 time on others. This setting #define's the initial
728 value of the "loads_echo" environment variable. 728 value of the "loads_echo" environment variable.
729 729
730 - Kgdb Serial Baudrate: (if CONFIG_CMD_KGDB is defined) 730 - Kgdb Serial Baudrate: (if CONFIG_CMD_KGDB is defined)
731 CONFIG_KGDB_BAUDRATE 731 CONFIG_KGDB_BAUDRATE
732 Select one of the baudrates listed in 732 Select one of the baudrates listed in
733 CONFIG_SYS_BAUDRATE_TABLE, see below. 733 CONFIG_SYS_BAUDRATE_TABLE, see below.
734 734
735 - Monitor Functions: 735 - Monitor Functions:
736 Monitor commands can be included or excluded 736 Monitor commands can be included or excluded
737 from the build by using the #include files 737 from the build by using the #include files
738 "config_cmd_all.h" and #undef'ing unwanted 738 "config_cmd_all.h" and #undef'ing unwanted
739 commands, or using "config_cmd_default.h" 739 commands, or using "config_cmd_default.h"
740 and augmenting with additional #define's 740 and augmenting with additional #define's
741 for wanted commands. 741 for wanted commands.
742 742
743 The default command configuration includes all commands 743 The default command configuration includes all commands
744 except those marked below with a "*". 744 except those marked below with a "*".
745 745
746 CONFIG_CMD_ASKENV * ask for env variable 746 CONFIG_CMD_ASKENV * ask for env variable
747 CONFIG_CMD_BDI bdinfo 747 CONFIG_CMD_BDI bdinfo
748 CONFIG_CMD_BEDBUG * Include BedBug Debugger 748 CONFIG_CMD_BEDBUG * Include BedBug Debugger
749 CONFIG_CMD_BMP * BMP support 749 CONFIG_CMD_BMP * BMP support
750 CONFIG_CMD_BSP * Board specific commands 750 CONFIG_CMD_BSP * Board specific commands
751 CONFIG_CMD_BOOTD bootd 751 CONFIG_CMD_BOOTD bootd
752 CONFIG_CMD_CACHE * icache, dcache 752 CONFIG_CMD_CACHE * icache, dcache
753 CONFIG_CMD_CONSOLE coninfo 753 CONFIG_CMD_CONSOLE coninfo
754 CONFIG_CMD_CRC32 * crc32 754 CONFIG_CMD_CRC32 * crc32
755 CONFIG_CMD_DATE * support for RTC, date/time... 755 CONFIG_CMD_DATE * support for RTC, date/time...
756 CONFIG_CMD_DHCP * DHCP support 756 CONFIG_CMD_DHCP * DHCP support
757 CONFIG_CMD_DIAG * Diagnostics 757 CONFIG_CMD_DIAG * Diagnostics
758 CONFIG_CMD_DS4510 * ds4510 I2C gpio commands 758 CONFIG_CMD_DS4510 * ds4510 I2C gpio commands
759 CONFIG_CMD_DS4510_INFO * ds4510 I2C info command 759 CONFIG_CMD_DS4510_INFO * ds4510 I2C info command
760 CONFIG_CMD_DS4510_MEM * ds4510 I2C eeprom/sram commansd 760 CONFIG_CMD_DS4510_MEM * ds4510 I2C eeprom/sram commansd
761 CONFIG_CMD_DS4510_RST * ds4510 I2C rst command 761 CONFIG_CMD_DS4510_RST * ds4510 I2C rst command
762 CONFIG_CMD_DTT * Digital Therm and Thermostat 762 CONFIG_CMD_DTT * Digital Therm and Thermostat
763 CONFIG_CMD_ECHO echo arguments 763 CONFIG_CMD_ECHO echo arguments
764 CONFIG_CMD_EDITENV edit env variable 764 CONFIG_CMD_EDITENV edit env variable
765 CONFIG_CMD_EEPROM * EEPROM read/write support 765 CONFIG_CMD_EEPROM * EEPROM read/write support
766 CONFIG_CMD_ELF * bootelf, bootvx 766 CONFIG_CMD_ELF * bootelf, bootvx
767 CONFIG_CMD_EXPORTENV * export the environment 767 CONFIG_CMD_EXPORTENV * export the environment
768 CONFIG_CMD_SAVEENV saveenv 768 CONFIG_CMD_SAVEENV saveenv
769 CONFIG_CMD_FDC * Floppy Disk Support 769 CONFIG_CMD_FDC * Floppy Disk Support
770 CONFIG_CMD_FAT * FAT partition support 770 CONFIG_CMD_FAT * FAT partition support
771 CONFIG_CMD_FDOS * Dos diskette Support 771 CONFIG_CMD_FDOS * Dos diskette Support
772 CONFIG_CMD_FLASH flinfo, erase, protect 772 CONFIG_CMD_FLASH flinfo, erase, protect
773 CONFIG_CMD_FPGA FPGA device initialization support 773 CONFIG_CMD_FPGA FPGA device initialization support
774 CONFIG_CMD_GO * the 'go' command (exec code) 774 CONFIG_CMD_GO * the 'go' command (exec code)
775 CONFIG_CMD_GREPENV * search environment 775 CONFIG_CMD_GREPENV * search environment
776 CONFIG_CMD_HWFLOW * RTS/CTS hw flow control 776 CONFIG_CMD_HWFLOW * RTS/CTS hw flow control
777 CONFIG_CMD_I2C * I2C serial bus support 777 CONFIG_CMD_I2C * I2C serial bus support
778 CONFIG_CMD_IDE * IDE harddisk support 778 CONFIG_CMD_IDE * IDE harddisk support
779 CONFIG_CMD_IMI iminfo 779 CONFIG_CMD_IMI iminfo
780 CONFIG_CMD_IMLS List all found images 780 CONFIG_CMD_IMLS List all found images
781 CONFIG_CMD_IMMAP * IMMR dump support 781 CONFIG_CMD_IMMAP * IMMR dump support
782 CONFIG_CMD_IMPORTENV * import an environment 782 CONFIG_CMD_IMPORTENV * import an environment
783 CONFIG_CMD_IRQ * irqinfo 783 CONFIG_CMD_IRQ * irqinfo
784 CONFIG_CMD_ITEST Integer/string test of 2 values 784 CONFIG_CMD_ITEST Integer/string test of 2 values
785 CONFIG_CMD_JFFS2 * JFFS2 Support 785 CONFIG_CMD_JFFS2 * JFFS2 Support
786 CONFIG_CMD_KGDB * kgdb 786 CONFIG_CMD_KGDB * kgdb
787 CONFIG_CMD_LDRINFO ldrinfo (display Blackfin loader) 787 CONFIG_CMD_LDRINFO ldrinfo (display Blackfin loader)
788 CONFIG_CMD_LINK_LOCAL * link-local IP address auto-configuration
789 (169.254.*.*)
788 CONFIG_CMD_LOADB loadb 790 CONFIG_CMD_LOADB loadb
789 CONFIG_CMD_LOADS loads 791 CONFIG_CMD_LOADS loads
790 CONFIG_CMD_MD5SUM print md5 message digest 792 CONFIG_CMD_MD5SUM print md5 message digest
791 (requires CONFIG_CMD_MEMORY and CONFIG_MD5) 793 (requires CONFIG_CMD_MEMORY and CONFIG_MD5)
792 CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base, 794 CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base,
793 loop, loopw, mtest 795 loop, loopw, mtest
794 CONFIG_CMD_MISC Misc functions like sleep etc 796 CONFIG_CMD_MISC Misc functions like sleep etc
795 CONFIG_CMD_MMC * MMC memory mapped support 797 CONFIG_CMD_MMC * MMC memory mapped support
796 CONFIG_CMD_MII * MII utility commands 798 CONFIG_CMD_MII * MII utility commands
797 CONFIG_CMD_MTDPARTS * MTD partition support 799 CONFIG_CMD_MTDPARTS * MTD partition support
798 CONFIG_CMD_NAND * NAND support 800 CONFIG_CMD_NAND * NAND support
799 CONFIG_CMD_NET bootp, tftpboot, rarpboot 801 CONFIG_CMD_NET bootp, tftpboot, rarpboot
800 CONFIG_CMD_PCA953X * PCA953x I2C gpio commands 802 CONFIG_CMD_PCA953X * PCA953x I2C gpio commands
801 CONFIG_CMD_PCA953X_INFO * PCA953x I2C gpio info command 803 CONFIG_CMD_PCA953X_INFO * PCA953x I2C gpio info command
802 CONFIG_CMD_PCI * pciinfo 804 CONFIG_CMD_PCI * pciinfo
803 CONFIG_CMD_PCMCIA * PCMCIA support 805 CONFIG_CMD_PCMCIA * PCMCIA support
804 CONFIG_CMD_PING * send ICMP ECHO_REQUEST to network 806 CONFIG_CMD_PING * send ICMP ECHO_REQUEST to network
805 host 807 host
806 CONFIG_CMD_PORTIO * Port I/O 808 CONFIG_CMD_PORTIO * Port I/O
807 CONFIG_CMD_REGINFO * Register dump 809 CONFIG_CMD_REGINFO * Register dump
808 CONFIG_CMD_RUN run command in env variable 810 CONFIG_CMD_RUN run command in env variable
809 CONFIG_CMD_SAVES * save S record dump 811 CONFIG_CMD_SAVES * save S record dump
810 CONFIG_CMD_SCSI * SCSI Support 812 CONFIG_CMD_SCSI * SCSI Support
811 CONFIG_CMD_SDRAM * print SDRAM configuration information 813 CONFIG_CMD_SDRAM * print SDRAM configuration information
812 (requires CONFIG_CMD_I2C) 814 (requires CONFIG_CMD_I2C)
813 CONFIG_CMD_SETGETDCR Support for DCR Register access 815 CONFIG_CMD_SETGETDCR Support for DCR Register access
814 (4xx only) 816 (4xx only)
815 CONFIG_CMD_SF * Read/write/erase SPI NOR flash 817 CONFIG_CMD_SF * Read/write/erase SPI NOR flash
816 CONFIG_CMD_SHA1SUM print sha1 memory digest 818 CONFIG_CMD_SHA1SUM print sha1 memory digest
817 (requires CONFIG_CMD_MEMORY) 819 (requires CONFIG_CMD_MEMORY)
818 CONFIG_CMD_SOURCE "source" command Support 820 CONFIG_CMD_SOURCE "source" command Support
819 CONFIG_CMD_SPI * SPI serial bus support 821 CONFIG_CMD_SPI * SPI serial bus support
820 CONFIG_CMD_TFTPSRV * TFTP transfer in server mode 822 CONFIG_CMD_TFTPSRV * TFTP transfer in server mode
821 CONFIG_CMD_TFTPPUT * TFTP put command (upload) 823 CONFIG_CMD_TFTPPUT * TFTP put command (upload)
822 CONFIG_CMD_TIME * run command and report execution time 824 CONFIG_CMD_TIME * run command and report execution time
823 CONFIG_CMD_USB * USB support 825 CONFIG_CMD_USB * USB support
824 CONFIG_CMD_CDP * Cisco Discover Protocol support 826 CONFIG_CMD_CDP * Cisco Discover Protocol support
825 CONFIG_CMD_MFSL * Microblaze FSL support 827 CONFIG_CMD_MFSL * Microblaze FSL support
826 828
827 829
828 EXAMPLE: If you want all functions except of network 830 EXAMPLE: If you want all functions except of network
829 support you can write: 831 support you can write:
830 832
831 #include "config_cmd_all.h" 833 #include "config_cmd_all.h"
832 #undef CONFIG_CMD_NET 834 #undef CONFIG_CMD_NET
833 835
834 Other Commands: 836 Other Commands:
835 fdt (flattened device tree) command: CONFIG_OF_LIBFDT 837 fdt (flattened device tree) command: CONFIG_OF_LIBFDT
836 838
837 Note: Don't enable the "icache" and "dcache" commands 839 Note: Don't enable the "icache" and "dcache" commands
838 (configuration option CONFIG_CMD_CACHE) unless you know 840 (configuration option CONFIG_CMD_CACHE) unless you know
839 what you (and your U-Boot users) are doing. Data 841 what you (and your U-Boot users) are doing. Data
840 cache cannot be enabled on systems like the 8xx or 842 cache cannot be enabled on systems like the 8xx or
841 8260 (where accesses to the IMMR region must be 843 8260 (where accesses to the IMMR region must be
842 uncached), and it cannot be disabled on all other 844 uncached), and it cannot be disabled on all other
843 systems where we (mis-) use the data cache to hold an 845 systems where we (mis-) use the data cache to hold an
844 initial stack and some data. 846 initial stack and some data.
845 847
846 848
847 XXX - this list needs to get updated! 849 XXX - this list needs to get updated!
848 850
849 - Device tree: 851 - Device tree:
850 CONFIG_OF_CONTROL 852 CONFIG_OF_CONTROL
851 If this variable is defined, U-Boot will use a device tree 853 If this variable is defined, U-Boot will use a device tree
852 to configure its devices, instead of relying on statically 854 to configure its devices, instead of relying on statically
853 compiled #defines in the board file. This option is 855 compiled #defines in the board file. This option is
854 experimental and only available on a few boards. The device 856 experimental and only available on a few boards. The device
855 tree is available in the global data as gd->fdt_blob. 857 tree is available in the global data as gd->fdt_blob.
856 858
857 U-Boot needs to get its device tree from somewhere. This can 859 U-Boot needs to get its device tree from somewhere. This can
858 be done using one of the two options below: 860 be done using one of the two options below:
859 861
860 CONFIG_OF_EMBED 862 CONFIG_OF_EMBED
861 If this variable is defined, U-Boot will embed a device tree 863 If this variable is defined, U-Boot will embed a device tree
862 binary in its image. This device tree file should be in the 864 binary in its image. This device tree file should be in the
863 board directory and called <soc>-<board>.dts. The binary file 865 board directory and called <soc>-<board>.dts. The binary file
864 is then picked up in board_init_f() and made available through 866 is then picked up in board_init_f() and made available through
865 the global data structure as gd->blob. 867 the global data structure as gd->blob.
866 868
867 CONFIG_OF_SEPARATE 869 CONFIG_OF_SEPARATE
868 If this variable is defined, U-Boot will build a device tree 870 If this variable is defined, U-Boot will build a device tree
869 binary. It will be called u-boot.dtb. Architecture-specific 871 binary. It will be called u-boot.dtb. Architecture-specific
870 code will locate it at run-time. Generally this works by: 872 code will locate it at run-time. Generally this works by:
871 873
872 cat u-boot.bin u-boot.dtb >image.bin 874 cat u-boot.bin u-boot.dtb >image.bin
873 875
874 and in fact, U-Boot does this for you, creating a file called 876 and in fact, U-Boot does this for you, creating a file called
875 u-boot-dtb.bin which is useful in the common case. You can 877 u-boot-dtb.bin which is useful in the common case. You can
876 still use the individual files if you need something more 878 still use the individual files if you need something more
877 exotic. 879 exotic.
878 880
879 - Watchdog: 881 - Watchdog:
880 CONFIG_WATCHDOG 882 CONFIG_WATCHDOG
881 If this variable is defined, it enables watchdog 883 If this variable is defined, it enables watchdog
882 support for the SoC. There must be support in the SoC 884 support for the SoC. There must be support in the SoC
883 specific code for a watchdog. For the 8xx and 8260 885 specific code for a watchdog. For the 8xx and 8260
884 CPUs, the SIU Watchdog feature is enabled in the SYPCR 886 CPUs, the SIU Watchdog feature is enabled in the SYPCR
885 register. When supported for a specific SoC is 887 register. When supported for a specific SoC is
886 available, then no further board specific code should 888 available, then no further board specific code should
887 be needed to use it. 889 be needed to use it.
888 890
889 CONFIG_HW_WATCHDOG 891 CONFIG_HW_WATCHDOG
890 When using a watchdog circuitry external to the used 892 When using a watchdog circuitry external to the used
891 SoC, then define this variable and provide board 893 SoC, then define this variable and provide board
892 specific code for the "hw_watchdog_reset" function. 894 specific code for the "hw_watchdog_reset" function.
893 895
894 - U-Boot Version: 896 - U-Boot Version:
895 CONFIG_VERSION_VARIABLE 897 CONFIG_VERSION_VARIABLE
896 If this variable is defined, an environment variable 898 If this variable is defined, an environment variable
897 named "ver" is created by U-Boot showing the U-Boot 899 named "ver" is created by U-Boot showing the U-Boot
898 version as printed by the "version" command. 900 version as printed by the "version" command.
899 This variable is readonly. 901 This variable is readonly.
900 902
901 - Real-Time Clock: 903 - Real-Time Clock:
902 904
903 When CONFIG_CMD_DATE is selected, the type of the RTC 905 When CONFIG_CMD_DATE is selected, the type of the RTC
904 has to be selected, too. Define exactly one of the 906 has to be selected, too. Define exactly one of the
905 following options: 907 following options:
906 908
907 CONFIG_RTC_MPC8xx - use internal RTC of MPC8xx 909 CONFIG_RTC_MPC8xx - use internal RTC of MPC8xx
908 CONFIG_RTC_PCF8563 - use Philips PCF8563 RTC 910 CONFIG_RTC_PCF8563 - use Philips PCF8563 RTC
909 CONFIG_RTC_MC13XXX - use MC13783 or MC13892 RTC 911 CONFIG_RTC_MC13XXX - use MC13783 or MC13892 RTC
910 CONFIG_RTC_MC146818 - use MC146818 RTC 912 CONFIG_RTC_MC146818 - use MC146818 RTC
911 CONFIG_RTC_DS1307 - use Maxim, Inc. DS1307 RTC 913 CONFIG_RTC_DS1307 - use Maxim, Inc. DS1307 RTC
912 CONFIG_RTC_DS1337 - use Maxim, Inc. DS1337 RTC 914 CONFIG_RTC_DS1337 - use Maxim, Inc. DS1337 RTC
913 CONFIG_RTC_DS1338 - use Maxim, Inc. DS1338 RTC 915 CONFIG_RTC_DS1338 - use Maxim, Inc. DS1338 RTC
914 CONFIG_RTC_DS164x - use Dallas DS164x RTC 916 CONFIG_RTC_DS164x - use Dallas DS164x RTC
915 CONFIG_RTC_ISL1208 - use Intersil ISL1208 RTC 917 CONFIG_RTC_ISL1208 - use Intersil ISL1208 RTC
916 CONFIG_RTC_MAX6900 - use Maxim, Inc. MAX6900 RTC 918 CONFIG_RTC_MAX6900 - use Maxim, Inc. MAX6900 RTC
917 CONFIG_SYS_RTC_DS1337_NOOSC - Turn off the OSC output for DS1337 919 CONFIG_SYS_RTC_DS1337_NOOSC - Turn off the OSC output for DS1337
918 CONFIG_SYS_RV3029_TCR - enable trickle charger on 920 CONFIG_SYS_RV3029_TCR - enable trickle charger on
919 RV3029 RTC. 921 RV3029 RTC.
920 922
921 Note that if the RTC uses I2C, then the I2C interface 923 Note that if the RTC uses I2C, then the I2C interface
922 must also be configured. See I2C Support, below. 924 must also be configured. See I2C Support, below.
923 925
924 - GPIO Support: 926 - GPIO Support:
925 CONFIG_PCA953X - use NXP's PCA953X series I2C GPIO 927 CONFIG_PCA953X - use NXP's PCA953X series I2C GPIO
926 CONFIG_PCA953X_INFO - enable pca953x info command 928 CONFIG_PCA953X_INFO - enable pca953x info command
927 929
928 The CONFIG_SYS_I2C_PCA953X_WIDTH option specifies a list of 930 The CONFIG_SYS_I2C_PCA953X_WIDTH option specifies a list of
929 chip-ngpio pairs that tell the PCA953X driver the number of 931 chip-ngpio pairs that tell the PCA953X driver the number of
930 pins supported by a particular chip. 932 pins supported by a particular chip.
931 933
932 Note that if the GPIO device uses I2C, then the I2C interface 934 Note that if the GPIO device uses I2C, then the I2C interface
933 must also be configured. See I2C Support, below. 935 must also be configured. See I2C Support, below.
934 936
935 - Timestamp Support: 937 - Timestamp Support:
936 938
937 When CONFIG_TIMESTAMP is selected, the timestamp 939 When CONFIG_TIMESTAMP is selected, the timestamp
938 (date and time) of an image is printed by image 940 (date and time) of an image is printed by image
939 commands like bootm or iminfo. This option is 941 commands like bootm or iminfo. This option is
940 automatically enabled when you select CONFIG_CMD_DATE . 942 automatically enabled when you select CONFIG_CMD_DATE .
941 943
942 - Partition Support: 944 - Partition Support:
943 CONFIG_MAC_PARTITION and/or CONFIG_DOS_PARTITION 945 CONFIG_MAC_PARTITION and/or CONFIG_DOS_PARTITION
944 and/or CONFIG_ISO_PARTITION and/or CONFIG_EFI_PARTITION 946 and/or CONFIG_ISO_PARTITION and/or CONFIG_EFI_PARTITION
945 947
946 If IDE or SCSI support is enabled (CONFIG_CMD_IDE or 948 If IDE or SCSI support is enabled (CONFIG_CMD_IDE or
947 CONFIG_CMD_SCSI) you must configure support for at 949 CONFIG_CMD_SCSI) you must configure support for at
948 least one partition type as well. 950 least one partition type as well.
949 951
950 - IDE Reset method: 952 - IDE Reset method:
951 CONFIG_IDE_RESET_ROUTINE - this is defined in several 953 CONFIG_IDE_RESET_ROUTINE - this is defined in several
952 board configurations files but used nowhere! 954 board configurations files but used nowhere!
953 955
954 CONFIG_IDE_RESET - is this is defined, IDE Reset will 956 CONFIG_IDE_RESET - is this is defined, IDE Reset will
955 be performed by calling the function 957 be performed by calling the function
956 ide_set_reset(int reset) 958 ide_set_reset(int reset)
957 which has to be defined in a board specific file 959 which has to be defined in a board specific file
958 960
959 - ATAPI Support: 961 - ATAPI Support:
960 CONFIG_ATAPI 962 CONFIG_ATAPI
961 963
962 Set this to enable ATAPI support. 964 Set this to enable ATAPI support.
963 965
964 - LBA48 Support 966 - LBA48 Support
965 CONFIG_LBA48 967 CONFIG_LBA48
966 968
967 Set this to enable support for disks larger than 137GB 969 Set this to enable support for disks larger than 137GB
968 Also look at CONFIG_SYS_64BIT_LBA. 970 Also look at CONFIG_SYS_64BIT_LBA.
969 Whithout these , LBA48 support uses 32bit variables and will 'only' 971 Whithout these , LBA48 support uses 32bit variables and will 'only'
970 support disks up to 2.1TB. 972 support disks up to 2.1TB.
971 973
972 CONFIG_SYS_64BIT_LBA: 974 CONFIG_SYS_64BIT_LBA:
973 When enabled, makes the IDE subsystem use 64bit sector addresses. 975 When enabled, makes the IDE subsystem use 64bit sector addresses.
974 Default is 32bit. 976 Default is 32bit.
975 977
976 - SCSI Support: 978 - SCSI Support:
977 At the moment only there is only support for the 979 At the moment only there is only support for the
978 SYM53C8XX SCSI controller; define 980 SYM53C8XX SCSI controller; define
979 CONFIG_SCSI_SYM53C8XX to enable it. 981 CONFIG_SCSI_SYM53C8XX to enable it.
980 982
981 CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and 983 CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and
982 CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID * 984 CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID *
983 CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the 985 CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the
984 maximum numbers of LUNs, SCSI ID's and target 986 maximum numbers of LUNs, SCSI ID's and target
985 devices. 987 devices.
986 CONFIG_SYS_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz) 988 CONFIG_SYS_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz)
987 989
988 - NETWORK Support (PCI): 990 - NETWORK Support (PCI):
989 CONFIG_E1000 991 CONFIG_E1000
990 Support for Intel 8254x/8257x gigabit chips. 992 Support for Intel 8254x/8257x gigabit chips.
991 993
992 CONFIG_E1000_SPI 994 CONFIG_E1000_SPI
993 Utility code for direct access to the SPI bus on Intel 8257x. 995 Utility code for direct access to the SPI bus on Intel 8257x.
994 This does not do anything useful unless you set at least one 996 This does not do anything useful unless you set at least one
995 of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC. 997 of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC.
996 998
997 CONFIG_E1000_SPI_GENERIC 999 CONFIG_E1000_SPI_GENERIC
998 Allow generic access to the SPI bus on the Intel 8257x, for 1000 Allow generic access to the SPI bus on the Intel 8257x, for
999 example with the "sspi" command. 1001 example with the "sspi" command.
1000 1002
1001 CONFIG_CMD_E1000 1003 CONFIG_CMD_E1000
1002 Management command for E1000 devices. When used on devices 1004 Management command for E1000 devices. When used on devices
1003 with SPI support you can reprogram the EEPROM from U-Boot. 1005 with SPI support you can reprogram the EEPROM from U-Boot.
1004 1006
1005 CONFIG_E1000_FALLBACK_MAC 1007 CONFIG_E1000_FALLBACK_MAC
1006 default MAC for empty EEPROM after production. 1008 default MAC for empty EEPROM after production.
1007 1009
1008 CONFIG_EEPRO100 1010 CONFIG_EEPRO100
1009 Support for Intel 82557/82559/82559ER chips. 1011 Support for Intel 82557/82559/82559ER chips.
1010 Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM 1012 Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM
1011 write routine for first time initialisation. 1013 write routine for first time initialisation.
1012 1014
1013 CONFIG_TULIP 1015 CONFIG_TULIP
1014 Support for Digital 2114x chips. 1016 Support for Digital 2114x chips.
1015 Optional CONFIG_TULIP_SELECT_MEDIA for board specific 1017 Optional CONFIG_TULIP_SELECT_MEDIA for board specific
1016 modem chip initialisation (KS8761/QS6611). 1018 modem chip initialisation (KS8761/QS6611).
1017 1019
1018 CONFIG_NATSEMI 1020 CONFIG_NATSEMI
1019 Support for National dp83815 chips. 1021 Support for National dp83815 chips.
1020 1022
1021 CONFIG_NS8382X 1023 CONFIG_NS8382X
1022 Support for National dp8382[01] gigabit chips. 1024 Support for National dp8382[01] gigabit chips.
1023 1025
1024 - NETWORK Support (other): 1026 - NETWORK Support (other):
1025 1027
1026 CONFIG_DRIVER_AT91EMAC 1028 CONFIG_DRIVER_AT91EMAC
1027 Support for AT91RM9200 EMAC. 1029 Support for AT91RM9200 EMAC.
1028 1030
1029 CONFIG_RMII 1031 CONFIG_RMII
1030 Define this to use reduced MII inteface 1032 Define this to use reduced MII inteface
1031 1033
1032 CONFIG_DRIVER_AT91EMAC_QUIET 1034 CONFIG_DRIVER_AT91EMAC_QUIET
1033 If this defined, the driver is quiet. 1035 If this defined, the driver is quiet.
1034 The driver doen't show link status messages. 1036 The driver doen't show link status messages.
1035 1037
1036 CONFIG_CALXEDA_XGMAC 1038 CONFIG_CALXEDA_XGMAC
1037 Support for the Calxeda XGMAC device 1039 Support for the Calxeda XGMAC device
1038 1040
1039 CONFIG_DRIVER_LAN91C96 1041 CONFIG_DRIVER_LAN91C96
1040 Support for SMSC's LAN91C96 chips. 1042 Support for SMSC's LAN91C96 chips.
1041 1043
1042 CONFIG_LAN91C96_BASE 1044 CONFIG_LAN91C96_BASE
1043 Define this to hold the physical address 1045 Define this to hold the physical address
1044 of the LAN91C96's I/O space 1046 of the LAN91C96's I/O space
1045 1047
1046 CONFIG_LAN91C96_USE_32_BIT 1048 CONFIG_LAN91C96_USE_32_BIT
1047 Define this to enable 32 bit addressing 1049 Define this to enable 32 bit addressing
1048 1050
1049 CONFIG_DRIVER_SMC91111 1051 CONFIG_DRIVER_SMC91111
1050 Support for SMSC's LAN91C111 chip 1052 Support for SMSC's LAN91C111 chip
1051 1053
1052 CONFIG_SMC91111_BASE 1054 CONFIG_SMC91111_BASE
1053 Define this to hold the physical address 1055 Define this to hold the physical address
1054 of the device (I/O space) 1056 of the device (I/O space)
1055 1057
1056 CONFIG_SMC_USE_32_BIT 1058 CONFIG_SMC_USE_32_BIT
1057 Define this if data bus is 32 bits 1059 Define this if data bus is 32 bits
1058 1060
1059 CONFIG_SMC_USE_IOFUNCS 1061 CONFIG_SMC_USE_IOFUNCS
1060 Define this to use i/o functions instead of macros 1062 Define this to use i/o functions instead of macros
1061 (some hardware wont work with macros) 1063 (some hardware wont work with macros)
1062 1064
1063 CONFIG_DRIVER_TI_EMAC 1065 CONFIG_DRIVER_TI_EMAC
1064 Support for davinci emac 1066 Support for davinci emac
1065 1067
1066 CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT 1068 CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
1067 Define this if you have more then 3 PHYs. 1069 Define this if you have more then 3 PHYs.
1068 1070
1069 CONFIG_FTGMAC100 1071 CONFIG_FTGMAC100
1070 Support for Faraday's FTGMAC100 Gigabit SoC Ethernet 1072 Support for Faraday's FTGMAC100 Gigabit SoC Ethernet
1071 1073
1072 CONFIG_FTGMAC100_EGIGA 1074 CONFIG_FTGMAC100_EGIGA
1073 Define this to use GE link update with gigabit PHY. 1075 Define this to use GE link update with gigabit PHY.
1074 Define this if FTGMAC100 is connected to gigabit PHY. 1076 Define this if FTGMAC100 is connected to gigabit PHY.
1075 If your system has 10/100 PHY only, it might not occur 1077 If your system has 10/100 PHY only, it might not occur
1076 wrong behavior. Because PHY usually return timeout or 1078 wrong behavior. Because PHY usually return timeout or
1077 useless data when polling gigabit status and gigabit 1079 useless data when polling gigabit status and gigabit
1078 control registers. This behavior won't affect the 1080 control registers. This behavior won't affect the
1079 correctnessof 10/100 link speed update. 1081 correctnessof 10/100 link speed update.
1080 1082
1081 CONFIG_SMC911X 1083 CONFIG_SMC911X
1082 Support for SMSC's LAN911x and LAN921x chips 1084 Support for SMSC's LAN911x and LAN921x chips
1083 1085
1084 CONFIG_SMC911X_BASE 1086 CONFIG_SMC911X_BASE
1085 Define this to hold the physical address 1087 Define this to hold the physical address
1086 of the device (I/O space) 1088 of the device (I/O space)
1087 1089
1088 CONFIG_SMC911X_32_BIT 1090 CONFIG_SMC911X_32_BIT
1089 Define this if data bus is 32 bits 1091 Define this if data bus is 32 bits
1090 1092
1091 CONFIG_SMC911X_16_BIT 1093 CONFIG_SMC911X_16_BIT
1092 Define this if data bus is 16 bits. If your processor 1094 Define this if data bus is 16 bits. If your processor
1093 automatically converts one 32 bit word to two 16 bit 1095 automatically converts one 32 bit word to two 16 bit
1094 words you may also try CONFIG_SMC911X_32_BIT. 1096 words you may also try CONFIG_SMC911X_32_BIT.
1095 1097
1096 CONFIG_SH_ETHER 1098 CONFIG_SH_ETHER
1097 Support for Renesas on-chip Ethernet controller 1099 Support for Renesas on-chip Ethernet controller
1098 1100
1099 CONFIG_SH_ETHER_USE_PORT 1101 CONFIG_SH_ETHER_USE_PORT
1100 Define the number of ports to be used 1102 Define the number of ports to be used
1101 1103
1102 CONFIG_SH_ETHER_PHY_ADDR 1104 CONFIG_SH_ETHER_PHY_ADDR
1103 Define the ETH PHY's address 1105 Define the ETH PHY's address
1104 1106
1105 CONFIG_SH_ETHER_CACHE_WRITEBACK 1107 CONFIG_SH_ETHER_CACHE_WRITEBACK
1106 If this option is set, the driver enables cache flush. 1108 If this option is set, the driver enables cache flush.
1107 1109
1108 - TPM Support: 1110 - TPM Support:
1109 CONFIG_GENERIC_LPC_TPM 1111 CONFIG_GENERIC_LPC_TPM
1110 Support for generic parallel port TPM devices. Only one device 1112 Support for generic parallel port TPM devices. Only one device
1111 per system is supported at this time. 1113 per system is supported at this time.
1112 1114
1113 CONFIG_TPM_TIS_BASE_ADDRESS 1115 CONFIG_TPM_TIS_BASE_ADDRESS
1114 Base address where the generic TPM device is mapped 1116 Base address where the generic TPM device is mapped
1115 to. Contemporary x86 systems usually map it at 1117 to. Contemporary x86 systems usually map it at
1116 0xfed40000. 1118 0xfed40000.
1117 1119
1118 - USB Support: 1120 - USB Support:
1119 At the moment only the UHCI host controller is 1121 At the moment only the UHCI host controller is
1120 supported (PIP405, MIP405, MPC5200); define 1122 supported (PIP405, MIP405, MPC5200); define
1121 CONFIG_USB_UHCI to enable it. 1123 CONFIG_USB_UHCI to enable it.
1122 define CONFIG_USB_KEYBOARD to enable the USB Keyboard 1124 define CONFIG_USB_KEYBOARD to enable the USB Keyboard
1123 and define CONFIG_USB_STORAGE to enable the USB 1125 and define CONFIG_USB_STORAGE to enable the USB
1124 storage devices. 1126 storage devices.
1125 Note: 1127 Note:
1126 Supported are USB Keyboards and USB Floppy drives 1128 Supported are USB Keyboards and USB Floppy drives
1127 (TEAC FD-05PUB). 1129 (TEAC FD-05PUB).
1128 MPC5200 USB requires additional defines: 1130 MPC5200 USB requires additional defines:
1129 CONFIG_USB_CLOCK 1131 CONFIG_USB_CLOCK
1130 for 528 MHz Clock: 0x0001bbbb 1132 for 528 MHz Clock: 0x0001bbbb
1131 CONFIG_PSC3_USB 1133 CONFIG_PSC3_USB
1132 for USB on PSC3 1134 for USB on PSC3
1133 CONFIG_USB_CONFIG 1135 CONFIG_USB_CONFIG
1134 for differential drivers: 0x00001000 1136 for differential drivers: 0x00001000
1135 for single ended drivers: 0x00005000 1137 for single ended drivers: 0x00005000
1136 for differential drivers on PSC3: 0x00000100 1138 for differential drivers on PSC3: 0x00000100
1137 for single ended drivers on PSC3: 0x00004100 1139 for single ended drivers on PSC3: 0x00004100
1138 CONFIG_SYS_USB_EVENT_POLL 1140 CONFIG_SYS_USB_EVENT_POLL
1139 May be defined to allow interrupt polling 1141 May be defined to allow interrupt polling
1140 instead of using asynchronous interrupts 1142 instead of using asynchronous interrupts
1141 1143
1142 CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the 1144 CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
1143 txfilltuning field in the EHCI controller on reset. 1145 txfilltuning field in the EHCI controller on reset.
1144 1146
1145 - USB Device: 1147 - USB Device:
1146 Define the below if you wish to use the USB console. 1148 Define the below if you wish to use the USB console.
1147 Once firmware is rebuilt from a serial console issue the 1149 Once firmware is rebuilt from a serial console issue the
1148 command "setenv stdin usbtty; setenv stdout usbtty" and 1150 command "setenv stdin usbtty; setenv stdout usbtty" and
1149 attach your USB cable. The Unix command "dmesg" should print 1151 attach your USB cable. The Unix command "dmesg" should print
1150 it has found a new device. The environment variable usbtty 1152 it has found a new device. The environment variable usbtty
1151 can be set to gserial or cdc_acm to enable your device to 1153 can be set to gserial or cdc_acm to enable your device to
1152 appear to a USB host as a Linux gserial device or a 1154 appear to a USB host as a Linux gserial device or a
1153 Common Device Class Abstract Control Model serial device. 1155 Common Device Class Abstract Control Model serial device.
1154 If you select usbtty = gserial you should be able to enumerate 1156 If you select usbtty = gserial you should be able to enumerate
1155 a Linux host by 1157 a Linux host by
1156 # modprobe usbserial vendor=0xVendorID product=0xProductID 1158 # modprobe usbserial vendor=0xVendorID product=0xProductID
1157 else if using cdc_acm, simply setting the environment 1159 else if using cdc_acm, simply setting the environment
1158 variable usbtty to be cdc_acm should suffice. The following 1160 variable usbtty to be cdc_acm should suffice. The following
1159 might be defined in YourBoardName.h 1161 might be defined in YourBoardName.h
1160 1162
1161 CONFIG_USB_DEVICE 1163 CONFIG_USB_DEVICE
1162 Define this to build a UDC device 1164 Define this to build a UDC device
1163 1165
1164 CONFIG_USB_TTY 1166 CONFIG_USB_TTY
1165 Define this to have a tty type of device available to 1167 Define this to have a tty type of device available to
1166 talk to the UDC device 1168 talk to the UDC device
1167 1169
1168 CONFIG_USBD_HS 1170 CONFIG_USBD_HS
1169 Define this to enable the high speed support for usb 1171 Define this to enable the high speed support for usb
1170 device and usbtty. If this feature is enabled, a routine 1172 device and usbtty. If this feature is enabled, a routine
1171 int is_usbd_high_speed(void) 1173 int is_usbd_high_speed(void)
1172 also needs to be defined by the driver to dynamically poll 1174 also needs to be defined by the driver to dynamically poll
1173 whether the enumeration has succeded at high speed or full 1175 whether the enumeration has succeded at high speed or full
1174 speed. 1176 speed.
1175 1177
1176 CONFIG_SYS_CONSOLE_IS_IN_ENV 1178 CONFIG_SYS_CONSOLE_IS_IN_ENV
1177 Define this if you want stdin, stdout &/or stderr to 1179 Define this if you want stdin, stdout &/or stderr to
1178 be set to usbtty. 1180 be set to usbtty.
1179 1181
1180 mpc8xx: 1182 mpc8xx:
1181 CONFIG_SYS_USB_EXTC_CLK 0xBLAH 1183 CONFIG_SYS_USB_EXTC_CLK 0xBLAH
1182 Derive USB clock from external clock "blah" 1184 Derive USB clock from external clock "blah"
1183 - CONFIG_SYS_USB_EXTC_CLK 0x02 1185 - CONFIG_SYS_USB_EXTC_CLK 0x02
1184 1186
1185 CONFIG_SYS_USB_BRG_CLK 0xBLAH 1187 CONFIG_SYS_USB_BRG_CLK 0xBLAH
1186 Derive USB clock from brgclk 1188 Derive USB clock from brgclk
1187 - CONFIG_SYS_USB_BRG_CLK 0x04 1189 - CONFIG_SYS_USB_BRG_CLK 0x04
1188 1190
1189 If you have a USB-IF assigned VendorID then you may wish to 1191 If you have a USB-IF assigned VendorID then you may wish to
1190 define your own vendor specific values either in BoardName.h 1192 define your own vendor specific values either in BoardName.h
1191 or directly in usbd_vendor_info.h. If you don't define 1193 or directly in usbd_vendor_info.h. If you don't define
1192 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME, 1194 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME,
1193 CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Boot 1195 CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Boot
1194 should pretend to be a Linux device to it's target host. 1196 should pretend to be a Linux device to it's target host.
1195 1197
1196 CONFIG_USBD_MANUFACTURER 1198 CONFIG_USBD_MANUFACTURER
1197 Define this string as the name of your company for 1199 Define this string as the name of your company for
1198 - CONFIG_USBD_MANUFACTURER "my company" 1200 - CONFIG_USBD_MANUFACTURER "my company"
1199 1201
1200 CONFIG_USBD_PRODUCT_NAME 1202 CONFIG_USBD_PRODUCT_NAME
1201 Define this string as the name of your product 1203 Define this string as the name of your product
1202 - CONFIG_USBD_PRODUCT_NAME "acme usb device" 1204 - CONFIG_USBD_PRODUCT_NAME "acme usb device"
1203 1205
1204 CONFIG_USBD_VENDORID 1206 CONFIG_USBD_VENDORID
1205 Define this as your assigned Vendor ID from the USB 1207 Define this as your assigned Vendor ID from the USB
1206 Implementors Forum. This *must* be a genuine Vendor ID 1208 Implementors Forum. This *must* be a genuine Vendor ID
1207 to avoid polluting the USB namespace. 1209 to avoid polluting the USB namespace.
1208 - CONFIG_USBD_VENDORID 0xFFFF 1210 - CONFIG_USBD_VENDORID 0xFFFF
1209 1211
1210 CONFIG_USBD_PRODUCTID 1212 CONFIG_USBD_PRODUCTID
1211 Define this as the unique Product ID 1213 Define this as the unique Product ID
1212 for your device 1214 for your device
1213 - CONFIG_USBD_PRODUCTID 0xFFFF 1215 - CONFIG_USBD_PRODUCTID 0xFFFF
1214 1216
1215 - ULPI Layer Support: 1217 - ULPI Layer Support:
1216 The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via 1218 The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via
1217 the generic ULPI layer. The generic layer accesses the ULPI PHY 1219 the generic ULPI layer. The generic layer accesses the ULPI PHY
1218 via the platform viewport, so you need both the genric layer and 1220 via the platform viewport, so you need both the genric layer and
1219 the viewport enabled. Currently only Chipidea/ARC based 1221 the viewport enabled. Currently only Chipidea/ARC based
1220 viewport is supported. 1222 viewport is supported.
1221 To enable the ULPI layer support, define CONFIG_USB_ULPI and 1223 To enable the ULPI layer support, define CONFIG_USB_ULPI and
1222 CONFIG_USB_ULPI_VIEWPORT in your board configuration file. 1224 CONFIG_USB_ULPI_VIEWPORT in your board configuration file.
1223 1225
1224 - MMC Support: 1226 - MMC Support:
1225 The MMC controller on the Intel PXA is supported. To 1227 The MMC controller on the Intel PXA is supported. To
1226 enable this define CONFIG_MMC. The MMC can be 1228 enable this define CONFIG_MMC. The MMC can be
1227 accessed from the boot prompt by mapping the device 1229 accessed from the boot prompt by mapping the device
1228 to physical memory similar to flash. Command line is 1230 to physical memory similar to flash. Command line is
1229 enabled with CONFIG_CMD_MMC. The MMC driver also works with 1231 enabled with CONFIG_CMD_MMC. The MMC driver also works with
1230 the FAT fs. This is enabled with CONFIG_CMD_FAT. 1232 the FAT fs. This is enabled with CONFIG_CMD_FAT.
1231 1233
1232 CONFIG_SH_MMCIF 1234 CONFIG_SH_MMCIF
1233 Support for Renesas on-chip MMCIF controller 1235 Support for Renesas on-chip MMCIF controller
1234 1236
1235 CONFIG_SH_MMCIF_ADDR 1237 CONFIG_SH_MMCIF_ADDR
1236 Define the base address of MMCIF registers 1238 Define the base address of MMCIF registers
1237 1239
1238 CONFIG_SH_MMCIF_CLK 1240 CONFIG_SH_MMCIF_CLK
1239 Define the clock frequency for MMCIF 1241 Define the clock frequency for MMCIF
1240 1242
1241 - Journaling Flash filesystem support: 1243 - Journaling Flash filesystem support:
1242 CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE, 1244 CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
1243 CONFIG_JFFS2_NAND_DEV 1245 CONFIG_JFFS2_NAND_DEV
1244 Define these for a default partition on a NAND device 1246 Define these for a default partition on a NAND device
1245 1247
1246 CONFIG_SYS_JFFS2_FIRST_SECTOR, 1248 CONFIG_SYS_JFFS2_FIRST_SECTOR,
1247 CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS 1249 CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS
1248 Define these for a default partition on a NOR device 1250 Define these for a default partition on a NOR device
1249 1251
1250 CONFIG_SYS_JFFS_CUSTOM_PART 1252 CONFIG_SYS_JFFS_CUSTOM_PART
1251 Define this to create an own partition. You have to provide a 1253 Define this to create an own partition. You have to provide a
1252 function struct part_info* jffs2_part_info(int part_num) 1254 function struct part_info* jffs2_part_info(int part_num)
1253 1255
1254 If you define only one JFFS2 partition you may also want to 1256 If you define only one JFFS2 partition you may also want to
1255 #define CONFIG_SYS_JFFS_SINGLE_PART 1 1257 #define CONFIG_SYS_JFFS_SINGLE_PART 1
1256 to disable the command chpart. This is the default when you 1258 to disable the command chpart. This is the default when you
1257 have not defined a custom partition 1259 have not defined a custom partition
1258 1260
1259 - FAT(File Allocation Table) filesystem write function support: 1261 - FAT(File Allocation Table) filesystem write function support:
1260 CONFIG_FAT_WRITE 1262 CONFIG_FAT_WRITE
1261 1263
1262 Define this to enable support for saving memory data as a 1264 Define this to enable support for saving memory data as a
1263 file in FAT formatted partition. 1265 file in FAT formatted partition.
1264 1266
1265 This will also enable the command "fatwrite" enabling the 1267 This will also enable the command "fatwrite" enabling the
1266 user to write files to FAT. 1268 user to write files to FAT.
1267 1269
1268 - Keyboard Support: 1270 - Keyboard Support:
1269 CONFIG_ISA_KEYBOARD 1271 CONFIG_ISA_KEYBOARD
1270 1272
1271 Define this to enable standard (PC-Style) keyboard 1273 Define this to enable standard (PC-Style) keyboard
1272 support 1274 support
1273 1275
1274 CONFIG_I8042_KBD 1276 CONFIG_I8042_KBD
1275 Standard PC keyboard driver with US (is default) and 1277 Standard PC keyboard driver with US (is default) and
1276 GERMAN key layout (switch via environment 'keymap=de') support. 1278 GERMAN key layout (switch via environment 'keymap=de') support.
1277 Export function i8042_kbd_init, i8042_tstc and i8042_getc 1279 Export function i8042_kbd_init, i8042_tstc and i8042_getc
1278 for cfb_console. Supports cursor blinking. 1280 for cfb_console. Supports cursor blinking.
1279 1281
1280 - Video support: 1282 - Video support:
1281 CONFIG_VIDEO 1283 CONFIG_VIDEO
1282 1284
1283 Define this to enable video support (for output to 1285 Define this to enable video support (for output to
1284 video). 1286 video).
1285 1287
1286 CONFIG_VIDEO_CT69000 1288 CONFIG_VIDEO_CT69000
1287 1289
1288 Enable Chips & Technologies 69000 Video chip 1290 Enable Chips & Technologies 69000 Video chip
1289 1291
1290 CONFIG_VIDEO_SMI_LYNXEM 1292 CONFIG_VIDEO_SMI_LYNXEM
1291 Enable Silicon Motion SMI 712/710/810 Video chip. The 1293 Enable Silicon Motion SMI 712/710/810 Video chip. The
1292 video output is selected via environment 'videoout' 1294 video output is selected via environment 'videoout'
1293 (1 = LCD and 2 = CRT). If videoout is undefined, CRT is 1295 (1 = LCD and 2 = CRT). If videoout is undefined, CRT is
1294 assumed. 1296 assumed.
1295 1297
1296 For the CT69000 and SMI_LYNXEM drivers, videomode is 1298 For the CT69000 and SMI_LYNXEM drivers, videomode is
1297 selected via environment 'videomode'. Two different ways 1299 selected via environment 'videomode'. Two different ways
1298 are possible: 1300 are possible:
1299 - "videomode=num" 'num' is a standard LiLo mode numbers. 1301 - "videomode=num" 'num' is a standard LiLo mode numbers.
1300 Following standard modes are supported (* is default): 1302 Following standard modes are supported (* is default):
1301 1303
1302 Colors 640x480 800x600 1024x768 1152x864 1280x1024 1304 Colors 640x480 800x600 1024x768 1152x864 1280x1024
1303 -------------+--------------------------------------------- 1305 -------------+---------------------------------------------
1304 8 bits | 0x301* 0x303 0x305 0x161 0x307 1306 8 bits | 0x301* 0x303 0x305 0x161 0x307
1305 15 bits | 0x310 0x313 0x316 0x162 0x319 1307 15 bits | 0x310 0x313 0x316 0x162 0x319
1306 16 bits | 0x311 0x314 0x317 0x163 0x31A 1308 16 bits | 0x311 0x314 0x317 0x163 0x31A
1307 24 bits | 0x312 0x315 0x318 ? 0x31B 1309 24 bits | 0x312 0x315 0x318 ? 0x31B
1308 -------------+--------------------------------------------- 1310 -------------+---------------------------------------------
1309 (i.e. setenv videomode 317; saveenv; reset;) 1311 (i.e. setenv videomode 317; saveenv; reset;)
1310 1312
1311 - "videomode=bootargs" all the video parameters are parsed 1313 - "videomode=bootargs" all the video parameters are parsed
1312 from the bootargs. (See drivers/video/videomodes.c) 1314 from the bootargs. (See drivers/video/videomodes.c)
1313 1315
1314 1316
1315 CONFIG_VIDEO_SED13806 1317 CONFIG_VIDEO_SED13806
1316 Enable Epson SED13806 driver. This driver supports 8bpp 1318 Enable Epson SED13806 driver. This driver supports 8bpp
1317 and 16bpp modes defined by CONFIG_VIDEO_SED13806_8BPP 1319 and 16bpp modes defined by CONFIG_VIDEO_SED13806_8BPP
1318 or CONFIG_VIDEO_SED13806_16BPP 1320 or CONFIG_VIDEO_SED13806_16BPP
1319 1321
1320 CONFIG_FSL_DIU_FB 1322 CONFIG_FSL_DIU_FB
1321 Enable the Freescale DIU video driver. Reference boards for 1323 Enable the Freescale DIU video driver. Reference boards for
1322 SOCs that have a DIU should define this macro to enable DIU 1324 SOCs that have a DIU should define this macro to enable DIU
1323 support, and should also define these other macros: 1325 support, and should also define these other macros:
1324 1326
1325 CONFIG_SYS_DIU_ADDR 1327 CONFIG_SYS_DIU_ADDR
1326 CONFIG_VIDEO 1328 CONFIG_VIDEO
1327 CONFIG_CMD_BMP 1329 CONFIG_CMD_BMP
1328 CONFIG_CFB_CONSOLE 1330 CONFIG_CFB_CONSOLE
1329 CONFIG_VIDEO_SW_CURSOR 1331 CONFIG_VIDEO_SW_CURSOR
1330 CONFIG_VGA_AS_SINGLE_DEVICE 1332 CONFIG_VGA_AS_SINGLE_DEVICE
1331 CONFIG_VIDEO_LOGO 1333 CONFIG_VIDEO_LOGO
1332 CONFIG_VIDEO_BMP_LOGO 1334 CONFIG_VIDEO_BMP_LOGO
1333 1335
1334 The DIU driver will look for the 'video-mode' environment 1336 The DIU driver will look for the 'video-mode' environment
1335 variable, and if defined, enable the DIU as a console during 1337 variable, and if defined, enable the DIU as a console during
1336 boot. See the documentation file README.video for a 1338 boot. See the documentation file README.video for a
1337 description of this variable. 1339 description of this variable.
1338 1340
1339 - Keyboard Support: 1341 - Keyboard Support:
1340 CONFIG_KEYBOARD 1342 CONFIG_KEYBOARD
1341 1343
1342 Define this to enable a custom keyboard support. 1344 Define this to enable a custom keyboard support.
1343 This simply calls drv_keyboard_init() which must be 1345 This simply calls drv_keyboard_init() which must be
1344 defined in your board-specific files. 1346 defined in your board-specific files.
1345 The only board using this so far is RBC823. 1347 The only board using this so far is RBC823.
1346 1348
1347 - LCD Support: CONFIG_LCD 1349 - LCD Support: CONFIG_LCD
1348 1350
1349 Define this to enable LCD support (for output to LCD 1351 Define this to enable LCD support (for output to LCD
1350 display); also select one of the supported displays 1352 display); also select one of the supported displays
1351 by defining one of these: 1353 by defining one of these:
1352 1354
1353 CONFIG_ATMEL_LCD: 1355 CONFIG_ATMEL_LCD:
1354 1356
1355 HITACHI TX09D70VM1CCA, 3.5", 240x320. 1357 HITACHI TX09D70VM1CCA, 3.5", 240x320.
1356 1358
1357 CONFIG_NEC_NL6448AC33: 1359 CONFIG_NEC_NL6448AC33:
1358 1360
1359 NEC NL6448AC33-18. Active, color, single scan. 1361 NEC NL6448AC33-18. Active, color, single scan.
1360 1362
1361 CONFIG_NEC_NL6448BC20 1363 CONFIG_NEC_NL6448BC20
1362 1364
1363 NEC NL6448BC20-08. 6.5", 640x480. 1365 NEC NL6448BC20-08. 6.5", 640x480.
1364 Active, color, single scan. 1366 Active, color, single scan.
1365 1367
1366 CONFIG_NEC_NL6448BC33_54 1368 CONFIG_NEC_NL6448BC33_54
1367 1369
1368 NEC NL6448BC33-54. 10.4", 640x480. 1370 NEC NL6448BC33-54. 10.4", 640x480.
1369 Active, color, single scan. 1371 Active, color, single scan.
1370 1372
1371 CONFIG_SHARP_16x9 1373 CONFIG_SHARP_16x9
1372 1374
1373 Sharp 320x240. Active, color, single scan. 1375 Sharp 320x240. Active, color, single scan.
1374 It isn't 16x9, and I am not sure what it is. 1376 It isn't 16x9, and I am not sure what it is.
1375 1377
1376 CONFIG_SHARP_LQ64D341 1378 CONFIG_SHARP_LQ64D341
1377 1379
1378 Sharp LQ64D341 display, 640x480. 1380 Sharp LQ64D341 display, 640x480.
1379 Active, color, single scan. 1381 Active, color, single scan.
1380 1382
1381 CONFIG_HLD1045 1383 CONFIG_HLD1045
1382 1384
1383 HLD1045 display, 640x480. 1385 HLD1045 display, 640x480.
1384 Active, color, single scan. 1386 Active, color, single scan.
1385 1387
1386 CONFIG_OPTREX_BW 1388 CONFIG_OPTREX_BW
1387 1389
1388 Optrex CBL50840-2 NF-FW 99 22 M5 1390 Optrex CBL50840-2 NF-FW 99 22 M5
1389 or 1391 or
1390 Hitachi LMG6912RPFC-00T 1392 Hitachi LMG6912RPFC-00T
1391 or 1393 or
1392 Hitachi SP14Q002 1394 Hitachi SP14Q002
1393 1395
1394 320x240. Black & white. 1396 320x240. Black & white.
1395 1397
1396 Normally display is black on white background; define 1398 Normally display is black on white background; define
1397 CONFIG_SYS_WHITE_ON_BLACK to get it inverted. 1399 CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
1398 1400
1399 - Splash Screen Support: CONFIG_SPLASH_SCREEN 1401 - Splash Screen Support: CONFIG_SPLASH_SCREEN
1400 1402
1401 If this option is set, the environment is checked for 1403 If this option is set, the environment is checked for
1402 a variable "splashimage". If found, the usual display 1404 a variable "splashimage". If found, the usual display
1403 of logo, copyright and system information on the LCD 1405 of logo, copyright and system information on the LCD
1404 is suppressed and the BMP image at the address 1406 is suppressed and the BMP image at the address
1405 specified in "splashimage" is loaded instead. The 1407 specified in "splashimage" is loaded instead. The
1406 console is redirected to the "nulldev", too. This 1408 console is redirected to the "nulldev", too. This
1407 allows for a "silent" boot where a splash screen is 1409 allows for a "silent" boot where a splash screen is
1408 loaded very quickly after power-on. 1410 loaded very quickly after power-on.
1409 1411
1410 CONFIG_SPLASH_SCREEN_ALIGN 1412 CONFIG_SPLASH_SCREEN_ALIGN
1411 1413
1412 If this option is set the splash image can be freely positioned 1414 If this option is set the splash image can be freely positioned
1413 on the screen. Environment variable "splashpos" specifies the 1415 on the screen. Environment variable "splashpos" specifies the
1414 position as "x,y". If a positive number is given it is used as 1416 position as "x,y". If a positive number is given it is used as
1415 number of pixel from left/top. If a negative number is given it 1417 number of pixel from left/top. If a negative number is given it
1416 is used as number of pixel from right/bottom. You can also 1418 is used as number of pixel from right/bottom. You can also
1417 specify 'm' for centering the image. 1419 specify 'm' for centering the image.
1418 1420
1419 Example: 1421 Example:
1420 setenv splashpos m,m 1422 setenv splashpos m,m
1421 => image at center of screen 1423 => image at center of screen
1422 1424
1423 setenv splashpos 30,20 1425 setenv splashpos 30,20
1424 => image at x = 30 and y = 20 1426 => image at x = 30 and y = 20
1425 1427
1426 setenv splashpos -10,m 1428 setenv splashpos -10,m
1427 => vertically centered image 1429 => vertically centered image
1428 at x = dspWidth - bmpWidth - 9 1430 at x = dspWidth - bmpWidth - 9
1429 1431
1430 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP 1432 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
1431 1433
1432 If this option is set, additionally to standard BMP 1434 If this option is set, additionally to standard BMP
1433 images, gzipped BMP images can be displayed via the 1435 images, gzipped BMP images can be displayed via the
1434 splashscreen support or the bmp command. 1436 splashscreen support or the bmp command.
1435 1437
1436 - Run length encoded BMP image (RLE8) support: CONFIG_VIDEO_BMP_RLE8 1438 - Run length encoded BMP image (RLE8) support: CONFIG_VIDEO_BMP_RLE8
1437 1439
1438 If this option is set, 8-bit RLE compressed BMP images 1440 If this option is set, 8-bit RLE compressed BMP images
1439 can be displayed via the splashscreen support or the 1441 can be displayed via the splashscreen support or the
1440 bmp command. 1442 bmp command.
1441 1443
1442 - Compression support: 1444 - Compression support:
1443 CONFIG_BZIP2 1445 CONFIG_BZIP2
1444 1446
1445 If this option is set, support for bzip2 compressed 1447 If this option is set, support for bzip2 compressed
1446 images is included. If not, only uncompressed and gzip 1448 images is included. If not, only uncompressed and gzip
1447 compressed images are supported. 1449 compressed images are supported.
1448 1450
1449 NOTE: the bzip2 algorithm requires a lot of RAM, so 1451 NOTE: the bzip2 algorithm requires a lot of RAM, so
1450 the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should 1452 the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should
1451 be at least 4MB. 1453 be at least 4MB.
1452 1454
1453 CONFIG_LZMA 1455 CONFIG_LZMA
1454 1456
1455 If this option is set, support for lzma compressed 1457 If this option is set, support for lzma compressed
1456 images is included. 1458 images is included.
1457 1459
1458 Note: The LZMA algorithm adds between 2 and 4KB of code and it 1460 Note: The LZMA algorithm adds between 2 and 4KB of code and it
1459 requires an amount of dynamic memory that is given by the 1461 requires an amount of dynamic memory that is given by the
1460 formula: 1462 formula:
1461 1463
1462 (1846 + 768 << (lc + lp)) * sizeof(uint16) 1464 (1846 + 768 << (lc + lp)) * sizeof(uint16)
1463 1465
1464 Where lc and lp stand for, respectively, Literal context bits 1466 Where lc and lp stand for, respectively, Literal context bits
1465 and Literal pos bits. 1467 and Literal pos bits.
1466 1468
1467 This value is upper-bounded by 14MB in the worst case. Anyway, 1469 This value is upper-bounded by 14MB in the worst case. Anyway,
1468 for a ~4MB large kernel image, we have lc=3 and lp=0 for a 1470 for a ~4MB large kernel image, we have lc=3 and lp=0 for a
1469 total amount of (1846 + 768 << (3 + 0)) * 2 = ~41KB... that is 1471 total amount of (1846 + 768 << (3 + 0)) * 2 = ~41KB... that is
1470 a very small buffer. 1472 a very small buffer.
1471 1473
1472 Use the lzmainfo tool to determinate the lc and lp values and 1474 Use the lzmainfo tool to determinate the lc and lp values and
1473 then calculate the amount of needed dynamic memory (ensuring 1475 then calculate the amount of needed dynamic memory (ensuring
1474 the appropriate CONFIG_SYS_MALLOC_LEN value). 1476 the appropriate CONFIG_SYS_MALLOC_LEN value).
1475 1477
1476 - MII/PHY support: 1478 - MII/PHY support:
1477 CONFIG_PHY_ADDR 1479 CONFIG_PHY_ADDR
1478 1480
1479 The address of PHY on MII bus. 1481 The address of PHY on MII bus.
1480 1482
1481 CONFIG_PHY_CLOCK_FREQ (ppc4xx) 1483 CONFIG_PHY_CLOCK_FREQ (ppc4xx)
1482 1484
1483 The clock frequency of the MII bus 1485 The clock frequency of the MII bus
1484 1486
1485 CONFIG_PHY_GIGE 1487 CONFIG_PHY_GIGE
1486 1488
1487 If this option is set, support for speed/duplex 1489 If this option is set, support for speed/duplex
1488 detection of gigabit PHY is included. 1490 detection of gigabit PHY is included.
1489 1491
1490 CONFIG_PHY_RESET_DELAY 1492 CONFIG_PHY_RESET_DELAY
1491 1493
1492 Some PHY like Intel LXT971A need extra delay after 1494 Some PHY like Intel LXT971A need extra delay after
1493 reset before any MII register access is possible. 1495 reset before any MII register access is possible.
1494 For such PHY, set this option to the usec delay 1496 For such PHY, set this option to the usec delay
1495 required. (minimum 300usec for LXT971A) 1497 required. (minimum 300usec for LXT971A)
1496 1498
1497 CONFIG_PHY_CMD_DELAY (ppc4xx) 1499 CONFIG_PHY_CMD_DELAY (ppc4xx)
1498 1500
1499 Some PHY like Intel LXT971A need extra delay after 1501 Some PHY like Intel LXT971A need extra delay after
1500 command issued before MII status register can be read 1502 command issued before MII status register can be read
1501 1503
1502 - Ethernet address: 1504 - Ethernet address:
1503 CONFIG_ETHADDR 1505 CONFIG_ETHADDR
1504 CONFIG_ETH1ADDR 1506 CONFIG_ETH1ADDR
1505 CONFIG_ETH2ADDR 1507 CONFIG_ETH2ADDR
1506 CONFIG_ETH3ADDR 1508 CONFIG_ETH3ADDR
1507 CONFIG_ETH4ADDR 1509 CONFIG_ETH4ADDR
1508 CONFIG_ETH5ADDR 1510 CONFIG_ETH5ADDR
1509 1511
1510 Define a default value for Ethernet address to use 1512 Define a default value for Ethernet address to use
1511 for the respective Ethernet interface, in case this 1513 for the respective Ethernet interface, in case this
1512 is not determined automatically. 1514 is not determined automatically.
1513 1515
1514 - IP address: 1516 - IP address:
1515 CONFIG_IPADDR 1517 CONFIG_IPADDR
1516 1518
1517 Define a default value for the IP address to use for 1519 Define a default value for the IP address to use for
1518 the default Ethernet interface, in case this is not 1520 the default Ethernet interface, in case this is not
1519 determined through e.g. bootp. 1521 determined through e.g. bootp.
1520 (Environment variable "ipaddr") 1522 (Environment variable "ipaddr")
1521 1523
1522 - Server IP address: 1524 - Server IP address:
1523 CONFIG_SERVERIP 1525 CONFIG_SERVERIP
1524 1526
1525 Defines a default value for the IP address of a TFTP 1527 Defines a default value for the IP address of a TFTP
1526 server to contact when using the "tftboot" command. 1528 server to contact when using the "tftboot" command.
1527 (Environment variable "serverip") 1529 (Environment variable "serverip")
1528 1530
1529 CONFIG_KEEP_SERVERADDR 1531 CONFIG_KEEP_SERVERADDR
1530 1532
1531 Keeps the server's MAC address, in the env 'serveraddr' 1533 Keeps the server's MAC address, in the env 'serveraddr'
1532 for passing to bootargs (like Linux's netconsole option) 1534 for passing to bootargs (like Linux's netconsole option)
1533 1535
1534 - Gateway IP address: 1536 - Gateway IP address:
1535 CONFIG_GATEWAYIP 1537 CONFIG_GATEWAYIP
1536 1538
1537 Defines a default value for the IP address of the 1539 Defines a default value for the IP address of the
1538 default router where packets to other networks are 1540 default router where packets to other networks are
1539 sent to. 1541 sent to.
1540 (Environment variable "gatewayip") 1542 (Environment variable "gatewayip")
1541 1543
1542 - Subnet mask: 1544 - Subnet mask:
1543 CONFIG_NETMASK 1545 CONFIG_NETMASK
1544 1546
1545 Defines a default value for the subnet mask (or 1547 Defines a default value for the subnet mask (or
1546 routing prefix) which is used to determine if an IP 1548 routing prefix) which is used to determine if an IP
1547 address belongs to the local subnet or needs to be 1549 address belongs to the local subnet or needs to be
1548 forwarded through a router. 1550 forwarded through a router.
1549 (Environment variable "netmask") 1551 (Environment variable "netmask")
1550 1552
1551 - Multicast TFTP Mode: 1553 - Multicast TFTP Mode:
1552 CONFIG_MCAST_TFTP 1554 CONFIG_MCAST_TFTP
1553 1555
1554 Defines whether you want to support multicast TFTP as per 1556 Defines whether you want to support multicast TFTP as per
1555 rfc-2090; for example to work with atftp. Lets lots of targets 1557 rfc-2090; for example to work with atftp. Lets lots of targets
1556 tftp down the same boot image concurrently. Note: the Ethernet 1558 tftp down the same boot image concurrently. Note: the Ethernet
1557 driver in use must provide a function: mcast() to join/leave a 1559 driver in use must provide a function: mcast() to join/leave a
1558 multicast group. 1560 multicast group.
1559 1561
1560 - BOOTP Recovery Mode: 1562 - BOOTP Recovery Mode:
1561 CONFIG_BOOTP_RANDOM_DELAY 1563 CONFIG_BOOTP_RANDOM_DELAY
1562 1564
1563 If you have many targets in a network that try to 1565 If you have many targets in a network that try to
1564 boot using BOOTP, you may want to avoid that all 1566 boot using BOOTP, you may want to avoid that all
1565 systems send out BOOTP requests at precisely the same 1567 systems send out BOOTP requests at precisely the same
1566 moment (which would happen for instance at recovery 1568 moment (which would happen for instance at recovery
1567 from a power failure, when all systems will try to 1569 from a power failure, when all systems will try to
1568 boot, thus flooding the BOOTP server. Defining 1570 boot, thus flooding the BOOTP server. Defining
1569 CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be 1571 CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be
1570 inserted before sending out BOOTP requests. The 1572 inserted before sending out BOOTP requests. The
1571 following delays are inserted then: 1573 following delays are inserted then:
1572 1574
1573 1st BOOTP request: delay 0 ... 1 sec 1575 1st BOOTP request: delay 0 ... 1 sec
1574 2nd BOOTP request: delay 0 ... 2 sec 1576 2nd BOOTP request: delay 0 ... 2 sec
1575 3rd BOOTP request: delay 0 ... 4 sec 1577 3rd BOOTP request: delay 0 ... 4 sec
1576 4th and following 1578 4th and following
1577 BOOTP requests: delay 0 ... 8 sec 1579 BOOTP requests: delay 0 ... 8 sec
1578 1580
1579 - DHCP Advanced Options: 1581 - DHCP Advanced Options:
1580 You can fine tune the DHCP functionality by defining 1582 You can fine tune the DHCP functionality by defining
1581 CONFIG_BOOTP_* symbols: 1583 CONFIG_BOOTP_* symbols:
1582 1584
1583 CONFIG_BOOTP_SUBNETMASK 1585 CONFIG_BOOTP_SUBNETMASK
1584 CONFIG_BOOTP_GATEWAY 1586 CONFIG_BOOTP_GATEWAY
1585 CONFIG_BOOTP_HOSTNAME 1587 CONFIG_BOOTP_HOSTNAME
1586 CONFIG_BOOTP_NISDOMAIN 1588 CONFIG_BOOTP_NISDOMAIN
1587 CONFIG_BOOTP_BOOTPATH 1589 CONFIG_BOOTP_BOOTPATH
1588 CONFIG_BOOTP_BOOTFILESIZE 1590 CONFIG_BOOTP_BOOTFILESIZE
1589 CONFIG_BOOTP_DNS 1591 CONFIG_BOOTP_DNS
1590 CONFIG_BOOTP_DNS2 1592 CONFIG_BOOTP_DNS2
1591 CONFIG_BOOTP_SEND_HOSTNAME 1593 CONFIG_BOOTP_SEND_HOSTNAME
1592 CONFIG_BOOTP_NTPSERVER 1594 CONFIG_BOOTP_NTPSERVER
1593 CONFIG_BOOTP_TIMEOFFSET 1595 CONFIG_BOOTP_TIMEOFFSET
1594 CONFIG_BOOTP_VENDOREX 1596 CONFIG_BOOTP_VENDOREX
1595 CONFIG_BOOTP_MAY_FAIL 1597 CONFIG_BOOTP_MAY_FAIL
1596 1598
1597 CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip 1599 CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip
1598 environment variable, not the BOOTP server. 1600 environment variable, not the BOOTP server.
1599 1601
1600 CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found 1602 CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found
1601 after the configured retry count, the call will fail 1603 after the configured retry count, the call will fail
1602 instead of starting over. This can be used to fail over 1604 instead of starting over. This can be used to fail over
1603 to Link-local IP address configuration if the DHCP server 1605 to Link-local IP address configuration if the DHCP server
1604 is not available. 1606 is not available.
1605 1607
1606 CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS 1608 CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS
1607 serverip from a DHCP server, it is possible that more 1609 serverip from a DHCP server, it is possible that more
1608 than one DNS serverip is offered to the client. 1610 than one DNS serverip is offered to the client.
1609 If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS 1611 If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS
1610 serverip will be stored in the additional environment 1612 serverip will be stored in the additional environment
1611 variable "dnsip2". The first DNS serverip is always 1613 variable "dnsip2". The first DNS serverip is always
1612 stored in the variable "dnsip", when CONFIG_BOOTP_DNS 1614 stored in the variable "dnsip", when CONFIG_BOOTP_DNS
1613 is defined. 1615 is defined.
1614 1616
1615 CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable 1617 CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable
1616 to do a dynamic update of a DNS server. To do this, they 1618 to do a dynamic update of a DNS server. To do this, they
1617 need the hostname of the DHCP requester. 1619 need the hostname of the DHCP requester.
1618 If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content 1620 If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content
1619 of the "hostname" environment variable is passed as 1621 of the "hostname" environment variable is passed as
1620 option 12 to the DHCP server. 1622 option 12 to the DHCP server.
1621 1623
1622 CONFIG_BOOTP_DHCP_REQUEST_DELAY 1624 CONFIG_BOOTP_DHCP_REQUEST_DELAY
1623 1625
1624 A 32bit value in microseconds for a delay between 1626 A 32bit value in microseconds for a delay between
1625 receiving a "DHCP Offer" and sending the "DHCP Request". 1627 receiving a "DHCP Offer" and sending the "DHCP Request".
1626 This fixes a problem with certain DHCP servers that don't 1628 This fixes a problem with certain DHCP servers that don't
1627 respond 100% of the time to a "DHCP request". E.g. On an 1629 respond 100% of the time to a "DHCP request". E.g. On an
1628 AT91RM9200 processor running at 180MHz, this delay needed 1630 AT91RM9200 processor running at 180MHz, this delay needed
1629 to be *at least* 15,000 usec before a Windows Server 2003 1631 to be *at least* 15,000 usec before a Windows Server 2003
1630 DHCP server would reply 100% of the time. I recommend at 1632 DHCP server would reply 100% of the time. I recommend at
1631 least 50,000 usec to be safe. The alternative is to hope 1633 least 50,000 usec to be safe. The alternative is to hope
1632 that one of the retries will be successful but note that 1634 that one of the retries will be successful but note that
1633 the DHCP timeout and retry process takes a longer than 1635 the DHCP timeout and retry process takes a longer than
1634 this delay. 1636 this delay.
1637
1638 - Link-local IP address negotiation:
1639 Negotiate with other link-local clients on the local network
1640 for an address that doesn't require explicit configuration.
1641 This is especially useful if a DHCP server cannot be guaranteed
1642 to exist in all environments that the device must operate.
1643
1644 See doc/README.link-local for more information.
1635 1645
1636 - CDP Options: 1646 - CDP Options:
1637 CONFIG_CDP_DEVICE_ID 1647 CONFIG_CDP_DEVICE_ID
1638 1648
1639 The device id used in CDP trigger frames. 1649 The device id used in CDP trigger frames.
1640 1650
1641 CONFIG_CDP_DEVICE_ID_PREFIX 1651 CONFIG_CDP_DEVICE_ID_PREFIX
1642 1652
1643 A two character string which is prefixed to the MAC address 1653 A two character string which is prefixed to the MAC address
1644 of the device. 1654 of the device.
1645 1655
1646 CONFIG_CDP_PORT_ID 1656 CONFIG_CDP_PORT_ID
1647 1657
1648 A printf format string which contains the ascii name of 1658 A printf format string which contains the ascii name of
1649 the port. Normally is set to "eth%d" which sets 1659 the port. Normally is set to "eth%d" which sets
1650 eth0 for the first Ethernet, eth1 for the second etc. 1660 eth0 for the first Ethernet, eth1 for the second etc.
1651 1661
1652 CONFIG_CDP_CAPABILITIES 1662 CONFIG_CDP_CAPABILITIES
1653 1663
1654 A 32bit integer which indicates the device capabilities; 1664 A 32bit integer which indicates the device capabilities;
1655 0x00000010 for a normal host which does not forwards. 1665 0x00000010 for a normal host which does not forwards.
1656 1666
1657 CONFIG_CDP_VERSION 1667 CONFIG_CDP_VERSION
1658 1668
1659 An ascii string containing the version of the software. 1669 An ascii string containing the version of the software.
1660 1670
1661 CONFIG_CDP_PLATFORM 1671 CONFIG_CDP_PLATFORM
1662 1672
1663 An ascii string containing the name of the platform. 1673 An ascii string containing the name of the platform.
1664 1674
1665 CONFIG_CDP_TRIGGER 1675 CONFIG_CDP_TRIGGER
1666 1676
1667 A 32bit integer sent on the trigger. 1677 A 32bit integer sent on the trigger.
1668 1678
1669 CONFIG_CDP_POWER_CONSUMPTION 1679 CONFIG_CDP_POWER_CONSUMPTION
1670 1680
1671 A 16bit integer containing the power consumption of the 1681 A 16bit integer containing the power consumption of the
1672 device in .1 of milliwatts. 1682 device in .1 of milliwatts.
1673 1683
1674 CONFIG_CDP_APPLIANCE_VLAN_TYPE 1684 CONFIG_CDP_APPLIANCE_VLAN_TYPE
1675 1685
1676 A byte containing the id of the VLAN. 1686 A byte containing the id of the VLAN.
1677 1687
1678 - Status LED: CONFIG_STATUS_LED 1688 - Status LED: CONFIG_STATUS_LED
1679 1689
1680 Several configurations allow to display the current 1690 Several configurations allow to display the current
1681 status using a LED. For instance, the LED will blink 1691 status using a LED. For instance, the LED will blink
1682 fast while running U-Boot code, stop blinking as 1692 fast while running U-Boot code, stop blinking as
1683 soon as a reply to a BOOTP request was received, and 1693 soon as a reply to a BOOTP request was received, and
1684 start blinking slow once the Linux kernel is running 1694 start blinking slow once the Linux kernel is running
1685 (supported by a status LED driver in the Linux 1695 (supported by a status LED driver in the Linux
1686 kernel). Defining CONFIG_STATUS_LED enables this 1696 kernel). Defining CONFIG_STATUS_LED enables this
1687 feature in U-Boot. 1697 feature in U-Boot.
1688 1698
1689 - CAN Support: CONFIG_CAN_DRIVER 1699 - CAN Support: CONFIG_CAN_DRIVER
1690 1700
1691 Defining CONFIG_CAN_DRIVER enables CAN driver support 1701 Defining CONFIG_CAN_DRIVER enables CAN driver support
1692 on those systems that support this (optional) 1702 on those systems that support this (optional)
1693 feature, like the TQM8xxL modules. 1703 feature, like the TQM8xxL modules.
1694 1704
1695 - I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C 1705 - I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C
1696 1706
1697 These enable I2C serial bus commands. Defining either of 1707 These enable I2C serial bus commands. Defining either of
1698 (but not both of) CONFIG_HARD_I2C or CONFIG_SOFT_I2C will 1708 (but not both of) CONFIG_HARD_I2C or CONFIG_SOFT_I2C will
1699 include the appropriate I2C driver for the selected CPU. 1709 include the appropriate I2C driver for the selected CPU.
1700 1710
1701 This will allow you to use i2c commands at the u-boot 1711 This will allow you to use i2c commands at the u-boot
1702 command line (as long as you set CONFIG_CMD_I2C in 1712 command line (as long as you set CONFIG_CMD_I2C in
1703 CONFIG_COMMANDS) and communicate with i2c based realtime 1713 CONFIG_COMMANDS) and communicate with i2c based realtime
1704 clock chips. See common/cmd_i2c.c for a description of the 1714 clock chips. See common/cmd_i2c.c for a description of the
1705 command line interface. 1715 command line interface.
1706 1716
1707 CONFIG_HARD_I2C selects a hardware I2C controller. 1717 CONFIG_HARD_I2C selects a hardware I2C controller.
1708 1718
1709 CONFIG_SOFT_I2C configures u-boot to use a software (aka 1719 CONFIG_SOFT_I2C configures u-boot to use a software (aka
1710 bit-banging) driver instead of CPM or similar hardware 1720 bit-banging) driver instead of CPM or similar hardware
1711 support for I2C. 1721 support for I2C.
1712 1722
1713 There are several other quantities that must also be 1723 There are several other quantities that must also be
1714 defined when you define CONFIG_HARD_I2C or CONFIG_SOFT_I2C. 1724 defined when you define CONFIG_HARD_I2C or CONFIG_SOFT_I2C.
1715 1725
1716 In both cases you will need to define CONFIG_SYS_I2C_SPEED 1726 In both cases you will need to define CONFIG_SYS_I2C_SPEED
1717 to be the frequency (in Hz) at which you wish your i2c bus 1727 to be the frequency (in Hz) at which you wish your i2c bus
1718 to run and CONFIG_SYS_I2C_SLAVE to be the address of this node (ie 1728 to run and CONFIG_SYS_I2C_SLAVE to be the address of this node (ie
1719 the CPU's i2c node address). 1729 the CPU's i2c node address).
1720 1730
1721 Now, the u-boot i2c code for the mpc8xx 1731 Now, the u-boot i2c code for the mpc8xx
1722 (arch/powerpc/cpu/mpc8xx/i2c.c) sets the CPU up as a master node 1732 (arch/powerpc/cpu/mpc8xx/i2c.c) sets the CPU up as a master node
1723 and so its address should therefore be cleared to 0 (See, 1733 and so its address should therefore be cleared to 0 (See,
1724 eg, MPC823e User's Manual p.16-473). So, set 1734 eg, MPC823e User's Manual p.16-473). So, set
1725 CONFIG_SYS_I2C_SLAVE to 0. 1735 CONFIG_SYS_I2C_SLAVE to 0.
1726 1736
1727 CONFIG_SYS_I2C_INIT_MPC5XXX 1737 CONFIG_SYS_I2C_INIT_MPC5XXX
1728 1738
1729 When a board is reset during an i2c bus transfer 1739 When a board is reset during an i2c bus transfer
1730 chips might think that the current transfer is still 1740 chips might think that the current transfer is still
1731 in progress. Reset the slave devices by sending start 1741 in progress. Reset the slave devices by sending start
1732 commands until the slave device responds. 1742 commands until the slave device responds.
1733 1743
1734 That's all that's required for CONFIG_HARD_I2C. 1744 That's all that's required for CONFIG_HARD_I2C.
1735 1745
1736 If you use the software i2c interface (CONFIG_SOFT_I2C) 1746 If you use the software i2c interface (CONFIG_SOFT_I2C)
1737 then the following macros need to be defined (examples are 1747 then the following macros need to be defined (examples are
1738 from include/configs/lwmon.h): 1748 from include/configs/lwmon.h):
1739 1749
1740 I2C_INIT 1750 I2C_INIT
1741 1751
1742 (Optional). Any commands necessary to enable the I2C 1752 (Optional). Any commands necessary to enable the I2C
1743 controller or configure ports. 1753 controller or configure ports.
1744 1754
1745 eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) 1755 eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL)
1746 1756
1747 I2C_PORT 1757 I2C_PORT
1748 1758
1749 (Only for MPC8260 CPU). The I/O port to use (the code 1759 (Only for MPC8260 CPU). The I/O port to use (the code
1750 assumes both bits are on the same port). Valid values 1760 assumes both bits are on the same port). Valid values
1751 are 0..3 for ports A..D. 1761 are 0..3 for ports A..D.
1752 1762
1753 I2C_ACTIVE 1763 I2C_ACTIVE
1754 1764
1755 The code necessary to make the I2C data line active 1765 The code necessary to make the I2C data line active
1756 (driven). If the data line is open collector, this 1766 (driven). If the data line is open collector, this
1757 define can be null. 1767 define can be null.
1758 1768
1759 eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) 1769 eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA)
1760 1770
1761 I2C_TRISTATE 1771 I2C_TRISTATE
1762 1772
1763 The code necessary to make the I2C data line tri-stated 1773 The code necessary to make the I2C data line tri-stated
1764 (inactive). If the data line is open collector, this 1774 (inactive). If the data line is open collector, this
1765 define can be null. 1775 define can be null.
1766 1776
1767 eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) 1777 eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
1768 1778
1769 I2C_READ 1779 I2C_READ
1770 1780
1771 Code that returns TRUE if the I2C data line is high, 1781 Code that returns TRUE if the I2C data line is high,
1772 FALSE if it is low. 1782 FALSE if it is low.
1773 1783
1774 eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) 1784 eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
1775 1785
1776 I2C_SDA(bit) 1786 I2C_SDA(bit)
1777 1787
1778 If <bit> is TRUE, sets the I2C data line high. If it 1788 If <bit> is TRUE, sets the I2C data line high. If it
1779 is FALSE, it clears it (low). 1789 is FALSE, it clears it (low).
1780 1790
1781 eg: #define I2C_SDA(bit) \ 1791 eg: #define I2C_SDA(bit) \
1782 if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ 1792 if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \
1783 else immr->im_cpm.cp_pbdat &= ~PB_SDA 1793 else immr->im_cpm.cp_pbdat &= ~PB_SDA
1784 1794
1785 I2C_SCL(bit) 1795 I2C_SCL(bit)
1786 1796
1787 If <bit> is TRUE, sets the I2C clock line high. If it 1797 If <bit> is TRUE, sets the I2C clock line high. If it
1788 is FALSE, it clears it (low). 1798 is FALSE, it clears it (low).
1789 1799
1790 eg: #define I2C_SCL(bit) \ 1800 eg: #define I2C_SCL(bit) \
1791 if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ 1801 if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \
1792 else immr->im_cpm.cp_pbdat &= ~PB_SCL 1802 else immr->im_cpm.cp_pbdat &= ~PB_SCL
1793 1803
1794 I2C_DELAY 1804 I2C_DELAY
1795 1805
1796 This delay is invoked four times per clock cycle so this 1806 This delay is invoked four times per clock cycle so this
1797 controls the rate of data transfer. The data rate thus 1807 controls the rate of data transfer. The data rate thus
1798 is 1 / (I2C_DELAY * 4). Often defined to be something 1808 is 1 / (I2C_DELAY * 4). Often defined to be something
1799 like: 1809 like:
1800 1810
1801 #define I2C_DELAY udelay(2) 1811 #define I2C_DELAY udelay(2)
1802 1812
1803 CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA 1813 CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA
1804 1814
1805 If your arch supports the generic GPIO framework (asm/gpio.h), 1815 If your arch supports the generic GPIO framework (asm/gpio.h),
1806 then you may alternatively define the two GPIOs that are to be 1816 then you may alternatively define the two GPIOs that are to be
1807 used as SCL / SDA. Any of the previous I2C_xxx macros will 1817 used as SCL / SDA. Any of the previous I2C_xxx macros will
1808 have GPIO-based defaults assigned to them as appropriate. 1818 have GPIO-based defaults assigned to them as appropriate.
1809 1819
1810 You should define these to the GPIO value as given directly to 1820 You should define these to the GPIO value as given directly to
1811 the generic GPIO functions. 1821 the generic GPIO functions.
1812 1822
1813 CONFIG_SYS_I2C_INIT_BOARD 1823 CONFIG_SYS_I2C_INIT_BOARD
1814 1824
1815 When a board is reset during an i2c bus transfer 1825 When a board is reset during an i2c bus transfer
1816 chips might think that the current transfer is still 1826 chips might think that the current transfer is still
1817 in progress. On some boards it is possible to access 1827 in progress. On some boards it is possible to access
1818 the i2c SCLK line directly, either by using the 1828 the i2c SCLK line directly, either by using the
1819 processor pin as a GPIO or by having a second pin 1829 processor pin as a GPIO or by having a second pin
1820 connected to the bus. If this option is defined a 1830 connected to the bus. If this option is defined a
1821 custom i2c_init_board() routine in boards/xxx/board.c 1831 custom i2c_init_board() routine in boards/xxx/board.c
1822 is run early in the boot sequence. 1832 is run early in the boot sequence.
1823 1833
1824 CONFIG_SYS_I2C_BOARD_LATE_INIT 1834 CONFIG_SYS_I2C_BOARD_LATE_INIT
1825 1835
1826 An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is 1836 An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is
1827 defined a custom i2c_board_late_init() routine in 1837 defined a custom i2c_board_late_init() routine in
1828 boards/xxx/board.c is run AFTER the operations in i2c_init() 1838 boards/xxx/board.c is run AFTER the operations in i2c_init()
1829 is completed. This callpoint can be used to unreset i2c bus 1839 is completed. This callpoint can be used to unreset i2c bus
1830 using CPU i2c controller register accesses for CPUs whose i2c 1840 using CPU i2c controller register accesses for CPUs whose i2c
1831 controller provide such a method. It is called at the end of 1841 controller provide such a method. It is called at the end of
1832 i2c_init() to allow i2c_init operations to setup the i2c bus 1842 i2c_init() to allow i2c_init operations to setup the i2c bus
1833 controller on the CPU (e.g. setting bus speed & slave address). 1843 controller on the CPU (e.g. setting bus speed & slave address).
1834 1844
1835 CONFIG_I2CFAST (PPC405GP|PPC405EP only) 1845 CONFIG_I2CFAST (PPC405GP|PPC405EP only)
1836 1846
1837 This option enables configuration of bi_iic_fast[] flags 1847 This option enables configuration of bi_iic_fast[] flags
1838 in u-boot bd_info structure based on u-boot environment 1848 in u-boot bd_info structure based on u-boot environment
1839 variable "i2cfast". (see also i2cfast) 1849 variable "i2cfast". (see also i2cfast)
1840 1850
1841 CONFIG_I2C_MULTI_BUS 1851 CONFIG_I2C_MULTI_BUS
1842 1852
1843 This option allows the use of multiple I2C buses, each of which 1853 This option allows the use of multiple I2C buses, each of which
1844 must have a controller. At any point in time, only one bus is 1854 must have a controller. At any point in time, only one bus is
1845 active. To switch to a different bus, use the 'i2c dev' command. 1855 active. To switch to a different bus, use the 'i2c dev' command.
1846 Note that bus numbering is zero-based. 1856 Note that bus numbering is zero-based.
1847 1857
1848 CONFIG_SYS_I2C_NOPROBES 1858 CONFIG_SYS_I2C_NOPROBES
1849 1859
1850 This option specifies a list of I2C devices that will be skipped 1860 This option specifies a list of I2C devices that will be skipped
1851 when the 'i2c probe' command is issued. If CONFIG_I2C_MULTI_BUS 1861 when the 'i2c probe' command is issued. If CONFIG_I2C_MULTI_BUS
1852 is set, specify a list of bus-device pairs. Otherwise, specify 1862 is set, specify a list of bus-device pairs. Otherwise, specify
1853 a 1D array of device addresses 1863 a 1D array of device addresses
1854 1864
1855 e.g. 1865 e.g.
1856 #undef CONFIG_I2C_MULTI_BUS 1866 #undef CONFIG_I2C_MULTI_BUS
1857 #define CONFIG_SYS_I2C_NOPROBES {0x50,0x68} 1867 #define CONFIG_SYS_I2C_NOPROBES {0x50,0x68}
1858 1868
1859 will skip addresses 0x50 and 0x68 on a board with one I2C bus 1869 will skip addresses 0x50 and 0x68 on a board with one I2C bus
1860 1870
1861 #define CONFIG_I2C_MULTI_BUS 1871 #define CONFIG_I2C_MULTI_BUS
1862 #define CONFIG_SYS_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}} 1872 #define CONFIG_SYS_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}}
1863 1873
1864 will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1 1874 will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1
1865 1875
1866 CONFIG_SYS_SPD_BUS_NUM 1876 CONFIG_SYS_SPD_BUS_NUM
1867 1877
1868 If defined, then this indicates the I2C bus number for DDR SPD. 1878 If defined, then this indicates the I2C bus number for DDR SPD.
1869 If not defined, then U-Boot assumes that SPD is on I2C bus 0. 1879 If not defined, then U-Boot assumes that SPD is on I2C bus 0.
1870 1880
1871 CONFIG_SYS_RTC_BUS_NUM 1881 CONFIG_SYS_RTC_BUS_NUM
1872 1882
1873 If defined, then this indicates the I2C bus number for the RTC. 1883 If defined, then this indicates the I2C bus number for the RTC.
1874 If not defined, then U-Boot assumes that RTC is on I2C bus 0. 1884 If not defined, then U-Boot assumes that RTC is on I2C bus 0.
1875 1885
1876 CONFIG_SYS_DTT_BUS_NUM 1886 CONFIG_SYS_DTT_BUS_NUM
1877 1887
1878 If defined, then this indicates the I2C bus number for the DTT. 1888 If defined, then this indicates the I2C bus number for the DTT.
1879 If not defined, then U-Boot assumes that DTT is on I2C bus 0. 1889 If not defined, then U-Boot assumes that DTT is on I2C bus 0.
1880 1890
1881 CONFIG_SYS_I2C_DTT_ADDR: 1891 CONFIG_SYS_I2C_DTT_ADDR:
1882 1892
1883 If defined, specifies the I2C address of the DTT device. 1893 If defined, specifies the I2C address of the DTT device.
1884 If not defined, then U-Boot uses predefined value for 1894 If not defined, then U-Boot uses predefined value for
1885 specified DTT device. 1895 specified DTT device.
1886 1896
1887 CONFIG_FSL_I2C 1897 CONFIG_FSL_I2C
1888 1898
1889 Define this option if you want to use Freescale's I2C driver in 1899 Define this option if you want to use Freescale's I2C driver in
1890 drivers/i2c/fsl_i2c.c. 1900 drivers/i2c/fsl_i2c.c.
1891 1901
1892 CONFIG_I2C_MUX 1902 CONFIG_I2C_MUX
1893 1903
1894 Define this option if you have I2C devices reached over 1 .. n 1904 Define this option if you have I2C devices reached over 1 .. n
1895 I2C Muxes like the pca9544a. This option addes a new I2C 1905 I2C Muxes like the pca9544a. This option addes a new I2C
1896 Command "i2c bus [muxtype:muxaddr:muxchannel]" which adds a 1906 Command "i2c bus [muxtype:muxaddr:muxchannel]" which adds a
1897 new I2C Bus to the existing I2C Busses. If you select the 1907 new I2C Bus to the existing I2C Busses. If you select the
1898 new Bus with "i2c dev", u-bbot sends first the commandos for 1908 new Bus with "i2c dev", u-bbot sends first the commandos for
1899 the muxes to activate this new "bus". 1909 the muxes to activate this new "bus".
1900 1910
1901 CONFIG_I2C_MULTI_BUS must be also defined, to use this 1911 CONFIG_I2C_MULTI_BUS must be also defined, to use this
1902 feature! 1912 feature!
1903 1913
1904 Example: 1914 Example:
1905 Adding a new I2C Bus reached over 2 pca9544a muxes 1915 Adding a new I2C Bus reached over 2 pca9544a muxes
1906 The First mux with address 70 and channel 6 1916 The First mux with address 70 and channel 6
1907 The Second mux with address 71 and channel 4 1917 The Second mux with address 71 and channel 4
1908 1918
1909 => i2c bus pca9544a:70:6:pca9544a:71:4 1919 => i2c bus pca9544a:70:6:pca9544a:71:4
1910 1920
1911 Use the "i2c bus" command without parameter, to get a list 1921 Use the "i2c bus" command without parameter, to get a list
1912 of I2C Busses with muxes: 1922 of I2C Busses with muxes:
1913 1923
1914 => i2c bus 1924 => i2c bus
1915 Busses reached over muxes: 1925 Busses reached over muxes:
1916 Bus ID: 2 1926 Bus ID: 2
1917 reached over Mux(es): 1927 reached over Mux(es):
1918 pca9544a@70 ch: 4 1928 pca9544a@70 ch: 4
1919 Bus ID: 3 1929 Bus ID: 3
1920 reached over Mux(es): 1930 reached over Mux(es):
1921 pca9544a@70 ch: 6 1931 pca9544a@70 ch: 6
1922 pca9544a@71 ch: 4 1932 pca9544a@71 ch: 4
1923 => 1933 =>
1924 1934
1925 If you now switch to the new I2C Bus 3 with "i2c dev 3" 1935 If you now switch to the new I2C Bus 3 with "i2c dev 3"
1926 u-boot first sends the command to the mux@70 to enable 1936 u-boot first sends the command to the mux@70 to enable
1927 channel 6, and then the command to the mux@71 to enable 1937 channel 6, and then the command to the mux@71 to enable
1928 the channel 4. 1938 the channel 4.
1929 1939
1930 After that, you can use the "normal" i2c commands as 1940 After that, you can use the "normal" i2c commands as
1931 usual to communicate with your I2C devices behind 1941 usual to communicate with your I2C devices behind
1932 the 2 muxes. 1942 the 2 muxes.
1933 1943
1934 This option is actually implemented for the bitbanging 1944 This option is actually implemented for the bitbanging
1935 algorithm in common/soft_i2c.c and for the Hardware I2C 1945 algorithm in common/soft_i2c.c and for the Hardware I2C
1936 Bus on the MPC8260. But it should be not so difficult 1946 Bus on the MPC8260. But it should be not so difficult
1937 to add this option to other architectures. 1947 to add this option to other architectures.
1938 1948
1939 CONFIG_SOFT_I2C_READ_REPEATED_START 1949 CONFIG_SOFT_I2C_READ_REPEATED_START
1940 1950
1941 defining this will force the i2c_read() function in 1951 defining this will force the i2c_read() function in
1942 the soft_i2c driver to perform an I2C repeated start 1952 the soft_i2c driver to perform an I2C repeated start
1943 between writing the address pointer and reading the 1953 between writing the address pointer and reading the
1944 data. If this define is omitted the default behaviour 1954 data. If this define is omitted the default behaviour
1945 of doing a stop-start sequence will be used. Most I2C 1955 of doing a stop-start sequence will be used. Most I2C
1946 devices can use either method, but some require one or 1956 devices can use either method, but some require one or
1947 the other. 1957 the other.
1948 1958
1949 - SPI Support: CONFIG_SPI 1959 - SPI Support: CONFIG_SPI
1950 1960
1951 Enables SPI driver (so far only tested with 1961 Enables SPI driver (so far only tested with
1952 SPI EEPROM, also an instance works with Crystal A/D and 1962 SPI EEPROM, also an instance works with Crystal A/D and
1953 D/As on the SACSng board) 1963 D/As on the SACSng board)
1954 1964
1955 CONFIG_SH_SPI 1965 CONFIG_SH_SPI
1956 1966
1957 Enables the driver for SPI controller on SuperH. Currently 1967 Enables the driver for SPI controller on SuperH. Currently
1958 only SH7757 is supported. 1968 only SH7757 is supported.
1959 1969
1960 CONFIG_SPI_X 1970 CONFIG_SPI_X
1961 1971
1962 Enables extended (16-bit) SPI EEPROM addressing. 1972 Enables extended (16-bit) SPI EEPROM addressing.
1963 (symmetrical to CONFIG_I2C_X) 1973 (symmetrical to CONFIG_I2C_X)
1964 1974
1965 CONFIG_SOFT_SPI 1975 CONFIG_SOFT_SPI
1966 1976
1967 Enables a software (bit-bang) SPI driver rather than 1977 Enables a software (bit-bang) SPI driver rather than
1968 using hardware support. This is a general purpose 1978 using hardware support. This is a general purpose
1969 driver that only requires three general I/O port pins 1979 driver that only requires three general I/O port pins
1970 (two outputs, one input) to function. If this is 1980 (two outputs, one input) to function. If this is
1971 defined, the board configuration must define several 1981 defined, the board configuration must define several
1972 SPI configuration items (port pins to use, etc). For 1982 SPI configuration items (port pins to use, etc). For
1973 an example, see include/configs/sacsng.h. 1983 an example, see include/configs/sacsng.h.
1974 1984
1975 CONFIG_HARD_SPI 1985 CONFIG_HARD_SPI
1976 1986
1977 Enables a hardware SPI driver for general-purpose reads 1987 Enables a hardware SPI driver for general-purpose reads
1978 and writes. As with CONFIG_SOFT_SPI, the board configuration 1988 and writes. As with CONFIG_SOFT_SPI, the board configuration
1979 must define a list of chip-select function pointers. 1989 must define a list of chip-select function pointers.
1980 Currently supported on some MPC8xxx processors. For an 1990 Currently supported on some MPC8xxx processors. For an
1981 example, see include/configs/mpc8349emds.h. 1991 example, see include/configs/mpc8349emds.h.
1982 1992
1983 CONFIG_MXC_SPI 1993 CONFIG_MXC_SPI
1984 1994
1985 Enables the driver for the SPI controllers on i.MX and MXC 1995 Enables the driver for the SPI controllers on i.MX and MXC
1986 SoCs. Currently i.MX31/35/51 are supported. 1996 SoCs. Currently i.MX31/35/51 are supported.
1987 1997
1988 - FPGA Support: CONFIG_FPGA 1998 - FPGA Support: CONFIG_FPGA
1989 1999
1990 Enables FPGA subsystem. 2000 Enables FPGA subsystem.
1991 2001
1992 CONFIG_FPGA_<vendor> 2002 CONFIG_FPGA_<vendor>
1993 2003
1994 Enables support for specific chip vendors. 2004 Enables support for specific chip vendors.
1995 (ALTERA, XILINX) 2005 (ALTERA, XILINX)
1996 2006
1997 CONFIG_FPGA_<family> 2007 CONFIG_FPGA_<family>
1998 2008
1999 Enables support for FPGA family. 2009 Enables support for FPGA family.
2000 (SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX) 2010 (SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX)
2001 2011
2002 CONFIG_FPGA_COUNT 2012 CONFIG_FPGA_COUNT
2003 2013
2004 Specify the number of FPGA devices to support. 2014 Specify the number of FPGA devices to support.
2005 2015
2006 CONFIG_SYS_FPGA_PROG_FEEDBACK 2016 CONFIG_SYS_FPGA_PROG_FEEDBACK
2007 2017
2008 Enable printing of hash marks during FPGA configuration. 2018 Enable printing of hash marks during FPGA configuration.
2009 2019
2010 CONFIG_SYS_FPGA_CHECK_BUSY 2020 CONFIG_SYS_FPGA_CHECK_BUSY
2011 2021
2012 Enable checks on FPGA configuration interface busy 2022 Enable checks on FPGA configuration interface busy
2013 status by the configuration function. This option 2023 status by the configuration function. This option
2014 will require a board or device specific function to 2024 will require a board or device specific function to
2015 be written. 2025 be written.
2016 2026
2017 CONFIG_FPGA_DELAY 2027 CONFIG_FPGA_DELAY
2018 2028
2019 If defined, a function that provides delays in the FPGA 2029 If defined, a function that provides delays in the FPGA
2020 configuration driver. 2030 configuration driver.
2021 2031
2022 CONFIG_SYS_FPGA_CHECK_CTRLC 2032 CONFIG_SYS_FPGA_CHECK_CTRLC
2023 Allow Control-C to interrupt FPGA configuration 2033 Allow Control-C to interrupt FPGA configuration
2024 2034
2025 CONFIG_SYS_FPGA_CHECK_ERROR 2035 CONFIG_SYS_FPGA_CHECK_ERROR
2026 2036
2027 Check for configuration errors during FPGA bitfile 2037 Check for configuration errors during FPGA bitfile
2028 loading. For example, abort during Virtex II 2038 loading. For example, abort during Virtex II
2029 configuration if the INIT_B line goes low (which 2039 configuration if the INIT_B line goes low (which
2030 indicated a CRC error). 2040 indicated a CRC error).
2031 2041
2032 CONFIG_SYS_FPGA_WAIT_INIT 2042 CONFIG_SYS_FPGA_WAIT_INIT
2033 2043
2034 Maximum time to wait for the INIT_B line to deassert 2044 Maximum time to wait for the INIT_B line to deassert
2035 after PROB_B has been deasserted during a Virtex II 2045 after PROB_B has been deasserted during a Virtex II
2036 FPGA configuration sequence. The default time is 500 2046 FPGA configuration sequence. The default time is 500
2037 ms. 2047 ms.
2038 2048
2039 CONFIG_SYS_FPGA_WAIT_BUSY 2049 CONFIG_SYS_FPGA_WAIT_BUSY
2040 2050
2041 Maximum time to wait for BUSY to deassert during 2051 Maximum time to wait for BUSY to deassert during
2042 Virtex II FPGA configuration. The default is 5 ms. 2052 Virtex II FPGA configuration. The default is 5 ms.
2043 2053
2044 CONFIG_SYS_FPGA_WAIT_CONFIG 2054 CONFIG_SYS_FPGA_WAIT_CONFIG
2045 2055
2046 Time to wait after FPGA configuration. The default is 2056 Time to wait after FPGA configuration. The default is
2047 200 ms. 2057 200 ms.
2048 2058
2049 - Configuration Management: 2059 - Configuration Management:
2050 CONFIG_IDENT_STRING 2060 CONFIG_IDENT_STRING
2051 2061
2052 If defined, this string will be added to the U-Boot 2062 If defined, this string will be added to the U-Boot
2053 version information (U_BOOT_VERSION) 2063 version information (U_BOOT_VERSION)
2054 2064
2055 - Vendor Parameter Protection: 2065 - Vendor Parameter Protection:
2056 2066
2057 U-Boot considers the values of the environment 2067 U-Boot considers the values of the environment
2058 variables "serial#" (Board Serial Number) and 2068 variables "serial#" (Board Serial Number) and
2059 "ethaddr" (Ethernet Address) to be parameters that 2069 "ethaddr" (Ethernet Address) to be parameters that
2060 are set once by the board vendor / manufacturer, and 2070 are set once by the board vendor / manufacturer, and
2061 protects these variables from casual modification by 2071 protects these variables from casual modification by
2062 the user. Once set, these variables are read-only, 2072 the user. Once set, these variables are read-only,
2063 and write or delete attempts are rejected. You can 2073 and write or delete attempts are rejected. You can
2064 change this behaviour: 2074 change this behaviour:
2065 2075
2066 If CONFIG_ENV_OVERWRITE is #defined in your config 2076 If CONFIG_ENV_OVERWRITE is #defined in your config
2067 file, the write protection for vendor parameters is 2077 file, the write protection for vendor parameters is
2068 completely disabled. Anybody can change or delete 2078 completely disabled. Anybody can change or delete
2069 these parameters. 2079 these parameters.
2070 2080
2071 Alternatively, if you #define _both_ CONFIG_ETHADDR 2081 Alternatively, if you #define _both_ CONFIG_ETHADDR
2072 _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default 2082 _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
2073 Ethernet address is installed in the environment, 2083 Ethernet address is installed in the environment,
2074 which can be changed exactly ONCE by the user. [The 2084 which can be changed exactly ONCE by the user. [The
2075 serial# is unaffected by this, i. e. it remains 2085 serial# is unaffected by this, i. e. it remains
2076 read-only.] 2086 read-only.]
2077 2087
2078 - Protected RAM: 2088 - Protected RAM:
2079 CONFIG_PRAM 2089 CONFIG_PRAM
2080 2090
2081 Define this variable to enable the reservation of 2091 Define this variable to enable the reservation of
2082 "protected RAM", i. e. RAM which is not overwritten 2092 "protected RAM", i. e. RAM which is not overwritten
2083 by U-Boot. Define CONFIG_PRAM to hold the number of 2093 by U-Boot. Define CONFIG_PRAM to hold the number of
2084 kB you want to reserve for pRAM. You can overwrite 2094 kB you want to reserve for pRAM. You can overwrite
2085 this default value by defining an environment 2095 this default value by defining an environment
2086 variable "pram" to the number of kB you want to 2096 variable "pram" to the number of kB you want to
2087 reserve. Note that the board info structure will 2097 reserve. Note that the board info structure will
2088 still show the full amount of RAM. If pRAM is 2098 still show the full amount of RAM. If pRAM is
2089 reserved, a new environment variable "mem" will 2099 reserved, a new environment variable "mem" will
2090 automatically be defined to hold the amount of 2100 automatically be defined to hold the amount of
2091 remaining RAM in a form that can be passed as boot 2101 remaining RAM in a form that can be passed as boot
2092 argument to Linux, for instance like that: 2102 argument to Linux, for instance like that:
2093 2103
2094 setenv bootargs ... mem=\${mem} 2104 setenv bootargs ... mem=\${mem}
2095 saveenv 2105 saveenv
2096 2106
2097 This way you can tell Linux not to use this memory, 2107 This way you can tell Linux not to use this memory,
2098 either, which results in a memory region that will 2108 either, which results in a memory region that will
2099 not be affected by reboots. 2109 not be affected by reboots.
2100 2110
2101 *WARNING* If your board configuration uses automatic 2111 *WARNING* If your board configuration uses automatic
2102 detection of the RAM size, you must make sure that 2112 detection of the RAM size, you must make sure that
2103 this memory test is non-destructive. So far, the 2113 this memory test is non-destructive. So far, the
2104 following board configurations are known to be 2114 following board configurations are known to be
2105 "pRAM-clean": 2115 "pRAM-clean":
2106 2116
2107 ETX094, IVMS8, IVML24, SPD8xx, TQM8xxL, 2117 ETX094, IVMS8, IVML24, SPD8xx, TQM8xxL,
2108 HERMES, IP860, RPXlite, LWMON, LANTEC, 2118 HERMES, IP860, RPXlite, LWMON, LANTEC,
2109 FLAGADM, TQM8260 2119 FLAGADM, TQM8260
2110 2120
2111 - Error Recovery: 2121 - Error Recovery:
2112 CONFIG_PANIC_HANG 2122 CONFIG_PANIC_HANG
2113 2123
2114 Define this variable to stop the system in case of a 2124 Define this variable to stop the system in case of a
2115 fatal error, so that you have to reset it manually. 2125 fatal error, so that you have to reset it manually.
2116 This is probably NOT a good idea for an embedded 2126 This is probably NOT a good idea for an embedded
2117 system where you want the system to reboot 2127 system where you want the system to reboot
2118 automatically as fast as possible, but it may be 2128 automatically as fast as possible, but it may be
2119 useful during development since you can try to debug 2129 useful during development since you can try to debug
2120 the conditions that lead to the situation. 2130 the conditions that lead to the situation.
2121 2131
2122 CONFIG_NET_RETRY_COUNT 2132 CONFIG_NET_RETRY_COUNT
2123 2133
2124 This variable defines the number of retries for 2134 This variable defines the number of retries for
2125 network operations like ARP, RARP, TFTP, or BOOTP 2135 network operations like ARP, RARP, TFTP, or BOOTP
2126 before giving up the operation. If not defined, a 2136 before giving up the operation. If not defined, a
2127 default value of 5 is used. 2137 default value of 5 is used.
2128 2138
2129 CONFIG_ARP_TIMEOUT 2139 CONFIG_ARP_TIMEOUT
2130 2140
2131 Timeout waiting for an ARP reply in milliseconds. 2141 Timeout waiting for an ARP reply in milliseconds.
2132 2142
2133 - Command Interpreter: 2143 - Command Interpreter:
2134 CONFIG_AUTO_COMPLETE 2144 CONFIG_AUTO_COMPLETE
2135 2145
2136 Enable auto completion of commands using TAB. 2146 Enable auto completion of commands using TAB.
2137 2147
2138 Note that this feature has NOT been implemented yet 2148 Note that this feature has NOT been implemented yet
2139 for the "hush" shell. 2149 for the "hush" shell.
2140 2150
2141 2151
2142 CONFIG_SYS_HUSH_PARSER 2152 CONFIG_SYS_HUSH_PARSER
2143 2153
2144 Define this variable to enable the "hush" shell (from 2154 Define this variable to enable the "hush" shell (from
2145 Busybox) as command line interpreter, thus enabling 2155 Busybox) as command line interpreter, thus enabling
2146 powerful command line syntax like 2156 powerful command line syntax like
2147 if...then...else...fi conditionals or `&&' and '||' 2157 if...then...else...fi conditionals or `&&' and '||'
2148 constructs ("shell scripts"). 2158 constructs ("shell scripts").
2149 2159
2150 If undefined, you get the old, much simpler behaviour 2160 If undefined, you get the old, much simpler behaviour
2151 with a somewhat smaller memory footprint. 2161 with a somewhat smaller memory footprint.
2152 2162
2153 2163
2154 CONFIG_SYS_PROMPT_HUSH_PS2 2164 CONFIG_SYS_PROMPT_HUSH_PS2
2155 2165
2156 This defines the secondary prompt string, which is 2166 This defines the secondary prompt string, which is
2157 printed when the command interpreter needs more input 2167 printed when the command interpreter needs more input
2158 to complete a command. Usually "> ". 2168 to complete a command. Usually "> ".
2159 2169
2160 Note: 2170 Note:
2161 2171
2162 In the current implementation, the local variables 2172 In the current implementation, the local variables
2163 space and global environment variables space are 2173 space and global environment variables space are
2164 separated. Local variables are those you define by 2174 separated. Local variables are those you define by
2165 simply typing `name=value'. To access a local 2175 simply typing `name=value'. To access a local
2166 variable later on, you have write `$name' or 2176 variable later on, you have write `$name' or
2167 `${name}'; to execute the contents of a variable 2177 `${name}'; to execute the contents of a variable
2168 directly type `$name' at the command prompt. 2178 directly type `$name' at the command prompt.
2169 2179
2170 Global environment variables are those you use 2180 Global environment variables are those you use
2171 setenv/printenv to work with. To run a command stored 2181 setenv/printenv to work with. To run a command stored
2172 in such a variable, you need to use the run command, 2182 in such a variable, you need to use the run command,
2173 and you must not use the '$' sign to access them. 2183 and you must not use the '$' sign to access them.
2174 2184
2175 To store commands and special characters in a 2185 To store commands and special characters in a
2176 variable, please use double quotation marks 2186 variable, please use double quotation marks
2177 surrounding the whole text of the variable, instead 2187 surrounding the whole text of the variable, instead
2178 of the backslashes before semicolons and special 2188 of the backslashes before semicolons and special
2179 symbols. 2189 symbols.
2180 2190
2181 - Commandline Editing and History: 2191 - Commandline Editing and History:
2182 CONFIG_CMDLINE_EDITING 2192 CONFIG_CMDLINE_EDITING
2183 2193
2184 Enable editing and History functions for interactive 2194 Enable editing and History functions for interactive
2185 commandline input operations 2195 commandline input operations
2186 2196
2187 - Default Environment: 2197 - Default Environment:
2188 CONFIG_EXTRA_ENV_SETTINGS 2198 CONFIG_EXTRA_ENV_SETTINGS
2189 2199
2190 Define this to contain any number of null terminated 2200 Define this to contain any number of null terminated
2191 strings (variable = value pairs) that will be part of 2201 strings (variable = value pairs) that will be part of
2192 the default environment compiled into the boot image. 2202 the default environment compiled into the boot image.
2193 2203
2194 For example, place something like this in your 2204 For example, place something like this in your
2195 board's config file: 2205 board's config file:
2196 2206
2197 #define CONFIG_EXTRA_ENV_SETTINGS \ 2207 #define CONFIG_EXTRA_ENV_SETTINGS \
2198 "myvar1=value1\0" \ 2208 "myvar1=value1\0" \
2199 "myvar2=value2\0" 2209 "myvar2=value2\0"
2200 2210
2201 Warning: This method is based on knowledge about the 2211 Warning: This method is based on knowledge about the
2202 internal format how the environment is stored by the 2212 internal format how the environment is stored by the
2203 U-Boot code. This is NOT an official, exported 2213 U-Boot code. This is NOT an official, exported
2204 interface! Although it is unlikely that this format 2214 interface! Although it is unlikely that this format
2205 will change soon, there is no guarantee either. 2215 will change soon, there is no guarantee either.
2206 You better know what you are doing here. 2216 You better know what you are doing here.
2207 2217
2208 Note: overly (ab)use of the default environment is 2218 Note: overly (ab)use of the default environment is
2209 discouraged. Make sure to check other ways to preset 2219 discouraged. Make sure to check other ways to preset
2210 the environment like the "source" command or the 2220 the environment like the "source" command or the
2211 boot command first. 2221 boot command first.
2212 2222
2213 - DataFlash Support: 2223 - DataFlash Support:
2214 CONFIG_HAS_DATAFLASH 2224 CONFIG_HAS_DATAFLASH
2215 2225
2216 Defining this option enables DataFlash features and 2226 Defining this option enables DataFlash features and
2217 allows to read/write in Dataflash via the standard 2227 allows to read/write in Dataflash via the standard
2218 commands cp, md... 2228 commands cp, md...
2219 2229
2220 - Serial Flash support 2230 - Serial Flash support
2221 CONFIG_CMD_SF 2231 CONFIG_CMD_SF
2222 2232
2223 Defining this option enables SPI flash commands 2233 Defining this option enables SPI flash commands
2224 'sf probe/read/write/erase/update'. 2234 'sf probe/read/write/erase/update'.
2225 2235
2226 Usage requires an initial 'probe' to define the serial 2236 Usage requires an initial 'probe' to define the serial
2227 flash parameters, followed by read/write/erase/update 2237 flash parameters, followed by read/write/erase/update
2228 commands. 2238 commands.
2229 2239
2230 The following defaults may be provided by the platform 2240 The following defaults may be provided by the platform
2231 to handle the common case when only a single serial 2241 to handle the common case when only a single serial
2232 flash is present on the system. 2242 flash is present on the system.
2233 2243
2234 CONFIG_SF_DEFAULT_BUS Bus identifier 2244 CONFIG_SF_DEFAULT_BUS Bus identifier
2235 CONFIG_SF_DEFAULT_CS Chip-select 2245 CONFIG_SF_DEFAULT_CS Chip-select
2236 CONFIG_SF_DEFAULT_MODE (see include/spi.h) 2246 CONFIG_SF_DEFAULT_MODE (see include/spi.h)
2237 CONFIG_SF_DEFAULT_SPEED in Hz 2247 CONFIG_SF_DEFAULT_SPEED in Hz
2238 2248
2239 - SystemACE Support: 2249 - SystemACE Support:
2240 CONFIG_SYSTEMACE 2250 CONFIG_SYSTEMACE
2241 2251
2242 Adding this option adds support for Xilinx SystemACE 2252 Adding this option adds support for Xilinx SystemACE
2243 chips attached via some sort of local bus. The address 2253 chips attached via some sort of local bus. The address
2244 of the chip must also be defined in the 2254 of the chip must also be defined in the
2245 CONFIG_SYS_SYSTEMACE_BASE macro. For example: 2255 CONFIG_SYS_SYSTEMACE_BASE macro. For example:
2246 2256
2247 #define CONFIG_SYSTEMACE 2257 #define CONFIG_SYSTEMACE
2248 #define CONFIG_SYS_SYSTEMACE_BASE 0xf0000000 2258 #define CONFIG_SYS_SYSTEMACE_BASE 0xf0000000
2249 2259
2250 When SystemACE support is added, the "ace" device type 2260 When SystemACE support is added, the "ace" device type
2251 becomes available to the fat commands, i.e. fatls. 2261 becomes available to the fat commands, i.e. fatls.
2252 2262
2253 - TFTP Fixed UDP Port: 2263 - TFTP Fixed UDP Port:
2254 CONFIG_TFTP_PORT 2264 CONFIG_TFTP_PORT
2255 2265
2256 If this is defined, the environment variable tftpsrcp 2266 If this is defined, the environment variable tftpsrcp
2257 is used to supply the TFTP UDP source port value. 2267 is used to supply the TFTP UDP source port value.
2258 If tftpsrcp isn't defined, the normal pseudo-random port 2268 If tftpsrcp isn't defined, the normal pseudo-random port
2259 number generator is used. 2269 number generator is used.
2260 2270
2261 Also, the environment variable tftpdstp is used to supply 2271 Also, the environment variable tftpdstp is used to supply
2262 the TFTP UDP destination port value. If tftpdstp isn't 2272 the TFTP UDP destination port value. If tftpdstp isn't
2263 defined, the normal port 69 is used. 2273 defined, the normal port 69 is used.
2264 2274
2265 The purpose for tftpsrcp is to allow a TFTP server to 2275 The purpose for tftpsrcp is to allow a TFTP server to
2266 blindly start the TFTP transfer using the pre-configured 2276 blindly start the TFTP transfer using the pre-configured
2267 target IP address and UDP port. This has the effect of 2277 target IP address and UDP port. This has the effect of
2268 "punching through" the (Windows XP) firewall, allowing 2278 "punching through" the (Windows XP) firewall, allowing
2269 the remainder of the TFTP transfer to proceed normally. 2279 the remainder of the TFTP transfer to proceed normally.
2270 A better solution is to properly configure the firewall, 2280 A better solution is to properly configure the firewall,
2271 but sometimes that is not allowed. 2281 but sometimes that is not allowed.
2272 2282
2273 - Show boot progress: 2283 - Show boot progress:
2274 CONFIG_SHOW_BOOT_PROGRESS 2284 CONFIG_SHOW_BOOT_PROGRESS
2275 2285
2276 Defining this option allows to add some board- 2286 Defining this option allows to add some board-
2277 specific code (calling a user-provided function 2287 specific code (calling a user-provided function
2278 "show_boot_progress(int)") that enables you to show 2288 "show_boot_progress(int)") that enables you to show
2279 the system's boot progress on some display (for 2289 the system's boot progress on some display (for
2280 example, some LED's) on your board. At the moment, 2290 example, some LED's) on your board. At the moment,
2281 the following checkpoints are implemented: 2291 the following checkpoints are implemented:
2282 2292
2283 - Detailed boot stage timing 2293 - Detailed boot stage timing
2284 CONFIG_BOOTSTAGE 2294 CONFIG_BOOTSTAGE
2285 Define this option to get detailed timing of each stage 2295 Define this option to get detailed timing of each stage
2286 of the boot process. 2296 of the boot process.
2287 2297
2288 CONFIG_BOOTSTAGE_USER_COUNT 2298 CONFIG_BOOTSTAGE_USER_COUNT
2289 This is the number of available user bootstage records. 2299 This is the number of available user bootstage records.
2290 Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...) 2300 Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
2291 a new ID will be allocated from this stash. If you exceed 2301 a new ID will be allocated from this stash. If you exceed
2292 the limit, recording will stop. 2302 the limit, recording will stop.
2293 2303
2294 CONFIG_BOOTSTAGE_REPORT 2304 CONFIG_BOOTSTAGE_REPORT
2295 Define this to print a report before boot, similar to this: 2305 Define this to print a report before boot, similar to this:
2296 2306
2297 Timer summary in microseconds: 2307 Timer summary in microseconds:
2298 Mark Elapsed Stage 2308 Mark Elapsed Stage
2299 0 0 reset 2309 0 0 reset
2300 3,575,678 3,575,678 board_init_f start 2310 3,575,678 3,575,678 board_init_f start
2301 3,575,695 17 arch_cpu_init A9 2311 3,575,695 17 arch_cpu_init A9
2302 3,575,777 82 arch_cpu_init done 2312 3,575,777 82 arch_cpu_init done
2303 3,659,598 83,821 board_init_r start 2313 3,659,598 83,821 board_init_r start
2304 3,910,375 250,777 main_loop 2314 3,910,375 250,777 main_loop
2305 29,916,167 26,005,792 bootm_start 2315 29,916,167 26,005,792 bootm_start
2306 30,361,327 445,160 start_kernel 2316 30,361,327 445,160 start_kernel
2307 2317
2308 Legacy uImage format: 2318 Legacy uImage format:
2309 2319
2310 Arg Where When 2320 Arg Where When
2311 1 common/cmd_bootm.c before attempting to boot an image 2321 1 common/cmd_bootm.c before attempting to boot an image
2312 -1 common/cmd_bootm.c Image header has bad magic number 2322 -1 common/cmd_bootm.c Image header has bad magic number
2313 2 common/cmd_bootm.c Image header has correct magic number 2323 2 common/cmd_bootm.c Image header has correct magic number
2314 -2 common/cmd_bootm.c Image header has bad checksum 2324 -2 common/cmd_bootm.c Image header has bad checksum
2315 3 common/cmd_bootm.c Image header has correct checksum 2325 3 common/cmd_bootm.c Image header has correct checksum
2316 -3 common/cmd_bootm.c Image data has bad checksum 2326 -3 common/cmd_bootm.c Image data has bad checksum
2317 4 common/cmd_bootm.c Image data has correct checksum 2327 4 common/cmd_bootm.c Image data has correct checksum
2318 -4 common/cmd_bootm.c Image is for unsupported architecture 2328 -4 common/cmd_bootm.c Image is for unsupported architecture
2319 5 common/cmd_bootm.c Architecture check OK 2329 5 common/cmd_bootm.c Architecture check OK
2320 -5 common/cmd_bootm.c Wrong Image Type (not kernel, multi) 2330 -5 common/cmd_bootm.c Wrong Image Type (not kernel, multi)
2321 6 common/cmd_bootm.c Image Type check OK 2331 6 common/cmd_bootm.c Image Type check OK
2322 -6 common/cmd_bootm.c gunzip uncompression error 2332 -6 common/cmd_bootm.c gunzip uncompression error
2323 -7 common/cmd_bootm.c Unimplemented compression type 2333 -7 common/cmd_bootm.c Unimplemented compression type
2324 7 common/cmd_bootm.c Uncompression OK 2334 7 common/cmd_bootm.c Uncompression OK
2325 8 common/cmd_bootm.c No uncompress/copy overwrite error 2335 8 common/cmd_bootm.c No uncompress/copy overwrite error
2326 -9 common/cmd_bootm.c Unsupported OS (not Linux, BSD, VxWorks, QNX) 2336 -9 common/cmd_bootm.c Unsupported OS (not Linux, BSD, VxWorks, QNX)
2327 2337
2328 9 common/image.c Start initial ramdisk verification 2338 9 common/image.c Start initial ramdisk verification
2329 -10 common/image.c Ramdisk header has bad magic number 2339 -10 common/image.c Ramdisk header has bad magic number
2330 -11 common/image.c Ramdisk header has bad checksum 2340 -11 common/image.c Ramdisk header has bad checksum
2331 10 common/image.c Ramdisk header is OK 2341 10 common/image.c Ramdisk header is OK
2332 -12 common/image.c Ramdisk data has bad checksum 2342 -12 common/image.c Ramdisk data has bad checksum
2333 11 common/image.c Ramdisk data has correct checksum 2343 11 common/image.c Ramdisk data has correct checksum
2334 12 common/image.c Ramdisk verification complete, start loading 2344 12 common/image.c Ramdisk verification complete, start loading
2335 -13 common/image.c Wrong Image Type (not PPC Linux ramdisk) 2345 -13 common/image.c Wrong Image Type (not PPC Linux ramdisk)
2336 13 common/image.c Start multifile image verification 2346 13 common/image.c Start multifile image verification
2337 14 common/image.c No initial ramdisk, no multifile, continue. 2347 14 common/image.c No initial ramdisk, no multifile, continue.
2338 2348
2339 15 arch/<arch>/lib/bootm.c All preparation done, transferring control to OS 2349 15 arch/<arch>/lib/bootm.c All preparation done, transferring control to OS
2340 2350
2341 -30 arch/powerpc/lib/board.c Fatal error, hang the system 2351 -30 arch/powerpc/lib/board.c Fatal error, hang the system
2342 -31 post/post.c POST test failed, detected by post_output_backlog() 2352 -31 post/post.c POST test failed, detected by post_output_backlog()
2343 -32 post/post.c POST test failed, detected by post_run_single() 2353 -32 post/post.c POST test failed, detected by post_run_single()
2344 2354
2345 34 common/cmd_doc.c before loading a Image from a DOC device 2355 34 common/cmd_doc.c before loading a Image from a DOC device
2346 -35 common/cmd_doc.c Bad usage of "doc" command 2356 -35 common/cmd_doc.c Bad usage of "doc" command
2347 35 common/cmd_doc.c correct usage of "doc" command 2357 35 common/cmd_doc.c correct usage of "doc" command
2348 -36 common/cmd_doc.c No boot device 2358 -36 common/cmd_doc.c No boot device
2349 36 common/cmd_doc.c correct boot device 2359 36 common/cmd_doc.c correct boot device
2350 -37 common/cmd_doc.c Unknown Chip ID on boot device 2360 -37 common/cmd_doc.c Unknown Chip ID on boot device
2351 37 common/cmd_doc.c correct chip ID found, device available 2361 37 common/cmd_doc.c correct chip ID found, device available
2352 -38 common/cmd_doc.c Read Error on boot device 2362 -38 common/cmd_doc.c Read Error on boot device
2353 38 common/cmd_doc.c reading Image header from DOC device OK 2363 38 common/cmd_doc.c reading Image header from DOC device OK
2354 -39 common/cmd_doc.c Image header has bad magic number 2364 -39 common/cmd_doc.c Image header has bad magic number
2355 39 common/cmd_doc.c Image header has correct magic number 2365 39 common/cmd_doc.c Image header has correct magic number
2356 -40 common/cmd_doc.c Error reading Image from DOC device 2366 -40 common/cmd_doc.c Error reading Image from DOC device
2357 40 common/cmd_doc.c Image header has correct magic number 2367 40 common/cmd_doc.c Image header has correct magic number
2358 41 common/cmd_ide.c before loading a Image from a IDE device 2368 41 common/cmd_ide.c before loading a Image from a IDE device
2359 -42 common/cmd_ide.c Bad usage of "ide" command 2369 -42 common/cmd_ide.c Bad usage of "ide" command
2360 42 common/cmd_ide.c correct usage of "ide" command 2370 42 common/cmd_ide.c correct usage of "ide" command
2361 -43 common/cmd_ide.c No boot device 2371 -43 common/cmd_ide.c No boot device
2362 43 common/cmd_ide.c boot device found 2372 43 common/cmd_ide.c boot device found
2363 -44 common/cmd_ide.c Device not available 2373 -44 common/cmd_ide.c Device not available
2364 44 common/cmd_ide.c Device available 2374 44 common/cmd_ide.c Device available
2365 -45 common/cmd_ide.c wrong partition selected 2375 -45 common/cmd_ide.c wrong partition selected
2366 45 common/cmd_ide.c partition selected 2376 45 common/cmd_ide.c partition selected
2367 -46 common/cmd_ide.c Unknown partition table 2377 -46 common/cmd_ide.c Unknown partition table
2368 46 common/cmd_ide.c valid partition table found 2378 46 common/cmd_ide.c valid partition table found
2369 -47 common/cmd_ide.c Invalid partition type 2379 -47 common/cmd_ide.c Invalid partition type
2370 47 common/cmd_ide.c correct partition type 2380 47 common/cmd_ide.c correct partition type
2371 -48 common/cmd_ide.c Error reading Image Header on boot device 2381 -48 common/cmd_ide.c Error reading Image Header on boot device
2372 48 common/cmd_ide.c reading Image Header from IDE device OK 2382 48 common/cmd_ide.c reading Image Header from IDE device OK
2373 -49 common/cmd_ide.c Image header has bad magic number 2383 -49 common/cmd_ide.c Image header has bad magic number
2374 49 common/cmd_ide.c Image header has correct magic number 2384 49 common/cmd_ide.c Image header has correct magic number
2375 -50 common/cmd_ide.c Image header has bad checksum 2385 -50 common/cmd_ide.c Image header has bad checksum
2376 50 common/cmd_ide.c Image header has correct checksum 2386 50 common/cmd_ide.c Image header has correct checksum
2377 -51 common/cmd_ide.c Error reading Image from IDE device 2387 -51 common/cmd_ide.c Error reading Image from IDE device
2378 51 common/cmd_ide.c reading Image from IDE device OK 2388 51 common/cmd_ide.c reading Image from IDE device OK
2379 52 common/cmd_nand.c before loading a Image from a NAND device 2389 52 common/cmd_nand.c before loading a Image from a NAND device
2380 -53 common/cmd_nand.c Bad usage of "nand" command 2390 -53 common/cmd_nand.c Bad usage of "nand" command
2381 53 common/cmd_nand.c correct usage of "nand" command 2391 53 common/cmd_nand.c correct usage of "nand" command
2382 -54 common/cmd_nand.c No boot device 2392 -54 common/cmd_nand.c No boot device
2383 54 common/cmd_nand.c boot device found 2393 54 common/cmd_nand.c boot device found
2384 -55 common/cmd_nand.c Unknown Chip ID on boot device 2394 -55 common/cmd_nand.c Unknown Chip ID on boot device
2385 55 common/cmd_nand.c correct chip ID found, device available 2395 55 common/cmd_nand.c correct chip ID found, device available
2386 -56 common/cmd_nand.c Error reading Image Header on boot device 2396 -56 common/cmd_nand.c Error reading Image Header on boot device
2387 56 common/cmd_nand.c reading Image Header from NAND device OK 2397 56 common/cmd_nand.c reading Image Header from NAND device OK
2388 -57 common/cmd_nand.c Image header has bad magic number 2398 -57 common/cmd_nand.c Image header has bad magic number
2389 57 common/cmd_nand.c Image header has correct magic number 2399 57 common/cmd_nand.c Image header has correct magic number
2390 -58 common/cmd_nand.c Error reading Image from NAND device 2400 -58 common/cmd_nand.c Error reading Image from NAND device
2391 58 common/cmd_nand.c reading Image from NAND device OK 2401 58 common/cmd_nand.c reading Image from NAND device OK
2392 2402
2393 -60 common/env_common.c Environment has a bad CRC, using default 2403 -60 common/env_common.c Environment has a bad CRC, using default
2394 2404
2395 64 net/eth.c starting with Ethernet configuration. 2405 64 net/eth.c starting with Ethernet configuration.
2396 -64 net/eth.c no Ethernet found. 2406 -64 net/eth.c no Ethernet found.
2397 65 net/eth.c Ethernet found. 2407 65 net/eth.c Ethernet found.
2398 2408
2399 -80 common/cmd_net.c usage wrong 2409 -80 common/cmd_net.c usage wrong
2400 80 common/cmd_net.c before calling NetLoop() 2410 80 common/cmd_net.c before calling NetLoop()
2401 -81 common/cmd_net.c some error in NetLoop() occurred 2411 -81 common/cmd_net.c some error in NetLoop() occurred
2402 81 common/cmd_net.c NetLoop() back without error 2412 81 common/cmd_net.c NetLoop() back without error
2403 -82 common/cmd_net.c size == 0 (File with size 0 loaded) 2413 -82 common/cmd_net.c size == 0 (File with size 0 loaded)
2404 82 common/cmd_net.c trying automatic boot 2414 82 common/cmd_net.c trying automatic boot
2405 83 common/cmd_net.c running "source" command 2415 83 common/cmd_net.c running "source" command
2406 -83 common/cmd_net.c some error in automatic boot or "source" command 2416 -83 common/cmd_net.c some error in automatic boot or "source" command
2407 84 common/cmd_net.c end without errors 2417 84 common/cmd_net.c end without errors
2408 2418
2409 FIT uImage format: 2419 FIT uImage format:
2410 2420
2411 Arg Where When 2421 Arg Where When
2412 100 common/cmd_bootm.c Kernel FIT Image has correct format 2422 100 common/cmd_bootm.c Kernel FIT Image has correct format
2413 -100 common/cmd_bootm.c Kernel FIT Image has incorrect format 2423 -100 common/cmd_bootm.c Kernel FIT Image has incorrect format
2414 101 common/cmd_bootm.c No Kernel subimage unit name, using configuration 2424 101 common/cmd_bootm.c No Kernel subimage unit name, using configuration
2415 -101 common/cmd_bootm.c Can't get configuration for kernel subimage 2425 -101 common/cmd_bootm.c Can't get configuration for kernel subimage
2416 102 common/cmd_bootm.c Kernel unit name specified 2426 102 common/cmd_bootm.c Kernel unit name specified
2417 -103 common/cmd_bootm.c Can't get kernel subimage node offset 2427 -103 common/cmd_bootm.c Can't get kernel subimage node offset
2418 103 common/cmd_bootm.c Found configuration node 2428 103 common/cmd_bootm.c Found configuration node
2419 104 common/cmd_bootm.c Got kernel subimage node offset 2429 104 common/cmd_bootm.c Got kernel subimage node offset
2420 -104 common/cmd_bootm.c Kernel subimage hash verification failed 2430 -104 common/cmd_bootm.c Kernel subimage hash verification failed
2421 105 common/cmd_bootm.c Kernel subimage hash verification OK 2431 105 common/cmd_bootm.c Kernel subimage hash verification OK
2422 -105 common/cmd_bootm.c Kernel subimage is for unsupported architecture 2432 -105 common/cmd_bootm.c Kernel subimage is for unsupported architecture
2423 106 common/cmd_bootm.c Architecture check OK 2433 106 common/cmd_bootm.c Architecture check OK
2424 -106 common/cmd_bootm.c Kernel subimage has wrong type 2434 -106 common/cmd_bootm.c Kernel subimage has wrong type
2425 107 common/cmd_bootm.c Kernel subimage type OK 2435 107 common/cmd_bootm.c Kernel subimage type OK
2426 -107 common/cmd_bootm.c Can't get kernel subimage data/size 2436 -107 common/cmd_bootm.c Can't get kernel subimage data/size
2427 108 common/cmd_bootm.c Got kernel subimage data/size 2437 108 common/cmd_bootm.c Got kernel subimage data/size
2428 -108 common/cmd_bootm.c Wrong image type (not legacy, FIT) 2438 -108 common/cmd_bootm.c Wrong image type (not legacy, FIT)
2429 -109 common/cmd_bootm.c Can't get kernel subimage type 2439 -109 common/cmd_bootm.c Can't get kernel subimage type
2430 -110 common/cmd_bootm.c Can't get kernel subimage comp 2440 -110 common/cmd_bootm.c Can't get kernel subimage comp
2431 -111 common/cmd_bootm.c Can't get kernel subimage os 2441 -111 common/cmd_bootm.c Can't get kernel subimage os
2432 -112 common/cmd_bootm.c Can't get kernel subimage load address 2442 -112 common/cmd_bootm.c Can't get kernel subimage load address
2433 -113 common/cmd_bootm.c Image uncompress/copy overwrite error 2443 -113 common/cmd_bootm.c Image uncompress/copy overwrite error
2434 2444
2435 120 common/image.c Start initial ramdisk verification 2445 120 common/image.c Start initial ramdisk verification
2436 -120 common/image.c Ramdisk FIT image has incorrect format 2446 -120 common/image.c Ramdisk FIT image has incorrect format
2437 121 common/image.c Ramdisk FIT image has correct format 2447 121 common/image.c Ramdisk FIT image has correct format
2438 122 common/image.c No ramdisk subimage unit name, using configuration 2448 122 common/image.c No ramdisk subimage unit name, using configuration
2439 -122 common/image.c Can't get configuration for ramdisk subimage 2449 -122 common/image.c Can't get configuration for ramdisk subimage
2440 123 common/image.c Ramdisk unit name specified 2450 123 common/image.c Ramdisk unit name specified
2441 -124 common/image.c Can't get ramdisk subimage node offset 2451 -124 common/image.c Can't get ramdisk subimage node offset
2442 125 common/image.c Got ramdisk subimage node offset 2452 125 common/image.c Got ramdisk subimage node offset
2443 -125 common/image.c Ramdisk subimage hash verification failed 2453 -125 common/image.c Ramdisk subimage hash verification failed
2444 126 common/image.c Ramdisk subimage hash verification OK 2454 126 common/image.c Ramdisk subimage hash verification OK
2445 -126 common/image.c Ramdisk subimage for unsupported architecture 2455 -126 common/image.c Ramdisk subimage for unsupported architecture
2446 127 common/image.c Architecture check OK 2456 127 common/image.c Architecture check OK
2447 -127 common/image.c Can't get ramdisk subimage data/size 2457 -127 common/image.c Can't get ramdisk subimage data/size
2448 128 common/image.c Got ramdisk subimage data/size 2458 128 common/image.c Got ramdisk subimage data/size
2449 129 common/image.c Can't get ramdisk load address 2459 129 common/image.c Can't get ramdisk load address
2450 -129 common/image.c Got ramdisk load address 2460 -129 common/image.c Got ramdisk load address
2451 2461
2452 -130 common/cmd_doc.c Incorrect FIT image format 2462 -130 common/cmd_doc.c Incorrect FIT image format
2453 131 common/cmd_doc.c FIT image format OK 2463 131 common/cmd_doc.c FIT image format OK
2454 2464
2455 -140 common/cmd_ide.c Incorrect FIT image format 2465 -140 common/cmd_ide.c Incorrect FIT image format
2456 141 common/cmd_ide.c FIT image format OK 2466 141 common/cmd_ide.c FIT image format OK
2457 2467
2458 -150 common/cmd_nand.c Incorrect FIT image format 2468 -150 common/cmd_nand.c Incorrect FIT image format
2459 151 common/cmd_nand.c FIT image format OK 2469 151 common/cmd_nand.c FIT image format OK
2460 2470
2461 - Standalone program support: 2471 - Standalone program support:
2462 CONFIG_STANDALONE_LOAD_ADDR 2472 CONFIG_STANDALONE_LOAD_ADDR
2463 2473
2464 This option defines a board specific value for the 2474 This option defines a board specific value for the
2465 address where standalone program gets loaded, thus 2475 address where standalone program gets loaded, thus
2466 overwriting the architecture dependent default 2476 overwriting the architecture dependent default
2467 settings. 2477 settings.
2468 2478
2469 - Frame Buffer Address: 2479 - Frame Buffer Address:
2470 CONFIG_FB_ADDR 2480 CONFIG_FB_ADDR
2471 2481
2472 Define CONFIG_FB_ADDR if you want to use specific 2482 Define CONFIG_FB_ADDR if you want to use specific
2473 address for frame buffer. 2483 address for frame buffer.
2474 Then system will reserve the frame buffer address to 2484 Then system will reserve the frame buffer address to
2475 defined address instead of lcd_setmem (this function 2485 defined address instead of lcd_setmem (this function
2476 grabs the memory for frame buffer by panel's size). 2486 grabs the memory for frame buffer by panel's size).
2477 2487
2478 Please see board_init_f function. 2488 Please see board_init_f function.
2479 2489
2480 - Automatic software updates via TFTP server 2490 - Automatic software updates via TFTP server
2481 CONFIG_UPDATE_TFTP 2491 CONFIG_UPDATE_TFTP
2482 CONFIG_UPDATE_TFTP_CNT_MAX 2492 CONFIG_UPDATE_TFTP_CNT_MAX
2483 CONFIG_UPDATE_TFTP_MSEC_MAX 2493 CONFIG_UPDATE_TFTP_MSEC_MAX
2484 2494
2485 These options enable and control the auto-update feature; 2495 These options enable and control the auto-update feature;
2486 for a more detailed description refer to doc/README.update. 2496 for a more detailed description refer to doc/README.update.
2487 2497
2488 - MTD Support (mtdparts command, UBI support) 2498 - MTD Support (mtdparts command, UBI support)
2489 CONFIG_MTD_DEVICE 2499 CONFIG_MTD_DEVICE
2490 2500
2491 Adds the MTD device infrastructure from the Linux kernel. 2501 Adds the MTD device infrastructure from the Linux kernel.
2492 Needed for mtdparts command support. 2502 Needed for mtdparts command support.
2493 2503
2494 CONFIG_MTD_PARTITIONS 2504 CONFIG_MTD_PARTITIONS
2495 2505
2496 Adds the MTD partitioning infrastructure from the Linux 2506 Adds the MTD partitioning infrastructure from the Linux
2497 kernel. Needed for UBI support. 2507 kernel. Needed for UBI support.
2498 2508
2499 - SPL framework 2509 - SPL framework
2500 CONFIG_SPL 2510 CONFIG_SPL
2501 Enable building of SPL globally. 2511 Enable building of SPL globally.
2502 2512
2503 CONFIG_SPL_LDSCRIPT 2513 CONFIG_SPL_LDSCRIPT
2504 LDSCRIPT for linking the SPL binary. 2514 LDSCRIPT for linking the SPL binary.
2505 2515
2506 CONFIG_SPL_MAX_SIZE 2516 CONFIG_SPL_MAX_SIZE
2507 Maximum binary size (text, data and rodata) of the SPL binary. 2517 Maximum binary size (text, data and rodata) of the SPL binary.
2508 2518
2509 CONFIG_SPL_TEXT_BASE 2519 CONFIG_SPL_TEXT_BASE
2510 TEXT_BASE for linking the SPL binary. 2520 TEXT_BASE for linking the SPL binary.
2511 2521
2512 CONFIG_SPL_BSS_START_ADDR 2522 CONFIG_SPL_BSS_START_ADDR
2513 Link address for the BSS within the SPL binary. 2523 Link address for the BSS within the SPL binary.
2514 2524
2515 CONFIG_SPL_BSS_MAX_SIZE 2525 CONFIG_SPL_BSS_MAX_SIZE
2516 Maximum binary size of the BSS section of the SPL binary. 2526 Maximum binary size of the BSS section of the SPL binary.
2517 2527
2518 CONFIG_SPL_STACK 2528 CONFIG_SPL_STACK
2519 Adress of the start of the stack SPL will use 2529 Adress of the start of the stack SPL will use
2520 2530
2521 CONFIG_SYS_SPL_MALLOC_START 2531 CONFIG_SYS_SPL_MALLOC_START
2522 Starting address of the malloc pool used in SPL. 2532 Starting address of the malloc pool used in SPL.
2523 2533
2524 CONFIG_SYS_SPL_MALLOC_SIZE 2534 CONFIG_SYS_SPL_MALLOC_SIZE
2525 The size of the malloc pool used in SPL. 2535 The size of the malloc pool used in SPL.
2526 2536
2527 CONFIG_SPL_LIBCOMMON_SUPPORT 2537 CONFIG_SPL_LIBCOMMON_SUPPORT
2528 Support for common/libcommon.o in SPL binary 2538 Support for common/libcommon.o in SPL binary
2529 2539
2530 CONFIG_SPL_LIBDISK_SUPPORT 2540 CONFIG_SPL_LIBDISK_SUPPORT
2531 Support for disk/libdisk.o in SPL binary 2541 Support for disk/libdisk.o in SPL binary
2532 2542
2533 CONFIG_SPL_I2C_SUPPORT 2543 CONFIG_SPL_I2C_SUPPORT
2534 Support for drivers/i2c/libi2c.o in SPL binary 2544 Support for drivers/i2c/libi2c.o in SPL binary
2535 2545
2536 CONFIG_SPL_GPIO_SUPPORT 2546 CONFIG_SPL_GPIO_SUPPORT
2537 Support for drivers/gpio/libgpio.o in SPL binary 2547 Support for drivers/gpio/libgpio.o in SPL binary
2538 2548
2539 CONFIG_SPL_MMC_SUPPORT 2549 CONFIG_SPL_MMC_SUPPORT
2540 Support for drivers/mmc/libmmc.o in SPL binary 2550 Support for drivers/mmc/libmmc.o in SPL binary
2541 2551
2542 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR, 2552 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR,
2543 CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS, 2553 CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS,
2544 CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION 2554 CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION
2545 Address, size and partition on the MMC to load U-Boot from 2555 Address, size and partition on the MMC to load U-Boot from
2546 when the MMC is being used in raw mode. 2556 when the MMC is being used in raw mode.
2547 2557
2548 CONFIG_SPL_FAT_SUPPORT 2558 CONFIG_SPL_FAT_SUPPORT
2549 Support for fs/fat/libfat.o in SPL binary 2559 Support for fs/fat/libfat.o in SPL binary
2550 2560
2551 CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME 2561 CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME
2552 Filename to read to load U-Boot when reading from FAT 2562 Filename to read to load U-Boot when reading from FAT
2553 2563
2554 CONFIG_SPL_NAND_SIMPLE 2564 CONFIG_SPL_NAND_SIMPLE
2555 Support for drivers/mtd/nand/libnand.o in SPL binary 2565 Support for drivers/mtd/nand/libnand.o in SPL binary
2556 2566
2557 CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT, 2567 CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
2558 CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE, 2568 CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
2559 CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS, 2569 CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
2560 CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE, 2570 CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE,
2561 CONFIG_SYS_NAND_ECCBYTES 2571 CONFIG_SYS_NAND_ECCBYTES
2562 Defines the size and behavior of the NAND that SPL uses 2572 Defines the size and behavior of the NAND that SPL uses
2563 to read U-Boot with CONFIG_SPL_NAND_SIMPLE 2573 to read U-Boot with CONFIG_SPL_NAND_SIMPLE
2564 2574
2565 CONFIG_SYS_NAND_U_BOOT_OFFS 2575 CONFIG_SYS_NAND_U_BOOT_OFFS
2566 Location in NAND for CONFIG_SPL_NAND_SIMPLE to read U-Boot 2576 Location in NAND for CONFIG_SPL_NAND_SIMPLE to read U-Boot
2567 from. 2577 from.
2568 2578
2569 CONFIG_SYS_NAND_U_BOOT_START 2579 CONFIG_SYS_NAND_U_BOOT_START
2570 Location in memory for CONFIG_SPL_NAND_SIMPLE to load U-Boot 2580 Location in memory for CONFIG_SPL_NAND_SIMPLE to load U-Boot
2571 to. 2581 to.
2572 2582
2573 CONFIG_SYS_NAND_HW_ECC_OOBFIRST 2583 CONFIG_SYS_NAND_HW_ECC_OOBFIRST
2574 Define this if you need to first read the OOB and then the 2584 Define this if you need to first read the OOB and then the
2575 data. This is used for example on davinci plattforms. 2585 data. This is used for example on davinci plattforms.
2576 2586
2577 CONFIG_SPL_OMAP3_ID_NAND 2587 CONFIG_SPL_OMAP3_ID_NAND
2578 Support for an OMAP3-specific set of functions to return the 2588 Support for an OMAP3-specific set of functions to return the
2579 ID and MFR of the first attached NAND chip, if present. 2589 ID and MFR of the first attached NAND chip, if present.
2580 2590
2581 CONFIG_SPL_SERIAL_SUPPORT 2591 CONFIG_SPL_SERIAL_SUPPORT
2582 Support for drivers/serial/libserial.o in SPL binary 2592 Support for drivers/serial/libserial.o in SPL binary
2583 2593
2584 CONFIG_SPL_SPI_FLASH_SUPPORT 2594 CONFIG_SPL_SPI_FLASH_SUPPORT
2585 Support for drivers/mtd/spi/libspi_flash.o in SPL binary 2595 Support for drivers/mtd/spi/libspi_flash.o in SPL binary
2586 2596
2587 CONFIG_SPL_SPI_SUPPORT 2597 CONFIG_SPL_SPI_SUPPORT
2588 Support for drivers/spi/libspi.o in SPL binary 2598 Support for drivers/spi/libspi.o in SPL binary
2589 2599
2590 CONFIG_SPL_LIBGENERIC_SUPPORT 2600 CONFIG_SPL_LIBGENERIC_SUPPORT
2591 Support for lib/libgeneric.o in SPL binary 2601 Support for lib/libgeneric.o in SPL binary
2592 2602
2593 Modem Support: 2603 Modem Support:
2594 -------------- 2604 --------------
2595 2605
2596 [so far only for SMDK2400 boards] 2606 [so far only for SMDK2400 boards]
2597 2607
2598 - Modem support enable: 2608 - Modem support enable:
2599 CONFIG_MODEM_SUPPORT 2609 CONFIG_MODEM_SUPPORT
2600 2610
2601 - RTS/CTS Flow control enable: 2611 - RTS/CTS Flow control enable:
2602 CONFIG_HWFLOW 2612 CONFIG_HWFLOW
2603 2613
2604 - Modem debug support: 2614 - Modem debug support:
2605 CONFIG_MODEM_SUPPORT_DEBUG 2615 CONFIG_MODEM_SUPPORT_DEBUG
2606 2616
2607 Enables debugging stuff (char screen[1024], dbg()) 2617 Enables debugging stuff (char screen[1024], dbg())
2608 for modem support. Useful only with BDI2000. 2618 for modem support. Useful only with BDI2000.
2609 2619
2610 - Interrupt support (PPC): 2620 - Interrupt support (PPC):
2611 2621
2612 There are common interrupt_init() and timer_interrupt() 2622 There are common interrupt_init() and timer_interrupt()
2613 for all PPC archs. interrupt_init() calls interrupt_init_cpu() 2623 for all PPC archs. interrupt_init() calls interrupt_init_cpu()
2614 for CPU specific initialization. interrupt_init_cpu() 2624 for CPU specific initialization. interrupt_init_cpu()
2615 should set decrementer_count to appropriate value. If 2625 should set decrementer_count to appropriate value. If
2616 CPU resets decrementer automatically after interrupt 2626 CPU resets decrementer automatically after interrupt
2617 (ppc4xx) it should set decrementer_count to zero. 2627 (ppc4xx) it should set decrementer_count to zero.
2618 timer_interrupt() calls timer_interrupt_cpu() for CPU 2628 timer_interrupt() calls timer_interrupt_cpu() for CPU
2619 specific handling. If board has watchdog / status_led 2629 specific handling. If board has watchdog / status_led
2620 / other_activity_monitor it works automatically from 2630 / other_activity_monitor it works automatically from
2621 general timer_interrupt(). 2631 general timer_interrupt().
2622 2632
2623 - General: 2633 - General:
2624 2634
2625 In the target system modem support is enabled when a 2635 In the target system modem support is enabled when a
2626 specific key (key combination) is pressed during 2636 specific key (key combination) is pressed during
2627 power-on. Otherwise U-Boot will boot normally 2637 power-on. Otherwise U-Boot will boot normally
2628 (autoboot). The key_pressed() function is called from 2638 (autoboot). The key_pressed() function is called from
2629 board_init(). Currently key_pressed() is a dummy 2639 board_init(). Currently key_pressed() is a dummy
2630 function, returning 1 and thus enabling modem 2640 function, returning 1 and thus enabling modem
2631 initialization. 2641 initialization.
2632 2642
2633 If there are no modem init strings in the 2643 If there are no modem init strings in the
2634 environment, U-Boot proceed to autoboot; the 2644 environment, U-Boot proceed to autoboot; the
2635 previous output (banner, info printfs) will be 2645 previous output (banner, info printfs) will be
2636 suppressed, though. 2646 suppressed, though.
2637 2647
2638 See also: doc/README.Modem 2648 See also: doc/README.Modem
2639 2649
2640 Board initialization settings: 2650 Board initialization settings:
2641 ------------------------------ 2651 ------------------------------
2642 2652
2643 During Initialization u-boot calls a number of board specific functions 2653 During Initialization u-boot calls a number of board specific functions
2644 to allow the preparation of board specific prerequisites, e.g. pin setup 2654 to allow the preparation of board specific prerequisites, e.g. pin setup
2645 before drivers are initialized. To enable these callbacks the 2655 before drivers are initialized. To enable these callbacks the
2646 following configuration macros have to be defined. Currently this is 2656 following configuration macros have to be defined. Currently this is
2647 architecture specific, so please check arch/your_architecture/lib/board.c 2657 architecture specific, so please check arch/your_architecture/lib/board.c
2648 typically in board_init_f() and board_init_r(). 2658 typically in board_init_f() and board_init_r().
2649 2659
2650 - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f() 2660 - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f()
2651 - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r() 2661 - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r()
2652 - CONFIG_BOARD_LATE_INIT: Call board_late_init() 2662 - CONFIG_BOARD_LATE_INIT: Call board_late_init()
2653 - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init() 2663 - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init()
2654 2664
2655 Configuration Settings: 2665 Configuration Settings:
2656 ----------------------- 2666 -----------------------
2657 2667
2658 - CONFIG_SYS_LONGHELP: Defined when you want long help messages included; 2668 - CONFIG_SYS_LONGHELP: Defined when you want long help messages included;
2659 undefine this when you're short of memory. 2669 undefine this when you're short of memory.
2660 2670
2661 - CONFIG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default 2671 - CONFIG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default
2662 width of the commands listed in the 'help' command output. 2672 width of the commands listed in the 'help' command output.
2663 2673
2664 - CONFIG_SYS_PROMPT: This is what U-Boot prints on the console to 2674 - CONFIG_SYS_PROMPT: This is what U-Boot prints on the console to
2665 prompt for user input. 2675 prompt for user input.
2666 2676
2667 - CONFIG_SYS_CBSIZE: Buffer size for input from the Console 2677 - CONFIG_SYS_CBSIZE: Buffer size for input from the Console
2668 2678
2669 - CONFIG_SYS_PBSIZE: Buffer size for Console output 2679 - CONFIG_SYS_PBSIZE: Buffer size for Console output
2670 2680
2671 - CONFIG_SYS_MAXARGS: max. Number of arguments accepted for monitor commands 2681 - CONFIG_SYS_MAXARGS: max. Number of arguments accepted for monitor commands
2672 2682
2673 - CONFIG_SYS_BARGSIZE: Buffer size for Boot Arguments which are passed to 2683 - CONFIG_SYS_BARGSIZE: Buffer size for Boot Arguments which are passed to
2674 the application (usually a Linux kernel) when it is 2684 the application (usually a Linux kernel) when it is
2675 booted 2685 booted
2676 2686
2677 - CONFIG_SYS_BAUDRATE_TABLE: 2687 - CONFIG_SYS_BAUDRATE_TABLE:
2678 List of legal baudrate settings for this board. 2688 List of legal baudrate settings for this board.
2679 2689
2680 - CONFIG_SYS_CONSOLE_INFO_QUIET 2690 - CONFIG_SYS_CONSOLE_INFO_QUIET
2681 Suppress display of console information at boot. 2691 Suppress display of console information at boot.
2682 2692
2683 - CONFIG_SYS_CONSOLE_IS_IN_ENV 2693 - CONFIG_SYS_CONSOLE_IS_IN_ENV
2684 If the board specific function 2694 If the board specific function
2685 extern int overwrite_console (void); 2695 extern int overwrite_console (void);
2686 returns 1, the stdin, stderr and stdout are switched to the 2696 returns 1, the stdin, stderr and stdout are switched to the
2687 serial port, else the settings in the environment are used. 2697 serial port, else the settings in the environment are used.
2688 2698
2689 - CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE 2699 - CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
2690 Enable the call to overwrite_console(). 2700 Enable the call to overwrite_console().
2691 2701
2692 - CONFIG_SYS_CONSOLE_ENV_OVERWRITE 2702 - CONFIG_SYS_CONSOLE_ENV_OVERWRITE
2693 Enable overwrite of previous console environment settings. 2703 Enable overwrite of previous console environment settings.
2694 2704
2695 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END: 2705 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END:
2696 Begin and End addresses of the area used by the 2706 Begin and End addresses of the area used by the
2697 simple memory test. 2707 simple memory test.
2698 2708
2699 - CONFIG_SYS_ALT_MEMTEST: 2709 - CONFIG_SYS_ALT_MEMTEST:
2700 Enable an alternate, more extensive memory test. 2710 Enable an alternate, more extensive memory test.
2701 2711
2702 - CONFIG_SYS_MEMTEST_SCRATCH: 2712 - CONFIG_SYS_MEMTEST_SCRATCH:
2703 Scratch address used by the alternate memory test 2713 Scratch address used by the alternate memory test
2704 You only need to set this if address zero isn't writeable 2714 You only need to set this if address zero isn't writeable
2705 2715
2706 - CONFIG_SYS_MEM_TOP_HIDE (PPC only): 2716 - CONFIG_SYS_MEM_TOP_HIDE (PPC only):
2707 If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header, 2717 If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
2708 this specified memory area will get subtracted from the top 2718 this specified memory area will get subtracted from the top
2709 (end) of RAM and won't get "touched" at all by U-Boot. By 2719 (end) of RAM and won't get "touched" at all by U-Boot. By
2710 fixing up gd->ram_size the Linux kernel should gets passed 2720 fixing up gd->ram_size the Linux kernel should gets passed
2711 the now "corrected" memory size and won't touch it either. 2721 the now "corrected" memory size and won't touch it either.
2712 This should work for arch/ppc and arch/powerpc. Only Linux 2722 This should work for arch/ppc and arch/powerpc. Only Linux
2713 board ports in arch/powerpc with bootwrapper support that 2723 board ports in arch/powerpc with bootwrapper support that
2714 recalculate the memory size from the SDRAM controller setup 2724 recalculate the memory size from the SDRAM controller setup
2715 will have to get fixed in Linux additionally. 2725 will have to get fixed in Linux additionally.
2716 2726
2717 This option can be used as a workaround for the 440EPx/GRx 2727 This option can be used as a workaround for the 440EPx/GRx
2718 CHIP 11 errata where the last 256 bytes in SDRAM shouldn't 2728 CHIP 11 errata where the last 256 bytes in SDRAM shouldn't
2719 be touched. 2729 be touched.
2720 2730
2721 WARNING: Please make sure that this value is a multiple of 2731 WARNING: Please make sure that this value is a multiple of
2722 the Linux page size (normally 4k). If this is not the case, 2732 the Linux page size (normally 4k). If this is not the case,
2723 then the end address of the Linux memory will be located at a 2733 then the end address of the Linux memory will be located at a
2724 non page size aligned address and this could cause major 2734 non page size aligned address and this could cause major
2725 problems. 2735 problems.
2726 2736
2727 - CONFIG_SYS_TFTP_LOADADDR: 2737 - CONFIG_SYS_TFTP_LOADADDR:
2728 Default load address for network file downloads 2738 Default load address for network file downloads
2729 2739
2730 - CONFIG_SYS_LOADS_BAUD_CHANGE: 2740 - CONFIG_SYS_LOADS_BAUD_CHANGE:
2731 Enable temporary baudrate change while serial download 2741 Enable temporary baudrate change while serial download
2732 2742
2733 - CONFIG_SYS_SDRAM_BASE: 2743 - CONFIG_SYS_SDRAM_BASE:
2734 Physical start address of SDRAM. _Must_ be 0 here. 2744 Physical start address of SDRAM. _Must_ be 0 here.
2735 2745
2736 - CONFIG_SYS_MBIO_BASE: 2746 - CONFIG_SYS_MBIO_BASE:
2737 Physical start address of Motherboard I/O (if using a 2747 Physical start address of Motherboard I/O (if using a
2738 Cogent motherboard) 2748 Cogent motherboard)
2739 2749
2740 - CONFIG_SYS_FLASH_BASE: 2750 - CONFIG_SYS_FLASH_BASE:
2741 Physical start address of Flash memory. 2751 Physical start address of Flash memory.
2742 2752
2743 - CONFIG_SYS_MONITOR_BASE: 2753 - CONFIG_SYS_MONITOR_BASE:
2744 Physical start address of boot monitor code (set by 2754 Physical start address of boot monitor code (set by
2745 make config files to be same as the text base address 2755 make config files to be same as the text base address
2746 (CONFIG_SYS_TEXT_BASE) used when linking) - same as 2756 (CONFIG_SYS_TEXT_BASE) used when linking) - same as
2747 CONFIG_SYS_FLASH_BASE when booting from flash. 2757 CONFIG_SYS_FLASH_BASE when booting from flash.
2748 2758
2749 - CONFIG_SYS_MONITOR_LEN: 2759 - CONFIG_SYS_MONITOR_LEN:
2750 Size of memory reserved for monitor code, used to 2760 Size of memory reserved for monitor code, used to
2751 determine _at_compile_time_ (!) if the environment is 2761 determine _at_compile_time_ (!) if the environment is
2752 embedded within the U-Boot image, or in a separate 2762 embedded within the U-Boot image, or in a separate
2753 flash sector. 2763 flash sector.
2754 2764
2755 - CONFIG_SYS_MALLOC_LEN: 2765 - CONFIG_SYS_MALLOC_LEN:
2756 Size of DRAM reserved for malloc() use. 2766 Size of DRAM reserved for malloc() use.
2757 2767
2758 - CONFIG_SYS_BOOTM_LEN: 2768 - CONFIG_SYS_BOOTM_LEN:
2759 Normally compressed uImages are limited to an 2769 Normally compressed uImages are limited to an
2760 uncompressed size of 8 MBytes. If this is not enough, 2770 uncompressed size of 8 MBytes. If this is not enough,
2761 you can define CONFIG_SYS_BOOTM_LEN in your board config file 2771 you can define CONFIG_SYS_BOOTM_LEN in your board config file
2762 to adjust this setting to your needs. 2772 to adjust this setting to your needs.
2763 2773
2764 - CONFIG_SYS_BOOTMAPSZ: 2774 - CONFIG_SYS_BOOTMAPSZ:
2765 Maximum size of memory mapped by the startup code of 2775 Maximum size of memory mapped by the startup code of
2766 the Linux kernel; all data that must be processed by 2776 the Linux kernel; all data that must be processed by
2767 the Linux kernel (bd_info, boot arguments, FDT blob if 2777 the Linux kernel (bd_info, boot arguments, FDT blob if
2768 used) must be put below this limit, unless "bootm_low" 2778 used) must be put below this limit, unless "bootm_low"
2769 enviroment variable is defined and non-zero. In such case 2779 enviroment variable is defined and non-zero. In such case
2770 all data for the Linux kernel must be between "bootm_low" 2780 all data for the Linux kernel must be between "bootm_low"
2771 and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. The environment 2781 and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. The environment
2772 variable "bootm_mapsize" will override the value of 2782 variable "bootm_mapsize" will override the value of
2773 CONFIG_SYS_BOOTMAPSZ. If CONFIG_SYS_BOOTMAPSZ is undefined, 2783 CONFIG_SYS_BOOTMAPSZ. If CONFIG_SYS_BOOTMAPSZ is undefined,
2774 then the value in "bootm_size" will be used instead. 2784 then the value in "bootm_size" will be used instead.
2775 2785
2776 - CONFIG_SYS_BOOT_RAMDISK_HIGH: 2786 - CONFIG_SYS_BOOT_RAMDISK_HIGH:
2777 Enable initrd_high functionality. If defined then the 2787 Enable initrd_high functionality. If defined then the
2778 initrd_high feature is enabled and the bootm ramdisk subcommand 2788 initrd_high feature is enabled and the bootm ramdisk subcommand
2779 is enabled. 2789 is enabled.
2780 2790
2781 - CONFIG_SYS_BOOT_GET_CMDLINE: 2791 - CONFIG_SYS_BOOT_GET_CMDLINE:
2782 Enables allocating and saving kernel cmdline in space between 2792 Enables allocating and saving kernel cmdline in space between
2783 "bootm_low" and "bootm_low" + BOOTMAPSZ. 2793 "bootm_low" and "bootm_low" + BOOTMAPSZ.
2784 2794
2785 - CONFIG_SYS_BOOT_GET_KBD: 2795 - CONFIG_SYS_BOOT_GET_KBD:
2786 Enables allocating and saving a kernel copy of the bd_info in 2796 Enables allocating and saving a kernel copy of the bd_info in
2787 space between "bootm_low" and "bootm_low" + BOOTMAPSZ. 2797 space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
2788 2798
2789 - CONFIG_SYS_MAX_FLASH_BANKS: 2799 - CONFIG_SYS_MAX_FLASH_BANKS:
2790 Max number of Flash memory banks 2800 Max number of Flash memory banks
2791 2801
2792 - CONFIG_SYS_MAX_FLASH_SECT: 2802 - CONFIG_SYS_MAX_FLASH_SECT:
2793 Max number of sectors on a Flash chip 2803 Max number of sectors on a Flash chip
2794 2804
2795 - CONFIG_SYS_FLASH_ERASE_TOUT: 2805 - CONFIG_SYS_FLASH_ERASE_TOUT:
2796 Timeout for Flash erase operations (in ms) 2806 Timeout for Flash erase operations (in ms)
2797 2807
2798 - CONFIG_SYS_FLASH_WRITE_TOUT: 2808 - CONFIG_SYS_FLASH_WRITE_TOUT:
2799 Timeout for Flash write operations (in ms) 2809 Timeout for Flash write operations (in ms)
2800 2810
2801 - CONFIG_SYS_FLASH_LOCK_TOUT 2811 - CONFIG_SYS_FLASH_LOCK_TOUT
2802 Timeout for Flash set sector lock bit operation (in ms) 2812 Timeout for Flash set sector lock bit operation (in ms)
2803 2813
2804 - CONFIG_SYS_FLASH_UNLOCK_TOUT 2814 - CONFIG_SYS_FLASH_UNLOCK_TOUT
2805 Timeout for Flash clear lock bits operation (in ms) 2815 Timeout for Flash clear lock bits operation (in ms)
2806 2816
2807 - CONFIG_SYS_FLASH_PROTECTION 2817 - CONFIG_SYS_FLASH_PROTECTION
2808 If defined, hardware flash sectors protection is used 2818 If defined, hardware flash sectors protection is used
2809 instead of U-Boot software protection. 2819 instead of U-Boot software protection.
2810 2820
2811 - CONFIG_SYS_DIRECT_FLASH_TFTP: 2821 - CONFIG_SYS_DIRECT_FLASH_TFTP:
2812 2822
2813 Enable TFTP transfers directly to flash memory; 2823 Enable TFTP transfers directly to flash memory;
2814 without this option such a download has to be 2824 without this option such a download has to be
2815 performed in two steps: (1) download to RAM, and (2) 2825 performed in two steps: (1) download to RAM, and (2)
2816 copy from RAM to flash. 2826 copy from RAM to flash.
2817 2827
2818 The two-step approach is usually more reliable, since 2828 The two-step approach is usually more reliable, since
2819 you can check if the download worked before you erase 2829 you can check if the download worked before you erase
2820 the flash, but in some situations (when system RAM is 2830 the flash, but in some situations (when system RAM is
2821 too limited to allow for a temporary copy of the 2831 too limited to allow for a temporary copy of the
2822 downloaded image) this option may be very useful. 2832 downloaded image) this option may be very useful.
2823 2833
2824 - CONFIG_SYS_FLASH_CFI: 2834 - CONFIG_SYS_FLASH_CFI:
2825 Define if the flash driver uses extra elements in the 2835 Define if the flash driver uses extra elements in the
2826 common flash structure for storing flash geometry. 2836 common flash structure for storing flash geometry.
2827 2837
2828 - CONFIG_FLASH_CFI_DRIVER 2838 - CONFIG_FLASH_CFI_DRIVER
2829 This option also enables the building of the cfi_flash driver 2839 This option also enables the building of the cfi_flash driver
2830 in the drivers directory 2840 in the drivers directory
2831 2841
2832 - CONFIG_FLASH_CFI_MTD 2842 - CONFIG_FLASH_CFI_MTD
2833 This option enables the building of the cfi_mtd driver 2843 This option enables the building of the cfi_mtd driver
2834 in the drivers directory. The driver exports CFI flash 2844 in the drivers directory. The driver exports CFI flash
2835 to the MTD layer. 2845 to the MTD layer.
2836 2846
2837 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE 2847 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE
2838 Use buffered writes to flash. 2848 Use buffered writes to flash.
2839 2849
2840 - CONFIG_FLASH_SPANSION_S29WS_N 2850 - CONFIG_FLASH_SPANSION_S29WS_N
2841 s29ws-n MirrorBit flash has non-standard addresses for buffered 2851 s29ws-n MirrorBit flash has non-standard addresses for buffered
2842 write commands. 2852 write commands.
2843 2853
2844 - CONFIG_SYS_FLASH_QUIET_TEST 2854 - CONFIG_SYS_FLASH_QUIET_TEST
2845 If this option is defined, the common CFI flash doesn't 2855 If this option is defined, the common CFI flash doesn't
2846 print it's warning upon not recognized FLASH banks. This 2856 print it's warning upon not recognized FLASH banks. This
2847 is useful, if some of the configured banks are only 2857 is useful, if some of the configured banks are only
2848 optionally available. 2858 optionally available.
2849 2859
2850 - CONFIG_FLASH_SHOW_PROGRESS 2860 - CONFIG_FLASH_SHOW_PROGRESS
2851 If defined (must be an integer), print out countdown 2861 If defined (must be an integer), print out countdown
2852 digits and dots. Recommended value: 45 (9..1) for 80 2862 digits and dots. Recommended value: 45 (9..1) for 80
2853 column displays, 15 (3..1) for 40 column displays. 2863 column displays, 15 (3..1) for 40 column displays.
2854 2864
2855 - CONFIG_SYS_RX_ETH_BUFFER: 2865 - CONFIG_SYS_RX_ETH_BUFFER:
2856 Defines the number of Ethernet receive buffers. On some 2866 Defines the number of Ethernet receive buffers. On some
2857 Ethernet controllers it is recommended to set this value 2867 Ethernet controllers it is recommended to set this value
2858 to 8 or even higher (EEPRO100 or 405 EMAC), since all 2868 to 8 or even higher (EEPRO100 or 405 EMAC), since all
2859 buffers can be full shortly after enabling the interface 2869 buffers can be full shortly after enabling the interface
2860 on high Ethernet traffic. 2870 on high Ethernet traffic.
2861 Defaults to 4 if not defined. 2871 Defaults to 4 if not defined.
2862 2872
2863 - CONFIG_ENV_MAX_ENTRIES 2873 - CONFIG_ENV_MAX_ENTRIES
2864 2874
2865 Maximum number of entries in the hash table that is used 2875 Maximum number of entries in the hash table that is used
2866 internally to store the environment settings. The default 2876 internally to store the environment settings. The default
2867 setting is supposed to be generous and should work in most 2877 setting is supposed to be generous and should work in most
2868 cases. This setting can be used to tune behaviour; see 2878 cases. This setting can be used to tune behaviour; see
2869 lib/hashtable.c for details. 2879 lib/hashtable.c for details.
2870 2880
2871 The following definitions that deal with the placement and management 2881 The following definitions that deal with the placement and management
2872 of environment data (variable area); in general, we support the 2882 of environment data (variable area); in general, we support the
2873 following configurations: 2883 following configurations:
2874 2884
2875 - CONFIG_BUILD_ENVCRC: 2885 - CONFIG_BUILD_ENVCRC:
2876 2886
2877 Builds up envcrc with the target environment so that external utils 2887 Builds up envcrc with the target environment so that external utils
2878 may easily extract it and embed it in final U-Boot images. 2888 may easily extract it and embed it in final U-Boot images.
2879 2889
2880 - CONFIG_ENV_IS_IN_FLASH: 2890 - CONFIG_ENV_IS_IN_FLASH:
2881 2891
2882 Define this if the environment is in flash memory. 2892 Define this if the environment is in flash memory.
2883 2893
2884 a) The environment occupies one whole flash sector, which is 2894 a) The environment occupies one whole flash sector, which is
2885 "embedded" in the text segment with the U-Boot code. This 2895 "embedded" in the text segment with the U-Boot code. This
2886 happens usually with "bottom boot sector" or "top boot 2896 happens usually with "bottom boot sector" or "top boot
2887 sector" type flash chips, which have several smaller 2897 sector" type flash chips, which have several smaller
2888 sectors at the start or the end. For instance, such a 2898 sectors at the start or the end. For instance, such a
2889 layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In 2899 layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In
2890 such a case you would place the environment in one of the 2900 such a case you would place the environment in one of the
2891 4 kB sectors - with U-Boot code before and after it. With 2901 4 kB sectors - with U-Boot code before and after it. With
2892 "top boot sector" type flash chips, you would put the 2902 "top boot sector" type flash chips, you would put the
2893 environment in one of the last sectors, leaving a gap 2903 environment in one of the last sectors, leaving a gap
2894 between U-Boot and the environment. 2904 between U-Boot and the environment.
2895 2905
2896 - CONFIG_ENV_OFFSET: 2906 - CONFIG_ENV_OFFSET:
2897 2907
2898 Offset of environment data (variable area) to the 2908 Offset of environment data (variable area) to the
2899 beginning of flash memory; for instance, with bottom boot 2909 beginning of flash memory; for instance, with bottom boot
2900 type flash chips the second sector can be used: the offset 2910 type flash chips the second sector can be used: the offset
2901 for this sector is given here. 2911 for this sector is given here.
2902 2912
2903 CONFIG_ENV_OFFSET is used relative to CONFIG_SYS_FLASH_BASE. 2913 CONFIG_ENV_OFFSET is used relative to CONFIG_SYS_FLASH_BASE.
2904 2914
2905 - CONFIG_ENV_ADDR: 2915 - CONFIG_ENV_ADDR:
2906 2916
2907 This is just another way to specify the start address of 2917 This is just another way to specify the start address of
2908 the flash sector containing the environment (instead of 2918 the flash sector containing the environment (instead of
2909 CONFIG_ENV_OFFSET). 2919 CONFIG_ENV_OFFSET).
2910 2920
2911 - CONFIG_ENV_SECT_SIZE: 2921 - CONFIG_ENV_SECT_SIZE:
2912 2922
2913 Size of the sector containing the environment. 2923 Size of the sector containing the environment.
2914 2924
2915 2925
2916 b) Sometimes flash chips have few, equal sized, BIG sectors. 2926 b) Sometimes flash chips have few, equal sized, BIG sectors.
2917 In such a case you don't want to spend a whole sector for 2927 In such a case you don't want to spend a whole sector for
2918 the environment. 2928 the environment.
2919 2929
2920 - CONFIG_ENV_SIZE: 2930 - CONFIG_ENV_SIZE:
2921 2931
2922 If you use this in combination with CONFIG_ENV_IS_IN_FLASH 2932 If you use this in combination with CONFIG_ENV_IS_IN_FLASH
2923 and CONFIG_ENV_SECT_SIZE, you can specify to use only a part 2933 and CONFIG_ENV_SECT_SIZE, you can specify to use only a part
2924 of this flash sector for the environment. This saves 2934 of this flash sector for the environment. This saves
2925 memory for the RAM copy of the environment. 2935 memory for the RAM copy of the environment.
2926 2936
2927 It may also save flash memory if you decide to use this 2937 It may also save flash memory if you decide to use this
2928 when your environment is "embedded" within U-Boot code, 2938 when your environment is "embedded" within U-Boot code,
2929 since then the remainder of the flash sector could be used 2939 since then the remainder of the flash sector could be used
2930 for U-Boot code. It should be pointed out that this is 2940 for U-Boot code. It should be pointed out that this is
2931 STRONGLY DISCOURAGED from a robustness point of view: 2941 STRONGLY DISCOURAGED from a robustness point of view:
2932 updating the environment in flash makes it always 2942 updating the environment in flash makes it always
2933 necessary to erase the WHOLE sector. If something goes 2943 necessary to erase the WHOLE sector. If something goes
2934 wrong before the contents has been restored from a copy in 2944 wrong before the contents has been restored from a copy in
2935 RAM, your target system will be dead. 2945 RAM, your target system will be dead.
2936 2946
2937 - CONFIG_ENV_ADDR_REDUND 2947 - CONFIG_ENV_ADDR_REDUND
2938 CONFIG_ENV_SIZE_REDUND 2948 CONFIG_ENV_SIZE_REDUND
2939 2949
2940 These settings describe a second storage area used to hold 2950 These settings describe a second storage area used to hold
2941 a redundant copy of the environment data, so that there is 2951 a redundant copy of the environment data, so that there is
2942 a valid backup copy in case there is a power failure during 2952 a valid backup copy in case there is a power failure during
2943 a "saveenv" operation. 2953 a "saveenv" operation.
2944 2954
2945 BE CAREFUL! Any changes to the flash layout, and some changes to the 2955 BE CAREFUL! Any changes to the flash layout, and some changes to the
2946 source code will make it necessary to adapt <board>/u-boot.lds* 2956 source code will make it necessary to adapt <board>/u-boot.lds*
2947 accordingly! 2957 accordingly!
2948 2958
2949 2959
2950 - CONFIG_ENV_IS_IN_NVRAM: 2960 - CONFIG_ENV_IS_IN_NVRAM:
2951 2961
2952 Define this if you have some non-volatile memory device 2962 Define this if you have some non-volatile memory device
2953 (NVRAM, battery buffered SRAM) which you want to use for the 2963 (NVRAM, battery buffered SRAM) which you want to use for the
2954 environment. 2964 environment.
2955 2965
2956 - CONFIG_ENV_ADDR: 2966 - CONFIG_ENV_ADDR:
2957 - CONFIG_ENV_SIZE: 2967 - CONFIG_ENV_SIZE:
2958 2968
2959 These two #defines are used to determine the memory area you 2969 These two #defines are used to determine the memory area you
2960 want to use for environment. It is assumed that this memory 2970 want to use for environment. It is assumed that this memory
2961 can just be read and written to, without any special 2971 can just be read and written to, without any special
2962 provision. 2972 provision.
2963 2973
2964 BE CAREFUL! The first access to the environment happens quite early 2974 BE CAREFUL! The first access to the environment happens quite early
2965 in U-Boot initalization (when we try to get the setting of for the 2975 in U-Boot initalization (when we try to get the setting of for the
2966 console baudrate). You *MUST* have mapped your NVRAM area then, or 2976 console baudrate). You *MUST* have mapped your NVRAM area then, or
2967 U-Boot will hang. 2977 U-Boot will hang.
2968 2978
2969 Please note that even with NVRAM we still use a copy of the 2979 Please note that even with NVRAM we still use a copy of the
2970 environment in RAM: we could work on NVRAM directly, but we want to 2980 environment in RAM: we could work on NVRAM directly, but we want to
2971 keep settings there always unmodified except somebody uses "saveenv" 2981 keep settings there always unmodified except somebody uses "saveenv"
2972 to save the current settings. 2982 to save the current settings.
2973 2983
2974 2984
2975 - CONFIG_ENV_IS_IN_EEPROM: 2985 - CONFIG_ENV_IS_IN_EEPROM:
2976 2986
2977 Use this if you have an EEPROM or similar serial access 2987 Use this if you have an EEPROM or similar serial access
2978 device and a driver for it. 2988 device and a driver for it.
2979 2989
2980 - CONFIG_ENV_OFFSET: 2990 - CONFIG_ENV_OFFSET:
2981 - CONFIG_ENV_SIZE: 2991 - CONFIG_ENV_SIZE:
2982 2992
2983 These two #defines specify the offset and size of the 2993 These two #defines specify the offset and size of the
2984 environment area within the total memory of your EEPROM. 2994 environment area within the total memory of your EEPROM.
2985 2995
2986 - CONFIG_SYS_I2C_EEPROM_ADDR: 2996 - CONFIG_SYS_I2C_EEPROM_ADDR:
2987 If defined, specified the chip address of the EEPROM device. 2997 If defined, specified the chip address of the EEPROM device.
2988 The default address is zero. 2998 The default address is zero.
2989 2999
2990 - CONFIG_SYS_EEPROM_PAGE_WRITE_BITS: 3000 - CONFIG_SYS_EEPROM_PAGE_WRITE_BITS:
2991 If defined, the number of bits used to address bytes in a 3001 If defined, the number of bits used to address bytes in a
2992 single page in the EEPROM device. A 64 byte page, for example 3002 single page in the EEPROM device. A 64 byte page, for example
2993 would require six bits. 3003 would require six bits.
2994 3004
2995 - CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS: 3005 - CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS:
2996 If defined, the number of milliseconds to delay between 3006 If defined, the number of milliseconds to delay between
2997 page writes. The default is zero milliseconds. 3007 page writes. The default is zero milliseconds.
2998 3008
2999 - CONFIG_SYS_I2C_EEPROM_ADDR_LEN: 3009 - CONFIG_SYS_I2C_EEPROM_ADDR_LEN:
3000 The length in bytes of the EEPROM memory array address. Note 3010 The length in bytes of the EEPROM memory array address. Note
3001 that this is NOT the chip address length! 3011 that this is NOT the chip address length!
3002 3012
3003 - CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW: 3013 - CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW:
3004 EEPROM chips that implement "address overflow" are ones 3014 EEPROM chips that implement "address overflow" are ones
3005 like Catalyst 24WC04/08/16 which has 9/10/11 bits of 3015 like Catalyst 24WC04/08/16 which has 9/10/11 bits of
3006 address and the extra bits end up in the "chip address" bit 3016 address and the extra bits end up in the "chip address" bit
3007 slots. This makes a 24WC08 (1Kbyte) chip look like four 256 3017 slots. This makes a 24WC08 (1Kbyte) chip look like four 256
3008 byte chips. 3018 byte chips.
3009 3019
3010 Note that we consider the length of the address field to 3020 Note that we consider the length of the address field to
3011 still be one byte because the extra address bits are hidden 3021 still be one byte because the extra address bits are hidden
3012 in the chip address. 3022 in the chip address.
3013 3023
3014 - CONFIG_SYS_EEPROM_SIZE: 3024 - CONFIG_SYS_EEPROM_SIZE:
3015 The size in bytes of the EEPROM device. 3025 The size in bytes of the EEPROM device.
3016 3026
3017 - CONFIG_ENV_EEPROM_IS_ON_I2C 3027 - CONFIG_ENV_EEPROM_IS_ON_I2C
3018 define this, if you have I2C and SPI activated, and your 3028 define this, if you have I2C and SPI activated, and your
3019 EEPROM, which holds the environment, is on the I2C bus. 3029 EEPROM, which holds the environment, is on the I2C bus.
3020 3030
3021 - CONFIG_I2C_ENV_EEPROM_BUS 3031 - CONFIG_I2C_ENV_EEPROM_BUS
3022 if you have an Environment on an EEPROM reached over 3032 if you have an Environment on an EEPROM reached over
3023 I2C muxes, you can define here, how to reach this 3033 I2C muxes, you can define here, how to reach this
3024 EEPROM. For example: 3034 EEPROM. For example:
3025 3035
3026 #define CONFIG_I2C_ENV_EEPROM_BUS "pca9547:70:d\0" 3036 #define CONFIG_I2C_ENV_EEPROM_BUS "pca9547:70:d\0"
3027 3037
3028 EEPROM which holds the environment, is reached over 3038 EEPROM which holds the environment, is reached over
3029 a pca9547 i2c mux with address 0x70, channel 3. 3039 a pca9547 i2c mux with address 0x70, channel 3.
3030 3040
3031 - CONFIG_ENV_IS_IN_DATAFLASH: 3041 - CONFIG_ENV_IS_IN_DATAFLASH:
3032 3042
3033 Define this if you have a DataFlash memory device which you 3043 Define this if you have a DataFlash memory device which you
3034 want to use for the environment. 3044 want to use for the environment.
3035 3045
3036 - CONFIG_ENV_OFFSET: 3046 - CONFIG_ENV_OFFSET:
3037 - CONFIG_ENV_ADDR: 3047 - CONFIG_ENV_ADDR:
3038 - CONFIG_ENV_SIZE: 3048 - CONFIG_ENV_SIZE:
3039 3049
3040 These three #defines specify the offset and size of the 3050 These three #defines specify the offset and size of the
3041 environment area within the total memory of your DataFlash placed 3051 environment area within the total memory of your DataFlash placed
3042 at the specified address. 3052 at the specified address.
3043 3053
3044 - CONFIG_ENV_IS_IN_REMOTE: 3054 - CONFIG_ENV_IS_IN_REMOTE:
3045 3055
3046 Define this if you have a remote memory space which you 3056 Define this if you have a remote memory space which you
3047 want to use for the local device's environment. 3057 want to use for the local device's environment.
3048 3058
3049 - CONFIG_ENV_ADDR: 3059 - CONFIG_ENV_ADDR:
3050 - CONFIG_ENV_SIZE: 3060 - CONFIG_ENV_SIZE:
3051 3061
3052 These two #defines specify the address and size of the 3062 These two #defines specify the address and size of the
3053 environment area within the remote memory space. The 3063 environment area within the remote memory space. The
3054 local device can get the environment from remote memory 3064 local device can get the environment from remote memory
3055 space by SRIO or other links. 3065 space by SRIO or other links.
3056 3066
3057 BE CAREFUL! For some special cases, the local device can not use 3067 BE CAREFUL! For some special cases, the local device can not use
3058 "saveenv" command. For example, the local device will get the 3068 "saveenv" command. For example, the local device will get the
3059 environment stored in a remote NOR flash by SRIO link, but it can 3069 environment stored in a remote NOR flash by SRIO link, but it can
3060 not erase, write this NOR flash by SRIO interface. 3070 not erase, write this NOR flash by SRIO interface.
3061 3071
3062 - CONFIG_ENV_IS_IN_NAND: 3072 - CONFIG_ENV_IS_IN_NAND:
3063 3073
3064 Define this if you have a NAND device which you want to use 3074 Define this if you have a NAND device which you want to use
3065 for the environment. 3075 for the environment.
3066 3076
3067 - CONFIG_ENV_OFFSET: 3077 - CONFIG_ENV_OFFSET:
3068 - CONFIG_ENV_SIZE: 3078 - CONFIG_ENV_SIZE:
3069 3079
3070 These two #defines specify the offset and size of the environment 3080 These two #defines specify the offset and size of the environment
3071 area within the first NAND device. CONFIG_ENV_OFFSET must be 3081 area within the first NAND device. CONFIG_ENV_OFFSET must be
3072 aligned to an erase block boundary. 3082 aligned to an erase block boundary.
3073 3083
3074 - CONFIG_ENV_OFFSET_REDUND (optional): 3084 - CONFIG_ENV_OFFSET_REDUND (optional):
3075 3085
3076 This setting describes a second storage area of CONFIG_ENV_SIZE 3086 This setting describes a second storage area of CONFIG_ENV_SIZE
3077 size used to hold a redundant copy of the environment data, so 3087 size used to hold a redundant copy of the environment data, so
3078 that there is a valid backup copy in case there is a power failure 3088 that there is a valid backup copy in case there is a power failure
3079 during a "saveenv" operation. CONFIG_ENV_OFFSET_RENDUND must be 3089 during a "saveenv" operation. CONFIG_ENV_OFFSET_RENDUND must be
3080 aligned to an erase block boundary. 3090 aligned to an erase block boundary.
3081 3091
3082 - CONFIG_ENV_RANGE (optional): 3092 - CONFIG_ENV_RANGE (optional):
3083 3093
3084 Specifies the length of the region in which the environment 3094 Specifies the length of the region in which the environment
3085 can be written. This should be a multiple of the NAND device's 3095 can be written. This should be a multiple of the NAND device's
3086 block size. Specifying a range with more erase blocks than 3096 block size. Specifying a range with more erase blocks than
3087 are needed to hold CONFIG_ENV_SIZE allows bad blocks within 3097 are needed to hold CONFIG_ENV_SIZE allows bad blocks within
3088 the range to be avoided. 3098 the range to be avoided.
3089 3099
3090 - CONFIG_ENV_OFFSET_OOB (optional): 3100 - CONFIG_ENV_OFFSET_OOB (optional):
3091 3101
3092 Enables support for dynamically retrieving the offset of the 3102 Enables support for dynamically retrieving the offset of the
3093 environment from block zero's out-of-band data. The 3103 environment from block zero's out-of-band data. The
3094 "nand env.oob" command can be used to record this offset. 3104 "nand env.oob" command can be used to record this offset.
3095 Currently, CONFIG_ENV_OFFSET_REDUND is not supported when 3105 Currently, CONFIG_ENV_OFFSET_REDUND is not supported when
3096 using CONFIG_ENV_OFFSET_OOB. 3106 using CONFIG_ENV_OFFSET_OOB.
3097 3107
3098 - CONFIG_NAND_ENV_DST 3108 - CONFIG_NAND_ENV_DST
3099 3109
3100 Defines address in RAM to which the nand_spl code should copy the 3110 Defines address in RAM to which the nand_spl code should copy the
3101 environment. If redundant environment is used, it will be copied to 3111 environment. If redundant environment is used, it will be copied to
3102 CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE. 3112 CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
3103 3113
3104 - CONFIG_SYS_SPI_INIT_OFFSET 3114 - CONFIG_SYS_SPI_INIT_OFFSET
3105 3115
3106 Defines offset to the initial SPI buffer area in DPRAM. The 3116 Defines offset to the initial SPI buffer area in DPRAM. The
3107 area is used at an early stage (ROM part) if the environment 3117 area is used at an early stage (ROM part) if the environment
3108 is configured to reside in the SPI EEPROM: We need a 520 byte 3118 is configured to reside in the SPI EEPROM: We need a 520 byte
3109 scratch DPRAM area. It is used between the two initialization 3119 scratch DPRAM area. It is used between the two initialization
3110 calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems 3120 calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems
3111 to be a good choice since it makes it far enough from the 3121 to be a good choice since it makes it far enough from the
3112 start of the data area as well as from the stack pointer. 3122 start of the data area as well as from the stack pointer.
3113 3123
3114 Please note that the environment is read-only until the monitor 3124 Please note that the environment is read-only until the monitor
3115 has been relocated to RAM and a RAM copy of the environment has been 3125 has been relocated to RAM and a RAM copy of the environment has been
3116 created; also, when using EEPROM you will have to use getenv_f() 3126 created; also, when using EEPROM you will have to use getenv_f()
3117 until then to read environment variables. 3127 until then to read environment variables.
3118 3128
3119 The environment is protected by a CRC32 checksum. Before the monitor 3129 The environment is protected by a CRC32 checksum. Before the monitor
3120 is relocated into RAM, as a result of a bad CRC you will be working 3130 is relocated into RAM, as a result of a bad CRC you will be working
3121 with the compiled-in default environment - *silently*!!! [This is 3131 with the compiled-in default environment - *silently*!!! [This is
3122 necessary, because the first environment variable we need is the 3132 necessary, because the first environment variable we need is the
3123 "baudrate" setting for the console - if we have a bad CRC, we don't 3133 "baudrate" setting for the console - if we have a bad CRC, we don't
3124 have any device yet where we could complain.] 3134 have any device yet where we could complain.]
3125 3135
3126 Note: once the monitor has been relocated, then it will complain if 3136 Note: once the monitor has been relocated, then it will complain if
3127 the default environment is used; a new CRC is computed as soon as you 3137 the default environment is used; a new CRC is computed as soon as you
3128 use the "saveenv" command to store a valid environment. 3138 use the "saveenv" command to store a valid environment.
3129 3139
3130 - CONFIG_SYS_FAULT_ECHO_LINK_DOWN: 3140 - CONFIG_SYS_FAULT_ECHO_LINK_DOWN:
3131 Echo the inverted Ethernet link state to the fault LED. 3141 Echo the inverted Ethernet link state to the fault LED.
3132 3142
3133 Note: If this option is active, then CONFIG_SYS_FAULT_MII_ADDR 3143 Note: If this option is active, then CONFIG_SYS_FAULT_MII_ADDR
3134 also needs to be defined. 3144 also needs to be defined.
3135 3145
3136 - CONFIG_SYS_FAULT_MII_ADDR: 3146 - CONFIG_SYS_FAULT_MII_ADDR:
3137 MII address of the PHY to check for the Ethernet link state. 3147 MII address of the PHY to check for the Ethernet link state.
3138 3148
3139 - CONFIG_NS16550_MIN_FUNCTIONS: 3149 - CONFIG_NS16550_MIN_FUNCTIONS:
3140 Define this if you desire to only have use of the NS16550_init 3150 Define this if you desire to only have use of the NS16550_init
3141 and NS16550_putc functions for the serial driver located at 3151 and NS16550_putc functions for the serial driver located at
3142 drivers/serial/ns16550.c. This option is useful for saving 3152 drivers/serial/ns16550.c. This option is useful for saving
3143 space for already greatly restricted images, including but not 3153 space for already greatly restricted images, including but not
3144 limited to NAND_SPL configurations. 3154 limited to NAND_SPL configurations.
3145 3155
3146 Low Level (hardware related) configuration options: 3156 Low Level (hardware related) configuration options:
3147 --------------------------------------------------- 3157 ---------------------------------------------------
3148 3158
3149 - CONFIG_SYS_CACHELINE_SIZE: 3159 - CONFIG_SYS_CACHELINE_SIZE:
3150 Cache Line Size of the CPU. 3160 Cache Line Size of the CPU.
3151 3161
3152 - CONFIG_SYS_DEFAULT_IMMR: 3162 - CONFIG_SYS_DEFAULT_IMMR:
3153 Default address of the IMMR after system reset. 3163 Default address of the IMMR after system reset.
3154 3164
3155 Needed on some 8260 systems (MPC8260ADS, PQ2FADS-ZU, 3165 Needed on some 8260 systems (MPC8260ADS, PQ2FADS-ZU,
3156 and RPXsuper) to be able to adjust the position of 3166 and RPXsuper) to be able to adjust the position of
3157 the IMMR register after a reset. 3167 the IMMR register after a reset.
3158 3168
3159 - CONFIG_SYS_CCSRBAR_DEFAULT: 3169 - CONFIG_SYS_CCSRBAR_DEFAULT:
3160 Default (power-on reset) physical address of CCSR on Freescale 3170 Default (power-on reset) physical address of CCSR on Freescale
3161 PowerPC SOCs. 3171 PowerPC SOCs.
3162 3172
3163 - CONFIG_SYS_CCSRBAR: 3173 - CONFIG_SYS_CCSRBAR:
3164 Virtual address of CCSR. On a 32-bit build, this is typically 3174 Virtual address of CCSR. On a 32-bit build, this is typically
3165 the same value as CONFIG_SYS_CCSRBAR_DEFAULT. 3175 the same value as CONFIG_SYS_CCSRBAR_DEFAULT.
3166 3176
3167 CONFIG_SYS_DEFAULT_IMMR must also be set to this value, 3177 CONFIG_SYS_DEFAULT_IMMR must also be set to this value,
3168 for cross-platform code that uses that macro instead. 3178 for cross-platform code that uses that macro instead.
3169 3179
3170 - CONFIG_SYS_CCSRBAR_PHYS: 3180 - CONFIG_SYS_CCSRBAR_PHYS:
3171 Physical address of CCSR. CCSR can be relocated to a new 3181 Physical address of CCSR. CCSR can be relocated to a new
3172 physical address, if desired. In this case, this macro should 3182 physical address, if desired. In this case, this macro should
3173 be set to that address. Otherwise, it should be set to the 3183 be set to that address. Otherwise, it should be set to the
3174 same value as CONFIG_SYS_CCSRBAR_DEFAULT. For example, CCSR 3184 same value as CONFIG_SYS_CCSRBAR_DEFAULT. For example, CCSR
3175 is typically relocated on 36-bit builds. It is recommended 3185 is typically relocated on 36-bit builds. It is recommended
3176 that this macro be defined via the _HIGH and _LOW macros: 3186 that this macro be defined via the _HIGH and _LOW macros:
3177 3187
3178 #define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH 3188 #define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH
3179 * 1ull) << 32 | CONFIG_SYS_CCSRBAR_PHYS_LOW) 3189 * 1ull) << 32 | CONFIG_SYS_CCSRBAR_PHYS_LOW)
3180 3190
3181 - CONFIG_SYS_CCSRBAR_PHYS_HIGH: 3191 - CONFIG_SYS_CCSRBAR_PHYS_HIGH:
3182 Bits 33-36 of CONFIG_SYS_CCSRBAR_PHYS. This value is typically 3192 Bits 33-36 of CONFIG_SYS_CCSRBAR_PHYS. This value is typically
3183 either 0 (32-bit build) or 0xF (36-bit build). This macro is 3193 either 0 (32-bit build) or 0xF (36-bit build). This macro is
3184 used in assembly code, so it must not contain typecasts or 3194 used in assembly code, so it must not contain typecasts or
3185 integer size suffixes (e.g. "ULL"). 3195 integer size suffixes (e.g. "ULL").
3186 3196
3187 - CONFIG_SYS_CCSRBAR_PHYS_LOW: 3197 - CONFIG_SYS_CCSRBAR_PHYS_LOW:
3188 Lower 32-bits of CONFIG_SYS_CCSRBAR_PHYS. This macro is 3198 Lower 32-bits of CONFIG_SYS_CCSRBAR_PHYS. This macro is
3189 used in assembly code, so it must not contain typecasts or 3199 used in assembly code, so it must not contain typecasts or
3190 integer size suffixes (e.g. "ULL"). 3200 integer size suffixes (e.g. "ULL").
3191 3201
3192 - CONFIG_SYS_CCSR_DO_NOT_RELOCATE: 3202 - CONFIG_SYS_CCSR_DO_NOT_RELOCATE:
3193 If this macro is defined, then CONFIG_SYS_CCSRBAR_PHYS will be 3203 If this macro is defined, then CONFIG_SYS_CCSRBAR_PHYS will be
3194 forced to a value that ensures that CCSR is not relocated. 3204 forced to a value that ensures that CCSR is not relocated.
3195 3205
3196 - Floppy Disk Support: 3206 - Floppy Disk Support:
3197 CONFIG_SYS_FDC_DRIVE_NUMBER 3207 CONFIG_SYS_FDC_DRIVE_NUMBER
3198 3208
3199 the default drive number (default value 0) 3209 the default drive number (default value 0)
3200 3210
3201 CONFIG_SYS_ISA_IO_STRIDE 3211 CONFIG_SYS_ISA_IO_STRIDE
3202 3212
3203 defines the spacing between FDC chipset registers 3213 defines the spacing between FDC chipset registers
3204 (default value 1) 3214 (default value 1)
3205 3215
3206 CONFIG_SYS_ISA_IO_OFFSET 3216 CONFIG_SYS_ISA_IO_OFFSET
3207 3217
3208 defines the offset of register from address. It 3218 defines the offset of register from address. It
3209 depends on which part of the data bus is connected to 3219 depends on which part of the data bus is connected to
3210 the FDC chipset. (default value 0) 3220 the FDC chipset. (default value 0)
3211 3221
3212 If CONFIG_SYS_ISA_IO_STRIDE CONFIG_SYS_ISA_IO_OFFSET and 3222 If CONFIG_SYS_ISA_IO_STRIDE CONFIG_SYS_ISA_IO_OFFSET and
3213 CONFIG_SYS_FDC_DRIVE_NUMBER are undefined, they take their 3223 CONFIG_SYS_FDC_DRIVE_NUMBER are undefined, they take their
3214 default value. 3224 default value.
3215 3225
3216 if CONFIG_SYS_FDC_HW_INIT is defined, then the function 3226 if CONFIG_SYS_FDC_HW_INIT is defined, then the function
3217 fdc_hw_init() is called at the beginning of the FDC 3227 fdc_hw_init() is called at the beginning of the FDC
3218 setup. fdc_hw_init() must be provided by the board 3228 setup. fdc_hw_init() must be provided by the board
3219 source code. It is used to make hardware dependant 3229 source code. It is used to make hardware dependant
3220 initializations. 3230 initializations.
3221 3231
3222 - CONFIG_IDE_AHB: 3232 - CONFIG_IDE_AHB:
3223 Most IDE controllers were designed to be connected with PCI 3233 Most IDE controllers were designed to be connected with PCI
3224 interface. Only few of them were designed for AHB interface. 3234 interface. Only few of them were designed for AHB interface.
3225 When software is doing ATA command and data transfer to 3235 When software is doing ATA command and data transfer to
3226 IDE devices through IDE-AHB controller, some additional 3236 IDE devices through IDE-AHB controller, some additional
3227 registers accessing to these kind of IDE-AHB controller 3237 registers accessing to these kind of IDE-AHB controller
3228 is requierd. 3238 is requierd.
3229 3239
3230 - CONFIG_SYS_IMMR: Physical address of the Internal Memory. 3240 - CONFIG_SYS_IMMR: Physical address of the Internal Memory.
3231 DO NOT CHANGE unless you know exactly what you're 3241 DO NOT CHANGE unless you know exactly what you're
3232 doing! (11-4) [MPC8xx/82xx systems only] 3242 doing! (11-4) [MPC8xx/82xx systems only]
3233 3243
3234 - CONFIG_SYS_INIT_RAM_ADDR: 3244 - CONFIG_SYS_INIT_RAM_ADDR:
3235 3245
3236 Start address of memory area that can be used for 3246 Start address of memory area that can be used for
3237 initial data and stack; please note that this must be 3247 initial data and stack; please note that this must be
3238 writable memory that is working WITHOUT special 3248 writable memory that is working WITHOUT special
3239 initialization, i. e. you CANNOT use normal RAM which 3249 initialization, i. e. you CANNOT use normal RAM which
3240 will become available only after programming the 3250 will become available only after programming the
3241 memory controller and running certain initialization 3251 memory controller and running certain initialization
3242 sequences. 3252 sequences.
3243 3253
3244 U-Boot uses the following memory types: 3254 U-Boot uses the following memory types:
3245 - MPC8xx and MPC8260: IMMR (internal memory of the CPU) 3255 - MPC8xx and MPC8260: IMMR (internal memory of the CPU)
3246 - MPC824X: data cache 3256 - MPC824X: data cache
3247 - PPC4xx: data cache 3257 - PPC4xx: data cache
3248 3258
3249 - CONFIG_SYS_GBL_DATA_OFFSET: 3259 - CONFIG_SYS_GBL_DATA_OFFSET:
3250 3260
3251 Offset of the initial data structure in the memory 3261 Offset of the initial data structure in the memory
3252 area defined by CONFIG_SYS_INIT_RAM_ADDR. Usually 3262 area defined by CONFIG_SYS_INIT_RAM_ADDR. Usually
3253 CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial 3263 CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial
3254 data is located at the end of the available space 3264 data is located at the end of the available space
3255 (sometimes written as (CONFIG_SYS_INIT_RAM_SIZE - 3265 (sometimes written as (CONFIG_SYS_INIT_RAM_SIZE -
3256 CONFIG_SYS_INIT_DATA_SIZE), and the initial stack is just 3266 CONFIG_SYS_INIT_DATA_SIZE), and the initial stack is just
3257 below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR + 3267 below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR +
3258 CONFIG_SYS_GBL_DATA_OFFSET) downward. 3268 CONFIG_SYS_GBL_DATA_OFFSET) downward.
3259 3269
3260 Note: 3270 Note:
3261 On the MPC824X (or other systems that use the data 3271 On the MPC824X (or other systems that use the data
3262 cache for initial memory) the address chosen for 3272 cache for initial memory) the address chosen for
3263 CONFIG_SYS_INIT_RAM_ADDR is basically arbitrary - it must 3273 CONFIG_SYS_INIT_RAM_ADDR is basically arbitrary - it must
3264 point to an otherwise UNUSED address space between 3274 point to an otherwise UNUSED address space between
3265 the top of RAM and the start of the PCI space. 3275 the top of RAM and the start of the PCI space.
3266 3276
3267 - CONFIG_SYS_SIUMCR: SIU Module Configuration (11-6) 3277 - CONFIG_SYS_SIUMCR: SIU Module Configuration (11-6)
3268 3278
3269 - CONFIG_SYS_SYPCR: System Protection Control (11-9) 3279 - CONFIG_SYS_SYPCR: System Protection Control (11-9)
3270 3280
3271 - CONFIG_SYS_TBSCR: Time Base Status and Control (11-26) 3281 - CONFIG_SYS_TBSCR: Time Base Status and Control (11-26)
3272 3282
3273 - CONFIG_SYS_PISCR: Periodic Interrupt Status and Control (11-31) 3283 - CONFIG_SYS_PISCR: Periodic Interrupt Status and Control (11-31)
3274 3284
3275 - CONFIG_SYS_PLPRCR: PLL, Low-Power, and Reset Control Register (15-30) 3285 - CONFIG_SYS_PLPRCR: PLL, Low-Power, and Reset Control Register (15-30)
3276 3286
3277 - CONFIG_SYS_SCCR: System Clock and reset Control Register (15-27) 3287 - CONFIG_SYS_SCCR: System Clock and reset Control Register (15-27)
3278 3288
3279 - CONFIG_SYS_OR_TIMING_SDRAM: 3289 - CONFIG_SYS_OR_TIMING_SDRAM:
3280 SDRAM timing 3290 SDRAM timing
3281 3291
3282 - CONFIG_SYS_MAMR_PTA: 3292 - CONFIG_SYS_MAMR_PTA:
3283 periodic timer for refresh 3293 periodic timer for refresh
3284 3294
3285 - CONFIG_SYS_DER: Debug Event Register (37-47) 3295 - CONFIG_SYS_DER: Debug Event Register (37-47)
3286 3296
3287 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM, 3297 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM,
3288 CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP, 3298 CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP,
3289 CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM, 3299 CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM,
3290 CONFIG_SYS_BR1_PRELIM: 3300 CONFIG_SYS_BR1_PRELIM:
3291 Memory Controller Definitions: BR0/1 and OR0/1 (FLASH) 3301 Memory Controller Definitions: BR0/1 and OR0/1 (FLASH)
3292 3302
3293 - SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE, 3303 - SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE,
3294 CONFIG_SYS_OR_TIMING_SDRAM, CONFIG_SYS_OR2_PRELIM, CONFIG_SYS_BR2_PRELIM, 3304 CONFIG_SYS_OR_TIMING_SDRAM, CONFIG_SYS_OR2_PRELIM, CONFIG_SYS_BR2_PRELIM,
3295 CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM: 3305 CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM:
3296 Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM) 3306 Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM)
3297 3307
3298 - CONFIG_SYS_MAMR_PTA, CONFIG_SYS_MPTPR_2BK_4K, CONFIG_SYS_MPTPR_1BK_4K, CONFIG_SYS_MPTPR_2BK_8K, 3308 - CONFIG_SYS_MAMR_PTA, CONFIG_SYS_MPTPR_2BK_4K, CONFIG_SYS_MPTPR_1BK_4K, CONFIG_SYS_MPTPR_2BK_8K,
3299 CONFIG_SYS_MPTPR_1BK_8K, CONFIG_SYS_MAMR_8COL, CONFIG_SYS_MAMR_9COL: 3309 CONFIG_SYS_MPTPR_1BK_8K, CONFIG_SYS_MAMR_8COL, CONFIG_SYS_MAMR_9COL:
3300 Machine Mode Register and Memory Periodic Timer 3310 Machine Mode Register and Memory Periodic Timer
3301 Prescaler definitions (SDRAM timing) 3311 Prescaler definitions (SDRAM timing)
3302 3312
3303 - CONFIG_SYS_I2C_UCODE_PATCH, CONFIG_SYS_I2C_DPMEM_OFFSET [0x1FC0]: 3313 - CONFIG_SYS_I2C_UCODE_PATCH, CONFIG_SYS_I2C_DPMEM_OFFSET [0x1FC0]:
3304 enable I2C microcode relocation patch (MPC8xx); 3314 enable I2C microcode relocation patch (MPC8xx);
3305 define relocation offset in DPRAM [DSP2] 3315 define relocation offset in DPRAM [DSP2]
3306 3316
3307 - CONFIG_SYS_SMC_UCODE_PATCH, CONFIG_SYS_SMC_DPMEM_OFFSET [0x1FC0]: 3317 - CONFIG_SYS_SMC_UCODE_PATCH, CONFIG_SYS_SMC_DPMEM_OFFSET [0x1FC0]:
3308 enable SMC microcode relocation patch (MPC8xx); 3318 enable SMC microcode relocation patch (MPC8xx);
3309 define relocation offset in DPRAM [SMC1] 3319 define relocation offset in DPRAM [SMC1]
3310 3320
3311 - CONFIG_SYS_SPI_UCODE_PATCH, CONFIG_SYS_SPI_DPMEM_OFFSET [0x1FC0]: 3321 - CONFIG_SYS_SPI_UCODE_PATCH, CONFIG_SYS_SPI_DPMEM_OFFSET [0x1FC0]:
3312 enable SPI microcode relocation patch (MPC8xx); 3322 enable SPI microcode relocation patch (MPC8xx);
3313 define relocation offset in DPRAM [SCC4] 3323 define relocation offset in DPRAM [SCC4]
3314 3324
3315 - CONFIG_SYS_USE_OSCCLK: 3325 - CONFIG_SYS_USE_OSCCLK:
3316 Use OSCM clock mode on MBX8xx board. Be careful, 3326 Use OSCM clock mode on MBX8xx board. Be careful,
3317 wrong setting might damage your board. Read 3327 wrong setting might damage your board. Read
3318 doc/README.MBX before setting this variable! 3328 doc/README.MBX before setting this variable!
3319 3329
3320 - CONFIG_SYS_CPM_POST_WORD_ADDR: (MPC8xx, MPC8260 only) 3330 - CONFIG_SYS_CPM_POST_WORD_ADDR: (MPC8xx, MPC8260 only)
3321 Offset of the bootmode word in DPRAM used by post 3331 Offset of the bootmode word in DPRAM used by post
3322 (Power On Self Tests). This definition overrides 3332 (Power On Self Tests). This definition overrides
3323 #define'd default value in commproc.h resp. 3333 #define'd default value in commproc.h resp.
3324 cpm_8260.h. 3334 cpm_8260.h.
3325 3335
3326 - CONFIG_SYS_PCI_SLV_MEM_LOCAL, CONFIG_SYS_PCI_SLV_MEM_BUS, CONFIG_SYS_PICMR0_MASK_ATTRIB, 3336 - CONFIG_SYS_PCI_SLV_MEM_LOCAL, CONFIG_SYS_PCI_SLV_MEM_BUS, CONFIG_SYS_PICMR0_MASK_ATTRIB,
3327 CONFIG_SYS_PCI_MSTR0_LOCAL, CONFIG_SYS_PCIMSK0_MASK, CONFIG_SYS_PCI_MSTR1_LOCAL, 3337 CONFIG_SYS_PCI_MSTR0_LOCAL, CONFIG_SYS_PCIMSK0_MASK, CONFIG_SYS_PCI_MSTR1_LOCAL,
3328 CONFIG_SYS_PCIMSK1_MASK, CONFIG_SYS_PCI_MSTR_MEM_LOCAL, CONFIG_SYS_PCI_MSTR_MEM_BUS, 3338 CONFIG_SYS_PCIMSK1_MASK, CONFIG_SYS_PCI_MSTR_MEM_LOCAL, CONFIG_SYS_PCI_MSTR_MEM_BUS,
3329 CONFIG_SYS_CPU_PCI_MEM_START, CONFIG_SYS_PCI_MSTR_MEM_SIZE, CONFIG_SYS_POCMR0_MASK_ATTRIB, 3339 CONFIG_SYS_CPU_PCI_MEM_START, CONFIG_SYS_PCI_MSTR_MEM_SIZE, CONFIG_SYS_POCMR0_MASK_ATTRIB,
3330 CONFIG_SYS_PCI_MSTR_MEMIO_LOCAL, CONFIG_SYS_PCI_MSTR_MEMIO_BUS, CPU_PCI_MEMIO_START, 3340 CONFIG_SYS_PCI_MSTR_MEMIO_LOCAL, CONFIG_SYS_PCI_MSTR_MEMIO_BUS, CPU_PCI_MEMIO_START,
3331 CONFIG_SYS_PCI_MSTR_MEMIO_SIZE, CONFIG_SYS_POCMR1_MASK_ATTRIB, CONFIG_SYS_PCI_MSTR_IO_LOCAL, 3341 CONFIG_SYS_PCI_MSTR_MEMIO_SIZE, CONFIG_SYS_POCMR1_MASK_ATTRIB, CONFIG_SYS_PCI_MSTR_IO_LOCAL,
3332 CONFIG_SYS_PCI_MSTR_IO_BUS, CONFIG_SYS_CPU_PCI_IO_START, CONFIG_SYS_PCI_MSTR_IO_SIZE, 3342 CONFIG_SYS_PCI_MSTR_IO_BUS, CONFIG_SYS_CPU_PCI_IO_START, CONFIG_SYS_PCI_MSTR_IO_SIZE,
3333 CONFIG_SYS_POCMR2_MASK_ATTRIB: (MPC826x only) 3343 CONFIG_SYS_POCMR2_MASK_ATTRIB: (MPC826x only)
3334 Overrides the default PCI memory map in arch/powerpc/cpu/mpc8260/pci.c if set. 3344 Overrides the default PCI memory map in arch/powerpc/cpu/mpc8260/pci.c if set.
3335 3345
3336 - CONFIG_PCI_DISABLE_PCIE: 3346 - CONFIG_PCI_DISABLE_PCIE:
3337 Disable PCI-Express on systems where it is supported but not 3347 Disable PCI-Express on systems where it is supported but not
3338 required. 3348 required.
3339 3349
3340 - CONFIG_SYS_SRIO: 3350 - CONFIG_SYS_SRIO:
3341 Chip has SRIO or not 3351 Chip has SRIO or not
3342 3352
3343 - CONFIG_SRIO1: 3353 - CONFIG_SRIO1:
3344 Board has SRIO 1 port available 3354 Board has SRIO 1 port available
3345 3355
3346 - CONFIG_SRIO2: 3356 - CONFIG_SRIO2:
3347 Board has SRIO 2 port available 3357 Board has SRIO 2 port available
3348 3358
3349 - CONFIG_SYS_SRIOn_MEM_VIRT: 3359 - CONFIG_SYS_SRIOn_MEM_VIRT:
3350 Virtual Address of SRIO port 'n' memory region 3360 Virtual Address of SRIO port 'n' memory region
3351 3361
3352 - CONFIG_SYS_SRIOn_MEM_PHYS: 3362 - CONFIG_SYS_SRIOn_MEM_PHYS:
3353 Physical Address of SRIO port 'n' memory region 3363 Physical Address of SRIO port 'n' memory region
3354 3364
3355 - CONFIG_SYS_SRIOn_MEM_SIZE: 3365 - CONFIG_SYS_SRIOn_MEM_SIZE:
3356 Size of SRIO port 'n' memory region 3366 Size of SRIO port 'n' memory region
3357 3367
3358 - CONFIG_SYS_NDFC_16 3368 - CONFIG_SYS_NDFC_16
3359 Defined to tell the NDFC that the NAND chip is using a 3369 Defined to tell the NDFC that the NAND chip is using a
3360 16 bit bus. 3370 16 bit bus.
3361 3371
3362 - CONFIG_SYS_NDFC_EBC0_CFG 3372 - CONFIG_SYS_NDFC_EBC0_CFG
3363 Sets the EBC0_CFG register for the NDFC. If not defined 3373 Sets the EBC0_CFG register for the NDFC. If not defined
3364 a default value will be used. 3374 a default value will be used.
3365 3375
3366 - CONFIG_SPD_EEPROM 3376 - CONFIG_SPD_EEPROM
3367 Get DDR timing information from an I2C EEPROM. Common 3377 Get DDR timing information from an I2C EEPROM. Common
3368 with pluggable memory modules such as SODIMMs 3378 with pluggable memory modules such as SODIMMs
3369 3379
3370 SPD_EEPROM_ADDRESS 3380 SPD_EEPROM_ADDRESS
3371 I2C address of the SPD EEPROM 3381 I2C address of the SPD EEPROM
3372 3382
3373 - CONFIG_SYS_SPD_BUS_NUM 3383 - CONFIG_SYS_SPD_BUS_NUM
3374 If SPD EEPROM is on an I2C bus other than the first 3384 If SPD EEPROM is on an I2C bus other than the first
3375 one, specify here. Note that the value must resolve 3385 one, specify here. Note that the value must resolve
3376 to something your driver can deal with. 3386 to something your driver can deal with.
3377 3387
3378 - CONFIG_SYS_DDR_RAW_TIMING 3388 - CONFIG_SYS_DDR_RAW_TIMING
3379 Get DDR timing information from other than SPD. Common with 3389 Get DDR timing information from other than SPD. Common with
3380 soldered DDR chips onboard without SPD. DDR raw timing 3390 soldered DDR chips onboard without SPD. DDR raw timing
3381 parameters are extracted from datasheet and hard-coded into 3391 parameters are extracted from datasheet and hard-coded into
3382 header files or board specific files. 3392 header files or board specific files.
3383 3393
3384 - CONFIG_FSL_DDR_INTERACTIVE 3394 - CONFIG_FSL_DDR_INTERACTIVE
3385 Enable interactive DDR debugging. See doc/README.fsl-ddr. 3395 Enable interactive DDR debugging. See doc/README.fsl-ddr.
3386 3396
3387 - CONFIG_SYS_83XX_DDR_USES_CS0 3397 - CONFIG_SYS_83XX_DDR_USES_CS0
3388 Only for 83xx systems. If specified, then DDR should 3398 Only for 83xx systems. If specified, then DDR should
3389 be configured using CS0 and CS1 instead of CS2 and CS3. 3399 be configured using CS0 and CS1 instead of CS2 and CS3.
3390 3400
3391 - CONFIG_ETHER_ON_FEC[12] 3401 - CONFIG_ETHER_ON_FEC[12]
3392 Define to enable FEC[12] on a 8xx series processor. 3402 Define to enable FEC[12] on a 8xx series processor.
3393 3403
3394 - CONFIG_FEC[12]_PHY 3404 - CONFIG_FEC[12]_PHY
3395 Define to the hardcoded PHY address which corresponds 3405 Define to the hardcoded PHY address which corresponds
3396 to the given FEC; i. e. 3406 to the given FEC; i. e.
3397 #define CONFIG_FEC1_PHY 4 3407 #define CONFIG_FEC1_PHY 4
3398 means that the PHY with address 4 is connected to FEC1 3408 means that the PHY with address 4 is connected to FEC1
3399 3409
3400 When set to -1, means to probe for first available. 3410 When set to -1, means to probe for first available.
3401 3411
3402 - CONFIG_FEC[12]_PHY_NORXERR 3412 - CONFIG_FEC[12]_PHY_NORXERR
3403 The PHY does not have a RXERR line (RMII only). 3413 The PHY does not have a RXERR line (RMII only).
3404 (so program the FEC to ignore it). 3414 (so program the FEC to ignore it).
3405 3415
3406 - CONFIG_RMII 3416 - CONFIG_RMII
3407 Enable RMII mode for all FECs. 3417 Enable RMII mode for all FECs.
3408 Note that this is a global option, we can't 3418 Note that this is a global option, we can't
3409 have one FEC in standard MII mode and another in RMII mode. 3419 have one FEC in standard MII mode and another in RMII mode.
3410 3420
3411 - CONFIG_CRC32_VERIFY 3421 - CONFIG_CRC32_VERIFY
3412 Add a verify option to the crc32 command. 3422 Add a verify option to the crc32 command.
3413 The syntax is: 3423 The syntax is:
3414 3424
3415 => crc32 -v <address> <count> <crc32> 3425 => crc32 -v <address> <count> <crc32>
3416 3426
3417 Where address/count indicate a memory area 3427 Where address/count indicate a memory area
3418 and crc32 is the correct crc32 which the 3428 and crc32 is the correct crc32 which the
3419 area should have. 3429 area should have.
3420 3430
3421 - CONFIG_LOOPW 3431 - CONFIG_LOOPW
3422 Add the "loopw" memory command. This only takes effect if 3432 Add the "loopw" memory command. This only takes effect if
3423 the memory commands are activated globally (CONFIG_CMD_MEM). 3433 the memory commands are activated globally (CONFIG_CMD_MEM).
3424 3434
3425 - CONFIG_MX_CYCLIC 3435 - CONFIG_MX_CYCLIC
3426 Add the "mdc" and "mwc" memory commands. These are cyclic 3436 Add the "mdc" and "mwc" memory commands. These are cyclic
3427 "md/mw" commands. 3437 "md/mw" commands.
3428 Examples: 3438 Examples:
3429 3439
3430 => mdc.b 10 4 500 3440 => mdc.b 10 4 500
3431 This command will print 4 bytes (10,11,12,13) each 500 ms. 3441 This command will print 4 bytes (10,11,12,13) each 500 ms.
3432 3442
3433 => mwc.l 100 12345678 10 3443 => mwc.l 100 12345678 10
3434 This command will write 12345678 to address 100 all 10 ms. 3444 This command will write 12345678 to address 100 all 10 ms.
3435 3445
3436 This only takes effect if the memory commands are activated 3446 This only takes effect if the memory commands are activated
3437 globally (CONFIG_CMD_MEM). 3447 globally (CONFIG_CMD_MEM).
3438 3448
3439 - CONFIG_SKIP_LOWLEVEL_INIT 3449 - CONFIG_SKIP_LOWLEVEL_INIT
3440 [ARM, NDS32, MIPS only] If this variable is defined, then certain 3450 [ARM, NDS32, MIPS only] If this variable is defined, then certain
3441 low level initializations (like setting up the memory 3451 low level initializations (like setting up the memory
3442 controller) are omitted and/or U-Boot does not 3452 controller) are omitted and/or U-Boot does not
3443 relocate itself into RAM. 3453 relocate itself into RAM.
3444 3454
3445 Normally this variable MUST NOT be defined. The only 3455 Normally this variable MUST NOT be defined. The only
3446 exception is when U-Boot is loaded (to RAM) by some 3456 exception is when U-Boot is loaded (to RAM) by some
3447 other boot loader or by a debugger which performs 3457 other boot loader or by a debugger which performs
3448 these initializations itself. 3458 these initializations itself.
3449 3459
3450 - CONFIG_SPL_BUILD 3460 - CONFIG_SPL_BUILD
3451 Modifies the behaviour of start.S when compiling a loader 3461 Modifies the behaviour of start.S when compiling a loader
3452 that is executed before the actual U-Boot. E.g. when 3462 that is executed before the actual U-Boot. E.g. when
3453 compiling a NAND SPL. 3463 compiling a NAND SPL.
3454 3464
3455 - CONFIG_USE_ARCH_MEMCPY 3465 - CONFIG_USE_ARCH_MEMCPY
3456 CONFIG_USE_ARCH_MEMSET 3466 CONFIG_USE_ARCH_MEMSET
3457 If these options are used a optimized version of memcpy/memset will 3467 If these options are used a optimized version of memcpy/memset will
3458 be used if available. These functions may be faster under some 3468 be used if available. These functions may be faster under some
3459 conditions but may increase the binary size. 3469 conditions but may increase the binary size.
3460 3470
3461 Freescale QE/FMAN Firmware Support: 3471 Freescale QE/FMAN Firmware Support:
3462 ----------------------------------- 3472 -----------------------------------
3463 3473
3464 The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the 3474 The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the
3465 loading of "firmware", which is encoded in the QE firmware binary format. 3475 loading of "firmware", which is encoded in the QE firmware binary format.
3466 This firmware often needs to be loaded during U-Boot booting, so macros 3476 This firmware often needs to be loaded during U-Boot booting, so macros
3467 are used to identify the storage device (NOR flash, SPI, etc) and the address 3477 are used to identify the storage device (NOR flash, SPI, etc) and the address
3468 within that device. 3478 within that device.
3469 3479
3470 - CONFIG_SYS_QE_FMAN_FW_ADDR 3480 - CONFIG_SYS_QE_FMAN_FW_ADDR
3471 The address in the storage device where the firmware is located. The 3481 The address in the storage device where the firmware is located. The
3472 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro 3482 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
3473 is also specified. 3483 is also specified.
3474 3484
3475 - CONFIG_SYS_QE_FMAN_FW_LENGTH 3485 - CONFIG_SYS_QE_FMAN_FW_LENGTH
3476 The maximum possible size of the firmware. The firmware binary format 3486 The maximum possible size of the firmware. The firmware binary format
3477 has a field that specifies the actual size of the firmware, but it 3487 has a field that specifies the actual size of the firmware, but it
3478 might not be possible to read any part of the firmware unless some 3488 might not be possible to read any part of the firmware unless some
3479 local storage is allocated to hold the entire firmware first. 3489 local storage is allocated to hold the entire firmware first.
3480 3490
3481 - CONFIG_SYS_QE_FMAN_FW_IN_NOR 3491 - CONFIG_SYS_QE_FMAN_FW_IN_NOR
3482 Specifies that QE/FMAN firmware is located in NOR flash, mapped as 3492 Specifies that QE/FMAN firmware is located in NOR flash, mapped as
3483 normal addressable memory via the LBC. CONFIG_SYS_FMAN_FW_ADDR is the 3493 normal addressable memory via the LBC. CONFIG_SYS_FMAN_FW_ADDR is the
3484 virtual address in NOR flash. 3494 virtual address in NOR flash.
3485 3495
3486 - CONFIG_SYS_QE_FMAN_FW_IN_NAND 3496 - CONFIG_SYS_QE_FMAN_FW_IN_NAND
3487 Specifies that QE/FMAN firmware is located in NAND flash. 3497 Specifies that QE/FMAN firmware is located in NAND flash.
3488 CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash. 3498 CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash.
3489 3499
3490 - CONFIG_SYS_QE_FMAN_FW_IN_MMC 3500 - CONFIG_SYS_QE_FMAN_FW_IN_MMC
3491 Specifies that QE/FMAN firmware is located on the primary SD/MMC 3501 Specifies that QE/FMAN firmware is located on the primary SD/MMC
3492 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device. 3502 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
3493 3503
3494 - CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH 3504 - CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH
3495 Specifies that QE/FMAN firmware is located on the primary SPI 3505 Specifies that QE/FMAN firmware is located on the primary SPI
3496 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device. 3506 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
3497 3507
3498 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE 3508 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
3499 Specifies that QE/FMAN firmware is located in the remote (master) 3509 Specifies that QE/FMAN firmware is located in the remote (master)
3500 memory space. CONFIG_SYS_FMAN_FW_ADDR is a virtual address which 3510 memory space. CONFIG_SYS_FMAN_FW_ADDR is a virtual address which
3501 can be mapped from slave TLB->slave LAW->slave SRIO outbound window 3511 can be mapped from slave TLB->slave LAW->slave SRIO outbound window
3502 ->master inbound window->master LAW->the ucode address in master's 3512 ->master inbound window->master LAW->the ucode address in master's
3503 NOR flash. 3513 NOR flash.
3504 3514
3505 Building the Software: 3515 Building the Software:
3506 ====================== 3516 ======================
3507 3517
3508 Building U-Boot has been tested in several native build environments 3518 Building U-Boot has been tested in several native build environments
3509 and in many different cross environments. Of course we cannot support 3519 and in many different cross environments. Of course we cannot support
3510 all possibly existing versions of cross development tools in all 3520 all possibly existing versions of cross development tools in all
3511 (potentially obsolete) versions. In case of tool chain problems we 3521 (potentially obsolete) versions. In case of tool chain problems we
3512 recommend to use the ELDK (see http://www.denx.de/wiki/DULG/ELDK) 3522 recommend to use the ELDK (see http://www.denx.de/wiki/DULG/ELDK)
3513 which is extensively used to build and test U-Boot. 3523 which is extensively used to build and test U-Boot.
3514 3524
3515 If you are not using a native environment, it is assumed that you 3525 If you are not using a native environment, it is assumed that you
3516 have GNU cross compiling tools available in your path. In this case, 3526 have GNU cross compiling tools available in your path. In this case,
3517 you must set the environment variable CROSS_COMPILE in your shell. 3527 you must set the environment variable CROSS_COMPILE in your shell.
3518 Note that no changes to the Makefile or any other source files are 3528 Note that no changes to the Makefile or any other source files are
3519 necessary. For example using the ELDK on a 4xx CPU, please enter: 3529 necessary. For example using the ELDK on a 4xx CPU, please enter:
3520 3530
3521 $ CROSS_COMPILE=ppc_4xx- 3531 $ CROSS_COMPILE=ppc_4xx-
3522 $ export CROSS_COMPILE 3532 $ export CROSS_COMPILE
3523 3533
3524 Note: If you wish to generate Windows versions of the utilities in 3534 Note: If you wish to generate Windows versions of the utilities in
3525 the tools directory you can use the MinGW toolchain 3535 the tools directory you can use the MinGW toolchain
3526 (http://www.mingw.org). Set your HOST tools to the MinGW 3536 (http://www.mingw.org). Set your HOST tools to the MinGW
3527 toolchain and execute 'make tools'. For example: 3537 toolchain and execute 'make tools'. For example:
3528 3538
3529 $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools 3539 $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools
3530 3540
3531 Binaries such as tools/mkimage.exe will be created which can 3541 Binaries such as tools/mkimage.exe will be created which can
3532 be executed on computers running Windows. 3542 be executed on computers running Windows.
3533 3543
3534 U-Boot is intended to be simple to build. After installing the 3544 U-Boot is intended to be simple to build. After installing the
3535 sources you must configure U-Boot for one specific board type. This 3545 sources you must configure U-Boot for one specific board type. This
3536 is done by typing: 3546 is done by typing:
3537 3547
3538 make NAME_config 3548 make NAME_config
3539 3549
3540 where "NAME_config" is the name of one of the existing configu- 3550 where "NAME_config" is the name of one of the existing configu-
3541 rations; see boards.cfg for supported names. 3551 rations; see boards.cfg for supported names.
3542 3552
3543 Note: for some board special configuration names may exist; check if 3553 Note: for some board special configuration names may exist; check if
3544 additional information is available from the board vendor; for 3554 additional information is available from the board vendor; for
3545 instance, the TQM823L systems are available without (standard) 3555 instance, the TQM823L systems are available without (standard)
3546 or with LCD support. You can select such additional "features" 3556 or with LCD support. You can select such additional "features"
3547 when choosing the configuration, i. e. 3557 when choosing the configuration, i. e.
3548 3558
3549 make TQM823L_config 3559 make TQM823L_config
3550 - will configure for a plain TQM823L, i. e. no LCD support 3560 - will configure for a plain TQM823L, i. e. no LCD support
3551 3561
3552 make TQM823L_LCD_config 3562 make TQM823L_LCD_config
3553 - will configure for a TQM823L with U-Boot console on LCD 3563 - will configure for a TQM823L with U-Boot console on LCD
3554 3564
3555 etc. 3565 etc.
3556 3566
3557 3567
3558 Finally, type "make all", and you should get some working U-Boot 3568 Finally, type "make all", and you should get some working U-Boot
3559 images ready for download to / installation on your system: 3569 images ready for download to / installation on your system:
3560 3570
3561 - "u-boot.bin" is a raw binary image 3571 - "u-boot.bin" is a raw binary image
3562 - "u-boot" is an image in ELF binary format 3572 - "u-boot" is an image in ELF binary format
3563 - "u-boot.srec" is in Motorola S-Record format 3573 - "u-boot.srec" is in Motorola S-Record format
3564 3574
3565 By default the build is performed locally and the objects are saved 3575 By default the build is performed locally and the objects are saved
3566 in the source directory. One of the two methods can be used to change 3576 in the source directory. One of the two methods can be used to change
3567 this behavior and build U-Boot to some external directory: 3577 this behavior and build U-Boot to some external directory:
3568 3578
3569 1. Add O= to the make command line invocations: 3579 1. Add O= to the make command line invocations:
3570 3580
3571 make O=/tmp/build distclean 3581 make O=/tmp/build distclean
3572 make O=/tmp/build NAME_config 3582 make O=/tmp/build NAME_config
3573 make O=/tmp/build all 3583 make O=/tmp/build all
3574 3584
3575 2. Set environment variable BUILD_DIR to point to the desired location: 3585 2. Set environment variable BUILD_DIR to point to the desired location:
3576 3586
3577 export BUILD_DIR=/tmp/build 3587 export BUILD_DIR=/tmp/build
3578 make distclean 3588 make distclean
3579 make NAME_config 3589 make NAME_config
3580 make all 3590 make all
3581 3591
3582 Note that the command line "O=" setting overrides the BUILD_DIR environment 3592 Note that the command line "O=" setting overrides the BUILD_DIR environment
3583 variable. 3593 variable.
3584 3594
3585 3595
3586 Please be aware that the Makefiles assume you are using GNU make, so 3596 Please be aware that the Makefiles assume you are using GNU make, so
3587 for instance on NetBSD you might need to use "gmake" instead of 3597 for instance on NetBSD you might need to use "gmake" instead of
3588 native "make". 3598 native "make".
3589 3599
3590 3600
3591 If the system board that you have is not listed, then you will need 3601 If the system board that you have is not listed, then you will need
3592 to port U-Boot to your hardware platform. To do this, follow these 3602 to port U-Boot to your hardware platform. To do this, follow these
3593 steps: 3603 steps:
3594 3604
3595 1. Add a new configuration option for your board to the toplevel 3605 1. Add a new configuration option for your board to the toplevel
3596 "boards.cfg" file, using the existing entries as examples. 3606 "boards.cfg" file, using the existing entries as examples.
3597 Follow the instructions there to keep the boards in order. 3607 Follow the instructions there to keep the boards in order.
3598 2. Create a new directory to hold your board specific code. Add any 3608 2. Create a new directory to hold your board specific code. Add any
3599 files you need. In your board directory, you will need at least 3609 files you need. In your board directory, you will need at least
3600 the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds". 3610 the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds".
3601 3. Create a new configuration file "include/configs/<board>.h" for 3611 3. Create a new configuration file "include/configs/<board>.h" for
3602 your board 3612 your board
3603 3. If you're porting U-Boot to a new CPU, then also create a new 3613 3. If you're porting U-Boot to a new CPU, then also create a new
3604 directory to hold your CPU specific code. Add any files you need. 3614 directory to hold your CPU specific code. Add any files you need.
3605 4. Run "make <board>_config" with your new name. 3615 4. Run "make <board>_config" with your new name.
3606 5. Type "make", and you should get a working "u-boot.srec" file 3616 5. Type "make", and you should get a working "u-boot.srec" file
3607 to be installed on your target system. 3617 to be installed on your target system.
3608 6. Debug and solve any problems that might arise. 3618 6. Debug and solve any problems that might arise.
3609 [Of course, this last step is much harder than it sounds.] 3619 [Of course, this last step is much harder than it sounds.]
3610 3620
3611 3621
3612 Testing of U-Boot Modifications, Ports to New Hardware, etc.: 3622 Testing of U-Boot Modifications, Ports to New Hardware, etc.:
3613 ============================================================== 3623 ==============================================================
3614 3624
3615 If you have modified U-Boot sources (for instance added a new board 3625 If you have modified U-Boot sources (for instance added a new board
3616 or support for new devices, a new CPU, etc.) you are expected to 3626 or support for new devices, a new CPU, etc.) you are expected to
3617 provide feedback to the other developers. The feedback normally takes 3627 provide feedback to the other developers. The feedback normally takes
3618 the form of a "patch", i. e. a context diff against a certain (latest 3628 the form of a "patch", i. e. a context diff against a certain (latest
3619 official or latest in the git repository) version of U-Boot sources. 3629 official or latest in the git repository) version of U-Boot sources.
3620 3630
3621 But before you submit such a patch, please verify that your modifi- 3631 But before you submit such a patch, please verify that your modifi-
3622 cation did not break existing code. At least make sure that *ALL* of 3632 cation did not break existing code. At least make sure that *ALL* of
3623 the supported boards compile WITHOUT ANY compiler warnings. To do so, 3633 the supported boards compile WITHOUT ANY compiler warnings. To do so,
3624 just run the "MAKEALL" script, which will configure and build U-Boot 3634 just run the "MAKEALL" script, which will configure and build U-Boot
3625 for ALL supported system. Be warned, this will take a while. You can 3635 for ALL supported system. Be warned, this will take a while. You can
3626 select which (cross) compiler to use by passing a `CROSS_COMPILE' 3636 select which (cross) compiler to use by passing a `CROSS_COMPILE'
3627 environment variable to the script, i. e. to use the ELDK cross tools 3637 environment variable to the script, i. e. to use the ELDK cross tools
3628 you can type 3638 you can type
3629 3639
3630 CROSS_COMPILE=ppc_8xx- MAKEALL 3640 CROSS_COMPILE=ppc_8xx- MAKEALL
3631 3641
3632 or to build on a native PowerPC system you can type 3642 or to build on a native PowerPC system you can type
3633 3643
3634 CROSS_COMPILE=' ' MAKEALL 3644 CROSS_COMPILE=' ' MAKEALL
3635 3645
3636 When using the MAKEALL script, the default behaviour is to build 3646 When using the MAKEALL script, the default behaviour is to build
3637 U-Boot in the source directory. This location can be changed by 3647 U-Boot in the source directory. This location can be changed by
3638 setting the BUILD_DIR environment variable. Also, for each target 3648 setting the BUILD_DIR environment variable. Also, for each target
3639 built, the MAKEALL script saves two log files (<target>.ERR and 3649 built, the MAKEALL script saves two log files (<target>.ERR and
3640 <target>.MAKEALL) in the <source dir>/LOG directory. This default 3650 <target>.MAKEALL) in the <source dir>/LOG directory. This default
3641 location can be changed by setting the MAKEALL_LOGDIR environment 3651 location can be changed by setting the MAKEALL_LOGDIR environment
3642 variable. For example: 3652 variable. For example:
3643 3653
3644 export BUILD_DIR=/tmp/build 3654 export BUILD_DIR=/tmp/build
3645 export MAKEALL_LOGDIR=/tmp/log 3655 export MAKEALL_LOGDIR=/tmp/log
3646 CROSS_COMPILE=ppc_8xx- MAKEALL 3656 CROSS_COMPILE=ppc_8xx- MAKEALL
3647 3657
3648 With the above settings build objects are saved in the /tmp/build, 3658 With the above settings build objects are saved in the /tmp/build,
3649 log files are saved in the /tmp/log and the source tree remains clean 3659 log files are saved in the /tmp/log and the source tree remains clean
3650 during the whole build process. 3660 during the whole build process.
3651 3661
3652 3662
3653 See also "U-Boot Porting Guide" below. 3663 See also "U-Boot Porting Guide" below.
3654 3664
3655 3665
3656 Monitor Commands - Overview: 3666 Monitor Commands - Overview:
3657 ============================ 3667 ============================
3658 3668
3659 go - start application at address 'addr' 3669 go - start application at address 'addr'
3660 run - run commands in an environment variable 3670 run - run commands in an environment variable
3661 bootm - boot application image from memory 3671 bootm - boot application image from memory
3662 bootp - boot image via network using BootP/TFTP protocol 3672 bootp - boot image via network using BootP/TFTP protocol
3663 bootz - boot zImage from memory 3673 bootz - boot zImage from memory
3664 tftpboot- boot image via network using TFTP protocol 3674 tftpboot- boot image via network using TFTP protocol
3665 and env variables "ipaddr" and "serverip" 3675 and env variables "ipaddr" and "serverip"
3666 (and eventually "gatewayip") 3676 (and eventually "gatewayip")
3667 tftpput - upload a file via network using TFTP protocol 3677 tftpput - upload a file via network using TFTP protocol
3668 rarpboot- boot image via network using RARP/TFTP protocol 3678 rarpboot- boot image via network using RARP/TFTP protocol
3669 diskboot- boot from IDE devicebootd - boot default, i.e., run 'bootcmd' 3679 diskboot- boot from IDE devicebootd - boot default, i.e., run 'bootcmd'
3670 loads - load S-Record file over serial line 3680 loads - load S-Record file over serial line
3671 loadb - load binary file over serial line (kermit mode) 3681 loadb - load binary file over serial line (kermit mode)
3672 md - memory display 3682 md - memory display
3673 mm - memory modify (auto-incrementing) 3683 mm - memory modify (auto-incrementing)
3674 nm - memory modify (constant address) 3684 nm - memory modify (constant address)
3675 mw - memory write (fill) 3685 mw - memory write (fill)
3676 cp - memory copy 3686 cp - memory copy
3677 cmp - memory compare 3687 cmp - memory compare
3678 crc32 - checksum calculation 3688 crc32 - checksum calculation
3679 i2c - I2C sub-system 3689 i2c - I2C sub-system
3680 sspi - SPI utility commands 3690 sspi - SPI utility commands
3681 base - print or set address offset 3691 base - print or set address offset
3682 printenv- print environment variables 3692 printenv- print environment variables
3683 setenv - set environment variables 3693 setenv - set environment variables
3684 saveenv - save environment variables to persistent storage 3694 saveenv - save environment variables to persistent storage
3685 protect - enable or disable FLASH write protection 3695 protect - enable or disable FLASH write protection
3686 erase - erase FLASH memory 3696 erase - erase FLASH memory
3687 flinfo - print FLASH memory information 3697 flinfo - print FLASH memory information
3688 bdinfo - print Board Info structure 3698 bdinfo - print Board Info structure
3689 iminfo - print header information for application image 3699 iminfo - print header information for application image
3690 coninfo - print console devices and informations 3700 coninfo - print console devices and informations
3691 ide - IDE sub-system 3701 ide - IDE sub-system
3692 loop - infinite loop on address range 3702 loop - infinite loop on address range
3693 loopw - infinite write loop on address range 3703 loopw - infinite write loop on address range
3694 mtest - simple RAM test 3704 mtest - simple RAM test
3695 icache - enable or disable instruction cache 3705 icache - enable or disable instruction cache
3696 dcache - enable or disable data cache 3706 dcache - enable or disable data cache
3697 reset - Perform RESET of the CPU 3707 reset - Perform RESET of the CPU
3698 echo - echo args to console 3708 echo - echo args to console
3699 version - print monitor version 3709 version - print monitor version
3700 help - print online help 3710 help - print online help
3701 ? - alias for 'help' 3711 ? - alias for 'help'
3702 3712
3703 3713
3704 Monitor Commands - Detailed Description: 3714 Monitor Commands - Detailed Description:
3705 ======================================== 3715 ========================================
3706 3716
3707 TODO. 3717 TODO.
3708 3718
3709 For now: just type "help <command>". 3719 For now: just type "help <command>".
3710 3720
3711 3721
3712 Environment Variables: 3722 Environment Variables:
3713 ====================== 3723 ======================
3714 3724
3715 U-Boot supports user configuration using Environment Variables which 3725 U-Boot supports user configuration using Environment Variables which
3716 can be made persistent by saving to Flash memory. 3726 can be made persistent by saving to Flash memory.
3717 3727
3718 Environment Variables are set using "setenv", printed using 3728 Environment Variables are set using "setenv", printed using
3719 "printenv", and saved to Flash using "saveenv". Using "setenv" 3729 "printenv", and saved to Flash using "saveenv". Using "setenv"
3720 without a value can be used to delete a variable from the 3730 without a value can be used to delete a variable from the
3721 environment. As long as you don't save the environment you are 3731 environment. As long as you don't save the environment you are
3722 working with an in-memory copy. In case the Flash area containing the 3732 working with an in-memory copy. In case the Flash area containing the
3723 environment is erased by accident, a default environment is provided. 3733 environment is erased by accident, a default environment is provided.
3724 3734
3725 Some configuration options can be set using Environment Variables. 3735 Some configuration options can be set using Environment Variables.
3726 3736
3727 List of environment variables (most likely not complete): 3737 List of environment variables (most likely not complete):
3728 3738
3729 baudrate - see CONFIG_BAUDRATE 3739 baudrate - see CONFIG_BAUDRATE
3730 3740
3731 bootdelay - see CONFIG_BOOTDELAY 3741 bootdelay - see CONFIG_BOOTDELAY
3732 3742
3733 bootcmd - see CONFIG_BOOTCOMMAND 3743 bootcmd - see CONFIG_BOOTCOMMAND
3734 3744
3735 bootargs - Boot arguments when booting an RTOS image 3745 bootargs - Boot arguments when booting an RTOS image
3736 3746
3737 bootfile - Name of the image to load with TFTP 3747 bootfile - Name of the image to load with TFTP
3738 3748
3739 bootm_low - Memory range available for image processing in the bootm 3749 bootm_low - Memory range available for image processing in the bootm
3740 command can be restricted. This variable is given as 3750 command can be restricted. This variable is given as
3741 a hexadecimal number and defines lowest address allowed 3751 a hexadecimal number and defines lowest address allowed
3742 for use by the bootm command. See also "bootm_size" 3752 for use by the bootm command. See also "bootm_size"
3743 environment variable. Address defined by "bootm_low" is 3753 environment variable. Address defined by "bootm_low" is
3744 also the base of the initial memory mapping for the Linux 3754 also the base of the initial memory mapping for the Linux
3745 kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and 3755 kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
3746 bootm_mapsize. 3756 bootm_mapsize.
3747 3757
3748 bootm_mapsize - Size of the initial memory mapping for the Linux kernel. 3758 bootm_mapsize - Size of the initial memory mapping for the Linux kernel.
3749 This variable is given as a hexadecimal number and it 3759 This variable is given as a hexadecimal number and it
3750 defines the size of the memory region starting at base 3760 defines the size of the memory region starting at base
3751 address bootm_low that is accessible by the Linux kernel 3761 address bootm_low that is accessible by the Linux kernel
3752 during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used 3762 during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used
3753 as the default value if it is defined, and bootm_size is 3763 as the default value if it is defined, and bootm_size is
3754 used otherwise. 3764 used otherwise.
3755 3765
3756 bootm_size - Memory range available for image processing in the bootm 3766 bootm_size - Memory range available for image processing in the bootm
3757 command can be restricted. This variable is given as 3767 command can be restricted. This variable is given as
3758 a hexadecimal number and defines the size of the region 3768 a hexadecimal number and defines the size of the region
3759 allowed for use by the bootm command. See also "bootm_low" 3769 allowed for use by the bootm command. See also "bootm_low"
3760 environment variable. 3770 environment variable.
3761 3771
3762 updatefile - Location of the software update file on a TFTP server, used 3772 updatefile - Location of the software update file on a TFTP server, used
3763 by the automatic software update feature. Please refer to 3773 by the automatic software update feature. Please refer to
3764 documentation in doc/README.update for more details. 3774 documentation in doc/README.update for more details.
3765 3775
3766 autoload - if set to "no" (any string beginning with 'n'), 3776 autoload - if set to "no" (any string beginning with 'n'),
3767 "bootp" will just load perform a lookup of the 3777 "bootp" will just load perform a lookup of the
3768 configuration from the BOOTP server, but not try to 3778 configuration from the BOOTP server, but not try to
3769 load any image using TFTP 3779 load any image using TFTP
3770 3780
3771 autostart - if set to "yes", an image loaded using the "bootp", 3781 autostart - if set to "yes", an image loaded using the "bootp",
3772 "rarpboot", "tftpboot" or "diskboot" commands will 3782 "rarpboot", "tftpboot" or "diskboot" commands will
3773 be automatically started (by internally calling 3783 be automatically started (by internally calling
3774 "bootm") 3784 "bootm")
3775 3785
3776 If set to "no", a standalone image passed to the 3786 If set to "no", a standalone image passed to the
3777 "bootm" command will be copied to the load address 3787 "bootm" command will be copied to the load address
3778 (and eventually uncompressed), but NOT be started. 3788 (and eventually uncompressed), but NOT be started.
3779 This can be used to load and uncompress arbitrary 3789 This can be used to load and uncompress arbitrary
3780 data. 3790 data.
3781 3791
3782 fdt_high - if set this restricts the maximum address that the 3792 fdt_high - if set this restricts the maximum address that the
3783 flattened device tree will be copied into upon boot. 3793 flattened device tree will be copied into upon boot.
3784 For example, if you have a system with 1 GB memory 3794 For example, if you have a system with 1 GB memory
3785 at physical address 0x10000000, while Linux kernel 3795 at physical address 0x10000000, while Linux kernel
3786 only recognizes the first 704 MB as low memory, you 3796 only recognizes the first 704 MB as low memory, you
3787 may need to set fdt_high as 0x3C000000 to have the 3797 may need to set fdt_high as 0x3C000000 to have the
3788 device tree blob be copied to the maximum address 3798 device tree blob be copied to the maximum address
3789 of the 704 MB low memory, so that Linux kernel can 3799 of the 704 MB low memory, so that Linux kernel can
3790 access it during the boot procedure. 3800 access it during the boot procedure.
3791 3801
3792 If this is set to the special value 0xFFFFFFFF then 3802 If this is set to the special value 0xFFFFFFFF then
3793 the fdt will not be copied at all on boot. For this 3803 the fdt will not be copied at all on boot. For this
3794 to work it must reside in writable memory, have 3804 to work it must reside in writable memory, have
3795 sufficient padding on the end of it for u-boot to 3805 sufficient padding on the end of it for u-boot to
3796 add the information it needs into it, and the memory 3806 add the information it needs into it, and the memory
3797 must be accessible by the kernel. 3807 must be accessible by the kernel.
3798 3808
3799 fdtcontroladdr- if set this is the address of the control flattened 3809 fdtcontroladdr- if set this is the address of the control flattened
3800 device tree used by U-Boot when CONFIG_OF_CONTROL is 3810 device tree used by U-Boot when CONFIG_OF_CONTROL is
3801 defined. 3811 defined.
3802 3812
3803 i2cfast - (PPC405GP|PPC405EP only) 3813 i2cfast - (PPC405GP|PPC405EP only)
3804 if set to 'y' configures Linux I2C driver for fast 3814 if set to 'y' configures Linux I2C driver for fast
3805 mode (400kHZ). This environment variable is used in 3815 mode (400kHZ). This environment variable is used in
3806 initialization code. So, for changes to be effective 3816 initialization code. So, for changes to be effective
3807 it must be saved and board must be reset. 3817 it must be saved and board must be reset.
3808 3818
3809 initrd_high - restrict positioning of initrd images: 3819 initrd_high - restrict positioning of initrd images:
3810 If this variable is not set, initrd images will be 3820 If this variable is not set, initrd images will be
3811 copied to the highest possible address in RAM; this 3821 copied to the highest possible address in RAM; this
3812 is usually what you want since it allows for 3822 is usually what you want since it allows for
3813 maximum initrd size. If for some reason you want to 3823 maximum initrd size. If for some reason you want to
3814 make sure that the initrd image is loaded below the 3824 make sure that the initrd image is loaded below the
3815 CONFIG_SYS_BOOTMAPSZ limit, you can set this environment 3825 CONFIG_SYS_BOOTMAPSZ limit, you can set this environment
3816 variable to a value of "no" or "off" or "0". 3826 variable to a value of "no" or "off" or "0".
3817 Alternatively, you can set it to a maximum upper 3827 Alternatively, you can set it to a maximum upper
3818 address to use (U-Boot will still check that it 3828 address to use (U-Boot will still check that it
3819 does not overwrite the U-Boot stack and data). 3829 does not overwrite the U-Boot stack and data).
3820 3830
3821 For instance, when you have a system with 16 MB 3831 For instance, when you have a system with 16 MB
3822 RAM, and want to reserve 4 MB from use by Linux, 3832 RAM, and want to reserve 4 MB from use by Linux,
3823 you can do this by adding "mem=12M" to the value of 3833 you can do this by adding "mem=12M" to the value of
3824 the "bootargs" variable. However, now you must make 3834 the "bootargs" variable. However, now you must make
3825 sure that the initrd image is placed in the first 3835 sure that the initrd image is placed in the first
3826 12 MB as well - this can be done with 3836 12 MB as well - this can be done with
3827 3837
3828 setenv initrd_high 00c00000 3838 setenv initrd_high 00c00000
3829 3839
3830 If you set initrd_high to 0xFFFFFFFF, this is an 3840 If you set initrd_high to 0xFFFFFFFF, this is an
3831 indication to U-Boot that all addresses are legal 3841 indication to U-Boot that all addresses are legal
3832 for the Linux kernel, including addresses in flash 3842 for the Linux kernel, including addresses in flash
3833 memory. In this case U-Boot will NOT COPY the 3843 memory. In this case U-Boot will NOT COPY the
3834 ramdisk at all. This may be useful to reduce the 3844 ramdisk at all. This may be useful to reduce the
3835 boot time on your system, but requires that this 3845 boot time on your system, but requires that this
3836 feature is supported by your Linux kernel. 3846 feature is supported by your Linux kernel.
3837 3847
3838 ipaddr - IP address; needed for tftpboot command 3848 ipaddr - IP address; needed for tftpboot command
3839 3849
3840 loadaddr - Default load address for commands like "bootp", 3850 loadaddr - Default load address for commands like "bootp",
3841 "rarpboot", "tftpboot", "loadb" or "diskboot" 3851 "rarpboot", "tftpboot", "loadb" or "diskboot"
3842 3852
3843 loads_echo - see CONFIG_LOADS_ECHO 3853 loads_echo - see CONFIG_LOADS_ECHO
3844 3854
3845 serverip - TFTP server IP address; needed for tftpboot command 3855 serverip - TFTP server IP address; needed for tftpboot command
3846 3856
3847 bootretry - see CONFIG_BOOT_RETRY_TIME 3857 bootretry - see CONFIG_BOOT_RETRY_TIME
3848 3858
3849 bootdelaykey - see CONFIG_AUTOBOOT_DELAY_STR 3859 bootdelaykey - see CONFIG_AUTOBOOT_DELAY_STR
3850 3860
3851 bootstopkey - see CONFIG_AUTOBOOT_STOP_STR 3861 bootstopkey - see CONFIG_AUTOBOOT_STOP_STR
3852 3862
3853 ethprime - controls which interface is used first. 3863 ethprime - controls which interface is used first.
3854 3864
3855 ethact - controls which interface is currently active. 3865 ethact - controls which interface is currently active.
3856 For example you can do the following 3866 For example you can do the following
3857 3867
3858 => setenv ethact FEC 3868 => setenv ethact FEC
3859 => ping 192.168.0.1 # traffic sent on FEC 3869 => ping 192.168.0.1 # traffic sent on FEC
3860 => setenv ethact SCC 3870 => setenv ethact SCC
3861 => ping 10.0.0.1 # traffic sent on SCC 3871 => ping 10.0.0.1 # traffic sent on SCC
3862 3872
3863 ethrotate - When set to "no" U-Boot does not go through all 3873 ethrotate - When set to "no" U-Boot does not go through all
3864 available network interfaces. 3874 available network interfaces.
3865 It just stays at the currently selected interface. 3875 It just stays at the currently selected interface.
3866 3876
3867 netretry - When set to "no" each network operation will 3877 netretry - When set to "no" each network operation will
3868 either succeed or fail without retrying. 3878 either succeed or fail without retrying.
3869 When set to "once" the network operation will 3879 When set to "once" the network operation will
3870 fail when all the available network interfaces 3880 fail when all the available network interfaces
3871 are tried once without success. 3881 are tried once without success.
3872 Useful on scripts which control the retry operation 3882 Useful on scripts which control the retry operation
3873 themselves. 3883 themselves.
3874 3884
3875 npe_ucode - set load address for the NPE microcode 3885 npe_ucode - set load address for the NPE microcode
3876 3886
3877 tftpsrcport - If this is set, the value is used for TFTP's 3887 tftpsrcport - If this is set, the value is used for TFTP's
3878 UDP source port. 3888 UDP source port.
3879 3889
3880 tftpdstport - If this is set, the value is used for TFTP's UDP 3890 tftpdstport - If this is set, the value is used for TFTP's UDP
3881 destination port instead of the Well Know Port 69. 3891 destination port instead of the Well Know Port 69.
3882 3892
3883 tftpblocksize - Block size to use for TFTP transfers; if not set, 3893 tftpblocksize - Block size to use for TFTP transfers; if not set,
3884 we use the TFTP server's default block size 3894 we use the TFTP server's default block size
3885 3895
3886 tftptimeout - Retransmission timeout for TFTP packets (in milli- 3896 tftptimeout - Retransmission timeout for TFTP packets (in milli-
3887 seconds, minimum value is 1000 = 1 second). Defines 3897 seconds, minimum value is 1000 = 1 second). Defines
3888 when a packet is considered to be lost so it has to 3898 when a packet is considered to be lost so it has to
3889 be retransmitted. The default is 5000 = 5 seconds. 3899 be retransmitted. The default is 5000 = 5 seconds.
3890 Lowering this value may make downloads succeed 3900 Lowering this value may make downloads succeed
3891 faster in networks with high packet loss rates or 3901 faster in networks with high packet loss rates or
3892 with unreliable TFTP servers. 3902 with unreliable TFTP servers.
3893 3903
3894 vlan - When set to a value < 4095 the traffic over 3904 vlan - When set to a value < 4095 the traffic over
3895 Ethernet is encapsulated/received over 802.1q 3905 Ethernet is encapsulated/received over 802.1q
3896 VLAN tagged frames. 3906 VLAN tagged frames.
3897 3907
3898 The following image location variables contain the location of images 3908 The following image location variables contain the location of images
3899 used in booting. The "Image" column gives the role of the image and is 3909 used in booting. The "Image" column gives the role of the image and is
3900 not an environment variable name. The other columns are environment 3910 not an environment variable name. The other columns are environment
3901 variable names. "File Name" gives the name of the file on a TFTP 3911 variable names. "File Name" gives the name of the file on a TFTP
3902 server, "RAM Address" gives the location in RAM the image will be 3912 server, "RAM Address" gives the location in RAM the image will be
3903 loaded to, and "Flash Location" gives the image's address in NOR 3913 loaded to, and "Flash Location" gives the image's address in NOR
3904 flash or offset in NAND flash. 3914 flash or offset in NAND flash.
3905 3915
3906 *Note* - these variables don't have to be defined for all boards, some 3916 *Note* - these variables don't have to be defined for all boards, some
3907 boards currenlty use other variables for these purposes, and some 3917 boards currenlty use other variables for these purposes, and some
3908 boards use these variables for other purposes. 3918 boards use these variables for other purposes.
3909 3919
3910 Image File Name RAM Address Flash Location 3920 Image File Name RAM Address Flash Location
3911 ----- --------- ----------- -------------- 3921 ----- --------- ----------- --------------
3912 u-boot u-boot u-boot_addr_r u-boot_addr 3922 u-boot u-boot u-boot_addr_r u-boot_addr
3913 Linux kernel bootfile kernel_addr_r kernel_addr 3923 Linux kernel bootfile kernel_addr_r kernel_addr
3914 device tree blob fdtfile fdt_addr_r fdt_addr 3924 device tree blob fdtfile fdt_addr_r fdt_addr
3915 ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr 3925 ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr
3916 3926
3917 The following environment variables may be used and automatically 3927 The following environment variables may be used and automatically
3918 updated by the network boot commands ("bootp" and "rarpboot"), 3928 updated by the network boot commands ("bootp" and "rarpboot"),
3919 depending the information provided by your boot server: 3929 depending the information provided by your boot server:
3920 3930
3921 bootfile - see above 3931 bootfile - see above
3922 dnsip - IP address of your Domain Name Server 3932 dnsip - IP address of your Domain Name Server
3923 dnsip2 - IP address of your secondary Domain Name Server 3933 dnsip2 - IP address of your secondary Domain Name Server
3924 gatewayip - IP address of the Gateway (Router) to use 3934 gatewayip - IP address of the Gateway (Router) to use
3925 hostname - Target hostname 3935 hostname - Target hostname
3926 ipaddr - see above 3936 ipaddr - see above
3927 netmask - Subnet Mask 3937 netmask - Subnet Mask
3928 rootpath - Pathname of the root filesystem on the NFS server 3938 rootpath - Pathname of the root filesystem on the NFS server
3929 serverip - see above 3939 serverip - see above
3930 3940
3931 3941
3932 There are two special Environment Variables: 3942 There are two special Environment Variables:
3933 3943
3934 serial# - contains hardware identification information such 3944 serial# - contains hardware identification information such
3935 as type string and/or serial number 3945 as type string and/or serial number
3936 ethaddr - Ethernet address 3946 ethaddr - Ethernet address
3937 3947
3938 These variables can be set only once (usually during manufacturing of 3948 These variables can be set only once (usually during manufacturing of
3939 the board). U-Boot refuses to delete or overwrite these variables 3949 the board). U-Boot refuses to delete or overwrite these variables
3940 once they have been set once. 3950 once they have been set once.
3941 3951
3942 3952
3943 Further special Environment Variables: 3953 Further special Environment Variables:
3944 3954
3945 ver - Contains the U-Boot version string as printed 3955 ver - Contains the U-Boot version string as printed
3946 with the "version" command. This variable is 3956 with the "version" command. This variable is
3947 readonly (see CONFIG_VERSION_VARIABLE). 3957 readonly (see CONFIG_VERSION_VARIABLE).
3948 3958
3949 3959
3950 Please note that changes to some configuration parameters may take 3960 Please note that changes to some configuration parameters may take
3951 only effect after the next boot (yes, that's just like Windoze :-). 3961 only effect after the next boot (yes, that's just like Windoze :-).
3952 3962
3953 3963
3954 Command Line Parsing: 3964 Command Line Parsing:
3955 ===================== 3965 =====================
3956 3966
3957 There are two different command line parsers available with U-Boot: 3967 There are two different command line parsers available with U-Boot:
3958 the old "simple" one, and the much more powerful "hush" shell: 3968 the old "simple" one, and the much more powerful "hush" shell:
3959 3969
3960 Old, simple command line parser: 3970 Old, simple command line parser:
3961 -------------------------------- 3971 --------------------------------
3962 3972
3963 - supports environment variables (through setenv / saveenv commands) 3973 - supports environment variables (through setenv / saveenv commands)
3964 - several commands on one line, separated by ';' 3974 - several commands on one line, separated by ';'
3965 - variable substitution using "... ${name} ..." syntax 3975 - variable substitution using "... ${name} ..." syntax
3966 - special characters ('$', ';') can be escaped by prefixing with '\', 3976 - special characters ('$', ';') can be escaped by prefixing with '\',
3967 for example: 3977 for example:
3968 setenv bootcmd bootm \${address} 3978 setenv bootcmd bootm \${address}
3969 - You can also escape text by enclosing in single apostrophes, for example: 3979 - You can also escape text by enclosing in single apostrophes, for example:
3970 setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off' 3980 setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
3971 3981
3972 Hush shell: 3982 Hush shell:
3973 ----------- 3983 -----------
3974 3984
3975 - similar to Bourne shell, with control structures like 3985 - similar to Bourne shell, with control structures like
3976 if...then...else...fi, for...do...done; while...do...done, 3986 if...then...else...fi, for...do...done; while...do...done,
3977 until...do...done, ... 3987 until...do...done, ...
3978 - supports environment ("global") variables (through setenv / saveenv 3988 - supports environment ("global") variables (through setenv / saveenv
3979 commands) and local shell variables (through standard shell syntax 3989 commands) and local shell variables (through standard shell syntax
3980 "name=value"); only environment variables can be used with "run" 3990 "name=value"); only environment variables can be used with "run"
3981 command 3991 command
3982 3992
3983 General rules: 3993 General rules:
3984 -------------- 3994 --------------
3985 3995
3986 (1) If a command line (or an environment variable executed by a "run" 3996 (1) If a command line (or an environment variable executed by a "run"
3987 command) contains several commands separated by semicolon, and 3997 command) contains several commands separated by semicolon, and
3988 one of these commands fails, then the remaining commands will be 3998 one of these commands fails, then the remaining commands will be
3989 executed anyway. 3999 executed anyway.
3990 4000
3991 (2) If you execute several variables with one call to run (i. e. 4001 (2) If you execute several variables with one call to run (i. e.
3992 calling run with a list of variables as arguments), any failing 4002 calling run with a list of variables as arguments), any failing
3993 command will cause "run" to terminate, i. e. the remaining 4003 command will cause "run" to terminate, i. e. the remaining
3994 variables are not executed. 4004 variables are not executed.
3995 4005
3996 Note for Redundant Ethernet Interfaces: 4006 Note for Redundant Ethernet Interfaces:
3997 ======================================= 4007 =======================================
3998 4008
3999 Some boards come with redundant Ethernet interfaces; U-Boot supports 4009 Some boards come with redundant Ethernet interfaces; U-Boot supports
4000 such configurations and is capable of automatic selection of a 4010 such configurations and is capable of automatic selection of a
4001 "working" interface when needed. MAC assignment works as follows: 4011 "working" interface when needed. MAC assignment works as follows:
4002 4012
4003 Network interfaces are numbered eth0, eth1, eth2, ... Corresponding 4013 Network interfaces are numbered eth0, eth1, eth2, ... Corresponding
4004 MAC addresses can be stored in the environment as "ethaddr" (=>eth0), 4014 MAC addresses can be stored in the environment as "ethaddr" (=>eth0),
4005 "eth1addr" (=>eth1), "eth2addr", ... 4015 "eth1addr" (=>eth1), "eth2addr", ...
4006 4016
4007 If the network interface stores some valid MAC address (for instance 4017 If the network interface stores some valid MAC address (for instance
4008 in SROM), this is used as default address if there is NO correspon- 4018 in SROM), this is used as default address if there is NO correspon-
4009 ding setting in the environment; if the corresponding environment 4019 ding setting in the environment; if the corresponding environment
4010 variable is set, this overrides the settings in the card; that means: 4020 variable is set, this overrides the settings in the card; that means:
4011 4021
4012 o If the SROM has a valid MAC address, and there is no address in the 4022 o If the SROM has a valid MAC address, and there is no address in the
4013 environment, the SROM's address is used. 4023 environment, the SROM's address is used.
4014 4024
4015 o If there is no valid address in the SROM, and a definition in the 4025 o If there is no valid address in the SROM, and a definition in the
4016 environment exists, then the value from the environment variable is 4026 environment exists, then the value from the environment variable is
4017 used. 4027 used.
4018 4028
4019 o If both the SROM and the environment contain a MAC address, and 4029 o If both the SROM and the environment contain a MAC address, and
4020 both addresses are the same, this MAC address is used. 4030 both addresses are the same, this MAC address is used.
4021 4031
4022 o If both the SROM and the environment contain a MAC address, and the 4032 o If both the SROM and the environment contain a MAC address, and the
4023 addresses differ, the value from the environment is used and a 4033 addresses differ, the value from the environment is used and a
4024 warning is printed. 4034 warning is printed.
4025 4035
4026 o If neither SROM nor the environment contain a MAC address, an error 4036 o If neither SROM nor the environment contain a MAC address, an error
4027 is raised. 4037 is raised.
4028 4038
4029 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses 4039 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses
4030 will be programmed into hardware as part of the initialization process. This 4040 will be programmed into hardware as part of the initialization process. This
4031 may be skipped by setting the appropriate 'ethmacskip' environment variable. 4041 may be skipped by setting the appropriate 'ethmacskip' environment variable.
4032 The naming convention is as follows: 4042 The naming convention is as follows:
4033 "ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc. 4043 "ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc.
4034 4044
4035 Image Formats: 4045 Image Formats:
4036 ============== 4046 ==============
4037 4047
4038 U-Boot is capable of booting (and performing other auxiliary operations on) 4048 U-Boot is capable of booting (and performing other auxiliary operations on)
4039 images in two formats: 4049 images in two formats:
4040 4050
4041 New uImage format (FIT) 4051 New uImage format (FIT)
4042 ----------------------- 4052 -----------------------
4043 4053
4044 Flexible and powerful format based on Flattened Image Tree -- FIT (similar 4054 Flexible and powerful format based on Flattened Image Tree -- FIT (similar
4045 to Flattened Device Tree). It allows the use of images with multiple 4055 to Flattened Device Tree). It allows the use of images with multiple
4046 components (several kernels, ramdisks, etc.), with contents protected by 4056 components (several kernels, ramdisks, etc.), with contents protected by
4047 SHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory. 4057 SHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory.
4048 4058
4049 4059
4050 Old uImage format 4060 Old uImage format
4051 ----------------- 4061 -----------------
4052 4062
4053 Old image format is based on binary files which can be basically anything, 4063 Old image format is based on binary files which can be basically anything,
4054 preceded by a special header; see the definitions in include/image.h for 4064 preceded by a special header; see the definitions in include/image.h for
4055 details; basically, the header defines the following image properties: 4065 details; basically, the header defines the following image properties:
4056 4066
4057 * Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD, 4067 * Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
4058 4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, 4068 4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
4059 LynxOS, pSOS, QNX, RTEMS, INTEGRITY; 4069 LynxOS, pSOS, QNX, RTEMS, INTEGRITY;
4060 Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS, 4070 Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS,
4061 INTEGRITY). 4071 INTEGRITY).
4062 * Target CPU Architecture (Provisions for Alpha, ARM, AVR32, Intel x86, 4072 * Target CPU Architecture (Provisions for Alpha, ARM, AVR32, Intel x86,
4063 IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit; 4073 IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
4064 Currently supported: ARM, AVR32, Intel x86, MIPS, NDS32, Nios II, PowerPC). 4074 Currently supported: ARM, AVR32, Intel x86, MIPS, NDS32, Nios II, PowerPC).
4065 * Compression Type (uncompressed, gzip, bzip2) 4075 * Compression Type (uncompressed, gzip, bzip2)
4066 * Load Address 4076 * Load Address
4067 * Entry Point 4077 * Entry Point
4068 * Image Name 4078 * Image Name
4069 * Image Timestamp 4079 * Image Timestamp
4070 4080
4071 The header is marked by a special Magic Number, and both the header 4081 The header is marked by a special Magic Number, and both the header
4072 and the data portions of the image are secured against corruption by 4082 and the data portions of the image are secured against corruption by
4073 CRC32 checksums. 4083 CRC32 checksums.
4074 4084
4075 4085
4076 Linux Support: 4086 Linux Support:
4077 ============== 4087 ==============
4078 4088
4079 Although U-Boot should support any OS or standalone application 4089 Although U-Boot should support any OS or standalone application
4080 easily, the main focus has always been on Linux during the design of 4090 easily, the main focus has always been on Linux during the design of
4081 U-Boot. 4091 U-Boot.
4082 4092
4083 U-Boot includes many features that so far have been part of some 4093 U-Boot includes many features that so far have been part of some
4084 special "boot loader" code within the Linux kernel. Also, any 4094 special "boot loader" code within the Linux kernel. Also, any
4085 "initrd" images to be used are no longer part of one big Linux image; 4095 "initrd" images to be used are no longer part of one big Linux image;
4086 instead, kernel and "initrd" are separate images. This implementation 4096 instead, kernel and "initrd" are separate images. This implementation
4087 serves several purposes: 4097 serves several purposes:
4088 4098
4089 - the same features can be used for other OS or standalone 4099 - the same features can be used for other OS or standalone
4090 applications (for instance: using compressed images to reduce the 4100 applications (for instance: using compressed images to reduce the
4091 Flash memory footprint) 4101 Flash memory footprint)
4092 4102
4093 - it becomes much easier to port new Linux kernel versions because 4103 - it becomes much easier to port new Linux kernel versions because
4094 lots of low-level, hardware dependent stuff are done by U-Boot 4104 lots of low-level, hardware dependent stuff are done by U-Boot
4095 4105
4096 - the same Linux kernel image can now be used with different "initrd" 4106 - the same Linux kernel image can now be used with different "initrd"
4097 images; of course this also means that different kernel images can 4107 images; of course this also means that different kernel images can
4098 be run with the same "initrd". This makes testing easier (you don't 4108 be run with the same "initrd". This makes testing easier (you don't
4099 have to build a new "zImage.initrd" Linux image when you just 4109 have to build a new "zImage.initrd" Linux image when you just
4100 change a file in your "initrd"). Also, a field-upgrade of the 4110 change a file in your "initrd"). Also, a field-upgrade of the
4101 software is easier now. 4111 software is easier now.
4102 4112
4103 4113
4104 Linux HOWTO: 4114 Linux HOWTO:
4105 ============ 4115 ============
4106 4116
4107 Porting Linux to U-Boot based systems: 4117 Porting Linux to U-Boot based systems:
4108 --------------------------------------- 4118 ---------------------------------------
4109 4119
4110 U-Boot cannot save you from doing all the necessary modifications to 4120 U-Boot cannot save you from doing all the necessary modifications to
4111 configure the Linux device drivers for use with your target hardware 4121 configure the Linux device drivers for use with your target hardware
4112 (no, we don't intend to provide a full virtual machine interface to 4122 (no, we don't intend to provide a full virtual machine interface to
4113 Linux :-). 4123 Linux :-).
4114 4124
4115 But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot). 4125 But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).
4116 4126
4117 Just make sure your machine specific header file (for instance 4127 Just make sure your machine specific header file (for instance
4118 include/asm-ppc/tqm8xx.h) includes the same definition of the Board 4128 include/asm-ppc/tqm8xx.h) includes the same definition of the Board
4119 Information structure as we define in include/asm-<arch>/u-boot.h, 4129 Information structure as we define in include/asm-<arch>/u-boot.h,
4120 and make sure that your definition of IMAP_ADDR uses the same value 4130 and make sure that your definition of IMAP_ADDR uses the same value
4121 as your U-Boot configuration in CONFIG_SYS_IMMR. 4131 as your U-Boot configuration in CONFIG_SYS_IMMR.
4122 4132
4123 4133
4124 Configuring the Linux kernel: 4134 Configuring the Linux kernel:
4125 ----------------------------- 4135 -----------------------------
4126 4136
4127 No specific requirements for U-Boot. Make sure you have some root 4137 No specific requirements for U-Boot. Make sure you have some root
4128 device (initial ramdisk, NFS) for your target system. 4138 device (initial ramdisk, NFS) for your target system.
4129 4139
4130 4140
4131 Building a Linux Image: 4141 Building a Linux Image:
4132 ----------------------- 4142 -----------------------
4133 4143
4134 With U-Boot, "normal" build targets like "zImage" or "bzImage" are 4144 With U-Boot, "normal" build targets like "zImage" or "bzImage" are
4135 not used. If you use recent kernel source, a new build target 4145 not used. If you use recent kernel source, a new build target
4136 "uImage" will exist which automatically builds an image usable by 4146 "uImage" will exist which automatically builds an image usable by
4137 U-Boot. Most older kernels also have support for a "pImage" target, 4147 U-Boot. Most older kernels also have support for a "pImage" target,
4138 which was introduced for our predecessor project PPCBoot and uses a 4148 which was introduced for our predecessor project PPCBoot and uses a
4139 100% compatible format. 4149 100% compatible format.
4140 4150
4141 Example: 4151 Example:
4142 4152
4143 make TQM850L_config 4153 make TQM850L_config
4144 make oldconfig 4154 make oldconfig
4145 make dep 4155 make dep
4146 make uImage 4156 make uImage
4147 4157
4148 The "uImage" build target uses a special tool (in 'tools/mkimage') to 4158 The "uImage" build target uses a special tool (in 'tools/mkimage') to
4149 encapsulate a compressed Linux kernel image with header information, 4159 encapsulate a compressed Linux kernel image with header information,
4150 CRC32 checksum etc. for use with U-Boot. This is what we are doing: 4160 CRC32 checksum etc. for use with U-Boot. This is what we are doing:
4151 4161
4152 * build a standard "vmlinux" kernel image (in ELF binary format): 4162 * build a standard "vmlinux" kernel image (in ELF binary format):
4153 4163
4154 * convert the kernel into a raw binary image: 4164 * convert the kernel into a raw binary image:
4155 4165
4156 ${CROSS_COMPILE}-objcopy -O binary \ 4166 ${CROSS_COMPILE}-objcopy -O binary \
4157 -R .note -R .comment \ 4167 -R .note -R .comment \
4158 -S vmlinux linux.bin 4168 -S vmlinux linux.bin
4159 4169
4160 * compress the binary image: 4170 * compress the binary image:
4161 4171
4162 gzip -9 linux.bin 4172 gzip -9 linux.bin
4163 4173
4164 * package compressed binary image for U-Boot: 4174 * package compressed binary image for U-Boot:
4165 4175
4166 mkimage -A ppc -O linux -T kernel -C gzip \ 4176 mkimage -A ppc -O linux -T kernel -C gzip \
4167 -a 0 -e 0 -n "Linux Kernel Image" \ 4177 -a 0 -e 0 -n "Linux Kernel Image" \
4168 -d linux.bin.gz uImage 4178 -d linux.bin.gz uImage
4169 4179
4170 4180
4171 The "mkimage" tool can also be used to create ramdisk images for use 4181 The "mkimage" tool can also be used to create ramdisk images for use
4172 with U-Boot, either separated from the Linux kernel image, or 4182 with U-Boot, either separated from the Linux kernel image, or
4173 combined into one file. "mkimage" encapsulates the images with a 64 4183 combined into one file. "mkimage" encapsulates the images with a 64
4174 byte header containing information about target architecture, 4184 byte header containing information about target architecture,
4175 operating system, image type, compression method, entry points, time 4185 operating system, image type, compression method, entry points, time
4176 stamp, CRC32 checksums, etc. 4186 stamp, CRC32 checksums, etc.
4177 4187
4178 "mkimage" can be called in two ways: to verify existing images and 4188 "mkimage" can be called in two ways: to verify existing images and
4179 print the header information, or to build new images. 4189 print the header information, or to build new images.
4180 4190
4181 In the first form (with "-l" option) mkimage lists the information 4191 In the first form (with "-l" option) mkimage lists the information
4182 contained in the header of an existing U-Boot image; this includes 4192 contained in the header of an existing U-Boot image; this includes
4183 checksum verification: 4193 checksum verification:
4184 4194
4185 tools/mkimage -l image 4195 tools/mkimage -l image
4186 -l ==> list image header information 4196 -l ==> list image header information
4187 4197
4188 The second form (with "-d" option) is used to build a U-Boot image 4198 The second form (with "-d" option) is used to build a U-Boot image
4189 from a "data file" which is used as image payload: 4199 from a "data file" which is used as image payload:
4190 4200
4191 tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \ 4201 tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
4192 -n name -d data_file image 4202 -n name -d data_file image
4193 -A ==> set architecture to 'arch' 4203 -A ==> set architecture to 'arch'
4194 -O ==> set operating system to 'os' 4204 -O ==> set operating system to 'os'
4195 -T ==> set image type to 'type' 4205 -T ==> set image type to 'type'
4196 -C ==> set compression type 'comp' 4206 -C ==> set compression type 'comp'
4197 -a ==> set load address to 'addr' (hex) 4207 -a ==> set load address to 'addr' (hex)
4198 -e ==> set entry point to 'ep' (hex) 4208 -e ==> set entry point to 'ep' (hex)
4199 -n ==> set image name to 'name' 4209 -n ==> set image name to 'name'
4200 -d ==> use image data from 'datafile' 4210 -d ==> use image data from 'datafile'
4201 4211
4202 Right now, all Linux kernels for PowerPC systems use the same load 4212 Right now, all Linux kernels for PowerPC systems use the same load
4203 address (0x00000000), but the entry point address depends on the 4213 address (0x00000000), but the entry point address depends on the
4204 kernel version: 4214 kernel version:
4205 4215
4206 - 2.2.x kernels have the entry point at 0x0000000C, 4216 - 2.2.x kernels have the entry point at 0x0000000C,
4207 - 2.3.x and later kernels have the entry point at 0x00000000. 4217 - 2.3.x and later kernels have the entry point at 0x00000000.
4208 4218
4209 So a typical call to build a U-Boot image would read: 4219 So a typical call to build a U-Boot image would read:
4210 4220
4211 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \ 4221 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \
4212 > -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \ 4222 > -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
4213 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \ 4223 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \
4214 > examples/uImage.TQM850L 4224 > examples/uImage.TQM850L
4215 Image Name: 2.4.4 kernel for TQM850L 4225 Image Name: 2.4.4 kernel for TQM850L
4216 Created: Wed Jul 19 02:34:59 2000 4226 Created: Wed Jul 19 02:34:59 2000
4217 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4227 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4218 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB 4228 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
4219 Load Address: 0x00000000 4229 Load Address: 0x00000000
4220 Entry Point: 0x00000000 4230 Entry Point: 0x00000000
4221 4231
4222 To verify the contents of the image (or check for corruption): 4232 To verify the contents of the image (or check for corruption):
4223 4233
4224 -> tools/mkimage -l examples/uImage.TQM850L 4234 -> tools/mkimage -l examples/uImage.TQM850L
4225 Image Name: 2.4.4 kernel for TQM850L 4235 Image Name: 2.4.4 kernel for TQM850L
4226 Created: Wed Jul 19 02:34:59 2000 4236 Created: Wed Jul 19 02:34:59 2000
4227 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4237 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4228 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB 4238 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
4229 Load Address: 0x00000000 4239 Load Address: 0x00000000
4230 Entry Point: 0x00000000 4240 Entry Point: 0x00000000
4231 4241
4232 NOTE: for embedded systems where boot time is critical you can trade 4242 NOTE: for embedded systems where boot time is critical you can trade
4233 speed for memory and install an UNCOMPRESSED image instead: this 4243 speed for memory and install an UNCOMPRESSED image instead: this
4234 needs more space in Flash, but boots much faster since it does not 4244 needs more space in Flash, but boots much faster since it does not
4235 need to be uncompressed: 4245 need to be uncompressed:
4236 4246
4237 -> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz 4247 -> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz
4238 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \ 4248 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \
4239 > -A ppc -O linux -T kernel -C none -a 0 -e 0 \ 4249 > -A ppc -O linux -T kernel -C none -a 0 -e 0 \
4240 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \ 4250 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \
4241 > examples/uImage.TQM850L-uncompressed 4251 > examples/uImage.TQM850L-uncompressed
4242 Image Name: 2.4.4 kernel for TQM850L 4252 Image Name: 2.4.4 kernel for TQM850L
4243 Created: Wed Jul 19 02:34:59 2000 4253 Created: Wed Jul 19 02:34:59 2000
4244 Image Type: PowerPC Linux Kernel Image (uncompressed) 4254 Image Type: PowerPC Linux Kernel Image (uncompressed)
4245 Data Size: 792160 Bytes = 773.59 kB = 0.76 MB 4255 Data Size: 792160 Bytes = 773.59 kB = 0.76 MB
4246 Load Address: 0x00000000 4256 Load Address: 0x00000000
4247 Entry Point: 0x00000000 4257 Entry Point: 0x00000000
4248 4258
4249 4259
4250 Similar you can build U-Boot images from a 'ramdisk.image.gz' file 4260 Similar you can build U-Boot images from a 'ramdisk.image.gz' file
4251 when your kernel is intended to use an initial ramdisk: 4261 when your kernel is intended to use an initial ramdisk:
4252 4262
4253 -> tools/mkimage -n 'Simple Ramdisk Image' \ 4263 -> tools/mkimage -n 'Simple Ramdisk Image' \
4254 > -A ppc -O linux -T ramdisk -C gzip \ 4264 > -A ppc -O linux -T ramdisk -C gzip \
4255 > -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd 4265 > -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
4256 Image Name: Simple Ramdisk Image 4266 Image Name: Simple Ramdisk Image
4257 Created: Wed Jan 12 14:01:50 2000 4267 Created: Wed Jan 12 14:01:50 2000
4258 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 4268 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
4259 Data Size: 566530 Bytes = 553.25 kB = 0.54 MB 4269 Data Size: 566530 Bytes = 553.25 kB = 0.54 MB
4260 Load Address: 0x00000000 4270 Load Address: 0x00000000
4261 Entry Point: 0x00000000 4271 Entry Point: 0x00000000
4262 4272
4263 4273
4264 Installing a Linux Image: 4274 Installing a Linux Image:
4265 ------------------------- 4275 -------------------------
4266 4276
4267 To downloading a U-Boot image over the serial (console) interface, 4277 To downloading a U-Boot image over the serial (console) interface,
4268 you must convert the image to S-Record format: 4278 you must convert the image to S-Record format:
4269 4279
4270 objcopy -I binary -O srec examples/image examples/image.srec 4280 objcopy -I binary -O srec examples/image examples/image.srec
4271 4281
4272 The 'objcopy' does not understand the information in the U-Boot 4282 The 'objcopy' does not understand the information in the U-Boot
4273 image header, so the resulting S-Record file will be relative to 4283 image header, so the resulting S-Record file will be relative to
4274 address 0x00000000. To load it to a given address, you need to 4284 address 0x00000000. To load it to a given address, you need to
4275 specify the target address as 'offset' parameter with the 'loads' 4285 specify the target address as 'offset' parameter with the 'loads'
4276 command. 4286 command.
4277 4287
4278 Example: install the image to address 0x40100000 (which on the 4288 Example: install the image to address 0x40100000 (which on the
4279 TQM8xxL is in the first Flash bank): 4289 TQM8xxL is in the first Flash bank):
4280 4290
4281 => erase 40100000 401FFFFF 4291 => erase 40100000 401FFFFF
4282 4292
4283 .......... done 4293 .......... done
4284 Erased 8 sectors 4294 Erased 8 sectors
4285 4295
4286 => loads 40100000 4296 => loads 40100000
4287 ## Ready for S-Record download ... 4297 ## Ready for S-Record download ...
4288 ~>examples/image.srec 4298 ~>examples/image.srec
4289 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 4299 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
4290 ... 4300 ...
4291 15989 15990 15991 15992 4301 15989 15990 15991 15992
4292 [file transfer complete] 4302 [file transfer complete]
4293 [connected] 4303 [connected]
4294 ## Start Addr = 0x00000000 4304 ## Start Addr = 0x00000000
4295 4305
4296 4306
4297 You can check the success of the download using the 'iminfo' command; 4307 You can check the success of the download using the 'iminfo' command;
4298 this includes a checksum verification so you can be sure no data 4308 this includes a checksum verification so you can be sure no data
4299 corruption happened: 4309 corruption happened:
4300 4310
4301 => imi 40100000 4311 => imi 40100000
4302 4312
4303 ## Checking Image at 40100000 ... 4313 ## Checking Image at 40100000 ...
4304 Image Name: 2.2.13 for initrd on TQM850L 4314 Image Name: 2.2.13 for initrd on TQM850L
4305 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4315 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4306 Data Size: 335725 Bytes = 327 kB = 0 MB 4316 Data Size: 335725 Bytes = 327 kB = 0 MB
4307 Load Address: 00000000 4317 Load Address: 00000000
4308 Entry Point: 0000000c 4318 Entry Point: 0000000c
4309 Verifying Checksum ... OK 4319 Verifying Checksum ... OK
4310 4320
4311 4321
4312 Boot Linux: 4322 Boot Linux:
4313 ----------- 4323 -----------
4314 4324
4315 The "bootm" command is used to boot an application that is stored in 4325 The "bootm" command is used to boot an application that is stored in
4316 memory (RAM or Flash). In case of a Linux kernel image, the contents 4326 memory (RAM or Flash). In case of a Linux kernel image, the contents
4317 of the "bootargs" environment variable is passed to the kernel as 4327 of the "bootargs" environment variable is passed to the kernel as
4318 parameters. You can check and modify this variable using the 4328 parameters. You can check and modify this variable using the
4319 "printenv" and "setenv" commands: 4329 "printenv" and "setenv" commands:
4320 4330
4321 4331
4322 => printenv bootargs 4332 => printenv bootargs
4323 bootargs=root=/dev/ram 4333 bootargs=root=/dev/ram
4324 4334
4325 => setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 4335 => setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
4326 4336
4327 => printenv bootargs 4337 => printenv bootargs
4328 bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 4338 bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
4329 4339
4330 => bootm 40020000 4340 => bootm 40020000
4331 ## Booting Linux kernel at 40020000 ... 4341 ## Booting Linux kernel at 40020000 ...
4332 Image Name: 2.2.13 for NFS on TQM850L 4342 Image Name: 2.2.13 for NFS on TQM850L
4333 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4343 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4334 Data Size: 381681 Bytes = 372 kB = 0 MB 4344 Data Size: 381681 Bytes = 372 kB = 0 MB
4335 Load Address: 00000000 4345 Load Address: 00000000
4336 Entry Point: 0000000c 4346 Entry Point: 0000000c
4337 Verifying Checksum ... OK 4347 Verifying Checksum ... OK
4338 Uncompressing Kernel Image ... OK 4348 Uncompressing Kernel Image ... OK
4339 Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000 4349 Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
4340 Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 4350 Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
4341 time_init: decrementer frequency = 187500000/60 4351 time_init: decrementer frequency = 187500000/60
4342 Calibrating delay loop... 49.77 BogoMIPS 4352 Calibrating delay loop... 49.77 BogoMIPS
4343 Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000] 4353 Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
4344 ... 4354 ...
4345 4355
4346 If you want to boot a Linux kernel with initial RAM disk, you pass 4356 If you want to boot a Linux kernel with initial RAM disk, you pass
4347 the memory addresses of both the kernel and the initrd image (PPBCOOT 4357 the memory addresses of both the kernel and the initrd image (PPBCOOT
4348 format!) to the "bootm" command: 4358 format!) to the "bootm" command:
4349 4359
4350 => imi 40100000 40200000 4360 => imi 40100000 40200000
4351 4361
4352 ## Checking Image at 40100000 ... 4362 ## Checking Image at 40100000 ...
4353 Image Name: 2.2.13 for initrd on TQM850L 4363 Image Name: 2.2.13 for initrd on TQM850L
4354 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4364 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4355 Data Size: 335725 Bytes = 327 kB = 0 MB 4365 Data Size: 335725 Bytes = 327 kB = 0 MB
4356 Load Address: 00000000 4366 Load Address: 00000000
4357 Entry Point: 0000000c 4367 Entry Point: 0000000c
4358 Verifying Checksum ... OK 4368 Verifying Checksum ... OK
4359 4369
4360 ## Checking Image at 40200000 ... 4370 ## Checking Image at 40200000 ...
4361 Image Name: Simple Ramdisk Image 4371 Image Name: Simple Ramdisk Image
4362 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 4372 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
4363 Data Size: 566530 Bytes = 553 kB = 0 MB 4373 Data Size: 566530 Bytes = 553 kB = 0 MB
4364 Load Address: 00000000 4374 Load Address: 00000000
4365 Entry Point: 00000000 4375 Entry Point: 00000000
4366 Verifying Checksum ... OK 4376 Verifying Checksum ... OK
4367 4377
4368 => bootm 40100000 40200000 4378 => bootm 40100000 40200000
4369 ## Booting Linux kernel at 40100000 ... 4379 ## Booting Linux kernel at 40100000 ...
4370 Image Name: 2.2.13 for initrd on TQM850L 4380 Image Name: 2.2.13 for initrd on TQM850L
4371 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4381 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4372 Data Size: 335725 Bytes = 327 kB = 0 MB 4382 Data Size: 335725 Bytes = 327 kB = 0 MB
4373 Load Address: 00000000 4383 Load Address: 00000000
4374 Entry Point: 0000000c 4384 Entry Point: 0000000c
4375 Verifying Checksum ... OK 4385 Verifying Checksum ... OK
4376 Uncompressing Kernel Image ... OK 4386 Uncompressing Kernel Image ... OK
4377 ## Loading RAMDisk Image at 40200000 ... 4387 ## Loading RAMDisk Image at 40200000 ...
4378 Image Name: Simple Ramdisk Image 4388 Image Name: Simple Ramdisk Image
4379 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 4389 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
4380 Data Size: 566530 Bytes = 553 kB = 0 MB 4390 Data Size: 566530 Bytes = 553 kB = 0 MB
4381 Load Address: 00000000 4391 Load Address: 00000000
4382 Entry Point: 00000000 4392 Entry Point: 00000000
4383 Verifying Checksum ... OK 4393 Verifying Checksum ... OK
4384 Loading Ramdisk ... OK 4394 Loading Ramdisk ... OK
4385 Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000 4395 Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
4386 Boot arguments: root=/dev/ram 4396 Boot arguments: root=/dev/ram
4387 time_init: decrementer frequency = 187500000/60 4397 time_init: decrementer frequency = 187500000/60
4388 Calibrating delay loop... 49.77 BogoMIPS 4398 Calibrating delay loop... 49.77 BogoMIPS
4389 ... 4399 ...
4390 RAMDISK: Compressed image found at block 0 4400 RAMDISK: Compressed image found at block 0
4391 VFS: Mounted root (ext2 filesystem). 4401 VFS: Mounted root (ext2 filesystem).
4392 4402
4393 bash# 4403 bash#
4394 4404
4395 Boot Linux and pass a flat device tree: 4405 Boot Linux and pass a flat device tree:
4396 ----------- 4406 -----------
4397 4407
4398 First, U-Boot must be compiled with the appropriate defines. See the section 4408 First, U-Boot must be compiled with the appropriate defines. See the section
4399 titled "Linux Kernel Interface" above for a more in depth explanation. The 4409 titled "Linux Kernel Interface" above for a more in depth explanation. The
4400 following is an example of how to start a kernel and pass an updated 4410 following is an example of how to start a kernel and pass an updated
4401 flat device tree: 4411 flat device tree:
4402 4412
4403 => print oftaddr 4413 => print oftaddr
4404 oftaddr=0x300000 4414 oftaddr=0x300000
4405 => print oft 4415 => print oft
4406 oft=oftrees/mpc8540ads.dtb 4416 oft=oftrees/mpc8540ads.dtb
4407 => tftp $oftaddr $oft 4417 => tftp $oftaddr $oft
4408 Speed: 1000, full duplex 4418 Speed: 1000, full duplex
4409 Using TSEC0 device 4419 Using TSEC0 device
4410 TFTP from server 192.168.1.1; our IP address is 192.168.1.101 4420 TFTP from server 192.168.1.1; our IP address is 192.168.1.101
4411 Filename 'oftrees/mpc8540ads.dtb'. 4421 Filename 'oftrees/mpc8540ads.dtb'.
4412 Load address: 0x300000 4422 Load address: 0x300000
4413 Loading: # 4423 Loading: #
4414 done 4424 done
4415 Bytes transferred = 4106 (100a hex) 4425 Bytes transferred = 4106 (100a hex)
4416 => tftp $loadaddr $bootfile 4426 => tftp $loadaddr $bootfile
4417 Speed: 1000, full duplex 4427 Speed: 1000, full duplex
4418 Using TSEC0 device 4428 Using TSEC0 device
4419 TFTP from server 192.168.1.1; our IP address is 192.168.1.2 4429 TFTP from server 192.168.1.1; our IP address is 192.168.1.2
4420 Filename 'uImage'. 4430 Filename 'uImage'.
4421 Load address: 0x200000 4431 Load address: 0x200000
4422 Loading:############ 4432 Loading:############
4423 done 4433 done
4424 Bytes transferred = 1029407 (fb51f hex) 4434 Bytes transferred = 1029407 (fb51f hex)
4425 => print loadaddr 4435 => print loadaddr
4426 loadaddr=200000 4436 loadaddr=200000
4427 => print oftaddr 4437 => print oftaddr
4428 oftaddr=0x300000 4438 oftaddr=0x300000
4429 => bootm $loadaddr - $oftaddr 4439 => bootm $loadaddr - $oftaddr
4430 ## Booting image at 00200000 ... 4440 ## Booting image at 00200000 ...
4431 Image Name: Linux-2.6.17-dirty 4441 Image Name: Linux-2.6.17-dirty
4432 Image Type: PowerPC Linux Kernel Image (gzip compressed) 4442 Image Type: PowerPC Linux Kernel Image (gzip compressed)
4433 Data Size: 1029343 Bytes = 1005.2 kB 4443 Data Size: 1029343 Bytes = 1005.2 kB
4434 Load Address: 00000000 4444 Load Address: 00000000
4435 Entry Point: 00000000 4445 Entry Point: 00000000
4436 Verifying Checksum ... OK 4446 Verifying Checksum ... OK
4437 Uncompressing Kernel Image ... OK 4447 Uncompressing Kernel Image ... OK
4438 Booting using flat device tree at 0x300000 4448 Booting using flat device tree at 0x300000
4439 Using MPC85xx ADS machine description 4449 Using MPC85xx ADS machine description
4440 Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb 4450 Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb
4441 [snip] 4451 [snip]
4442 4452
4443 4453
4444 More About U-Boot Image Types: 4454 More About U-Boot Image Types:
4445 ------------------------------ 4455 ------------------------------
4446 4456
4447 U-Boot supports the following image types: 4457 U-Boot supports the following image types:
4448 4458
4449 "Standalone Programs" are directly runnable in the environment 4459 "Standalone Programs" are directly runnable in the environment
4450 provided by U-Boot; it is expected that (if they behave 4460 provided by U-Boot; it is expected that (if they behave
4451 well) you can continue to work in U-Boot after return from 4461 well) you can continue to work in U-Boot after return from
4452 the Standalone Program. 4462 the Standalone Program.
4453 "OS Kernel Images" are usually images of some Embedded OS which 4463 "OS Kernel Images" are usually images of some Embedded OS which
4454 will take over control completely. Usually these programs 4464 will take over control completely. Usually these programs
4455 will install their own set of exception handlers, device 4465 will install their own set of exception handlers, device
4456 drivers, set up the MMU, etc. - this means, that you cannot 4466 drivers, set up the MMU, etc. - this means, that you cannot
4457 expect to re-enter U-Boot except by resetting the CPU. 4467 expect to re-enter U-Boot except by resetting the CPU.
4458 "RAMDisk Images" are more or less just data blocks, and their 4468 "RAMDisk Images" are more or less just data blocks, and their
4459 parameters (address, size) are passed to an OS kernel that is 4469 parameters (address, size) are passed to an OS kernel that is
4460 being started. 4470 being started.
4461 "Multi-File Images" contain several images, typically an OS 4471 "Multi-File Images" contain several images, typically an OS
4462 (Linux) kernel image and one or more data images like 4472 (Linux) kernel image and one or more data images like
4463 RAMDisks. This construct is useful for instance when you want 4473 RAMDisks. This construct is useful for instance when you want
4464 to boot over the network using BOOTP etc., where the boot 4474 to boot over the network using BOOTP etc., where the boot
4465 server provides just a single image file, but you want to get 4475 server provides just a single image file, but you want to get
4466 for instance an OS kernel and a RAMDisk image. 4476 for instance an OS kernel and a RAMDisk image.
4467 4477
4468 "Multi-File Images" start with a list of image sizes, each 4478 "Multi-File Images" start with a list of image sizes, each
4469 image size (in bytes) specified by an "uint32_t" in network 4479 image size (in bytes) specified by an "uint32_t" in network
4470 byte order. This list is terminated by an "(uint32_t)0". 4480 byte order. This list is terminated by an "(uint32_t)0".
4471 Immediately after the terminating 0 follow the images, one by 4481 Immediately after the terminating 0 follow the images, one by
4472 one, all aligned on "uint32_t" boundaries (size rounded up to 4482 one, all aligned on "uint32_t" boundaries (size rounded up to
4473 a multiple of 4 bytes). 4483 a multiple of 4 bytes).
4474 4484
4475 "Firmware Images" are binary images containing firmware (like 4485 "Firmware Images" are binary images containing firmware (like
4476 U-Boot or FPGA images) which usually will be programmed to 4486 U-Boot or FPGA images) which usually will be programmed to
4477 flash memory. 4487 flash memory.
4478 4488
4479 "Script files" are command sequences that will be executed by 4489 "Script files" are command sequences that will be executed by
4480 U-Boot's command interpreter; this feature is especially 4490 U-Boot's command interpreter; this feature is especially
4481 useful when you configure U-Boot to use a real shell (hush) 4491 useful when you configure U-Boot to use a real shell (hush)
4482 as command interpreter. 4492 as command interpreter.
4483 4493
4484 Booting the Linux zImage: 4494 Booting the Linux zImage:
4485 ------------------------- 4495 -------------------------
4486 4496
4487 On some platforms, it's possible to boot Linux zImage. This is done 4497 On some platforms, it's possible to boot Linux zImage. This is done
4488 using the "bootz" command. The syntax of "bootz" command is the same 4498 using the "bootz" command. The syntax of "bootz" command is the same
4489 as the syntax of "bootm" command. 4499 as the syntax of "bootm" command.
4490 4500
4491 Note, defining the CONFIG_SUPPORT_INITRD_RAW allows user to supply 4501 Note, defining the CONFIG_SUPPORT_INITRD_RAW allows user to supply
4492 kernel with raw initrd images. The syntax is slightly different, the 4502 kernel with raw initrd images. The syntax is slightly different, the
4493 address of the initrd must be augmented by it's size, in the following 4503 address of the initrd must be augmented by it's size, in the following
4494 format: "<initrd addres>:<initrd size>". 4504 format: "<initrd addres>:<initrd size>".
4495 4505
4496 4506
4497 Standalone HOWTO: 4507 Standalone HOWTO:
4498 ================= 4508 =================
4499 4509
4500 One of the features of U-Boot is that you can dynamically load and 4510 One of the features of U-Boot is that you can dynamically load and
4501 run "standalone" applications, which can use some resources of 4511 run "standalone" applications, which can use some resources of
4502 U-Boot like console I/O functions or interrupt services. 4512 U-Boot like console I/O functions or interrupt services.
4503 4513
4504 Two simple examples are included with the sources: 4514 Two simple examples are included with the sources:
4505 4515
4506 "Hello World" Demo: 4516 "Hello World" Demo:
4507 ------------------- 4517 -------------------
4508 4518
4509 'examples/hello_world.c' contains a small "Hello World" Demo 4519 'examples/hello_world.c' contains a small "Hello World" Demo
4510 application; it is automatically compiled when you build U-Boot. 4520 application; it is automatically compiled when you build U-Boot.
4511 It's configured to run at address 0x00040004, so you can play with it 4521 It's configured to run at address 0x00040004, so you can play with it
4512 like that: 4522 like that:
4513 4523
4514 => loads 4524 => loads
4515 ## Ready for S-Record download ... 4525 ## Ready for S-Record download ...
4516 ~>examples/hello_world.srec 4526 ~>examples/hello_world.srec
4517 1 2 3 4 5 6 7 8 9 10 11 ... 4527 1 2 3 4 5 6 7 8 9 10 11 ...
4518 [file transfer complete] 4528 [file transfer complete]
4519 [connected] 4529 [connected]
4520 ## Start Addr = 0x00040004 4530 ## Start Addr = 0x00040004
4521 4531
4522 => go 40004 Hello World! This is a test. 4532 => go 40004 Hello World! This is a test.
4523 ## Starting application at 0x00040004 ... 4533 ## Starting application at 0x00040004 ...
4524 Hello World 4534 Hello World
4525 argc = 7 4535 argc = 7
4526 argv[0] = "40004" 4536 argv[0] = "40004"
4527 argv[1] = "Hello" 4537 argv[1] = "Hello"
4528 argv[2] = "World!" 4538 argv[2] = "World!"
4529 argv[3] = "This" 4539 argv[3] = "This"
4530 argv[4] = "is" 4540 argv[4] = "is"
4531 argv[5] = "a" 4541 argv[5] = "a"
4532 argv[6] = "test." 4542 argv[6] = "test."
4533 argv[7] = "<NULL>" 4543 argv[7] = "<NULL>"
4534 Hit any key to exit ... 4544 Hit any key to exit ...
4535 4545
4536 ## Application terminated, rc = 0x0 4546 ## Application terminated, rc = 0x0
4537 4547
4538 Another example, which demonstrates how to register a CPM interrupt 4548 Another example, which demonstrates how to register a CPM interrupt
4539 handler with the U-Boot code, can be found in 'examples/timer.c'. 4549 handler with the U-Boot code, can be found in 'examples/timer.c'.
4540 Here, a CPM timer is set up to generate an interrupt every second. 4550 Here, a CPM timer is set up to generate an interrupt every second.
4541 The interrupt service routine is trivial, just printing a '.' 4551 The interrupt service routine is trivial, just printing a '.'
4542 character, but this is just a demo program. The application can be 4552 character, but this is just a demo program. The application can be
4543 controlled by the following keys: 4553 controlled by the following keys:
4544 4554
4545 ? - print current values og the CPM Timer registers 4555 ? - print current values og the CPM Timer registers
4546 b - enable interrupts and start timer 4556 b - enable interrupts and start timer
4547 e - stop timer and disable interrupts 4557 e - stop timer and disable interrupts
4548 q - quit application 4558 q - quit application
4549 4559
4550 => loads 4560 => loads
4551 ## Ready for S-Record download ... 4561 ## Ready for S-Record download ...
4552 ~>examples/timer.srec 4562 ~>examples/timer.srec
4553 1 2 3 4 5 6 7 8 9 10 11 ... 4563 1 2 3 4 5 6 7 8 9 10 11 ...
4554 [file transfer complete] 4564 [file transfer complete]
4555 [connected] 4565 [connected]
4556 ## Start Addr = 0x00040004 4566 ## Start Addr = 0x00040004
4557 4567
4558 => go 40004 4568 => go 40004
4559 ## Starting application at 0x00040004 ... 4569 ## Starting application at 0x00040004 ...
4560 TIMERS=0xfff00980 4570 TIMERS=0xfff00980
4561 Using timer 1 4571 Using timer 1
4562 tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0 4572 tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
4563 4573
4564 Hit 'b': 4574 Hit 'b':
4565 [q, b, e, ?] Set interval 1000000 us 4575 [q, b, e, ?] Set interval 1000000 us
4566 Enabling timer 4576 Enabling timer
4567 Hit '?': 4577 Hit '?':
4568 [q, b, e, ?] ........ 4578 [q, b, e, ?] ........
4569 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0 4579 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
4570 Hit '?': 4580 Hit '?':
4571 [q, b, e, ?] . 4581 [q, b, e, ?] .
4572 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0 4582 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
4573 Hit '?': 4583 Hit '?':
4574 [q, b, e, ?] . 4584 [q, b, e, ?] .
4575 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0 4585 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
4576 Hit '?': 4586 Hit '?':
4577 [q, b, e, ?] . 4587 [q, b, e, ?] .
4578 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0 4588 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
4579 Hit 'e': 4589 Hit 'e':
4580 [q, b, e, ?] ...Stopping timer 4590 [q, b, e, ?] ...Stopping timer
4581 Hit 'q': 4591 Hit 'q':
4582 [q, b, e, ?] ## Application terminated, rc = 0x0 4592 [q, b, e, ?] ## Application terminated, rc = 0x0
4583 4593
4584 4594
4585 Minicom warning: 4595 Minicom warning:
4586 ================ 4596 ================
4587 4597
4588 Over time, many people have reported problems when trying to use the 4598 Over time, many people have reported problems when trying to use the
4589 "minicom" terminal emulation program for serial download. I (wd) 4599 "minicom" terminal emulation program for serial download. I (wd)
4590 consider minicom to be broken, and recommend not to use it. Under 4600 consider minicom to be broken, and recommend not to use it. Under
4591 Unix, I recommend to use C-Kermit for general purpose use (and 4601 Unix, I recommend to use C-Kermit for general purpose use (and
4592 especially for kermit binary protocol download ("loadb" command), and 4602 especially for kermit binary protocol download ("loadb" command), and
4593 use "cu" for S-Record download ("loads" command). 4603 use "cu" for S-Record download ("loads" command).
4594 4604
4595 Nevertheless, if you absolutely want to use it try adding this 4605 Nevertheless, if you absolutely want to use it try adding this
4596 configuration to your "File transfer protocols" section: 4606 configuration to your "File transfer protocols" section:
4597 4607
4598 Name Program Name U/D FullScr IO-Red. Multi 4608 Name Program Name U/D FullScr IO-Red. Multi
4599 X kermit /usr/bin/kermit -i -l %l -s Y U Y N N 4609 X kermit /usr/bin/kermit -i -l %l -s Y U Y N N
4600 Y kermit /usr/bin/kermit -i -l %l -r N D Y N N 4610 Y kermit /usr/bin/kermit -i -l %l -r N D Y N N
4601 4611
4602 4612
4603 NetBSD Notes: 4613 NetBSD Notes:
4604 ============= 4614 =============
4605 4615
4606 Starting at version 0.9.2, U-Boot supports NetBSD both as host 4616 Starting at version 0.9.2, U-Boot supports NetBSD both as host
4607 (build U-Boot) and target system (boots NetBSD/mpc8xx). 4617 (build U-Boot) and target system (boots NetBSD/mpc8xx).
4608 4618
4609 Building requires a cross environment; it is known to work on 4619 Building requires a cross environment; it is known to work on
4610 NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also 4620 NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
4611 need gmake since the Makefiles are not compatible with BSD make). 4621 need gmake since the Makefiles are not compatible with BSD make).
4612 Note that the cross-powerpc package does not install include files; 4622 Note that the cross-powerpc package does not install include files;
4613 attempting to build U-Boot will fail because <machine/ansi.h> is 4623 attempting to build U-Boot will fail because <machine/ansi.h> is
4614 missing. This file has to be installed and patched manually: 4624 missing. This file has to be installed and patched manually:
4615 4625
4616 # cd /usr/pkg/cross/powerpc-netbsd/include 4626 # cd /usr/pkg/cross/powerpc-netbsd/include
4617 # mkdir powerpc 4627 # mkdir powerpc
4618 # ln -s powerpc machine 4628 # ln -s powerpc machine
4619 # cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h 4629 # cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
4620 # ${EDIT} powerpc/ansi.h ## must remove __va_list, _BSD_VA_LIST 4630 # ${EDIT} powerpc/ansi.h ## must remove __va_list, _BSD_VA_LIST
4621 4631
4622 Native builds *don't* work due to incompatibilities between native 4632 Native builds *don't* work due to incompatibilities between native
4623 and U-Boot include files. 4633 and U-Boot include files.
4624 4634
4625 Booting assumes that (the first part of) the image booted is a 4635 Booting assumes that (the first part of) the image booted is a
4626 stage-2 loader which in turn loads and then invokes the kernel 4636 stage-2 loader which in turn loads and then invokes the kernel
4627 proper. Loader sources will eventually appear in the NetBSD source 4637 proper. Loader sources will eventually appear in the NetBSD source
4628 tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the 4638 tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
4629 meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz 4639 meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz
4630 4640
4631 4641
4632 Implementation Internals: 4642 Implementation Internals:
4633 ========================= 4643 =========================
4634 4644
4635 The following is not intended to be a complete description of every 4645 The following is not intended to be a complete description of every
4636 implementation detail. However, it should help to understand the 4646 implementation detail. However, it should help to understand the
4637 inner workings of U-Boot and make it easier to port it to custom 4647 inner workings of U-Boot and make it easier to port it to custom
4638 hardware. 4648 hardware.
4639 4649
4640 4650
4641 Initial Stack, Global Data: 4651 Initial Stack, Global Data:
4642 --------------------------- 4652 ---------------------------
4643 4653
4644 The implementation of U-Boot is complicated by the fact that U-Boot 4654 The implementation of U-Boot is complicated by the fact that U-Boot
4645 starts running out of ROM (flash memory), usually without access to 4655 starts running out of ROM (flash memory), usually without access to
4646 system RAM (because the memory controller is not initialized yet). 4656 system RAM (because the memory controller is not initialized yet).
4647 This means that we don't have writable Data or BSS segments, and BSS 4657 This means that we don't have writable Data or BSS segments, and BSS
4648 is not initialized as zero. To be able to get a C environment working 4658 is not initialized as zero. To be able to get a C environment working
4649 at all, we have to allocate at least a minimal stack. Implementation 4659 at all, we have to allocate at least a minimal stack. Implementation
4650 options for this are defined and restricted by the CPU used: Some CPU 4660 options for this are defined and restricted by the CPU used: Some CPU
4651 models provide on-chip memory (like the IMMR area on MPC8xx and 4661 models provide on-chip memory (like the IMMR area on MPC8xx and
4652 MPC826x processors), on others (parts of) the data cache can be 4662 MPC826x processors), on others (parts of) the data cache can be
4653 locked as (mis-) used as memory, etc. 4663 locked as (mis-) used as memory, etc.
4654 4664
4655 Chris Hallinan posted a good summary of these issues to the 4665 Chris Hallinan posted a good summary of these issues to the
4656 U-Boot mailing list: 4666 U-Boot mailing list:
4657 4667
4658 Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)? 4668 Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
4659 From: "Chris Hallinan" <clh@net1plus.com> 4669 From: "Chris Hallinan" <clh@net1plus.com>
4660 Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET) 4670 Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)
4661 ... 4671 ...
4662 4672
4663 Correct me if I'm wrong, folks, but the way I understand it 4673 Correct me if I'm wrong, folks, but the way I understand it
4664 is this: Using DCACHE as initial RAM for Stack, etc, does not 4674 is this: Using DCACHE as initial RAM for Stack, etc, does not
4665 require any physical RAM backing up the cache. The cleverness 4675 require any physical RAM backing up the cache. The cleverness
4666 is that the cache is being used as a temporary supply of 4676 is that the cache is being used as a temporary supply of
4667 necessary storage before the SDRAM controller is setup. It's 4677 necessary storage before the SDRAM controller is setup. It's
4668 beyond the scope of this list to explain the details, but you 4678 beyond the scope of this list to explain the details, but you
4669 can see how this works by studying the cache architecture and 4679 can see how this works by studying the cache architecture and
4670 operation in the architecture and processor-specific manuals. 4680 operation in the architecture and processor-specific manuals.
4671 4681
4672 OCM is On Chip Memory, which I believe the 405GP has 4K. It 4682 OCM is On Chip Memory, which I believe the 405GP has 4K. It
4673 is another option for the system designer to use as an 4683 is another option for the system designer to use as an
4674 initial stack/RAM area prior to SDRAM being available. Either 4684 initial stack/RAM area prior to SDRAM being available. Either
4675 option should work for you. Using CS 4 should be fine if your 4685 option should work for you. Using CS 4 should be fine if your
4676 board designers haven't used it for something that would 4686 board designers haven't used it for something that would
4677 cause you grief during the initial boot! It is frequently not 4687 cause you grief during the initial boot! It is frequently not
4678 used. 4688 used.
4679 4689
4680 CONFIG_SYS_INIT_RAM_ADDR should be somewhere that won't interfere 4690 CONFIG_SYS_INIT_RAM_ADDR should be somewhere that won't interfere
4681 with your processor/board/system design. The default value 4691 with your processor/board/system design. The default value
4682 you will find in any recent u-boot distribution in 4692 you will find in any recent u-boot distribution in
4683 walnut.h should work for you. I'd set it to a value larger 4693 walnut.h should work for you. I'd set it to a value larger
4684 than your SDRAM module. If you have a 64MB SDRAM module, set 4694 than your SDRAM module. If you have a 64MB SDRAM module, set
4685 it above 400_0000. Just make sure your board has no resources 4695 it above 400_0000. Just make sure your board has no resources
4686 that are supposed to respond to that address! That code in 4696 that are supposed to respond to that address! That code in
4687 start.S has been around a while and should work as is when 4697 start.S has been around a while and should work as is when
4688 you get the config right. 4698 you get the config right.
4689 4699
4690 -Chris Hallinan 4700 -Chris Hallinan
4691 DS4.COM, Inc. 4701 DS4.COM, Inc.
4692 4702
4693 It is essential to remember this, since it has some impact on the C 4703 It is essential to remember this, since it has some impact on the C
4694 code for the initialization procedures: 4704 code for the initialization procedures:
4695 4705
4696 * Initialized global data (data segment) is read-only. Do not attempt 4706 * Initialized global data (data segment) is read-only. Do not attempt
4697 to write it. 4707 to write it.
4698 4708
4699 * Do not use any uninitialized global data (or implicitely initialized 4709 * Do not use any uninitialized global data (or implicitely initialized
4700 as zero data - BSS segment) at all - this is undefined, initiali- 4710 as zero data - BSS segment) at all - this is undefined, initiali-
4701 zation is performed later (when relocating to RAM). 4711 zation is performed later (when relocating to RAM).
4702 4712
4703 * Stack space is very limited. Avoid big data buffers or things like 4713 * Stack space is very limited. Avoid big data buffers or things like
4704 that. 4714 that.
4705 4715
4706 Having only the stack as writable memory limits means we cannot use 4716 Having only the stack as writable memory limits means we cannot use
4707 normal global data to share information beween the code. But it 4717 normal global data to share information beween the code. But it
4708 turned out that the implementation of U-Boot can be greatly 4718 turned out that the implementation of U-Boot can be greatly
4709 simplified by making a global data structure (gd_t) available to all 4719 simplified by making a global data structure (gd_t) available to all
4710 functions. We could pass a pointer to this data as argument to _all_ 4720 functions. We could pass a pointer to this data as argument to _all_
4711 functions, but this would bloat the code. Instead we use a feature of 4721 functions, but this would bloat the code. Instead we use a feature of
4712 the GCC compiler (Global Register Variables) to share the data: we 4722 the GCC compiler (Global Register Variables) to share the data: we
4713 place a pointer (gd) to the global data into a register which we 4723 place a pointer (gd) to the global data into a register which we
4714 reserve for this purpose. 4724 reserve for this purpose.
4715 4725
4716 When choosing a register for such a purpose we are restricted by the 4726 When choosing a register for such a purpose we are restricted by the
4717 relevant (E)ABI specifications for the current architecture, and by 4727 relevant (E)ABI specifications for the current architecture, and by
4718 GCC's implementation. 4728 GCC's implementation.
4719 4729
4720 For PowerPC, the following registers have specific use: 4730 For PowerPC, the following registers have specific use:
4721 R1: stack pointer 4731 R1: stack pointer
4722 R2: reserved for system use 4732 R2: reserved for system use
4723 R3-R4: parameter passing and return values 4733 R3-R4: parameter passing and return values
4724 R5-R10: parameter passing 4734 R5-R10: parameter passing
4725 R13: small data area pointer 4735 R13: small data area pointer
4726 R30: GOT pointer 4736 R30: GOT pointer
4727 R31: frame pointer 4737 R31: frame pointer
4728 4738
4729 (U-Boot also uses R12 as internal GOT pointer. r12 4739 (U-Boot also uses R12 as internal GOT pointer. r12
4730 is a volatile register so r12 needs to be reset when 4740 is a volatile register so r12 needs to be reset when
4731 going back and forth between asm and C) 4741 going back and forth between asm and C)
4732 4742
4733 ==> U-Boot will use R2 to hold a pointer to the global data 4743 ==> U-Boot will use R2 to hold a pointer to the global data
4734 4744
4735 Note: on PPC, we could use a static initializer (since the 4745 Note: on PPC, we could use a static initializer (since the
4736 address of the global data structure is known at compile time), 4746 address of the global data structure is known at compile time),
4737 but it turned out that reserving a register results in somewhat 4747 but it turned out that reserving a register results in somewhat
4738 smaller code - although the code savings are not that big (on 4748 smaller code - although the code savings are not that big (on
4739 average for all boards 752 bytes for the whole U-Boot image, 4749 average for all boards 752 bytes for the whole U-Boot image,
4740 624 text + 127 data). 4750 624 text + 127 data).
4741 4751
4742 On Blackfin, the normal C ABI (except for P3) is followed as documented here: 4752 On Blackfin, the normal C ABI (except for P3) is followed as documented here:
4743 http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface 4753 http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
4744 4754
4745 ==> U-Boot will use P3 to hold a pointer to the global data 4755 ==> U-Boot will use P3 to hold a pointer to the global data
4746 4756
4747 On ARM, the following registers are used: 4757 On ARM, the following registers are used:
4748 4758
4749 R0: function argument word/integer result 4759 R0: function argument word/integer result
4750 R1-R3: function argument word 4760 R1-R3: function argument word
4751 R9: GOT pointer 4761 R9: GOT pointer
4752 R10: stack limit (used only if stack checking if enabled) 4762 R10: stack limit (used only if stack checking if enabled)
4753 R11: argument (frame) pointer 4763 R11: argument (frame) pointer
4754 R12: temporary workspace 4764 R12: temporary workspace
4755 R13: stack pointer 4765 R13: stack pointer
4756 R14: link register 4766 R14: link register
4757 R15: program counter 4767 R15: program counter
4758 4768
4759 ==> U-Boot will use R8 to hold a pointer to the global data 4769 ==> U-Boot will use R8 to hold a pointer to the global data
4760 4770
4761 On Nios II, the ABI is documented here: 4771 On Nios II, the ABI is documented here:
4762 http://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf 4772 http://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf
4763 4773
4764 ==> U-Boot will use gp to hold a pointer to the global data 4774 ==> U-Boot will use gp to hold a pointer to the global data
4765 4775
4766 Note: on Nios II, we give "-G0" option to gcc and don't use gp 4776 Note: on Nios II, we give "-G0" option to gcc and don't use gp
4767 to access small data sections, so gp is free. 4777 to access small data sections, so gp is free.
4768 4778
4769 On NDS32, the following registers are used: 4779 On NDS32, the following registers are used:
4770 4780
4771 R0-R1: argument/return 4781 R0-R1: argument/return
4772 R2-R5: argument 4782 R2-R5: argument
4773 R15: temporary register for assembler 4783 R15: temporary register for assembler
4774 R16: trampoline register 4784 R16: trampoline register
4775 R28: frame pointer (FP) 4785 R28: frame pointer (FP)
4776 R29: global pointer (GP) 4786 R29: global pointer (GP)
4777 R30: link register (LP) 4787 R30: link register (LP)
4778 R31: stack pointer (SP) 4788 R31: stack pointer (SP)
4779 PC: program counter (PC) 4789 PC: program counter (PC)
4780 4790
4781 ==> U-Boot will use R10 to hold a pointer to the global data 4791 ==> U-Boot will use R10 to hold a pointer to the global data
4782 4792
4783 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope, 4793 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope,
4784 or current versions of GCC may "optimize" the code too much. 4794 or current versions of GCC may "optimize" the code too much.
4785 4795
4786 Memory Management: 4796 Memory Management:
4787 ------------------ 4797 ------------------
4788 4798
4789 U-Boot runs in system state and uses physical addresses, i.e. the 4799 U-Boot runs in system state and uses physical addresses, i.e. the
4790 MMU is not used either for address mapping nor for memory protection. 4800 MMU is not used either for address mapping nor for memory protection.
4791 4801
4792 The available memory is mapped to fixed addresses using the memory 4802 The available memory is mapped to fixed addresses using the memory
4793 controller. In this process, a contiguous block is formed for each 4803 controller. In this process, a contiguous block is formed for each
4794 memory type (Flash, SDRAM, SRAM), even when it consists of several 4804 memory type (Flash, SDRAM, SRAM), even when it consists of several
4795 physical memory banks. 4805 physical memory banks.
4796 4806
4797 U-Boot is installed in the first 128 kB of the first Flash bank (on 4807 U-Boot is installed in the first 128 kB of the first Flash bank (on
4798 TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After 4808 TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
4799 booting and sizing and initializing DRAM, the code relocates itself 4809 booting and sizing and initializing DRAM, the code relocates itself
4800 to the upper end of DRAM. Immediately below the U-Boot code some 4810 to the upper end of DRAM. Immediately below the U-Boot code some
4801 memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN 4811 memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN
4802 configuration setting]. Below that, a structure with global Board 4812 configuration setting]. Below that, a structure with global Board
4803 Info data is placed, followed by the stack (growing downward). 4813 Info data is placed, followed by the stack (growing downward).
4804 4814
4805 Additionally, some exception handler code is copied to the low 8 kB 4815 Additionally, some exception handler code is copied to the low 8 kB
4806 of DRAM (0x00000000 ... 0x00001FFF). 4816 of DRAM (0x00000000 ... 0x00001FFF).
4807 4817
4808 So a typical memory configuration with 16 MB of DRAM could look like 4818 So a typical memory configuration with 16 MB of DRAM could look like
4809 this: 4819 this:
4810 4820
4811 0x0000 0000 Exception Vector code 4821 0x0000 0000 Exception Vector code
4812 : 4822 :
4813 0x0000 1FFF 4823 0x0000 1FFF
4814 0x0000 2000 Free for Application Use 4824 0x0000 2000 Free for Application Use
4815 : 4825 :
4816 : 4826 :
4817 4827
4818 : 4828 :
4819 : 4829 :
4820 0x00FB FF20 Monitor Stack (Growing downward) 4830 0x00FB FF20 Monitor Stack (Growing downward)
4821 0x00FB FFAC Board Info Data and permanent copy of global data 4831 0x00FB FFAC Board Info Data and permanent copy of global data
4822 0x00FC 0000 Malloc Arena 4832 0x00FC 0000 Malloc Arena
4823 : 4833 :
4824 0x00FD FFFF 4834 0x00FD FFFF
4825 0x00FE 0000 RAM Copy of Monitor Code 4835 0x00FE 0000 RAM Copy of Monitor Code
4826 ... eventually: LCD or video framebuffer 4836 ... eventually: LCD or video framebuffer
4827 ... eventually: pRAM (Protected RAM - unchanged by reset) 4837 ... eventually: pRAM (Protected RAM - unchanged by reset)
4828 0x00FF FFFF [End of RAM] 4838 0x00FF FFFF [End of RAM]
4829 4839
4830 4840
4831 System Initialization: 4841 System Initialization:
4832 ---------------------- 4842 ----------------------
4833 4843
4834 In the reset configuration, U-Boot starts at the reset entry point 4844 In the reset configuration, U-Boot starts at the reset entry point
4835 (on most PowerPC systems at address 0x00000100). Because of the reset 4845 (on most PowerPC systems at address 0x00000100). Because of the reset
4836 configuration for CS0# this is a mirror of the onboard Flash memory. 4846 configuration for CS0# this is a mirror of the onboard Flash memory.
4837 To be able to re-map memory U-Boot then jumps to its link address. 4847 To be able to re-map memory U-Boot then jumps to its link address.
4838 To be able to implement the initialization code in C, a (small!) 4848 To be able to implement the initialization code in C, a (small!)
4839 initial stack is set up in the internal Dual Ported RAM (in case CPUs 4849 initial stack is set up in the internal Dual Ported RAM (in case CPUs
4840 which provide such a feature like MPC8xx or MPC8260), or in a locked 4850 which provide such a feature like MPC8xx or MPC8260), or in a locked
4841 part of the data cache. After that, U-Boot initializes the CPU core, 4851 part of the data cache. After that, U-Boot initializes the CPU core,
4842 the caches and the SIU. 4852 the caches and the SIU.
4843 4853
4844 Next, all (potentially) available memory banks are mapped using a 4854 Next, all (potentially) available memory banks are mapped using a
4845 preliminary mapping. For example, we put them on 512 MB boundaries 4855 preliminary mapping. For example, we put them on 512 MB boundaries
4846 (multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash 4856 (multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
4847 on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is 4857 on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
4848 programmed for SDRAM access. Using the temporary configuration, a 4858 programmed for SDRAM access. Using the temporary configuration, a
4849 simple memory test is run that determines the size of the SDRAM 4859 simple memory test is run that determines the size of the SDRAM
4850 banks. 4860 banks.
4851 4861
4852 When there is more than one SDRAM bank, and the banks are of 4862 When there is more than one SDRAM bank, and the banks are of
4853 different size, the largest is mapped first. For equal size, the first 4863 different size, the largest is mapped first. For equal size, the first
4854 bank (CS2#) is mapped first. The first mapping is always for address 4864 bank (CS2#) is mapped first. The first mapping is always for address
4855 0x00000000, with any additional banks following immediately to create 4865 0x00000000, with any additional banks following immediately to create
4856 contiguous memory starting from 0. 4866 contiguous memory starting from 0.
4857 4867
4858 Then, the monitor installs itself at the upper end of the SDRAM area 4868 Then, the monitor installs itself at the upper end of the SDRAM area
4859 and allocates memory for use by malloc() and for the global Board 4869 and allocates memory for use by malloc() and for the global Board
4860 Info data; also, the exception vector code is copied to the low RAM 4870 Info data; also, the exception vector code is copied to the low RAM
4861 pages, and the final stack is set up. 4871 pages, and the final stack is set up.
4862 4872
4863 Only after this relocation will you have a "normal" C environment; 4873 Only after this relocation will you have a "normal" C environment;
4864 until that you are restricted in several ways, mostly because you are 4874 until that you are restricted in several ways, mostly because you are
4865 running from ROM, and because the code will have to be relocated to a 4875 running from ROM, and because the code will have to be relocated to a
4866 new address in RAM. 4876 new address in RAM.
4867 4877
4868 4878
4869 U-Boot Porting Guide: 4879 U-Boot Porting Guide:
4870 ---------------------- 4880 ----------------------
4871 4881
4872 [Based on messages by Jerry Van Baren in the U-Boot-Users mailing 4882 [Based on messages by Jerry Van Baren in the U-Boot-Users mailing
4873 list, October 2002] 4883 list, October 2002]
4874 4884
4875 4885
4876 int main(int argc, char *argv[]) 4886 int main(int argc, char *argv[])
4877 { 4887 {
4878 sighandler_t no_more_time; 4888 sighandler_t no_more_time;
4879 4889
4880 signal(SIGALRM, no_more_time); 4890 signal(SIGALRM, no_more_time);
4881 alarm(PROJECT_DEADLINE - toSec (3 * WEEK)); 4891 alarm(PROJECT_DEADLINE - toSec (3 * WEEK));
4882 4892
4883 if (available_money > available_manpower) { 4893 if (available_money > available_manpower) {
4884 Pay consultant to port U-Boot; 4894 Pay consultant to port U-Boot;
4885 return 0; 4895 return 0;
4886 } 4896 }
4887 4897
4888 Download latest U-Boot source; 4898 Download latest U-Boot source;
4889 4899
4890 Subscribe to u-boot mailing list; 4900 Subscribe to u-boot mailing list;
4891 4901
4892 if (clueless) 4902 if (clueless)
4893 email("Hi, I am new to U-Boot, how do I get started?"); 4903 email("Hi, I am new to U-Boot, how do I get started?");
4894 4904
4895 while (learning) { 4905 while (learning) {
4896 Read the README file in the top level directory; 4906 Read the README file in the top level directory;
4897 Read http://www.denx.de/twiki/bin/view/DULG/Manual; 4907 Read http://www.denx.de/twiki/bin/view/DULG/Manual;
4898 Read applicable doc/*.README; 4908 Read applicable doc/*.README;
4899 Read the source, Luke; 4909 Read the source, Luke;
4900 /* find . -name "*.[chS]" | xargs grep -i <keyword> */ 4910 /* find . -name "*.[chS]" | xargs grep -i <keyword> */
4901 } 4911 }
4902 4912
4903 if (available_money > toLocalCurrency ($2500)) 4913 if (available_money > toLocalCurrency ($2500))
4904 Buy a BDI3000; 4914 Buy a BDI3000;
4905 else 4915 else
4906 Add a lot of aggravation and time; 4916 Add a lot of aggravation and time;
4907 4917
4908 if (a similar board exists) { /* hopefully... */ 4918 if (a similar board exists) { /* hopefully... */
4909 cp -a board/<similar> board/<myboard> 4919 cp -a board/<similar> board/<myboard>
4910 cp include/configs/<similar>.h include/configs/<myboard>.h 4920 cp include/configs/<similar>.h include/configs/<myboard>.h
4911 } else { 4921 } else {
4912 Create your own board support subdirectory; 4922 Create your own board support subdirectory;
4913 Create your own board include/configs/<myboard>.h file; 4923 Create your own board include/configs/<myboard>.h file;
4914 } 4924 }
4915 Edit new board/<myboard> files 4925 Edit new board/<myboard> files
4916 Edit new include/configs/<myboard>.h 4926 Edit new include/configs/<myboard>.h
4917 4927
4918 while (!accepted) { 4928 while (!accepted) {
4919 while (!running) { 4929 while (!running) {
4920 do { 4930 do {
4921 Add / modify source code; 4931 Add / modify source code;
4922 } until (compiles); 4932 } until (compiles);
4923 Debug; 4933 Debug;
4924 if (clueless) 4934 if (clueless)
4925 email("Hi, I am having problems..."); 4935 email("Hi, I am having problems...");
4926 } 4936 }
4927 Send patch file to the U-Boot email list; 4937 Send patch file to the U-Boot email list;
4928 if (reasonable critiques) 4938 if (reasonable critiques)
4929 Incorporate improvements from email list code review; 4939 Incorporate improvements from email list code review;
4930 else 4940 else
4931 Defend code as written; 4941 Defend code as written;
4932 } 4942 }
4933 4943
4934 return 0; 4944 return 0;
4935 } 4945 }
4936 4946
4937 void no_more_time (int sig) 4947 void no_more_time (int sig)
4938 { 4948 {
4939 hire_a_guru(); 4949 hire_a_guru();
4940 } 4950 }
4941 4951
4942 4952
4943 Coding Standards: 4953 Coding Standards:
4944 ----------------- 4954 -----------------
4945 4955
4946 All contributions to U-Boot should conform to the Linux kernel 4956 All contributions to U-Boot should conform to the Linux kernel
4947 coding style; see the file "Documentation/CodingStyle" and the script 4957 coding style; see the file "Documentation/CodingStyle" and the script
4948 "scripts/Lindent" in your Linux kernel source directory. 4958 "scripts/Lindent" in your Linux kernel source directory.
4949 4959
4950 Source files originating from a different project (for example the 4960 Source files originating from a different project (for example the
4951 MTD subsystem) are generally exempt from these guidelines and are not 4961 MTD subsystem) are generally exempt from these guidelines and are not
4952 reformated to ease subsequent migration to newer versions of those 4962 reformated to ease subsequent migration to newer versions of those
4953 sources. 4963 sources.
4954 4964
4955 Please note that U-Boot is implemented in C (and to some small parts in 4965 Please note that U-Boot is implemented in C (and to some small parts in
4956 Assembler); no C++ is used, so please do not use C++ style comments (//) 4966 Assembler); no C++ is used, so please do not use C++ style comments (//)
4957 in your code. 4967 in your code.
4958 4968
4959 Please also stick to the following formatting rules: 4969 Please also stick to the following formatting rules:
4960 - remove any trailing white space 4970 - remove any trailing white space
4961 - use TAB characters for indentation and vertical alignment, not spaces 4971 - use TAB characters for indentation and vertical alignment, not spaces
4962 - make sure NOT to use DOS '\r\n' line feeds 4972 - make sure NOT to use DOS '\r\n' line feeds
4963 - do not add more than 2 consecutive empty lines to source files 4973 - do not add more than 2 consecutive empty lines to source files
4964 - do not add trailing empty lines to source files 4974 - do not add trailing empty lines to source files
4965 4975
4966 Submissions which do not conform to the standards may be returned 4976 Submissions which do not conform to the standards may be returned
4967 with a request to reformat the changes. 4977 with a request to reformat the changes.
4968 4978
4969 4979
4970 Submitting Patches: 4980 Submitting Patches:
4971 ------------------- 4981 -------------------
4972 4982
4973 Since the number of patches for U-Boot is growing, we need to 4983 Since the number of patches for U-Boot is growing, we need to
4974 establish some rules. Submissions which do not conform to these rules 4984 establish some rules. Submissions which do not conform to these rules
4975 may be rejected, even when they contain important and valuable stuff. 4985 may be rejected, even when they contain important and valuable stuff.
4976 4986
4977 Please see http://www.denx.de/wiki/U-Boot/Patches for details. 4987 Please see http://www.denx.de/wiki/U-Boot/Patches for details.
4978 4988
4979 Patches shall be sent to the u-boot mailing list <u-boot@lists.denx.de>; 4989 Patches shall be sent to the u-boot mailing list <u-boot@lists.denx.de>;
4980 see http://lists.denx.de/mailman/listinfo/u-boot 4990 see http://lists.denx.de/mailman/listinfo/u-boot
4981 4991
4982 When you send a patch, please include the following information with 4992 When you send a patch, please include the following information with
4983 it: 4993 it:
4984 4994
4985 * For bug fixes: a description of the bug and how your patch fixes 4995 * For bug fixes: a description of the bug and how your patch fixes
4986 this bug. Please try to include a way of demonstrating that the 4996 this bug. Please try to include a way of demonstrating that the
4987 patch actually fixes something. 4997 patch actually fixes something.
4988 4998
4989 * For new features: a description of the feature and your 4999 * For new features: a description of the feature and your
4990 implementation. 5000 implementation.
4991 5001
4992 * A CHANGELOG entry as plaintext (separate from the patch) 5002 * A CHANGELOG entry as plaintext (separate from the patch)
4993 5003
4994 * For major contributions, your entry to the CREDITS file 5004 * For major contributions, your entry to the CREDITS file
4995 5005
4996 * When you add support for a new board, don't forget to add this 5006 * When you add support for a new board, don't forget to add this
4997 board to the MAINTAINERS file, too. 5007 board to the MAINTAINERS file, too.
4998 5008
4999 * If your patch adds new configuration options, don't forget to 5009 * If your patch adds new configuration options, don't forget to
5000 document these in the README file. 5010 document these in the README file.
5001 5011
5002 * The patch itself. If you are using git (which is *strongly* 5012 * The patch itself. If you are using git (which is *strongly*
5003 recommended) you can easily generate the patch using the 5013 recommended) you can easily generate the patch using the
5004 "git format-patch". If you then use "git send-email" to send it to 5014 "git format-patch". If you then use "git send-email" to send it to
5005 the U-Boot mailing list, you will avoid most of the common problems 5015 the U-Boot mailing list, you will avoid most of the common problems
5006 with some other mail clients. 5016 with some other mail clients.
5007 5017
5008 If you cannot use git, use "diff -purN OLD NEW". If your version of 5018 If you cannot use git, use "diff -purN OLD NEW". If your version of
5009 diff does not support these options, then get the latest version of 5019 diff does not support these options, then get the latest version of
5010 GNU diff. 5020 GNU diff.
5011 5021
5012 The current directory when running this command shall be the parent 5022 The current directory when running this command shall be the parent
5013 directory of the U-Boot source tree (i. e. please make sure that 5023 directory of the U-Boot source tree (i. e. please make sure that
5014 your patch includes sufficient directory information for the 5024 your patch includes sufficient directory information for the
5015 affected files). 5025 affected files).
5016 5026
5017 We prefer patches as plain text. MIME attachments are discouraged, 5027 We prefer patches as plain text. MIME attachments are discouraged,
5018 and compressed attachments must not be used. 5028 and compressed attachments must not be used.
5019 5029
5020 * If one logical set of modifications affects or creates several 5030 * If one logical set of modifications affects or creates several
5021 files, all these changes shall be submitted in a SINGLE patch file. 5031 files, all these changes shall be submitted in a SINGLE patch file.
5022 5032
5023 * Changesets that contain different, unrelated modifications shall be 5033 * Changesets that contain different, unrelated modifications shall be
5024 submitted as SEPARATE patches, one patch per changeset. 5034 submitted as SEPARATE patches, one patch per changeset.
5025 5035
5026 5036
5027 Notes: 5037 Notes:
5028 5038
5029 * Before sending the patch, run the MAKEALL script on your patched 5039 * Before sending the patch, run the MAKEALL script on your patched
5030 source tree and make sure that no errors or warnings are reported 5040 source tree and make sure that no errors or warnings are reported
5031 for any of the boards. 5041 for any of the boards.
5032 5042
5033 * Keep your modifications to the necessary minimum: A patch 5043 * Keep your modifications to the necessary minimum: A patch
5034 containing several unrelated changes or arbitrary reformats will be 5044 containing several unrelated changes or arbitrary reformats will be
5035 returned with a request to re-formatting / split it. 5045 returned with a request to re-formatting / split it.
5036 5046
5037 * If you modify existing code, make sure that your new code does not 5047 * If you modify existing code, make sure that your new code does not
5038 add to the memory footprint of the code ;-) Small is beautiful! 5048 add to the memory footprint of the code ;-) Small is beautiful!
5039 When adding new features, these should compile conditionally only 5049 When adding new features, these should compile conditionally only
5040 (using #ifdef), and the resulting code with the new feature 5050 (using #ifdef), and the resulting code with the new feature
5041 disabled must not need more memory than the old code without your 5051 disabled must not need more memory than the old code without your
5042 modification. 5052 modification.
5043 5053
5044 * Remember that there is a size limit of 100 kB per message on the 5054 * Remember that there is a size limit of 100 kB per message on the
5045 u-boot mailing list. Bigger patches will be moderated. If they are 5055 u-boot mailing list. Bigger patches will be moderated. If they are
5046 reasonable and not too big, they will be acknowledged. But patches 5056 reasonable and not too big, they will be acknowledged. But patches
5047 bigger than the size limit should be avoided. 5057 bigger than the size limit should be avoided.
5048 5058
1 /* 1 /*
2 * (C) Copyright 2000 2 * (C) Copyright 2000
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 * 4 *
5 * See file CREDITS for list of people who contributed to this 5 * See file CREDITS for list of people who contributed to this
6 * project. 6 * project.
7 * 7 *
8 * This program is free software; you can redistribute it and/or 8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as 9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of 10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version. 11 * the License, or (at your option) any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details. 16 * GNU General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software 19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA 21 * MA 02111-1307 USA
22 */ 22 */
23 23
24 /* 24 /*
25 * Boot support 25 * Boot support
26 */ 26 */
27 #include <common.h> 27 #include <common.h>
28 #include <command.h> 28 #include <command.h>
29 #include <net.h> 29 #include <net.h>
30 30
31 static int netboot_common(enum proto_t, cmd_tbl_t *, int, char * const []); 31 static int netboot_common(enum proto_t, cmd_tbl_t *, int, char * const []);
32 32
33 int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 33 int do_bootp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
34 { 34 {
35 return netboot_common (BOOTP, cmdtp, argc, argv); 35 return netboot_common (BOOTP, cmdtp, argc, argv);
36 } 36 }
37 37
38 U_BOOT_CMD( 38 U_BOOT_CMD(
39 bootp, 3, 1, do_bootp, 39 bootp, 3, 1, do_bootp,
40 "boot image via network using BOOTP/TFTP protocol", 40 "boot image via network using BOOTP/TFTP protocol",
41 "[loadAddress] [[hostIPaddr:]bootfilename]" 41 "[loadAddress] [[hostIPaddr:]bootfilename]"
42 ); 42 );
43 43
44 int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 44 int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
45 { 45 {
46 int ret; 46 int ret;
47 47
48 bootstage_mark_name(BOOTSTAGE_KERNELREAD_START, "tftp_start"); 48 bootstage_mark_name(BOOTSTAGE_KERNELREAD_START, "tftp_start");
49 ret = netboot_common(TFTPGET, cmdtp, argc, argv); 49 ret = netboot_common(TFTPGET, cmdtp, argc, argv);
50 bootstage_mark_name(BOOTSTAGE_KERNELREAD_STOP, "tftp_done"); 50 bootstage_mark_name(BOOTSTAGE_KERNELREAD_STOP, "tftp_done");
51 return ret; 51 return ret;
52 } 52 }
53 53
54 U_BOOT_CMD( 54 U_BOOT_CMD(
55 tftpboot, 3, 1, do_tftpb, 55 tftpboot, 3, 1, do_tftpb,
56 "boot image via network using TFTP protocol", 56 "boot image via network using TFTP protocol",
57 "[loadAddress] [[hostIPaddr:]bootfilename]" 57 "[loadAddress] [[hostIPaddr:]bootfilename]"
58 ); 58 );
59 59
60 #ifdef CONFIG_CMD_TFTPPUT 60 #ifdef CONFIG_CMD_TFTPPUT
61 int do_tftpput(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 61 int do_tftpput(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
62 { 62 {
63 int ret; 63 int ret;
64 64
65 ret = netboot_common(TFTPPUT, cmdtp, argc, argv); 65 ret = netboot_common(TFTPPUT, cmdtp, argc, argv);
66 return ret; 66 return ret;
67 } 67 }
68 68
69 U_BOOT_CMD( 69 U_BOOT_CMD(
70 tftpput, 4, 1, do_tftpput, 70 tftpput, 4, 1, do_tftpput,
71 "TFTP put command, for uploading files to a server", 71 "TFTP put command, for uploading files to a server",
72 "Address Size [[hostIPaddr:]filename]" 72 "Address Size [[hostIPaddr:]filename]"
73 ); 73 );
74 #endif 74 #endif
75 75
76 #ifdef CONFIG_CMD_TFTPSRV 76 #ifdef CONFIG_CMD_TFTPSRV
77 static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) 77 static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
78 { 78 {
79 return netboot_common(TFTPSRV, cmdtp, argc, argv); 79 return netboot_common(TFTPSRV, cmdtp, argc, argv);
80 } 80 }
81 81
82 U_BOOT_CMD( 82 U_BOOT_CMD(
83 tftpsrv, 2, 1, do_tftpsrv, 83 tftpsrv, 2, 1, do_tftpsrv,
84 "act as a TFTP server and boot the first received file", 84 "act as a TFTP server and boot the first received file",
85 "[loadAddress]\n" 85 "[loadAddress]\n"
86 "Listen for an incoming TFTP transfer, receive a file and boot it.\n" 86 "Listen for an incoming TFTP transfer, receive a file and boot it.\n"
87 "The transfer is aborted if a transfer has not been started after\n" 87 "The transfer is aborted if a transfer has not been started after\n"
88 "about 50 seconds or if Ctrl-C is pressed." 88 "about 50 seconds or if Ctrl-C is pressed."
89 ); 89 );
90 #endif 90 #endif
91 91
92 92
93 #ifdef CONFIG_CMD_RARP 93 #ifdef CONFIG_CMD_RARP
94 int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 94 int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
95 { 95 {
96 return netboot_common (RARP, cmdtp, argc, argv); 96 return netboot_common (RARP, cmdtp, argc, argv);
97 } 97 }
98 98
99 U_BOOT_CMD( 99 U_BOOT_CMD(
100 rarpboot, 3, 1, do_rarpb, 100 rarpboot, 3, 1, do_rarpb,
101 "boot image via network using RARP/TFTP protocol", 101 "boot image via network using RARP/TFTP protocol",
102 "[loadAddress] [[hostIPaddr:]bootfilename]" 102 "[loadAddress] [[hostIPaddr:]bootfilename]"
103 ); 103 );
104 #endif 104 #endif
105 105
106 #if defined(CONFIG_CMD_DHCP) 106 #if defined(CONFIG_CMD_DHCP)
107 int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 107 int do_dhcp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
108 { 108 {
109 return netboot_common(DHCP, cmdtp, argc, argv); 109 return netboot_common(DHCP, cmdtp, argc, argv);
110 } 110 }
111 111
112 U_BOOT_CMD( 112 U_BOOT_CMD(
113 dhcp, 3, 1, do_dhcp, 113 dhcp, 3, 1, do_dhcp,
114 "boot image via network using DHCP/TFTP protocol", 114 "boot image via network using DHCP/TFTP protocol",
115 "[loadAddress] [[hostIPaddr:]bootfilename]" 115 "[loadAddress] [[hostIPaddr:]bootfilename]"
116 ); 116 );
117 #endif 117 #endif
118 118
119 #if defined(CONFIG_CMD_NFS) 119 #if defined(CONFIG_CMD_NFS)
120 int do_nfs (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 120 int do_nfs (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
121 { 121 {
122 return netboot_common(NFS, cmdtp, argc, argv); 122 return netboot_common(NFS, cmdtp, argc, argv);
123 } 123 }
124 124
125 U_BOOT_CMD( 125 U_BOOT_CMD(
126 nfs, 3, 1, do_nfs, 126 nfs, 3, 1, do_nfs,
127 "boot image via network using NFS protocol", 127 "boot image via network using NFS protocol",
128 "[loadAddress] [[hostIPaddr:]bootfilename]" 128 "[loadAddress] [[hostIPaddr:]bootfilename]"
129 ); 129 );
130 #endif 130 #endif
131 131
132 static void netboot_update_env (void) 132 static void netboot_update_env (void)
133 { 133 {
134 char tmp[22]; 134 char tmp[22];
135 135
136 if (NetOurGatewayIP) { 136 if (NetOurGatewayIP) {
137 ip_to_string (NetOurGatewayIP, tmp); 137 ip_to_string (NetOurGatewayIP, tmp);
138 setenv ("gatewayip", tmp); 138 setenv ("gatewayip", tmp);
139 } 139 }
140 140
141 if (NetOurSubnetMask) { 141 if (NetOurSubnetMask) {
142 ip_to_string (NetOurSubnetMask, tmp); 142 ip_to_string (NetOurSubnetMask, tmp);
143 setenv ("netmask", tmp); 143 setenv ("netmask", tmp);
144 } 144 }
145 145
146 if (NetOurHostName[0]) 146 if (NetOurHostName[0])
147 setenv ("hostname", NetOurHostName); 147 setenv ("hostname", NetOurHostName);
148 148
149 if (NetOurRootPath[0]) 149 if (NetOurRootPath[0])
150 setenv ("rootpath", NetOurRootPath); 150 setenv ("rootpath", NetOurRootPath);
151 151
152 if (NetOurIP) { 152 if (NetOurIP) {
153 ip_to_string (NetOurIP, tmp); 153 ip_to_string (NetOurIP, tmp);
154 setenv ("ipaddr", tmp); 154 setenv ("ipaddr", tmp);
155 } 155 }
156 #if !defined(CONFIG_BOOTP_SERVERIP) 156 #if !defined(CONFIG_BOOTP_SERVERIP)
157 /* 157 /*
158 * Only attempt to change serverip if net/bootp.c:BootpCopyNetParams() 158 * Only attempt to change serverip if net/bootp.c:BootpCopyNetParams()
159 * could have set it 159 * could have set it
160 */ 160 */
161 if (NetServerIP) { 161 if (NetServerIP) {
162 ip_to_string (NetServerIP, tmp); 162 ip_to_string (NetServerIP, tmp);
163 setenv ("serverip", tmp); 163 setenv ("serverip", tmp);
164 } 164 }
165 #endif 165 #endif
166 if (NetOurDNSIP) { 166 if (NetOurDNSIP) {
167 ip_to_string (NetOurDNSIP, tmp); 167 ip_to_string (NetOurDNSIP, tmp);
168 setenv ("dnsip", tmp); 168 setenv ("dnsip", tmp);
169 } 169 }
170 #if defined(CONFIG_BOOTP_DNS2) 170 #if defined(CONFIG_BOOTP_DNS2)
171 if (NetOurDNS2IP) { 171 if (NetOurDNS2IP) {
172 ip_to_string (NetOurDNS2IP, tmp); 172 ip_to_string (NetOurDNS2IP, tmp);
173 setenv ("dnsip2", tmp); 173 setenv ("dnsip2", tmp);
174 } 174 }
175 #endif 175 #endif
176 if (NetOurNISDomain[0]) 176 if (NetOurNISDomain[0])
177 setenv ("domain", NetOurNISDomain); 177 setenv ("domain", NetOurNISDomain);
178 178
179 #if defined(CONFIG_CMD_SNTP) \ 179 #if defined(CONFIG_CMD_SNTP) \
180 && defined(CONFIG_BOOTP_TIMEOFFSET) 180 && defined(CONFIG_BOOTP_TIMEOFFSET)
181 if (NetTimeOffset) { 181 if (NetTimeOffset) {
182 sprintf (tmp, "%d", NetTimeOffset); 182 sprintf (tmp, "%d", NetTimeOffset);
183 setenv ("timeoffset", tmp); 183 setenv ("timeoffset", tmp);
184 } 184 }
185 #endif 185 #endif
186 #if defined(CONFIG_CMD_SNTP) \ 186 #if defined(CONFIG_CMD_SNTP) \
187 && defined(CONFIG_BOOTP_NTPSERVER) 187 && defined(CONFIG_BOOTP_NTPSERVER)
188 if (NetNtpServerIP) { 188 if (NetNtpServerIP) {
189 ip_to_string (NetNtpServerIP, tmp); 189 ip_to_string (NetNtpServerIP, tmp);
190 setenv ("ntpserverip", tmp); 190 setenv ("ntpserverip", tmp);
191 } 191 }
192 #endif 192 #endif
193 } 193 }
194 194
195 static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc, 195 static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
196 char * const argv[]) 196 char * const argv[])
197 { 197 {
198 char *s; 198 char *s;
199 char *end; 199 char *end;
200 int rcode = 0; 200 int rcode = 0;
201 int size; 201 int size;
202 ulong addr; 202 ulong addr;
203 203
204 /* pre-set load_addr */ 204 /* pre-set load_addr */
205 if ((s = getenv("loadaddr")) != NULL) { 205 if ((s = getenv("loadaddr")) != NULL) {
206 load_addr = simple_strtoul(s, NULL, 16); 206 load_addr = simple_strtoul(s, NULL, 16);
207 } 207 }
208 208
209 switch (argc) { 209 switch (argc) {
210 case 1: 210 case 1:
211 break; 211 break;
212 212
213 case 2: /* 213 case 2: /*
214 * Only one arg - accept two forms: 214 * Only one arg - accept two forms:
215 * Just load address, or just boot file name. The latter 215 * Just load address, or just boot file name. The latter
216 * form must be written in a format which can not be 216 * form must be written in a format which can not be
217 * mis-interpreted as a valid number. 217 * mis-interpreted as a valid number.
218 */ 218 */
219 addr = simple_strtoul(argv[1], &end, 16); 219 addr = simple_strtoul(argv[1], &end, 16);
220 if (end == (argv[1] + strlen(argv[1]))) 220 if (end == (argv[1] + strlen(argv[1])))
221 load_addr = addr; 221 load_addr = addr;
222 else 222 else
223 copy_filename(BootFile, argv[1], sizeof(BootFile)); 223 copy_filename(BootFile, argv[1], sizeof(BootFile));
224 break; 224 break;
225 225
226 case 3: load_addr = simple_strtoul(argv[1], NULL, 16); 226 case 3: load_addr = simple_strtoul(argv[1], NULL, 16);
227 copy_filename (BootFile, argv[2], sizeof(BootFile)); 227 copy_filename (BootFile, argv[2], sizeof(BootFile));
228 228
229 break; 229 break;
230 230
231 #ifdef CONFIG_CMD_TFTPPUT 231 #ifdef CONFIG_CMD_TFTPPUT
232 case 4: 232 case 4:
233 if (strict_strtoul(argv[1], 16, &save_addr) < 0 || 233 if (strict_strtoul(argv[1], 16, &save_addr) < 0 ||
234 strict_strtoul(argv[2], 16, &save_size) < 0) { 234 strict_strtoul(argv[2], 16, &save_size) < 0) {
235 printf("Invalid address/size\n"); 235 printf("Invalid address/size\n");
236 return cmd_usage(cmdtp); 236 return cmd_usage(cmdtp);
237 } 237 }
238 copy_filename(BootFile, argv[3], sizeof(BootFile)); 238 copy_filename(BootFile, argv[3], sizeof(BootFile));
239 break; 239 break;
240 #endif 240 #endif
241 default: 241 default:
242 bootstage_error(BOOTSTAGE_ID_NET_START); 242 bootstage_error(BOOTSTAGE_ID_NET_START);
243 return CMD_RET_USAGE; 243 return CMD_RET_USAGE;
244 } 244 }
245 bootstage_mark(BOOTSTAGE_ID_NET_START); 245 bootstage_mark(BOOTSTAGE_ID_NET_START);
246 246
247 if ((size = NetLoop(proto)) < 0) { 247 if ((size = NetLoop(proto)) < 0) {
248 bootstage_error(BOOTSTAGE_ID_NET_NETLOOP_OK); 248 bootstage_error(BOOTSTAGE_ID_NET_NETLOOP_OK);
249 return 1; 249 return 1;
250 } 250 }
251 bootstage_mark(BOOTSTAGE_ID_NET_NETLOOP_OK); 251 bootstage_mark(BOOTSTAGE_ID_NET_NETLOOP_OK);
252 252
253 /* NetLoop ok, update environment */ 253 /* NetLoop ok, update environment */
254 netboot_update_env(); 254 netboot_update_env();
255 255
256 /* done if no file was loaded (no errors though) */ 256 /* done if no file was loaded (no errors though) */
257 if (size == 0) { 257 if (size == 0) {
258 bootstage_error(BOOTSTAGE_ID_NET_LOADED); 258 bootstage_error(BOOTSTAGE_ID_NET_LOADED);
259 return 0; 259 return 0;
260 } 260 }
261 261
262 /* flush cache */ 262 /* flush cache */
263 flush_cache(load_addr, size); 263 flush_cache(load_addr, size);
264 264
265 bootstage_mark(BOOTSTAGE_ID_NET_LOADED); 265 bootstage_mark(BOOTSTAGE_ID_NET_LOADED);
266 266
267 rcode = bootm_maybe_autostart(cmdtp, argv[0]); 267 rcode = bootm_maybe_autostart(cmdtp, argv[0]);
268 268
269 if (rcode < 0) 269 if (rcode < 0)
270 bootstage_error(BOOTSTAGE_ID_NET_DONE_ERR); 270 bootstage_error(BOOTSTAGE_ID_NET_DONE_ERR);
271 else 271 else
272 bootstage_mark(BOOTSTAGE_ID_NET_DONE); 272 bootstage_mark(BOOTSTAGE_ID_NET_DONE);
273 return rcode; 273 return rcode;
274 } 274 }
275 275
276 #if defined(CONFIG_CMD_PING) 276 #if defined(CONFIG_CMD_PING)
277 int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 277 int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
278 { 278 {
279 if (argc < 2) 279 if (argc < 2)
280 return -1; 280 return -1;
281 281
282 NetPingIP = string_to_ip(argv[1]); 282 NetPingIP = string_to_ip(argv[1]);
283 if (NetPingIP == 0) 283 if (NetPingIP == 0)
284 return CMD_RET_USAGE; 284 return CMD_RET_USAGE;
285 285
286 if (NetLoop(PING) < 0) { 286 if (NetLoop(PING) < 0) {
287 printf("ping failed; host %s is not alive\n", argv[1]); 287 printf("ping failed; host %s is not alive\n", argv[1]);
288 return 1; 288 return 1;
289 } 289 }
290 290
291 printf("host %s is alive\n", argv[1]); 291 printf("host %s is alive\n", argv[1]);
292 292
293 return 0; 293 return 0;
294 } 294 }
295 295
296 U_BOOT_CMD( 296 U_BOOT_CMD(
297 ping, 2, 1, do_ping, 297 ping, 2, 1, do_ping,
298 "send ICMP ECHO_REQUEST to network host", 298 "send ICMP ECHO_REQUEST to network host",
299 "pingAddress" 299 "pingAddress"
300 ); 300 );
301 #endif 301 #endif
302 302
303 #if defined(CONFIG_CMD_CDP) 303 #if defined(CONFIG_CMD_CDP)
304 304
305 static void cdp_update_env(void) 305 static void cdp_update_env(void)
306 { 306 {
307 char tmp[16]; 307 char tmp[16];
308 308
309 if (CDPApplianceVLAN != htons(-1)) { 309 if (CDPApplianceVLAN != htons(-1)) {
310 printf("CDP offered appliance VLAN %d\n", ntohs(CDPApplianceVLAN)); 310 printf("CDP offered appliance VLAN %d\n", ntohs(CDPApplianceVLAN));
311 VLAN_to_string(CDPApplianceVLAN, tmp); 311 VLAN_to_string(CDPApplianceVLAN, tmp);
312 setenv("vlan", tmp); 312 setenv("vlan", tmp);
313 NetOurVLAN = CDPApplianceVLAN; 313 NetOurVLAN = CDPApplianceVLAN;
314 } 314 }
315 315
316 if (CDPNativeVLAN != htons(-1)) { 316 if (CDPNativeVLAN != htons(-1)) {
317 printf("CDP offered native VLAN %d\n", ntohs(CDPNativeVLAN)); 317 printf("CDP offered native VLAN %d\n", ntohs(CDPNativeVLAN));
318 VLAN_to_string(CDPNativeVLAN, tmp); 318 VLAN_to_string(CDPNativeVLAN, tmp);
319 setenv("nvlan", tmp); 319 setenv("nvlan", tmp);
320 NetOurNativeVLAN = CDPNativeVLAN; 320 NetOurNativeVLAN = CDPNativeVLAN;
321 } 321 }
322 322
323 } 323 }
324 324
325 int do_cdp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 325 int do_cdp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
326 { 326 {
327 int r; 327 int r;
328 328
329 r = NetLoop(CDP); 329 r = NetLoop(CDP);
330 if (r < 0) { 330 if (r < 0) {
331 printf("cdp failed; perhaps not a CISCO switch?\n"); 331 printf("cdp failed; perhaps not a CISCO switch?\n");
332 return 1; 332 return 1;
333 } 333 }
334 334
335 cdp_update_env(); 335 cdp_update_env();
336 336
337 return 0; 337 return 0;
338 } 338 }
339 339
340 U_BOOT_CMD( 340 U_BOOT_CMD(
341 cdp, 1, 1, do_cdp, 341 cdp, 1, 1, do_cdp,
342 "Perform CDP network configuration", 342 "Perform CDP network configuration",
343 "\n" 343 "\n"
344 ); 344 );
345 #endif 345 #endif
346 346
347 #if defined(CONFIG_CMD_SNTP) 347 #if defined(CONFIG_CMD_SNTP)
348 int do_sntp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 348 int do_sntp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
349 { 349 {
350 char *toff; 350 char *toff;
351 351
352 if (argc < 2) { 352 if (argc < 2) {
353 NetNtpServerIP = getenv_IPaddr ("ntpserverip"); 353 NetNtpServerIP = getenv_IPaddr ("ntpserverip");
354 if (NetNtpServerIP == 0) { 354 if (NetNtpServerIP == 0) {
355 printf ("ntpserverip not set\n"); 355 printf ("ntpserverip not set\n");
356 return (1); 356 return (1);
357 } 357 }
358 } else { 358 } else {
359 NetNtpServerIP = string_to_ip(argv[1]); 359 NetNtpServerIP = string_to_ip(argv[1]);
360 if (NetNtpServerIP == 0) { 360 if (NetNtpServerIP == 0) {
361 printf ("Bad NTP server IP address\n"); 361 printf ("Bad NTP server IP address\n");
362 return (1); 362 return (1);
363 } 363 }
364 } 364 }
365 365
366 toff = getenv ("timeoffset"); 366 toff = getenv ("timeoffset");
367 if (toff == NULL) NetTimeOffset = 0; 367 if (toff == NULL) NetTimeOffset = 0;
368 else NetTimeOffset = simple_strtol (toff, NULL, 10); 368 else NetTimeOffset = simple_strtol (toff, NULL, 10);
369 369
370 if (NetLoop(SNTP) < 0) { 370 if (NetLoop(SNTP) < 0) {
371 printf("SNTP failed: host %pI4 not responding\n", 371 printf("SNTP failed: host %pI4 not responding\n",
372 &NetNtpServerIP); 372 &NetNtpServerIP);
373 return 1; 373 return 1;
374 } 374 }
375 375
376 return 0; 376 return 0;
377 } 377 }
378 378
379 U_BOOT_CMD( 379 U_BOOT_CMD(
380 sntp, 2, 1, do_sntp, 380 sntp, 2, 1, do_sntp,
381 "synchronize RTC via network", 381 "synchronize RTC via network",
382 "[NTP server IP]\n" 382 "[NTP server IP]\n"
383 ); 383 );
384 #endif 384 #endif
385 385
386 #if defined(CONFIG_CMD_DNS) 386 #if defined(CONFIG_CMD_DNS)
387 int do_dns(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 387 int do_dns(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
388 { 388 {
389 if (argc == 1) 389 if (argc == 1)
390 return CMD_RET_USAGE; 390 return CMD_RET_USAGE;
391 391
392 /* 392 /*
393 * We should check for a valid hostname: 393 * We should check for a valid hostname:
394 * - Each label must be between 1 and 63 characters long 394 * - Each label must be between 1 and 63 characters long
395 * - the entire hostname has a maximum of 255 characters 395 * - the entire hostname has a maximum of 255 characters
396 * - only the ASCII letters 'a' through 'z' (case-insensitive), 396 * - only the ASCII letters 'a' through 'z' (case-insensitive),
397 * the digits '0' through '9', and the hyphen 397 * the digits '0' through '9', and the hyphen
398 * - cannot begin or end with a hyphen 398 * - cannot begin or end with a hyphen
399 * - no other symbols, punctuation characters, or blank spaces are 399 * - no other symbols, punctuation characters, or blank spaces are
400 * permitted 400 * permitted
401 * but hey - this is a minimalist implmentation, so only check length 401 * but hey - this is a minimalist implmentation, so only check length
402 * and let the name server deal with things. 402 * and let the name server deal with things.
403 */ 403 */
404 if (strlen(argv[1]) >= 255) { 404 if (strlen(argv[1]) >= 255) {
405 printf("dns error: hostname too long\n"); 405 printf("dns error: hostname too long\n");
406 return 1; 406 return 1;
407 } 407 }
408 408
409 NetDNSResolve = argv[1]; 409 NetDNSResolve = argv[1];
410 410
411 if (argc == 3) 411 if (argc == 3)
412 NetDNSenvvar = argv[2]; 412 NetDNSenvvar = argv[2];
413 else 413 else
414 NetDNSenvvar = NULL; 414 NetDNSenvvar = NULL;
415 415
416 if (NetLoop(DNS) < 0) { 416 if (NetLoop(DNS) < 0) {
417 printf("dns lookup of %s failed, check setup\n", argv[1]); 417 printf("dns lookup of %s failed, check setup\n", argv[1]);
418 return 1; 418 return 1;
419 } 419 }
420 420
421 return 0; 421 return 0;
422 } 422 }
423 423
424 U_BOOT_CMD( 424 U_BOOT_CMD(
425 dns, 3, 1, do_dns, 425 dns, 3, 1, do_dns,
426 "lookup the IP of a hostname", 426 "lookup the IP of a hostname",
427 "hostname [envvar]" 427 "hostname [envvar]"
428 ); 428 );
429 429
430 #endif /* CONFIG_CMD_DNS */ 430 #endif /* CONFIG_CMD_DNS */
431
432 #if defined(CONFIG_CMD_LINK_LOCAL)
433 static int do_link_local(cmd_tbl_t *cmdtp, int flag, int argc,
434 char * const argv[])
435 {
436 char tmp[22];
437
438 if (NetLoop(LINKLOCAL) < 0)
439 return 1;
440
441 NetOurGatewayIP = 0;
442 ip_to_string(NetOurGatewayIP, tmp);
443 setenv("gatewayip", tmp);
444
445 ip_to_string(NetOurSubnetMask, tmp);
446 setenv("netmask", tmp);
447
448 ip_to_string(NetOurIP, tmp);
449 setenv("ipaddr", tmp);
450 setenv("llipaddr", tmp); /* store this for next time */
451
452 return 0;
453 }
454
455 U_BOOT_CMD(
456 linklocal, 1, 1, do_link_local,
457 "acquire a network IP address using the link-local protocol",
458 ""
459 );
460
461 #endif /* CONFIG_CMD_LINK_LOCAL */
431 462
doc/README.link-local
File was created 1 ------------------------------------------
2 Link-local IP address auto-configuration
3 ------------------------------------------
4
5 Negotiate with other link-local clients on the local network
6 for an address that doesn't require explicit configuration.
7 This is especially useful if a DHCP server cannot be guaranteed
8 to exist in all environments that the device must operate.
9
10 This is an implementation of RFC3927.
11
12 ----------
13 Commands
14 ----------
15
16 When CONFIG_CMD_LINK_LOCAL is defined in the board config file,
17 the "linklocal" command is available. This running this will
18 take approximately 5 seconds while the address is negotiated.
19
20 ------------------------
21 Environment interation
22 ------------------------
23
24 The "llipaddr" variable is set with the most recently
25 negotiated address and is preferred in future negotiations.
26
27 The "ipaddr", "netmask", and "gatewayip" variables are set
28 after successful negotiation to enable network access.
29
30 -------------
31 Limitations
32 -------------
33
34 RFC3927 requires that addresses are continuously checked to
35 avoid conflicts, however this can only happen when the NetLoop
36 is getting called. It is possible for a conflict to go undetected
37 until a command that accesses the network is executed.
38
39 Using NetConsole is one way to ensure that NetLoop is always
40 processing packets and monitoring for conflicts.
41
42 This is also not a concern if the feature is use to connect
43 directly to another machine that may not be running a DHCP server.
44
45 ----------------
46 Example script
47 ----------------
48
49 This script allows use of DHCP and/or Link-local controlled
50 by env variables. It depends on CONFIG_CMD_LINK_LOCAL, CONFIG_CMD_DHCP,
51 and CONFIG_BOOTP_MAY_FAIL.
52 If both fail or are disabled, static settings are used.
53
54 #define CONFIG_EXTRA_ENV_SETTINGS \
55 "ipconfigcmd=if test \\\"$dhcpenabled\\\" -ne 0;" \
56 "then " \
57 "dhcpfail=0;dhcp || dhcpfail=1;" \
58 "else " \
59 "dhcpfail=-1;" \
60 "fi;" \
61 "if test \\\"$linklocalenabled\\\" -ne 0 -a " \
62 "\\\"$dhcpfail\\\" -ne 0;" \
63 "then " \
64 "linklocal;" \
65 "llfail=0;" \
66 "else " \
67 "llfail=-1;" \
68 "fi;" \
69 "if test \\\"$llfail\\\" -ne 0 -a " \
70 "\\\"$dhcpfail\\\" -ne 0; " \
71 "then " \
72 "setenv ipaddr $sipaddr; " \
73 "setenv netmask $snetmask; " \
74 "setenv gatewayip $sgatewayip; " \
75 "fi;\0" \
76
77
1 /* 1 /*
2 * LiMon Monitor (LiMon) - Network. 2 * LiMon Monitor (LiMon) - Network.
3 * 3 *
4 * Copyright 1994 - 2000 Neil Russell. 4 * Copyright 1994 - 2000 Neil Russell.
5 * (See License) 5 * (See License)
6 * 6 *
7 * 7 *
8 * History 8 * History
9 * 9/16/00 bor adapted to TQM823L/STK8xxL board, RARP/TFTP boot added 9 * 9/16/00 bor adapted to TQM823L/STK8xxL board, RARP/TFTP boot added
10 */ 10 */
11 11
12 #ifndef __NET_H__ 12 #ifndef __NET_H__
13 #define __NET_H__ 13 #define __NET_H__
14 14
15 #if defined(CONFIG_8xx) 15 #if defined(CONFIG_8xx)
16 #include <commproc.h> 16 #include <commproc.h>
17 #endif /* CONFIG_8xx */ 17 #endif /* CONFIG_8xx */
18 18
19 #include <asm/cache.h> 19 #include <asm/cache.h>
20 #include <asm/byteorder.h> /* for nton* / ntoh* stuff */ 20 #include <asm/byteorder.h> /* for nton* / ntoh* stuff */
21 21
22 22
23 /* 23 /*
24 * The number of receive packet buffers, and the required packet buffer 24 * The number of receive packet buffers, and the required packet buffer
25 * alignment in memory. 25 * alignment in memory.
26 * 26 *
27 */ 27 */
28 28
29 #ifdef CONFIG_SYS_RX_ETH_BUFFER 29 #ifdef CONFIG_SYS_RX_ETH_BUFFER
30 # define PKTBUFSRX CONFIG_SYS_RX_ETH_BUFFER 30 # define PKTBUFSRX CONFIG_SYS_RX_ETH_BUFFER
31 #else 31 #else
32 # define PKTBUFSRX 4 32 # define PKTBUFSRX 4
33 #endif 33 #endif
34 34
35 #define PKTALIGN ARCH_DMA_MINALIGN 35 #define PKTALIGN ARCH_DMA_MINALIGN
36 36
37 /* IPv4 addresses are always 32 bits in size */ 37 /* IPv4 addresses are always 32 bits in size */
38 typedef u32 IPaddr_t; 38 typedef u32 IPaddr_t;
39 39
40 40
41 /** 41 /**
42 * An incoming packet handler. 42 * An incoming packet handler.
43 * @param pkt pointer to the application packet 43 * @param pkt pointer to the application packet
44 * @param dport destination UDP port 44 * @param dport destination UDP port
45 * @param sip source IP address 45 * @param sip source IP address
46 * @param sport source UDP port 46 * @param sport source UDP port
47 * @param len packet length 47 * @param len packet length
48 */ 48 */
49 typedef void rxhand_f(uchar *pkt, unsigned dport, 49 typedef void rxhand_f(uchar *pkt, unsigned dport,
50 IPaddr_t sip, unsigned sport, 50 IPaddr_t sip, unsigned sport,
51 unsigned len); 51 unsigned len);
52 52
53 /** 53 /**
54 * An incoming ICMP packet handler. 54 * An incoming ICMP packet handler.
55 * @param type ICMP type 55 * @param type ICMP type
56 * @param code ICMP code 56 * @param code ICMP code
57 * @param dport destination UDP port 57 * @param dport destination UDP port
58 * @param sip source IP address 58 * @param sip source IP address
59 * @param sport source UDP port 59 * @param sport source UDP port
60 * @param pkt pointer to the ICMP packet data 60 * @param pkt pointer to the ICMP packet data
61 * @param len packet length 61 * @param len packet length
62 */ 62 */
63 typedef void rxhand_icmp_f(unsigned type, unsigned code, unsigned dport, 63 typedef void rxhand_icmp_f(unsigned type, unsigned code, unsigned dport,
64 IPaddr_t sip, unsigned sport, uchar *pkt, unsigned len); 64 IPaddr_t sip, unsigned sport, uchar *pkt, unsigned len);
65 65
66 /* 66 /*
67 * A timeout handler. Called after time interval has expired. 67 * A timeout handler. Called after time interval has expired.
68 */ 68 */
69 typedef void thand_f(void); 69 typedef void thand_f(void);
70 70
71 enum eth_state_t { 71 enum eth_state_t {
72 ETH_STATE_INIT, 72 ETH_STATE_INIT,
73 ETH_STATE_PASSIVE, 73 ETH_STATE_PASSIVE,
74 ETH_STATE_ACTIVE 74 ETH_STATE_ACTIVE
75 }; 75 };
76 76
77 struct eth_device { 77 struct eth_device {
78 char name[16]; 78 char name[16];
79 unsigned char enetaddr[6]; 79 unsigned char enetaddr[6];
80 int iobase; 80 int iobase;
81 int state; 81 int state;
82 82
83 int (*init) (struct eth_device *, bd_t *); 83 int (*init) (struct eth_device *, bd_t *);
84 int (*send) (struct eth_device *, void *packet, int length); 84 int (*send) (struct eth_device *, void *packet, int length);
85 int (*recv) (struct eth_device *); 85 int (*recv) (struct eth_device *);
86 void (*halt) (struct eth_device *); 86 void (*halt) (struct eth_device *);
87 #ifdef CONFIG_MCAST_TFTP 87 #ifdef CONFIG_MCAST_TFTP
88 int (*mcast) (struct eth_device *, u32 ip, u8 set); 88 int (*mcast) (struct eth_device *, u32 ip, u8 set);
89 #endif 89 #endif
90 int (*write_hwaddr) (struct eth_device *); 90 int (*write_hwaddr) (struct eth_device *);
91 struct eth_device *next; 91 struct eth_device *next;
92 int index; 92 int index;
93 void *priv; 93 void *priv;
94 }; 94 };
95 95
96 extern int eth_initialize(bd_t *bis); /* Initialize network subsystem */ 96 extern int eth_initialize(bd_t *bis); /* Initialize network subsystem */
97 extern int eth_register(struct eth_device* dev);/* Register network device */ 97 extern int eth_register(struct eth_device* dev);/* Register network device */
98 extern int eth_unregister(struct eth_device *dev);/* Remove network device */ 98 extern int eth_unregister(struct eth_device *dev);/* Remove network device */
99 extern void eth_try_another(int first_restart); /* Change the device */ 99 extern void eth_try_another(int first_restart); /* Change the device */
100 extern void eth_set_current(void); /* set nterface to ethcur var */ 100 extern void eth_set_current(void); /* set nterface to ethcur var */
101 extern struct eth_device *eth_get_dev(void); /* get the current device MAC */ 101 extern struct eth_device *eth_get_dev(void); /* get the current device MAC */
102 extern struct eth_device *eth_get_dev_by_name(const char *devname); 102 extern struct eth_device *eth_get_dev_by_name(const char *devname);
103 extern struct eth_device *eth_get_dev_by_index(int index); /* get dev @ index */ 103 extern struct eth_device *eth_get_dev_by_index(int index); /* get dev @ index */
104 extern int eth_get_dev_index(void); /* get the device index */ 104 extern int eth_get_dev_index(void); /* get the device index */
105 extern void eth_parse_enetaddr(const char *addr, uchar *enetaddr); 105 extern void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
106 extern int eth_getenv_enetaddr(char *name, uchar *enetaddr); 106 extern int eth_getenv_enetaddr(char *name, uchar *enetaddr);
107 extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr); 107 extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
108 108
109 /* 109 /*
110 * Get the hardware address for an ethernet interface . 110 * Get the hardware address for an ethernet interface .
111 * Args: 111 * Args:
112 * base_name - base name for device (normally "eth") 112 * base_name - base name for device (normally "eth")
113 * index - device index number (0 for first) 113 * index - device index number (0 for first)
114 * enetaddr - returns 6 byte hardware address 114 * enetaddr - returns 6 byte hardware address
115 * Returns: 115 * Returns:
116 * Return true if the address is valid. 116 * Return true if the address is valid.
117 */ 117 */
118 extern int eth_getenv_enetaddr_by_index(const char *base_name, int index, 118 extern int eth_getenv_enetaddr_by_index(const char *base_name, int index,
119 uchar *enetaddr); 119 uchar *enetaddr);
120 120
121 extern int usb_eth_initialize(bd_t *bi); 121 extern int usb_eth_initialize(bd_t *bi);
122 extern int eth_init(bd_t *bis); /* Initialize the device */ 122 extern int eth_init(bd_t *bis); /* Initialize the device */
123 extern int eth_send(void *packet, int length); /* Send a packet */ 123 extern int eth_send(void *packet, int length); /* Send a packet */
124 124
125 #ifdef CONFIG_API 125 #ifdef CONFIG_API
126 extern int eth_receive(void *packet, int length); /* Receive a packet*/ 126 extern int eth_receive(void *packet, int length); /* Receive a packet*/
127 extern void (*push_packet)(void *packet, int length); 127 extern void (*push_packet)(void *packet, int length);
128 #endif 128 #endif
129 extern int eth_rx(void); /* Check for received packets */ 129 extern int eth_rx(void); /* Check for received packets */
130 extern void eth_halt(void); /* stop SCC */ 130 extern void eth_halt(void); /* stop SCC */
131 extern char *eth_get_name(void); /* get name of current device */ 131 extern char *eth_get_name(void); /* get name of current device */
132 132
133 /* 133 /*
134 * Set the hardware address for an ethernet interface based on 'eth%daddr' 134 * Set the hardware address for an ethernet interface based on 'eth%daddr'
135 * environment variable (or just 'ethaddr' if eth_number is 0). 135 * environment variable (or just 'ethaddr' if eth_number is 0).
136 * Args: 136 * Args:
137 * base_name - base name for device (normally "eth") 137 * base_name - base name for device (normally "eth")
138 * eth_number - value of %d (0 for first device of this type) 138 * eth_number - value of %d (0 for first device of this type)
139 * Returns: 139 * Returns:
140 * 0 is success, non-zero is error status from driver. 140 * 0 is success, non-zero is error status from driver.
141 */ 141 */
142 int eth_write_hwaddr(struct eth_device *dev, const char *base_name, 142 int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
143 int eth_number); 143 int eth_number);
144 144
145 #ifdef CONFIG_MCAST_TFTP 145 #ifdef CONFIG_MCAST_TFTP
146 int eth_mcast_join(IPaddr_t mcast_addr, u8 join); 146 int eth_mcast_join(IPaddr_t mcast_addr, u8 join);
147 u32 ether_crc(size_t len, unsigned char const *p); 147 u32 ether_crc(size_t len, unsigned char const *p);
148 #endif 148 #endif
149 149
150 150
151 /**********************************************************************/ 151 /**********************************************************************/
152 /* 152 /*
153 * Protocol headers. 153 * Protocol headers.
154 */ 154 */
155 155
156 /* 156 /*
157 * Ethernet header 157 * Ethernet header
158 */ 158 */
159 159
160 struct ethernet_hdr { 160 struct ethernet_hdr {
161 uchar et_dest[6]; /* Destination node */ 161 uchar et_dest[6]; /* Destination node */
162 uchar et_src[6]; /* Source node */ 162 uchar et_src[6]; /* Source node */
163 ushort et_protlen; /* Protocol or length */ 163 ushort et_protlen; /* Protocol or length */
164 }; 164 };
165 165
166 /* Ethernet header size */ 166 /* Ethernet header size */
167 #define ETHER_HDR_SIZE (sizeof(struct ethernet_hdr)) 167 #define ETHER_HDR_SIZE (sizeof(struct ethernet_hdr))
168 168
169 struct e802_hdr { 169 struct e802_hdr {
170 uchar et_dest[6]; /* Destination node */ 170 uchar et_dest[6]; /* Destination node */
171 uchar et_src[6]; /* Source node */ 171 uchar et_src[6]; /* Source node */
172 ushort et_protlen; /* Protocol or length */ 172 ushort et_protlen; /* Protocol or length */
173 uchar et_dsap; /* 802 DSAP */ 173 uchar et_dsap; /* 802 DSAP */
174 uchar et_ssap; /* 802 SSAP */ 174 uchar et_ssap; /* 802 SSAP */
175 uchar et_ctl; /* 802 control */ 175 uchar et_ctl; /* 802 control */
176 uchar et_snap1; /* SNAP */ 176 uchar et_snap1; /* SNAP */
177 uchar et_snap2; 177 uchar et_snap2;
178 uchar et_snap3; 178 uchar et_snap3;
179 ushort et_prot; /* 802 protocol */ 179 ushort et_prot; /* 802 protocol */
180 }; 180 };
181 181
182 /* 802 + SNAP + ethernet header size */ 182 /* 802 + SNAP + ethernet header size */
183 #define E802_HDR_SIZE (sizeof(struct e802_hdr)) 183 #define E802_HDR_SIZE (sizeof(struct e802_hdr))
184 184
185 /* 185 /*
186 * Virtual LAN Ethernet header 186 * Virtual LAN Ethernet header
187 */ 187 */
188 struct vlan_ethernet_hdr { 188 struct vlan_ethernet_hdr {
189 uchar vet_dest[6]; /* Destination node */ 189 uchar vet_dest[6]; /* Destination node */
190 uchar vet_src[6]; /* Source node */ 190 uchar vet_src[6]; /* Source node */
191 ushort vet_vlan_type; /* PROT_VLAN */ 191 ushort vet_vlan_type; /* PROT_VLAN */
192 ushort vet_tag; /* TAG of VLAN */ 192 ushort vet_tag; /* TAG of VLAN */
193 ushort vet_type; /* protocol type */ 193 ushort vet_type; /* protocol type */
194 }; 194 };
195 195
196 /* VLAN Ethernet header size */ 196 /* VLAN Ethernet header size */
197 #define VLAN_ETHER_HDR_SIZE (sizeof(struct vlan_ethernet_hdr)) 197 #define VLAN_ETHER_HDR_SIZE (sizeof(struct vlan_ethernet_hdr))
198 198
199 #define PROT_IP 0x0800 /* IP protocol */ 199 #define PROT_IP 0x0800 /* IP protocol */
200 #define PROT_ARP 0x0806 /* IP ARP protocol */ 200 #define PROT_ARP 0x0806 /* IP ARP protocol */
201 #define PROT_RARP 0x8035 /* IP ARP protocol */ 201 #define PROT_RARP 0x8035 /* IP ARP protocol */
202 #define PROT_VLAN 0x8100 /* IEEE 802.1q protocol */ 202 #define PROT_VLAN 0x8100 /* IEEE 802.1q protocol */
203 203
204 #define IPPROTO_ICMP 1 /* Internet Control Message Protocol */ 204 #define IPPROTO_ICMP 1 /* Internet Control Message Protocol */
205 #define IPPROTO_UDP 17 /* User Datagram Protocol */ 205 #define IPPROTO_UDP 17 /* User Datagram Protocol */
206 206
207 /* 207 /*
208 * Internet Protocol (IP) header. 208 * Internet Protocol (IP) header.
209 */ 209 */
210 struct ip_hdr { 210 struct ip_hdr {
211 uchar ip_hl_v; /* header length and version */ 211 uchar ip_hl_v; /* header length and version */
212 uchar ip_tos; /* type of service */ 212 uchar ip_tos; /* type of service */
213 ushort ip_len; /* total length */ 213 ushort ip_len; /* total length */
214 ushort ip_id; /* identification */ 214 ushort ip_id; /* identification */
215 ushort ip_off; /* fragment offset field */ 215 ushort ip_off; /* fragment offset field */
216 uchar ip_ttl; /* time to live */ 216 uchar ip_ttl; /* time to live */
217 uchar ip_p; /* protocol */ 217 uchar ip_p; /* protocol */
218 ushort ip_sum; /* checksum */ 218 ushort ip_sum; /* checksum */
219 IPaddr_t ip_src; /* Source IP address */ 219 IPaddr_t ip_src; /* Source IP address */
220 IPaddr_t ip_dst; /* Destination IP address */ 220 IPaddr_t ip_dst; /* Destination IP address */
221 }; 221 };
222 222
223 #define IP_OFFS 0x1fff /* ip offset *= 8 */ 223 #define IP_OFFS 0x1fff /* ip offset *= 8 */
224 #define IP_FLAGS 0xe000 /* first 3 bits */ 224 #define IP_FLAGS 0xe000 /* first 3 bits */
225 #define IP_FLAGS_RES 0x8000 /* reserved */ 225 #define IP_FLAGS_RES 0x8000 /* reserved */
226 #define IP_FLAGS_DFRAG 0x4000 /* don't fragments */ 226 #define IP_FLAGS_DFRAG 0x4000 /* don't fragments */
227 #define IP_FLAGS_MFRAG 0x2000 /* more fragments */ 227 #define IP_FLAGS_MFRAG 0x2000 /* more fragments */
228 228
229 #define IP_HDR_SIZE (sizeof(struct ip_hdr)) 229 #define IP_HDR_SIZE (sizeof(struct ip_hdr))
230 230
231 /* 231 /*
232 * Internet Protocol (IP) + UDP header. 232 * Internet Protocol (IP) + UDP header.
233 */ 233 */
234 struct ip_udp_hdr { 234 struct ip_udp_hdr {
235 uchar ip_hl_v; /* header length and version */ 235 uchar ip_hl_v; /* header length and version */
236 uchar ip_tos; /* type of service */ 236 uchar ip_tos; /* type of service */
237 ushort ip_len; /* total length */ 237 ushort ip_len; /* total length */
238 ushort ip_id; /* identification */ 238 ushort ip_id; /* identification */
239 ushort ip_off; /* fragment offset field */ 239 ushort ip_off; /* fragment offset field */
240 uchar ip_ttl; /* time to live */ 240 uchar ip_ttl; /* time to live */
241 uchar ip_p; /* protocol */ 241 uchar ip_p; /* protocol */
242 ushort ip_sum; /* checksum */ 242 ushort ip_sum; /* checksum */
243 IPaddr_t ip_src; /* Source IP address */ 243 IPaddr_t ip_src; /* Source IP address */
244 IPaddr_t ip_dst; /* Destination IP address */ 244 IPaddr_t ip_dst; /* Destination IP address */
245 ushort udp_src; /* UDP source port */ 245 ushort udp_src; /* UDP source port */
246 ushort udp_dst; /* UDP destination port */ 246 ushort udp_dst; /* UDP destination port */
247 ushort udp_len; /* Length of UDP packet */ 247 ushort udp_len; /* Length of UDP packet */
248 ushort udp_xsum; /* Checksum */ 248 ushort udp_xsum; /* Checksum */
249 }; 249 };
250 250
251 #define IP_UDP_HDR_SIZE (sizeof(struct ip_udp_hdr)) 251 #define IP_UDP_HDR_SIZE (sizeof(struct ip_udp_hdr))
252 #define UDP_HDR_SIZE (IP_UDP_HDR_SIZE - IP_HDR_SIZE) 252 #define UDP_HDR_SIZE (IP_UDP_HDR_SIZE - IP_HDR_SIZE)
253 253
254 /* 254 /*
255 * Address Resolution Protocol (ARP) header. 255 * Address Resolution Protocol (ARP) header.
256 */ 256 */
257 struct arp_hdr { 257 struct arp_hdr {
258 ushort ar_hrd; /* Format of hardware address */ 258 ushort ar_hrd; /* Format of hardware address */
259 # define ARP_ETHER 1 /* Ethernet hardware address */ 259 # define ARP_ETHER 1 /* Ethernet hardware address */
260 ushort ar_pro; /* Format of protocol address */ 260 ushort ar_pro; /* Format of protocol address */
261 uchar ar_hln; /* Length of hardware address */ 261 uchar ar_hln; /* Length of hardware address */
262 # define ARP_HLEN 6 262 # define ARP_HLEN 6
263 uchar ar_pln; /* Length of protocol address */ 263 uchar ar_pln; /* Length of protocol address */
264 # define ARP_PLEN 4 264 # define ARP_PLEN 4
265 ushort ar_op; /* Operation */ 265 ushort ar_op; /* Operation */
266 # define ARPOP_REQUEST 1 /* Request to resolve address */ 266 # define ARPOP_REQUEST 1 /* Request to resolve address */
267 # define ARPOP_REPLY 2 /* Response to previous request */ 267 # define ARPOP_REPLY 2 /* Response to previous request */
268 268
269 # define RARPOP_REQUEST 3 /* Request to resolve address */ 269 # define RARPOP_REQUEST 3 /* Request to resolve address */
270 # define RARPOP_REPLY 4 /* Response to previous request */ 270 # define RARPOP_REPLY 4 /* Response to previous request */
271 271
272 /* 272 /*
273 * The remaining fields are variable in size, according to 273 * The remaining fields are variable in size, according to
274 * the sizes above, and are defined as appropriate for 274 * the sizes above, and are defined as appropriate for
275 * specific hardware/protocol combinations. 275 * specific hardware/protocol combinations.
276 */ 276 */
277 uchar ar_data[0]; 277 uchar ar_data[0];
278 #define ar_sha ar_data[0] 278 #define ar_sha ar_data[0]
279 #define ar_spa ar_data[ARP_HLEN] 279 #define ar_spa ar_data[ARP_HLEN]
280 #define ar_tha ar_data[ARP_HLEN + ARP_PLEN] 280 #define ar_tha ar_data[ARP_HLEN + ARP_PLEN]
281 #define ar_tpa ar_data[ARP_HLEN + ARP_PLEN + ARP_HLEN] 281 #define ar_tpa ar_data[ARP_HLEN + ARP_PLEN + ARP_HLEN]
282 #if 0 282 #if 0
283 uchar ar_sha[]; /* Sender hardware address */ 283 uchar ar_sha[]; /* Sender hardware address */
284 uchar ar_spa[]; /* Sender protocol address */ 284 uchar ar_spa[]; /* Sender protocol address */
285 uchar ar_tha[]; /* Target hardware address */ 285 uchar ar_tha[]; /* Target hardware address */
286 uchar ar_tpa[]; /* Target protocol address */ 286 uchar ar_tpa[]; /* Target protocol address */
287 #endif /* 0 */ 287 #endif /* 0 */
288 }; 288 };
289 289
290 #define ARP_HDR_SIZE (8+20) /* Size assuming ethernet */ 290 #define ARP_HDR_SIZE (8+20) /* Size assuming ethernet */
291 291
292 /* 292 /*
293 * ICMP stuff (just enough to handle (host) redirect messages) 293 * ICMP stuff (just enough to handle (host) redirect messages)
294 */ 294 */
295 #define ICMP_ECHO_REPLY 0 /* Echo reply */ 295 #define ICMP_ECHO_REPLY 0 /* Echo reply */
296 #define ICMP_NOT_REACH 3 /* Detination unreachable */ 296 #define ICMP_NOT_REACH 3 /* Detination unreachable */
297 #define ICMP_REDIRECT 5 /* Redirect (change route) */ 297 #define ICMP_REDIRECT 5 /* Redirect (change route) */
298 #define ICMP_ECHO_REQUEST 8 /* Echo request */ 298 #define ICMP_ECHO_REQUEST 8 /* Echo request */
299 299
300 /* Codes for REDIRECT. */ 300 /* Codes for REDIRECT. */
301 #define ICMP_REDIR_NET 0 /* Redirect Net */ 301 #define ICMP_REDIR_NET 0 /* Redirect Net */
302 #define ICMP_REDIR_HOST 1 /* Redirect Host */ 302 #define ICMP_REDIR_HOST 1 /* Redirect Host */
303 303
304 /* Codes for NOT_REACH */ 304 /* Codes for NOT_REACH */
305 #define ICMP_NOT_REACH_PORT 3 /* Port unreachable */ 305 #define ICMP_NOT_REACH_PORT 3 /* Port unreachable */
306 306
307 struct icmp_hdr { 307 struct icmp_hdr {
308 uchar type; 308 uchar type;
309 uchar code; 309 uchar code;
310 ushort checksum; 310 ushort checksum;
311 union { 311 union {
312 struct { 312 struct {
313 ushort id; 313 ushort id;
314 ushort sequence; 314 ushort sequence;
315 } echo; 315 } echo;
316 ulong gateway; 316 ulong gateway;
317 struct { 317 struct {
318 ushort __unused; 318 ushort __unused;
319 ushort mtu; 319 ushort mtu;
320 } frag; 320 } frag;
321 uchar data[0]; 321 uchar data[0];
322 } un; 322 } un;
323 }; 323 };
324 324
325 #define ICMP_HDR_SIZE (sizeof(struct icmp_hdr)) 325 #define ICMP_HDR_SIZE (sizeof(struct icmp_hdr))
326 #define IP_ICMP_HDR_SIZE (IP_HDR_SIZE + ICMP_HDR_SIZE) 326 #define IP_ICMP_HDR_SIZE (IP_HDR_SIZE + ICMP_HDR_SIZE)
327 327
328 /* 328 /*
329 * Maximum packet size; used to allocate packet storage. 329 * Maximum packet size; used to allocate packet storage.
330 * TFTP packets can be 524 bytes + IP header + ethernet header. 330 * TFTP packets can be 524 bytes + IP header + ethernet header.
331 * Lets be conservative, and go for 38 * 16. (Must also be 331 * Lets be conservative, and go for 38 * 16. (Must also be
332 * a multiple of 32 bytes). 332 * a multiple of 32 bytes).
333 */ 333 */
334 /* 334 /*
335 * AS.HARNOIS : Better to set PKTSIZE to maximum size because 335 * AS.HARNOIS : Better to set PKTSIZE to maximum size because
336 * traffic type is not always controlled 336 * traffic type is not always controlled
337 * maximum packet size = 1518 337 * maximum packet size = 1518
338 * maximum packet size and multiple of 32 bytes = 1536 338 * maximum packet size and multiple of 32 bytes = 1536
339 */ 339 */
340 #define PKTSIZE 1518 340 #define PKTSIZE 1518
341 #define PKTSIZE_ALIGN 1536 341 #define PKTSIZE_ALIGN 1536
342 /*#define PKTSIZE 608*/ 342 /*#define PKTSIZE 608*/
343 343
344 /* 344 /*
345 * Maximum receive ring size; that is, the number of packets 345 * Maximum receive ring size; that is, the number of packets
346 * we can buffer before overflow happens. Basically, this just 346 * we can buffer before overflow happens. Basically, this just
347 * needs to be enough to prevent a packet being discarded while 347 * needs to be enough to prevent a packet being discarded while
348 * we are processing the previous one. 348 * we are processing the previous one.
349 */ 349 */
350 #define RINGSZ 4 350 #define RINGSZ 4
351 #define RINGSZ_LOG2 2 351 #define RINGSZ_LOG2 2
352 352
353 /**********************************************************************/ 353 /**********************************************************************/
354 /* 354 /*
355 * Globals. 355 * Globals.
356 * 356 *
357 * Note: 357 * Note:
358 * 358 *
359 * All variables of type IPaddr_t are stored in NETWORK byte order 359 * All variables of type IPaddr_t are stored in NETWORK byte order
360 * (big endian). 360 * (big endian).
361 */ 361 */
362 362
363 /* net.c */ 363 /* net.c */
364 /** BOOTP EXTENTIONS **/ 364 /** BOOTP EXTENTIONS **/
365 extern IPaddr_t NetOurGatewayIP; /* Our gateway IP address */ 365 extern IPaddr_t NetOurGatewayIP; /* Our gateway IP address */
366 extern IPaddr_t NetOurSubnetMask; /* Our subnet mask (0 = unknown) */ 366 extern IPaddr_t NetOurSubnetMask; /* Our subnet mask (0 = unknown) */
367 extern IPaddr_t NetOurDNSIP; /* Our Domain Name Server (0 = unknown) */ 367 extern IPaddr_t NetOurDNSIP; /* Our Domain Name Server (0 = unknown) */
368 #if defined(CONFIG_BOOTP_DNS2) 368 #if defined(CONFIG_BOOTP_DNS2)
369 extern IPaddr_t NetOurDNS2IP; /* Our 2nd Domain Name Server (0 = unknown) */ 369 extern IPaddr_t NetOurDNS2IP; /* Our 2nd Domain Name Server (0 = unknown) */
370 #endif 370 #endif
371 extern char NetOurNISDomain[32]; /* Our NIS domain */ 371 extern char NetOurNISDomain[32]; /* Our NIS domain */
372 extern char NetOurHostName[32]; /* Our hostname */ 372 extern char NetOurHostName[32]; /* Our hostname */
373 extern char NetOurRootPath[64]; /* Our root path */ 373 extern char NetOurRootPath[64]; /* Our root path */
374 extern ushort NetBootFileSize; /* Our boot file size in blocks */ 374 extern ushort NetBootFileSize; /* Our boot file size in blocks */
375 /** END OF BOOTP EXTENTIONS **/ 375 /** END OF BOOTP EXTENTIONS **/
376 extern ulong NetBootFileXferSize; /* size of bootfile in bytes */ 376 extern ulong NetBootFileXferSize; /* size of bootfile in bytes */
377 extern uchar NetOurEther[6]; /* Our ethernet address */ 377 extern uchar NetOurEther[6]; /* Our ethernet address */
378 extern uchar NetServerEther[6]; /* Boot server enet address */ 378 extern uchar NetServerEther[6]; /* Boot server enet address */
379 extern IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */ 379 extern IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
380 extern IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */ 380 extern IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */
381 extern uchar *NetTxPacket; /* THE transmit packet */ 381 extern uchar *NetTxPacket; /* THE transmit packet */
382 extern uchar *NetRxPackets[PKTBUFSRX]; /* Receive packets */ 382 extern uchar *NetRxPackets[PKTBUFSRX]; /* Receive packets */
383 extern uchar *NetRxPacket; /* Current receive packet */ 383 extern uchar *NetRxPacket; /* Current receive packet */
384 extern int NetRxPacketLen; /* Current rx packet length */ 384 extern int NetRxPacketLen; /* Current rx packet length */
385 extern unsigned NetIPID; /* IP ID (counting) */ 385 extern unsigned NetIPID; /* IP ID (counting) */
386 extern uchar NetBcastAddr[6]; /* Ethernet boardcast address */ 386 extern uchar NetBcastAddr[6]; /* Ethernet boardcast address */
387 extern uchar NetEtherNullAddr[6]; 387 extern uchar NetEtherNullAddr[6];
388 388
389 #define VLAN_NONE 4095 /* untagged */ 389 #define VLAN_NONE 4095 /* untagged */
390 #define VLAN_IDMASK 0x0fff /* mask of valid vlan id */ 390 #define VLAN_IDMASK 0x0fff /* mask of valid vlan id */
391 extern ushort NetOurVLAN; /* Our VLAN */ 391 extern ushort NetOurVLAN; /* Our VLAN */
392 extern ushort NetOurNativeVLAN; /* Our Native VLAN */ 392 extern ushort NetOurNativeVLAN; /* Our Native VLAN */
393 393
394 extern int NetRestartWrap; /* Tried all network devices */ 394 extern int NetRestartWrap; /* Tried all network devices */
395 395
396 enum proto_t { 396 enum proto_t {
397 BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP, 397 BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
398 TFTPSRV, TFTPPUT 398 TFTPSRV, TFTPPUT, LINKLOCAL
399 }; 399 };
400 400
401 /* from net/net.c */ 401 /* from net/net.c */
402 extern char BootFile[128]; /* Boot File name */ 402 extern char BootFile[128]; /* Boot File name */
403 403
404 #if defined(CONFIG_CMD_DNS) 404 #if defined(CONFIG_CMD_DNS)
405 extern char *NetDNSResolve; /* The host to resolve */ 405 extern char *NetDNSResolve; /* The host to resolve */
406 extern char *NetDNSenvvar; /* the env var to put the ip into */ 406 extern char *NetDNSenvvar; /* the env var to put the ip into */
407 #endif 407 #endif
408 408
409 #if defined(CONFIG_CMD_PING) 409 #if defined(CONFIG_CMD_PING)
410 extern IPaddr_t NetPingIP; /* the ip address to ping */ 410 extern IPaddr_t NetPingIP; /* the ip address to ping */
411 #endif 411 #endif
412 412
413 #if defined(CONFIG_CMD_CDP) 413 #if defined(CONFIG_CMD_CDP)
414 /* when CDP completes these hold the return values */ 414 /* when CDP completes these hold the return values */
415 extern ushort CDPNativeVLAN; /* CDP returned native VLAN */ 415 extern ushort CDPNativeVLAN; /* CDP returned native VLAN */
416 extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */ 416 extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */
417 417
418 /* 418 /*
419 * Check for a CDP packet by examining the received MAC address field 419 * Check for a CDP packet by examining the received MAC address field
420 */ 420 */
421 static inline int is_cdp_packet(const uchar *et_addr) 421 static inline int is_cdp_packet(const uchar *et_addr)
422 { 422 {
423 extern const uchar NetCDPAddr[6]; 423 extern const uchar NetCDPAddr[6];
424 424
425 return memcmp(et_addr, NetCDPAddr, 6) == 0; 425 return memcmp(et_addr, NetCDPAddr, 6) == 0;
426 } 426 }
427 #endif 427 #endif
428 428
429 #if defined(CONFIG_CMD_SNTP) 429 #if defined(CONFIG_CMD_SNTP)
430 extern IPaddr_t NetNtpServerIP; /* the ip address to NTP */ 430 extern IPaddr_t NetNtpServerIP; /* the ip address to NTP */
431 extern int NetTimeOffset; /* offset time from UTC */ 431 extern int NetTimeOffset; /* offset time from UTC */
432 #endif 432 #endif
433 433
434 #if defined(CONFIG_MCAST_TFTP) 434 #if defined(CONFIG_MCAST_TFTP)
435 extern IPaddr_t Mcast_addr; 435 extern IPaddr_t Mcast_addr;
436 #endif 436 #endif
437 437
438 /* Initialize the network adapter */ 438 /* Initialize the network adapter */
439 extern void net_init(void); 439 extern void net_init(void);
440 extern int NetLoop(enum proto_t); 440 extern int NetLoop(enum proto_t);
441 441
442 /* Shutdown adapters and cleanup */ 442 /* Shutdown adapters and cleanup */
443 extern void NetStop(void); 443 extern void NetStop(void);
444 444
445 /* Load failed. Start again. */ 445 /* Load failed. Start again. */
446 extern void NetStartAgain(void); 446 extern void NetStartAgain(void);
447 447
448 /* Get size of the ethernet header when we send */ 448 /* Get size of the ethernet header when we send */
449 extern int NetEthHdrSize(void); 449 extern int NetEthHdrSize(void);
450 450
451 /* Set ethernet header; returns the size of the header */ 451 /* Set ethernet header; returns the size of the header */
452 extern int NetSetEther(uchar *, uchar *, uint); 452 extern int NetSetEther(uchar *, uchar *, uint);
453 extern int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot); 453 extern int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot);
454 454
455 /* Set IP header */ 455 /* Set IP header */
456 extern void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source); 456 extern void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source);
457 extern void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, 457 extern void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport,
458 int sport, int len); 458 int sport, int len);
459 459
460 /* Checksum */ 460 /* Checksum */
461 extern int NetCksumOk(uchar *, int); /* Return true if cksum OK */ 461 extern int NetCksumOk(uchar *, int); /* Return true if cksum OK */
462 extern uint NetCksum(uchar *, int); /* Calculate the checksum */ 462 extern uint NetCksum(uchar *, int); /* Calculate the checksum */
463 463
464 /* Callbacks */ 464 /* Callbacks */
465 extern rxhand_f *net_get_udp_handler(void); /* Get UDP RX packet handler */ 465 extern rxhand_f *net_get_udp_handler(void); /* Get UDP RX packet handler */
466 extern void net_set_udp_handler(rxhand_f *); /* Set UDP RX packet handler */ 466 extern void net_set_udp_handler(rxhand_f *); /* Set UDP RX packet handler */
467 extern rxhand_f *net_get_arp_handler(void); /* Get ARP RX packet handler */ 467 extern rxhand_f *net_get_arp_handler(void); /* Get ARP RX packet handler */
468 extern void net_set_arp_handler(rxhand_f *); /* Set ARP RX packet handler */ 468 extern void net_set_arp_handler(rxhand_f *); /* Set ARP RX packet handler */
469 extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */ 469 extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
470 extern void NetSetTimeout(ulong, thand_f *);/* Set timeout handler */ 470 extern void NetSetTimeout(ulong, thand_f *);/* Set timeout handler */
471 471
472 /* Network loop state */ 472 /* Network loop state */
473 enum net_loop_state { 473 enum net_loop_state {
474 NETLOOP_CONTINUE, 474 NETLOOP_CONTINUE,
475 NETLOOP_RESTART, 475 NETLOOP_RESTART,
476 NETLOOP_SUCCESS, 476 NETLOOP_SUCCESS,
477 NETLOOP_FAIL 477 NETLOOP_FAIL
478 }; 478 };
479 static inline void net_set_state(enum net_loop_state state) 479 static inline void net_set_state(enum net_loop_state state)
480 { 480 {
481 extern enum net_loop_state net_state; 481 extern enum net_loop_state net_state;
482 482
483 net_state = state; 483 net_state = state;
484 } 484 }
485 485
486 /* Transmit a packet */ 486 /* Transmit a packet */
487 static inline void NetSendPacket(uchar *pkt, int len) 487 static inline void NetSendPacket(uchar *pkt, int len)
488 { 488 {
489 (void) eth_send(pkt, len); 489 (void) eth_send(pkt, len);
490 } 490 }
491 491
492 /* 492 /*
493 * Transmit "NetTxPacket" as UDP packet, performing ARP request if needed 493 * Transmit "NetTxPacket" as UDP packet, performing ARP request if needed
494 * (ether will be populated) 494 * (ether will be populated)
495 * 495 *
496 * @param ether Raw packet buffer 496 * @param ether Raw packet buffer
497 * @param dest IP address to send the datagram to 497 * @param dest IP address to send the datagram to
498 * @param dport Destination UDP port 498 * @param dport Destination UDP port
499 * @param sport Source UDP port 499 * @param sport Source UDP port
500 * @param payload_len Length of data after the UDP header 500 * @param payload_len Length of data after the UDP header
501 */ 501 */
502 extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, 502 extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport,
503 int sport, int payload_len); 503 int sport, int payload_len);
504 504
505 /* Processes a received packet */ 505 /* Processes a received packet */
506 extern void NetReceive(uchar *, int); 506 extern void NetReceive(uchar *, int);
507 507
508 #ifdef CONFIG_NETCONSOLE 508 #ifdef CONFIG_NETCONSOLE
509 void NcStart(void); 509 void NcStart(void);
510 int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len); 510 int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len);
511 #endif 511 #endif
512 512
513 /* 513 /*
514 * Check if autoload is enabled. If so, use either NFS or TFTP to download 514 * Check if autoload is enabled. If so, use either NFS or TFTP to download
515 * the boot file. 515 * the boot file.
516 */ 516 */
517 void net_auto_load(void); 517 void net_auto_load(void);
518 518
519 /* 519 /*
520 * The following functions are a bit ugly, but necessary to deal with 520 * The following functions are a bit ugly, but necessary to deal with
521 * alignment restrictions on ARM. 521 * alignment restrictions on ARM.
522 * 522 *
523 * We're using inline functions, which had the smallest memory 523 * We're using inline functions, which had the smallest memory
524 * footprint in our tests. 524 * footprint in our tests.
525 */ 525 */
526 /* return IP *in network byteorder* */ 526 /* return IP *in network byteorder* */
527 static inline IPaddr_t NetReadIP(void *from) 527 static inline IPaddr_t NetReadIP(void *from)
528 { 528 {
529 IPaddr_t ip; 529 IPaddr_t ip;
530 530
531 memcpy((void *)&ip, (void *)from, sizeof(ip)); 531 memcpy((void *)&ip, (void *)from, sizeof(ip));
532 return ip; 532 return ip;
533 } 533 }
534 534
535 /* return ulong *in network byteorder* */ 535 /* return ulong *in network byteorder* */
536 static inline ulong NetReadLong(ulong *from) 536 static inline ulong NetReadLong(ulong *from)
537 { 537 {
538 ulong l; 538 ulong l;
539 539
540 memcpy((void *)&l, (void *)from, sizeof(l)); 540 memcpy((void *)&l, (void *)from, sizeof(l));
541 return l; 541 return l;
542 } 542 }
543 543
544 /* write IP *in network byteorder* */ 544 /* write IP *in network byteorder* */
545 static inline void NetWriteIP(void *to, IPaddr_t ip) 545 static inline void NetWriteIP(void *to, IPaddr_t ip)
546 { 546 {
547 memcpy(to, (void *)&ip, sizeof(ip)); 547 memcpy(to, (void *)&ip, sizeof(ip));
548 } 548 }
549 549
550 /* copy IP */ 550 /* copy IP */
551 static inline void NetCopyIP(void *to, void *from) 551 static inline void NetCopyIP(void *to, void *from)
552 { 552 {
553 memcpy((void *)to, from, sizeof(IPaddr_t)); 553 memcpy((void *)to, from, sizeof(IPaddr_t));
554 } 554 }
555 555
556 /* copy ulong */ 556 /* copy ulong */
557 static inline void NetCopyLong(ulong *to, ulong *from) 557 static inline void NetCopyLong(ulong *to, ulong *from)
558 { 558 {
559 memcpy((void *)to, (void *)from, sizeof(ulong)); 559 memcpy((void *)to, (void *)from, sizeof(ulong));
560 } 560 }
561 561
562 /** 562 /**
563 * is_zero_ether_addr - Determine if give Ethernet address is all zeros. 563 * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
564 * @addr: Pointer to a six-byte array containing the Ethernet address 564 * @addr: Pointer to a six-byte array containing the Ethernet address
565 * 565 *
566 * Return true if the address is all zeroes. 566 * Return true if the address is all zeroes.
567 */ 567 */
568 static inline int is_zero_ether_addr(const u8 *addr) 568 static inline int is_zero_ether_addr(const u8 *addr)
569 { 569 {
570 return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]); 570 return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
571 } 571 }
572 572
573 /** 573 /**
574 * is_multicast_ether_addr - Determine if the Ethernet address is a multicast. 574 * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
575 * @addr: Pointer to a six-byte array containing the Ethernet address 575 * @addr: Pointer to a six-byte array containing the Ethernet address
576 * 576 *
577 * Return true if the address is a multicast address. 577 * Return true if the address is a multicast address.
578 * By definition the broadcast address is also a multicast address. 578 * By definition the broadcast address is also a multicast address.
579 */ 579 */
580 static inline int is_multicast_ether_addr(const u8 *addr) 580 static inline int is_multicast_ether_addr(const u8 *addr)
581 { 581 {
582 return 0x01 & addr[0]; 582 return 0x01 & addr[0];
583 } 583 }
584 584
585 /* 585 /*
586 * is_broadcast_ether_addr - Determine if the Ethernet address is broadcast 586 * is_broadcast_ether_addr - Determine if the Ethernet address is broadcast
587 * @addr: Pointer to a six-byte array containing the Ethernet address 587 * @addr: Pointer to a six-byte array containing the Ethernet address
588 * 588 *
589 * Return true if the address is the broadcast address. 589 * Return true if the address is the broadcast address.
590 */ 590 */
591 static inline int is_broadcast_ether_addr(const u8 *addr) 591 static inline int is_broadcast_ether_addr(const u8 *addr)
592 { 592 {
593 return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 593 return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) ==
594 0xff; 594 0xff;
595 } 595 }
596 596
597 /* 597 /*
598 * is_valid_ether_addr - Determine if the given Ethernet address is valid 598 * is_valid_ether_addr - Determine if the given Ethernet address is valid
599 * @addr: Pointer to a six-byte array containing the Ethernet address 599 * @addr: Pointer to a six-byte array containing the Ethernet address
600 * 600 *
601 * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not 601 * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
602 * a multicast address, and is not FF:FF:FF:FF:FF:FF. 602 * a multicast address, and is not FF:FF:FF:FF:FF:FF.
603 * 603 *
604 * Return true if the address is valid. 604 * Return true if the address is valid.
605 */ 605 */
606 static inline int is_valid_ether_addr(const u8 *addr) 606 static inline int is_valid_ether_addr(const u8 *addr)
607 { 607 {
608 /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to 608 /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
609 * explicitly check for it here. */ 609 * explicitly check for it here. */
610 return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr); 610 return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
611 } 611 }
612 612
613 /* Convert an IP address to a string */ 613 /* Convert an IP address to a string */
614 extern void ip_to_string(IPaddr_t x, char *s); 614 extern void ip_to_string(IPaddr_t x, char *s);
615 615
616 /* Convert a string to ip address */ 616 /* Convert a string to ip address */
617 extern IPaddr_t string_to_ip(const char *s); 617 extern IPaddr_t string_to_ip(const char *s);
618 618
619 /* Convert a VLAN id to a string */ 619 /* Convert a VLAN id to a string */
620 extern void VLAN_to_string(ushort x, char *s); 620 extern void VLAN_to_string(ushort x, char *s);
621 621
622 /* Convert a string to a vlan id */ 622 /* Convert a string to a vlan id */
623 extern ushort string_to_VLAN(const char *s); 623 extern ushort string_to_VLAN(const char *s);
624 624
625 /* read a VLAN id from an environment variable */ 625 /* read a VLAN id from an environment variable */
626 extern ushort getenv_VLAN(char *); 626 extern ushort getenv_VLAN(char *);
627 627
628 /* copy a filename (allow for "..." notation, limit length) */ 628 /* copy a filename (allow for "..." notation, limit length) */
629 extern void copy_filename(char *dst, const char *src, int size); 629 extern void copy_filename(char *dst, const char *src, int size);
630 630
631 /* get a random source port */ 631 /* get a random source port */
632 extern unsigned int random_port(void); 632 extern unsigned int random_port(void);
633 633
634 /**********************************************************************/ 634 /**********************************************************************/
635 635
636 #endif /* __NET_H__ */ 636 #endif /* __NET_H__ */
637 637
1 # 1 #
2 # (C) Copyright 2000-2006 2 # (C) Copyright 2000-2006
3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. 3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 # 4 #
5 # See file CREDITS for list of people who contributed to this 5 # See file CREDITS for list of people who contributed to this
6 # project. 6 # project.
7 # 7 #
8 # This program is free software; you can redistribute it and/or 8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License as 9 # modify it under the terms of the GNU General Public License as
10 # published by the Free Software Foundation; either version 2 of 10 # published by the Free Software Foundation; either version 2 of
11 # the License, or (at your option) any later version. 11 # the License, or (at your option) any later version.
12 # 12 #
13 # This program is distributed in the hope that it will be useful, 13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details. 16 # GNU General Public License for more details.
17 # 17 #
18 # You should have received a copy of the GNU General Public License 18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software 19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 # MA 02111-1307 USA 21 # MA 02111-1307 USA
22 # 22 #
23 23
24 include $(TOPDIR)/config.mk 24 include $(TOPDIR)/config.mk
25 25
26 # CFLAGS += -DDEBUG 26 # CFLAGS += -DDEBUG
27 27
28 LIB = $(obj)libnet.o 28 LIB = $(obj)libnet.o
29 29
30 COBJS-$(CONFIG_CMD_NET) += arp.o 30 COBJS-$(CONFIG_CMD_NET) += arp.o
31 COBJS-$(CONFIG_CMD_NET) += bootp.o 31 COBJS-$(CONFIG_CMD_NET) += bootp.o
32 COBJS-$(CONFIG_CMD_CDP) += cdp.o 32 COBJS-$(CONFIG_CMD_CDP) += cdp.o
33 COBJS-$(CONFIG_CMD_DNS) += dns.o 33 COBJS-$(CONFIG_CMD_DNS) += dns.o
34 COBJS-$(CONFIG_CMD_NET) += eth.o 34 COBJS-$(CONFIG_CMD_NET) += eth.o
35 COBJS-$(CONFIG_CMD_LINK_LOCAL) += link_local.o
35 COBJS-$(CONFIG_CMD_NET) += net.o 36 COBJS-$(CONFIG_CMD_NET) += net.o
36 COBJS-$(CONFIG_BOOTP_RANDOM_DELAY) += net_rand.o 37 COBJS-$(CONFIG_BOOTP_RANDOM_DELAY) += net_rand.o
38 COBJS-$(CONFIG_CMD_LINK_LOCAL) += net_rand.o
37 COBJS-$(CONFIG_CMD_NFS) += nfs.o 39 COBJS-$(CONFIG_CMD_NFS) += nfs.o
38 COBJS-$(CONFIG_CMD_PING) += ping.o 40 COBJS-$(CONFIG_CMD_PING) += ping.o
39 COBJS-$(CONFIG_CMD_RARP) += rarp.o 41 COBJS-$(CONFIG_CMD_RARP) += rarp.o
40 COBJS-$(CONFIG_CMD_SNTP) += sntp.o 42 COBJS-$(CONFIG_CMD_SNTP) += sntp.o
41 COBJS-$(CONFIG_CMD_NET) += tftp.o 43 COBJS-$(CONFIG_CMD_NET) += tftp.o
42 44
43 COBJS := $(COBJS-y) 45 COBJS := $(sort $(COBJS-y))
44 SRCS := $(COBJS:.o=.c) 46 SRCS := $(COBJS:.o=.c)
45 OBJS := $(addprefix $(obj),$(COBJS)) 47 OBJS := $(addprefix $(obj),$(COBJS))
46 48
47 all: $(LIB) 49 all: $(LIB)
48 50
49 $(LIB): $(obj).depend $(OBJS) 51 $(LIB): $(obj).depend $(OBJS)
50 $(call cmd_link_o_target, $(OBJS)) 52 $(call cmd_link_o_target, $(OBJS))
51 53
52 ######################################################################### 54 #########################################################################
53 55
54 # defines $(obj).depend target 56 # defines $(obj).depend target
55 include $(SRCTREE)/rules.mk 57 include $(SRCTREE)/rules.mk
56 58
57 sinclude $(obj).depend 59 sinclude $(obj).depend
58 60
59 ######################################################################### 61 #########################################################################
60 62
File was created 1 /*
2 * RFC3927 ZeroConf IPv4 Link-Local addressing
3 * (see <http://www.zeroconf.org/>)
4 *
5 * Copied from BusyBox - networking/zcip.c
6 *
7 * Copyright (C) 2003 by Arthur van Hoff (avh@strangeberry.com)
8 * Copyright (C) 2004 by David Brownell
9 * Copyright (C) 2010 by Joe Hershberger
10 *
11 * Licensed under the GPL v2 or later
12 */
13
14 #include <common.h>
15 #include <net.h>
16 #include "arp.h"
17 #include "net_rand.h"
18
19 /* We don't need more than 32 bits of the counter */
20 #define MONOTONIC_MS() ((unsigned)get_timer(0) * (1000 / CONFIG_SYS_HZ))
21
22 enum {
23 /* 169.254.0.0 */
24 LINKLOCAL_ADDR = 0xa9fe0000,
25
26 IN_CLASSB_NET = 0xffff0000,
27 IN_CLASSB_HOST = 0x0000ffff,
28
29 /* protocol timeout parameters, specified in seconds */
30 PROBE_WAIT = 1,
31 PROBE_MIN = 1,
32 PROBE_MAX = 2,
33 PROBE_NUM = 3,
34 MAX_CONFLICTS = 10,
35 RATE_LIMIT_INTERVAL = 60,
36 ANNOUNCE_WAIT = 2,
37 ANNOUNCE_NUM = 2,
38 ANNOUNCE_INTERVAL = 2,
39 DEFEND_INTERVAL = 10
40 };
41
42 /* States during the configuration process. */
43 static enum ll_state_t {
44 PROBE = 0,
45 RATE_LIMIT_PROBE,
46 ANNOUNCE,
47 MONITOR,
48 DEFEND,
49 DISABLED
50 } state = DISABLED;
51
52 static IPaddr_t ip;
53 static int timeout_ms = -1;
54 static unsigned deadline_ms;
55 static unsigned conflicts;
56 static unsigned nprobes;
57 static unsigned nclaims;
58 static int ready;
59
60 static void link_local_timeout(void);
61
62 /**
63 * Pick a random link local IP address on 169.254/16, except that
64 * the first and last 256 addresses are reserved.
65 */
66 static IPaddr_t pick(void)
67 {
68 unsigned tmp;
69
70 do {
71 tmp = rand() & IN_CLASSB_HOST;
72 } while (tmp > (IN_CLASSB_HOST - 0x0200));
73 return (IPaddr_t) htonl((LINKLOCAL_ADDR + 0x0100) + tmp);
74 }
75
76 /**
77 * Return milliseconds of random delay, up to "secs" seconds.
78 */
79 static inline unsigned random_delay_ms(unsigned secs)
80 {
81 return rand() % (secs * 1000);
82 }
83
84 static void configure_wait(void)
85 {
86 if (timeout_ms == -1)
87 return;
88
89 /* poll, being ready to adjust current timeout */
90 if (!timeout_ms)
91 timeout_ms = random_delay_ms(PROBE_WAIT);
92
93 /* set deadline_ms to the point in time when we timeout */
94 deadline_ms = MONOTONIC_MS() + timeout_ms;
95
96 debug("...wait %d %s nprobes=%u, nclaims=%u\n",
97 timeout_ms, eth_get_name(), nprobes, nclaims);
98
99 NetSetTimeout(timeout_ms, link_local_timeout);
100 }
101
102 void link_local_start(void)
103 {
104 ip = getenv_IPaddr("llipaddr");
105 if (ip != 0 && (ip & IN_CLASSB_NET) != LINKLOCAL_ADDR) {
106 puts("invalid link address");
107 net_set_state(NETLOOP_FAIL);
108 return;
109 }
110 NetOurSubnetMask = IN_CLASSB_NET;
111
112 srand_mac();
113 if (ip == 0)
114 ip = pick();
115
116 state = PROBE;
117 timeout_ms = 0;
118 conflicts = 0;
119 nprobes = 0;
120 nclaims = 0;
121 ready = 0;
122
123 configure_wait();
124 }
125
126 static void link_local_timeout(void)
127 {
128 switch (state) {
129 case PROBE:
130 /* timeouts in the PROBE state mean no conflicting ARP packets
131 have been received, so we can progress through the states */
132 if (nprobes < PROBE_NUM) {
133 nprobes++;
134 debug("probe/%u %s@%pI4\n",
135 nprobes, eth_get_name(), &ip);
136 arp_raw_request(0, NetEtherNullAddr, ip);
137 timeout_ms = PROBE_MIN * 1000;
138 timeout_ms += random_delay_ms(PROBE_MAX - PROBE_MIN);
139 } else {
140 /* Switch to announce state */
141 state = ANNOUNCE;
142 nclaims = 0;
143 debug("announce/%u %s@%pI4\n",
144 nclaims, eth_get_name(), &ip);
145 arp_raw_request(ip, NetOurEther, ip);
146 timeout_ms = ANNOUNCE_INTERVAL * 1000;
147 }
148 break;
149 case RATE_LIMIT_PROBE:
150 /* timeouts in the RATE_LIMIT_PROBE state mean no conflicting
151 ARP packets have been received, so we can move immediately
152 to the announce state */
153 state = ANNOUNCE;
154 nclaims = 0;
155 debug("announce/%u %s@%pI4\n",
156 nclaims, eth_get_name(), &ip);
157 arp_raw_request(ip, NetOurEther, ip);
158 timeout_ms = ANNOUNCE_INTERVAL * 1000;
159 break;
160 case ANNOUNCE:
161 /* timeouts in the ANNOUNCE state mean no conflicting ARP
162 packets have been received, so we can progress through
163 the states */
164 if (nclaims < ANNOUNCE_NUM) {
165 nclaims++;
166 debug("announce/%u %s@%pI4\n",
167 nclaims, eth_get_name(), &ip);
168 arp_raw_request(ip, NetOurEther, ip);
169 timeout_ms = ANNOUNCE_INTERVAL * 1000;
170 } else {
171 /* Switch to monitor state */
172 state = MONITOR;
173 printf("Successfully assigned %pI4\n", &ip);
174 NetCopyIP(&NetOurIP, &ip);
175 ready = 1;
176 conflicts = 0;
177 timeout_ms = -1;
178 /* Never timeout in the monitor state */
179 NetSetTimeout(0, NULL);
180
181 /* NOTE: all other exit paths should deconfig ... */
182 net_set_state(NETLOOP_SUCCESS);
183 return;
184 }
185 break;
186 case DEFEND:
187 /* We won! No ARP replies, so just go back to monitor */
188 state = MONITOR;
189 timeout_ms = -1;
190 conflicts = 0;
191 break;
192 default:
193 /* Invalid, should never happen. Restart the whole protocol */
194 state = PROBE;
195 ip = pick();
196 timeout_ms = 0;
197 nprobes = 0;
198 nclaims = 0;
199 break;
200 }
201 configure_wait();
202 }
203
204 void link_local_receive_arp(struct arp_hdr *arp, int len)
205 {
206 int source_ip_conflict;
207 int target_ip_conflict;
208
209 if (state == DISABLED)
210 return;
211
212 /* We need to adjust the timeout in case we didn't receive a
213 conflicting packet. */
214 if (timeout_ms > 0) {
215 unsigned diff = deadline_ms - MONOTONIC_MS();
216 if ((int)(diff) < 0) {
217 /* Current time is greater than the expected timeout
218 time. This should never happen */
219 debug("missed an expected timeout\n");
220 timeout_ms = 0;
221 } else {
222 debug("adjusting timeout\n");
223 timeout_ms = diff | 1; /* never 0 */
224 }
225 }
226 /*
227 * XXX Don't bother with ethernet link just yet
228 if ((fds[0].revents & POLLIN) == 0) {
229 if (fds[0].revents & POLLERR) {
230 // FIXME: links routinely go down;
231 // this shouldn't necessarily exit.
232 bb_error_msg("iface %s is down", eth_get_name());
233 if (ready) {
234 run(argv, "deconfig", &ip);
235 }
236 return EXIT_FAILURE;
237 }
238 continue;
239 }
240 */
241
242 debug("%s recv arp type=%d, op=%d,\n",
243 eth_get_name(), ntohs(arp->ar_pro),
244 ntohs(arp->ar_op));
245 debug("\tsource=%pM %pI4\n",
246 &arp->ar_sha,
247 &arp->ar_spa);
248 debug("\ttarget=%pM %pI4\n",
249 &arp->ar_tha,
250 &arp->ar_tpa);
251
252 if (arp->ar_op != htons(ARPOP_REQUEST)
253 && arp->ar_op != htons(ARPOP_REPLY)
254 ) {
255 configure_wait();
256 return;
257 }
258
259 source_ip_conflict = 0;
260 target_ip_conflict = 0;
261
262 if (memcmp(&arp->ar_spa, &ip, ARP_PLEN) == 0
263 && memcmp(&arp->ar_sha, NetOurEther, ARP_HLEN) != 0
264 ) {
265 source_ip_conflict = 1;
266 }
267 if (arp->ar_op == htons(ARPOP_REQUEST)
268 && memcmp(&arp->ar_tpa, &ip, ARP_PLEN) == 0
269 && memcmp(&arp->ar_tha, NetOurEther, ARP_HLEN) != 0
270 ) {
271 target_ip_conflict = 1;
272 }
273
274 debug("state = %d, source ip conflict = %d, target ip conflict = %d\n",
275 state, source_ip_conflict, target_ip_conflict);
276 switch (state) {
277 case PROBE:
278 case ANNOUNCE:
279 /* When probing or announcing, check for source IP conflicts
280 and other hosts doing ARP probes (target IP conflicts). */
281 if (source_ip_conflict || target_ip_conflict) {
282 conflicts++;
283 state = PROBE;
284 if (conflicts >= MAX_CONFLICTS) {
285 debug("%s ratelimit\n", eth_get_name());
286 timeout_ms = RATE_LIMIT_INTERVAL * 1000;
287 state = RATE_LIMIT_PROBE;
288 }
289
290 /* restart the whole protocol */
291 ip = pick();
292 timeout_ms = 0;
293 nprobes = 0;
294 nclaims = 0;
295 }
296 break;
297 case MONITOR:
298 /* If a conflict, we try to defend with a single ARP probe */
299 if (source_ip_conflict) {
300 debug("monitor conflict -- defending\n");
301 state = DEFEND;
302 timeout_ms = DEFEND_INTERVAL * 1000;
303 arp_raw_request(ip, NetOurEther, ip);
304 }
305 break;
306 case DEFEND:
307 /* Well, we tried. Start over (on conflict) */
308 if (source_ip_conflict) {
309 state = PROBE;
310 debug("defend conflict -- starting over\n");
311 ready = 0;
312 NetOurIP = 0;
313
314 /* restart the whole protocol */
315 ip = pick();
316 timeout_ms = 0;
317 nprobes = 0;
318 nclaims = 0;
319 }
320 break;
321 default:
322 /* Invalid, should never happen. Restart the whole protocol */
323 debug("invalid state -- starting over\n");
324 state = PROBE;
325 ip = pick();
326 timeout_ms = 0;
327 nprobes = 0;
328 nclaims = 0;
329 break;
330 }
331 configure_wait();
332 }
333
File was created 1 /*
2 * RFC3927 ZeroConf IPv4 Link-Local addressing
3 * (see <http://www.zeroconf.org/>)
4 *
5 * Copied from BusyBox - networking/zcip.c
6 *
7 * Copyright (C) 2003 by Arthur van Hoff (avh@strangeberry.com)
8 * Copyright (C) 2004 by David Brownell
9 *
10 * Licensed under the GPL v2 or later
11 */
12
13 #if defined(CONFIG_CMD_LINK_LOCAL)
14
15 #ifndef __LINK_LOCAL_H__
16 #define __LINK_LOCAL_H__
17
18 #include <common.h>
19
20 void link_local_receive_arp(struct arp_hdr *arp, int len);
21 void link_local_start(void);
22
23 #endif /* __LINK_LOCAL_H__ */
24 #endif
25
1 /* 1 /*
2 * Copied from Linux Monitor (LiMon) - Networking. 2 * Copied from Linux Monitor (LiMon) - Networking.
3 * 3 *
4 * Copyright 1994 - 2000 Neil Russell. 4 * Copyright 1994 - 2000 Neil Russell.
5 * (See License) 5 * (See License)
6 * Copyright 2000 Roland Borde 6 * Copyright 2000 Roland Borde
7 * Copyright 2000 Paolo Scaffardi 7 * Copyright 2000 Paolo Scaffardi
8 * Copyright 2000-2002 Wolfgang Denk, wd@denx.de 8 * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
9 */ 9 */
10 10
11 /* 11 /*
12 * General Desription: 12 * General Desription:
13 * 13 *
14 * The user interface supports commands for BOOTP, RARP, and TFTP. 14 * The user interface supports commands for BOOTP, RARP, and TFTP.
15 * Also, we support ARP internally. Depending on available data, 15 * Also, we support ARP internally. Depending on available data,
16 * these interact as follows: 16 * these interact as follows:
17 * 17 *
18 * BOOTP: 18 * BOOTP:
19 * 19 *
20 * Prerequisites: - own ethernet address 20 * Prerequisites: - own ethernet address
21 * We want: - own IP address 21 * We want: - own IP address
22 * - TFTP server IP address 22 * - TFTP server IP address
23 * - name of bootfile 23 * - name of bootfile
24 * Next step: ARP 24 * Next step: ARP
25 * 25 *
26 * LINK_LOCAL:
27 *
28 * Prerequisites: - own ethernet address
29 * We want: - own IP address
30 * Next step: ARP
31 *
26 * RARP: 32 * RARP:
27 * 33 *
28 * Prerequisites: - own ethernet address 34 * Prerequisites: - own ethernet address
29 * We want: - own IP address 35 * We want: - own IP address
30 * - TFTP server IP address 36 * - TFTP server IP address
31 * Next step: ARP 37 * Next step: ARP
32 * 38 *
33 * ARP: 39 * ARP:
34 * 40 *
35 * Prerequisites: - own ethernet address 41 * Prerequisites: - own ethernet address
36 * - own IP address 42 * - own IP address
37 * - TFTP server IP address 43 * - TFTP server IP address
38 * We want: - TFTP server ethernet address 44 * We want: - TFTP server ethernet address
39 * Next step: TFTP 45 * Next step: TFTP
40 * 46 *
41 * DHCP: 47 * DHCP:
42 * 48 *
43 * Prerequisites: - own ethernet address 49 * Prerequisites: - own ethernet address
44 * We want: - IP, Netmask, ServerIP, Gateway IP 50 * We want: - IP, Netmask, ServerIP, Gateway IP
45 * - bootfilename, lease time 51 * - bootfilename, lease time
46 * Next step: - TFTP 52 * Next step: - TFTP
47 * 53 *
48 * TFTP: 54 * TFTP:
49 * 55 *
50 * Prerequisites: - own ethernet address 56 * Prerequisites: - own ethernet address
51 * - own IP address 57 * - own IP address
52 * - TFTP server IP address 58 * - TFTP server IP address
53 * - TFTP server ethernet address 59 * - TFTP server ethernet address
54 * - name of bootfile (if unknown, we use a default name 60 * - name of bootfile (if unknown, we use a default name
55 * derived from our own IP address) 61 * derived from our own IP address)
56 * We want: - load the boot file 62 * We want: - load the boot file
57 * Next step: none 63 * Next step: none
58 * 64 *
59 * NFS: 65 * NFS:
60 * 66 *
61 * Prerequisites: - own ethernet address 67 * Prerequisites: - own ethernet address
62 * - own IP address 68 * - own IP address
63 * - name of bootfile (if unknown, we use a default name 69 * - name of bootfile (if unknown, we use a default name
64 * derived from our own IP address) 70 * derived from our own IP address)
65 * We want: - load the boot file 71 * We want: - load the boot file
66 * Next step: none 72 * Next step: none
67 * 73 *
68 * SNTP: 74 * SNTP:
69 * 75 *
70 * Prerequisites: - own ethernet address 76 * Prerequisites: - own ethernet address
71 * - own IP address 77 * - own IP address
72 * We want: - network time 78 * We want: - network time
73 * Next step: none 79 * Next step: none
74 */ 80 */
75 81
76 82
77 #include <common.h> 83 #include <common.h>
78 #include <command.h> 84 #include <command.h>
79 #include <net.h> 85 #include <net.h>
80 #if defined(CONFIG_STATUS_LED) 86 #if defined(CONFIG_STATUS_LED)
81 #include <miiphy.h> 87 #include <miiphy.h>
82 #include <status_led.h> 88 #include <status_led.h>
83 #endif 89 #endif
84 #include <watchdog.h> 90 #include <watchdog.h>
85 #include <linux/compiler.h> 91 #include <linux/compiler.h>
86 #include "arp.h" 92 #include "arp.h"
87 #include "bootp.h" 93 #include "bootp.h"
88 #include "cdp.h" 94 #include "cdp.h"
89 #if defined(CONFIG_CMD_DNS) 95 #if defined(CONFIG_CMD_DNS)
90 #include "dns.h" 96 #include "dns.h"
91 #endif 97 #endif
98 #include "link_local.h"
92 #include "nfs.h" 99 #include "nfs.h"
93 #include "ping.h" 100 #include "ping.h"
94 #include "rarp.h" 101 #include "rarp.h"
95 #if defined(CONFIG_CMD_SNTP) 102 #if defined(CONFIG_CMD_SNTP)
96 #include "sntp.h" 103 #include "sntp.h"
97 #endif 104 #endif
98 #include "tftp.h" 105 #include "tftp.h"
99 106
100 DECLARE_GLOBAL_DATA_PTR; 107 DECLARE_GLOBAL_DATA_PTR;
101 108
102 /** BOOTP EXTENTIONS **/ 109 /** BOOTP EXTENTIONS **/
103 110
104 /* Our subnet mask (0=unknown) */ 111 /* Our subnet mask (0=unknown) */
105 IPaddr_t NetOurSubnetMask; 112 IPaddr_t NetOurSubnetMask;
106 /* Our gateways IP address */ 113 /* Our gateways IP address */
107 IPaddr_t NetOurGatewayIP; 114 IPaddr_t NetOurGatewayIP;
108 /* Our DNS IP address */ 115 /* Our DNS IP address */
109 IPaddr_t NetOurDNSIP; 116 IPaddr_t NetOurDNSIP;
110 #if defined(CONFIG_BOOTP_DNS2) 117 #if defined(CONFIG_BOOTP_DNS2)
111 /* Our 2nd DNS IP address */ 118 /* Our 2nd DNS IP address */
112 IPaddr_t NetOurDNS2IP; 119 IPaddr_t NetOurDNS2IP;
113 #endif 120 #endif
114 /* Our NIS domain */ 121 /* Our NIS domain */
115 char NetOurNISDomain[32] = {0,}; 122 char NetOurNISDomain[32] = {0,};
116 /* Our hostname */ 123 /* Our hostname */
117 char NetOurHostName[32] = {0,}; 124 char NetOurHostName[32] = {0,};
118 /* Our bootpath */ 125 /* Our bootpath */
119 char NetOurRootPath[64] = {0,}; 126 char NetOurRootPath[64] = {0,};
120 /* Our bootfile size in blocks */ 127 /* Our bootfile size in blocks */
121 ushort NetBootFileSize; 128 ushort NetBootFileSize;
122 129
123 #ifdef CONFIG_MCAST_TFTP /* Multicast TFTP */ 130 #ifdef CONFIG_MCAST_TFTP /* Multicast TFTP */
124 IPaddr_t Mcast_addr; 131 IPaddr_t Mcast_addr;
125 #endif 132 #endif
126 133
127 /** END OF BOOTP EXTENTIONS **/ 134 /** END OF BOOTP EXTENTIONS **/
128 135
129 /* The actual transferred size of the bootfile (in bytes) */ 136 /* The actual transferred size of the bootfile (in bytes) */
130 ulong NetBootFileXferSize; 137 ulong NetBootFileXferSize;
131 /* Our ethernet address */ 138 /* Our ethernet address */
132 uchar NetOurEther[6]; 139 uchar NetOurEther[6];
133 /* Boot server enet address */ 140 /* Boot server enet address */
134 uchar NetServerEther[6]; 141 uchar NetServerEther[6];
135 /* Our IP addr (0 = unknown) */ 142 /* Our IP addr (0 = unknown) */
136 IPaddr_t NetOurIP; 143 IPaddr_t NetOurIP;
137 /* Server IP addr (0 = unknown) */ 144 /* Server IP addr (0 = unknown) */
138 IPaddr_t NetServerIP; 145 IPaddr_t NetServerIP;
139 /* Current receive packet */ 146 /* Current receive packet */
140 uchar *NetRxPacket; 147 uchar *NetRxPacket;
141 /* Current rx packet length */ 148 /* Current rx packet length */
142 int NetRxPacketLen; 149 int NetRxPacketLen;
143 /* IP packet ID */ 150 /* IP packet ID */
144 unsigned NetIPID; 151 unsigned NetIPID;
145 /* Ethernet bcast address */ 152 /* Ethernet bcast address */
146 uchar NetBcastAddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; 153 uchar NetBcastAddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
147 uchar NetEtherNullAddr[6]; 154 uchar NetEtherNullAddr[6];
148 #ifdef CONFIG_API 155 #ifdef CONFIG_API
149 void (*push_packet)(void *, int len) = 0; 156 void (*push_packet)(void *, int len) = 0;
150 #endif 157 #endif
151 /* Network loop state */ 158 /* Network loop state */
152 enum net_loop_state net_state; 159 enum net_loop_state net_state;
153 /* Tried all network devices */ 160 /* Tried all network devices */
154 int NetRestartWrap; 161 int NetRestartWrap;
155 /* Network loop restarted */ 162 /* Network loop restarted */
156 static int NetRestarted; 163 static int NetRestarted;
157 /* At least one device configured */ 164 /* At least one device configured */
158 static int NetDevExists; 165 static int NetDevExists;
159 166
160 /* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */ 167 /* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */
161 /* default is without VLAN */ 168 /* default is without VLAN */
162 ushort NetOurVLAN = 0xFFFF; 169 ushort NetOurVLAN = 0xFFFF;
163 /* ditto */ 170 /* ditto */
164 ushort NetOurNativeVLAN = 0xFFFF; 171 ushort NetOurNativeVLAN = 0xFFFF;
165 172
166 /* Boot File name */ 173 /* Boot File name */
167 char BootFile[128]; 174 char BootFile[128];
168 175
169 #if defined(CONFIG_CMD_SNTP) 176 #if defined(CONFIG_CMD_SNTP)
170 /* NTP server IP address */ 177 /* NTP server IP address */
171 IPaddr_t NetNtpServerIP; 178 IPaddr_t NetNtpServerIP;
172 /* offset time from UTC */ 179 /* offset time from UTC */
173 int NetTimeOffset; 180 int NetTimeOffset;
174 #endif 181 #endif
175 182
176 uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN]; 183 uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
177 184
178 /* Receive packet */ 185 /* Receive packet */
179 uchar *NetRxPackets[PKTBUFSRX]; 186 uchar *NetRxPackets[PKTBUFSRX];
180 187
181 /* Current UDP RX packet handler */ 188 /* Current UDP RX packet handler */
182 static rxhand_f *udp_packet_handler; 189 static rxhand_f *udp_packet_handler;
183 /* Current ARP RX packet handler */ 190 /* Current ARP RX packet handler */
184 static rxhand_f *arp_packet_handler; 191 static rxhand_f *arp_packet_handler;
185 #ifdef CONFIG_CMD_TFTPPUT 192 #ifdef CONFIG_CMD_TFTPPUT
186 /* Current ICMP rx handler */ 193 /* Current ICMP rx handler */
187 static rxhand_icmp_f *packet_icmp_handler; 194 static rxhand_icmp_f *packet_icmp_handler;
188 #endif 195 #endif
189 /* Current timeout handler */ 196 /* Current timeout handler */
190 static thand_f *timeHandler; 197 static thand_f *timeHandler;
191 /* Time base value */ 198 /* Time base value */
192 static ulong timeStart; 199 static ulong timeStart;
193 /* Current timeout value */ 200 /* Current timeout value */
194 static ulong timeDelta; 201 static ulong timeDelta;
195 /* THE transmit packet */ 202 /* THE transmit packet */
196 uchar *NetTxPacket; 203 uchar *NetTxPacket;
197 204
198 static int net_check_prereq(enum proto_t protocol); 205 static int net_check_prereq(enum proto_t protocol);
199 206
200 static int NetTryCount; 207 static int NetTryCount;
201 208
202 /**********************************************************************/ 209 /**********************************************************************/
203 210
204 /* 211 /*
205 * Check if autoload is enabled. If so, use either NFS or TFTP to download 212 * Check if autoload is enabled. If so, use either NFS or TFTP to download
206 * the boot file. 213 * the boot file.
207 */ 214 */
208 void net_auto_load(void) 215 void net_auto_load(void)
209 { 216 {
210 const char *s = getenv("autoload"); 217 const char *s = getenv("autoload");
211 218
212 if (s != NULL) { 219 if (s != NULL) {
213 if (*s == 'n') { 220 if (*s == 'n') {
214 /* 221 /*
215 * Just use BOOTP/RARP to configure system; 222 * Just use BOOTP/RARP to configure system;
216 * Do not use TFTP to load the bootfile. 223 * Do not use TFTP to load the bootfile.
217 */ 224 */
218 net_set_state(NETLOOP_SUCCESS); 225 net_set_state(NETLOOP_SUCCESS);
219 return; 226 return;
220 } 227 }
221 #if defined(CONFIG_CMD_NFS) 228 #if defined(CONFIG_CMD_NFS)
222 if (strcmp(s, "NFS") == 0) { 229 if (strcmp(s, "NFS") == 0) {
223 /* 230 /*
224 * Use NFS to load the bootfile. 231 * Use NFS to load the bootfile.
225 */ 232 */
226 NfsStart(); 233 NfsStart();
227 return; 234 return;
228 } 235 }
229 #endif 236 #endif
230 } 237 }
231 TftpStart(TFTPGET); 238 TftpStart(TFTPGET);
232 } 239 }
233 240
234 static void NetInitLoop(void) 241 static void NetInitLoop(void)
235 { 242 {
236 static int env_changed_id; 243 static int env_changed_id;
237 int env_id = get_env_id(); 244 int env_id = get_env_id();
238 245
239 /* update only when the environment has changed */ 246 /* update only when the environment has changed */
240 if (env_changed_id != env_id) { 247 if (env_changed_id != env_id) {
241 NetOurIP = getenv_IPaddr("ipaddr"); 248 NetOurIP = getenv_IPaddr("ipaddr");
242 NetOurGatewayIP = getenv_IPaddr("gatewayip"); 249 NetOurGatewayIP = getenv_IPaddr("gatewayip");
243 NetOurSubnetMask = getenv_IPaddr("netmask"); 250 NetOurSubnetMask = getenv_IPaddr("netmask");
244 NetServerIP = getenv_IPaddr("serverip"); 251 NetServerIP = getenv_IPaddr("serverip");
245 NetOurNativeVLAN = getenv_VLAN("nvlan"); 252 NetOurNativeVLAN = getenv_VLAN("nvlan");
246 NetOurVLAN = getenv_VLAN("vlan"); 253 NetOurVLAN = getenv_VLAN("vlan");
247 #if defined(CONFIG_CMD_DNS) 254 #if defined(CONFIG_CMD_DNS)
248 NetOurDNSIP = getenv_IPaddr("dnsip"); 255 NetOurDNSIP = getenv_IPaddr("dnsip");
249 #endif 256 #endif
250 env_changed_id = env_id; 257 env_changed_id = env_id;
251 } 258 }
252 259
253 return; 260 return;
254 } 261 }
255 262
256 static void net_clear_handlers(void) 263 static void net_clear_handlers(void)
257 { 264 {
258 net_set_udp_handler(NULL); 265 net_set_udp_handler(NULL);
259 net_set_arp_handler(NULL); 266 net_set_arp_handler(NULL);
260 NetSetTimeout(0, NULL); 267 NetSetTimeout(0, NULL);
261 } 268 }
262 269
263 static void net_cleanup_loop(void) 270 static void net_cleanup_loop(void)
264 { 271 {
265 net_clear_handlers(); 272 net_clear_handlers();
266 } 273 }
267 274
268 void net_init(void) 275 void net_init(void)
269 { 276 {
270 static int first_call = 1; 277 static int first_call = 1;
271 278
272 if (first_call) { 279 if (first_call) {
273 /* 280 /*
274 * Setup packet buffers, aligned correctly. 281 * Setup packet buffers, aligned correctly.
275 */ 282 */
276 int i; 283 int i;
277 284
278 NetTxPacket = &PktBuf[0] + (PKTALIGN - 1); 285 NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
279 NetTxPacket -= (ulong)NetTxPacket % PKTALIGN; 286 NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
280 for (i = 0; i < PKTBUFSRX; i++) 287 for (i = 0; i < PKTBUFSRX; i++)
281 NetRxPackets[i] = NetTxPacket + (i + 1) * PKTSIZE_ALIGN; 288 NetRxPackets[i] = NetTxPacket + (i + 1) * PKTSIZE_ALIGN;
282 289
283 ArpInit(); 290 ArpInit();
284 net_clear_handlers(); 291 net_clear_handlers();
285 292
286 /* Only need to setup buffer pointers once. */ 293 /* Only need to setup buffer pointers once. */
287 first_call = 0; 294 first_call = 0;
288 } 295 }
289 296
290 NetInitLoop(); 297 NetInitLoop();
291 } 298 }
292 299
293 /**********************************************************************/ 300 /**********************************************************************/
294 /* 301 /*
295 * Main network processing loop. 302 * Main network processing loop.
296 */ 303 */
297 304
298 int NetLoop(enum proto_t protocol) 305 int NetLoop(enum proto_t protocol)
299 { 306 {
300 bd_t *bd = gd->bd; 307 bd_t *bd = gd->bd;
301 int ret = -1; 308 int ret = -1;
302 309
303 NetRestarted = 0; 310 NetRestarted = 0;
304 NetDevExists = 0; 311 NetDevExists = 0;
305 NetTryCount = 1; 312 NetTryCount = 1;
306 313
307 bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start"); 314 bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start");
308 net_init(); 315 net_init();
309 eth_halt(); 316 eth_halt();
310 eth_set_current(); 317 eth_set_current();
311 if (eth_init(bd) < 0) { 318 if (eth_init(bd) < 0) {
312 eth_halt(); 319 eth_halt();
313 return -1; 320 return -1;
314 } 321 }
315 322
316 restart: 323 restart:
317 memcpy(NetOurEther, eth_get_dev()->enetaddr, 6); 324 memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);
318 325
319 net_set_state(NETLOOP_CONTINUE); 326 net_set_state(NETLOOP_CONTINUE);
320 327
321 /* 328 /*
322 * Start the ball rolling with the given start function. From 329 * Start the ball rolling with the given start function. From
323 * here on, this code is a state machine driven by received 330 * here on, this code is a state machine driven by received
324 * packets and timer events. 331 * packets and timer events.
325 */ 332 */
326 NetInitLoop(); 333 NetInitLoop();
327 334
328 switch (net_check_prereq(protocol)) { 335 switch (net_check_prereq(protocol)) {
329 case 1: 336 case 1:
330 /* network not configured */ 337 /* network not configured */
331 eth_halt(); 338 eth_halt();
332 return -1; 339 return -1;
333 340
334 case 2: 341 case 2:
335 /* network device not configured */ 342 /* network device not configured */
336 break; 343 break;
337 344
338 case 0: 345 case 0:
339 NetDevExists = 1; 346 NetDevExists = 1;
340 NetBootFileXferSize = 0; 347 NetBootFileXferSize = 0;
341 switch (protocol) { 348 switch (protocol) {
342 case TFTPGET: 349 case TFTPGET:
343 #ifdef CONFIG_CMD_TFTPPUT 350 #ifdef CONFIG_CMD_TFTPPUT
344 case TFTPPUT: 351 case TFTPPUT:
345 #endif 352 #endif
346 /* always use ARP to get server ethernet address */ 353 /* always use ARP to get server ethernet address */
347 TftpStart(protocol); 354 TftpStart(protocol);
348 break; 355 break;
349 #ifdef CONFIG_CMD_TFTPSRV 356 #ifdef CONFIG_CMD_TFTPSRV
350 case TFTPSRV: 357 case TFTPSRV:
351 TftpStartServer(); 358 TftpStartServer();
352 break; 359 break;
353 #endif 360 #endif
354 #if defined(CONFIG_CMD_DHCP) 361 #if defined(CONFIG_CMD_DHCP)
355 case DHCP: 362 case DHCP:
356 BootpTry = 0; 363 BootpTry = 0;
357 NetOurIP = 0; 364 NetOurIP = 0;
358 DhcpRequest(); /* Basically same as BOOTP */ 365 DhcpRequest(); /* Basically same as BOOTP */
359 break; 366 break;
360 #endif 367 #endif
361 368
362 case BOOTP: 369 case BOOTP:
363 BootpTry = 0; 370 BootpTry = 0;
364 NetOurIP = 0; 371 NetOurIP = 0;
365 BootpRequest(); 372 BootpRequest();
366 break; 373 break;
367 374
368 #if defined(CONFIG_CMD_RARP) 375 #if defined(CONFIG_CMD_RARP)
369 case RARP: 376 case RARP:
370 RarpTry = 0; 377 RarpTry = 0;
371 NetOurIP = 0; 378 NetOurIP = 0;
372 RarpRequest(); 379 RarpRequest();
373 break; 380 break;
374 #endif 381 #endif
375 #if defined(CONFIG_CMD_PING) 382 #if defined(CONFIG_CMD_PING)
376 case PING: 383 case PING:
377 ping_start(); 384 ping_start();
378 break; 385 break;
379 #endif 386 #endif
380 #if defined(CONFIG_CMD_NFS) 387 #if defined(CONFIG_CMD_NFS)
381 case NFS: 388 case NFS:
382 NfsStart(); 389 NfsStart();
383 break; 390 break;
384 #endif 391 #endif
385 #if defined(CONFIG_CMD_CDP) 392 #if defined(CONFIG_CMD_CDP)
386 case CDP: 393 case CDP:
387 CDPStart(); 394 CDPStart();
388 break; 395 break;
389 #endif 396 #endif
390 #ifdef CONFIG_NETCONSOLE 397 #ifdef CONFIG_NETCONSOLE
391 case NETCONS: 398 case NETCONS:
392 NcStart(); 399 NcStart();
393 break; 400 break;
394 #endif 401 #endif
395 #if defined(CONFIG_CMD_SNTP) 402 #if defined(CONFIG_CMD_SNTP)
396 case SNTP: 403 case SNTP:
397 SntpStart(); 404 SntpStart();
398 break; 405 break;
399 #endif 406 #endif
400 #if defined(CONFIG_CMD_DNS) 407 #if defined(CONFIG_CMD_DNS)
401 case DNS: 408 case DNS:
402 DnsStart(); 409 DnsStart();
403 break; 410 break;
404 #endif 411 #endif
412 #if defined(CONFIG_CMD_LINK_LOCAL)
413 case LINKLOCAL:
414 link_local_start();
415 break;
416 #endif
405 default: 417 default:
406 break; 418 break;
407 } 419 }
408 420
409 break; 421 break;
410 } 422 }
411 423
412 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) 424 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
413 #if defined(CONFIG_SYS_FAULT_ECHO_LINK_DOWN) && \ 425 #if defined(CONFIG_SYS_FAULT_ECHO_LINK_DOWN) && \
414 defined(CONFIG_STATUS_LED) && \ 426 defined(CONFIG_STATUS_LED) && \
415 defined(STATUS_LED_RED) 427 defined(STATUS_LED_RED)
416 /* 428 /*
417 * Echo the inverted link state to the fault LED. 429 * Echo the inverted link state to the fault LED.
418 */ 430 */
419 if (miiphy_link(eth_get_dev()->name, CONFIG_SYS_FAULT_MII_ADDR)) 431 if (miiphy_link(eth_get_dev()->name, CONFIG_SYS_FAULT_MII_ADDR))
420 status_led_set(STATUS_LED_RED, STATUS_LED_OFF); 432 status_led_set(STATUS_LED_RED, STATUS_LED_OFF);
421 else 433 else
422 status_led_set(STATUS_LED_RED, STATUS_LED_ON); 434 status_led_set(STATUS_LED_RED, STATUS_LED_ON);
423 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */ 435 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */
424 #endif /* CONFIG_MII, ... */ 436 #endif /* CONFIG_MII, ... */
425 437
426 /* 438 /*
427 * Main packet reception loop. Loop receiving packets until 439 * Main packet reception loop. Loop receiving packets until
428 * someone sets `net_state' to a state that terminates. 440 * someone sets `net_state' to a state that terminates.
429 */ 441 */
430 for (;;) { 442 for (;;) {
431 WATCHDOG_RESET(); 443 WATCHDOG_RESET();
432 #ifdef CONFIG_SHOW_ACTIVITY 444 #ifdef CONFIG_SHOW_ACTIVITY
433 show_activity(1); 445 show_activity(1);
434 #endif 446 #endif
435 /* 447 /*
436 * Check the ethernet for a new packet. The ethernet 448 * Check the ethernet for a new packet. The ethernet
437 * receive routine will process it. 449 * receive routine will process it.
438 */ 450 */
439 eth_rx(); 451 eth_rx();
440 452
441 /* 453 /*
442 * Abort if ctrl-c was pressed. 454 * Abort if ctrl-c was pressed.
443 */ 455 */
444 if (ctrlc()) { 456 if (ctrlc()) {
445 /* cancel any ARP that may not have completed */ 457 /* cancel any ARP that may not have completed */
446 NetArpWaitPacketIP = 0; 458 NetArpWaitPacketIP = 0;
447 459
448 net_cleanup_loop(); 460 net_cleanup_loop();
449 eth_halt(); 461 eth_halt();
450 puts("\nAbort\n"); 462 puts("\nAbort\n");
451 goto done; 463 goto done;
452 } 464 }
453 465
454 ArpTimeoutCheck(); 466 ArpTimeoutCheck();
455 467
456 /* 468 /*
457 * Check for a timeout, and run the timeout handler 469 * Check for a timeout, and run the timeout handler
458 * if we have one. 470 * if we have one.
459 */ 471 */
460 if (timeHandler && ((get_timer(0) - timeStart) > timeDelta)) { 472 if (timeHandler && ((get_timer(0) - timeStart) > timeDelta)) {
461 thand_f *x; 473 thand_f *x;
462 474
463 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) 475 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
464 #if defined(CONFIG_SYS_FAULT_ECHO_LINK_DOWN) && \ 476 #if defined(CONFIG_SYS_FAULT_ECHO_LINK_DOWN) && \
465 defined(CONFIG_STATUS_LED) && \ 477 defined(CONFIG_STATUS_LED) && \
466 defined(STATUS_LED_RED) 478 defined(STATUS_LED_RED)
467 /* 479 /*
468 * Echo the inverted link state to the fault LED. 480 * Echo the inverted link state to the fault LED.
469 */ 481 */
470 if (miiphy_link(eth_get_dev()->name, 482 if (miiphy_link(eth_get_dev()->name,
471 CONFIG_SYS_FAULT_MII_ADDR)) { 483 CONFIG_SYS_FAULT_MII_ADDR)) {
472 status_led_set(STATUS_LED_RED, STATUS_LED_OFF); 484 status_led_set(STATUS_LED_RED, STATUS_LED_OFF);
473 } else { 485 } else {
474 status_led_set(STATUS_LED_RED, STATUS_LED_ON); 486 status_led_set(STATUS_LED_RED, STATUS_LED_ON);
475 } 487 }
476 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */ 488 #endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */
477 #endif /* CONFIG_MII, ... */ 489 #endif /* CONFIG_MII, ... */
478 x = timeHandler; 490 x = timeHandler;
479 timeHandler = (thand_f *)0; 491 timeHandler = (thand_f *)0;
480 (*x)(); 492 (*x)();
481 } 493 }
482 494
483 495
484 switch (net_state) { 496 switch (net_state) {
485 497
486 case NETLOOP_RESTART: 498 case NETLOOP_RESTART:
487 NetRestarted = 1; 499 NetRestarted = 1;
488 goto restart; 500 goto restart;
489 501
490 case NETLOOP_SUCCESS: 502 case NETLOOP_SUCCESS:
491 net_cleanup_loop(); 503 net_cleanup_loop();
492 if (NetBootFileXferSize > 0) { 504 if (NetBootFileXferSize > 0) {
493 char buf[20]; 505 char buf[20];
494 printf("Bytes transferred = %ld (%lx hex)\n", 506 printf("Bytes transferred = %ld (%lx hex)\n",
495 NetBootFileXferSize, 507 NetBootFileXferSize,
496 NetBootFileXferSize); 508 NetBootFileXferSize);
497 sprintf(buf, "%lX", NetBootFileXferSize); 509 sprintf(buf, "%lX", NetBootFileXferSize);
498 setenv("filesize", buf); 510 setenv("filesize", buf);
499 511
500 sprintf(buf, "%lX", (unsigned long)load_addr); 512 sprintf(buf, "%lX", (unsigned long)load_addr);
501 setenv("fileaddr", buf); 513 setenv("fileaddr", buf);
502 } 514 }
503 eth_halt(); 515 eth_halt();
504 ret = NetBootFileXferSize; 516 ret = NetBootFileXferSize;
505 goto done; 517 goto done;
506 518
507 case NETLOOP_FAIL: 519 case NETLOOP_FAIL:
508 net_cleanup_loop(); 520 net_cleanup_loop();
509 goto done; 521 goto done;
510 522
511 case NETLOOP_CONTINUE: 523 case NETLOOP_CONTINUE:
512 continue; 524 continue;
513 } 525 }
514 } 526 }
515 527
516 done: 528 done:
517 #ifdef CONFIG_CMD_TFTPPUT 529 #ifdef CONFIG_CMD_TFTPPUT
518 /* Clear out the handlers */ 530 /* Clear out the handlers */
519 net_set_udp_handler(NULL); 531 net_set_udp_handler(NULL);
520 net_set_icmp_handler(NULL); 532 net_set_icmp_handler(NULL);
521 #endif 533 #endif
522 return ret; 534 return ret;
523 } 535 }
524 536
525 /**********************************************************************/ 537 /**********************************************************************/
526 538
527 static void 539 static void
528 startAgainTimeout(void) 540 startAgainTimeout(void)
529 { 541 {
530 net_set_state(NETLOOP_RESTART); 542 net_set_state(NETLOOP_RESTART);
531 } 543 }
532 544
533 void NetStartAgain(void) 545 void NetStartAgain(void)
534 { 546 {
535 char *nretry; 547 char *nretry;
536 int retry_forever = 0; 548 int retry_forever = 0;
537 unsigned long retrycnt = 0; 549 unsigned long retrycnt = 0;
538 550
539 nretry = getenv("netretry"); 551 nretry = getenv("netretry");
540 if (nretry) { 552 if (nretry) {
541 if (!strcmp(nretry, "yes")) 553 if (!strcmp(nretry, "yes"))
542 retry_forever = 1; 554 retry_forever = 1;
543 else if (!strcmp(nretry, "no")) 555 else if (!strcmp(nretry, "no"))
544 retrycnt = 0; 556 retrycnt = 0;
545 else if (!strcmp(nretry, "once")) 557 else if (!strcmp(nretry, "once"))
546 retrycnt = 1; 558 retrycnt = 1;
547 else 559 else
548 retrycnt = simple_strtoul(nretry, NULL, 0); 560 retrycnt = simple_strtoul(nretry, NULL, 0);
549 } else 561 } else
550 retry_forever = 1; 562 retry_forever = 1;
551 563
552 if ((!retry_forever) && (NetTryCount >= retrycnt)) { 564 if ((!retry_forever) && (NetTryCount >= retrycnt)) {
553 eth_halt(); 565 eth_halt();
554 net_set_state(NETLOOP_FAIL); 566 net_set_state(NETLOOP_FAIL);
555 return; 567 return;
556 } 568 }
557 569
558 NetTryCount++; 570 NetTryCount++;
559 571
560 eth_halt(); 572 eth_halt();
561 #if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER) 573 #if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER)
562 eth_try_another(!NetRestarted); 574 eth_try_another(!NetRestarted);
563 #endif 575 #endif
564 eth_init(gd->bd); 576 eth_init(gd->bd);
565 if (NetRestartWrap) { 577 if (NetRestartWrap) {
566 NetRestartWrap = 0; 578 NetRestartWrap = 0;
567 if (NetDevExists) { 579 if (NetDevExists) {
568 NetSetTimeout(10000UL, startAgainTimeout); 580 NetSetTimeout(10000UL, startAgainTimeout);
569 net_set_udp_handler(NULL); 581 net_set_udp_handler(NULL);
570 } else { 582 } else {
571 net_set_state(NETLOOP_FAIL); 583 net_set_state(NETLOOP_FAIL);
572 } 584 }
573 } else { 585 } else {
574 net_set_state(NETLOOP_RESTART); 586 net_set_state(NETLOOP_RESTART);
575 } 587 }
576 } 588 }
577 589
578 /**********************************************************************/ 590 /**********************************************************************/
579 /* 591 /*
580 * Miscelaneous bits. 592 * Miscelaneous bits.
581 */ 593 */
582 594
583 static void dummy_handler(uchar *pkt, unsigned dport, 595 static void dummy_handler(uchar *pkt, unsigned dport,
584 IPaddr_t sip, unsigned sport, 596 IPaddr_t sip, unsigned sport,
585 unsigned len) 597 unsigned len)
586 { 598 {
587 } 599 }
588 600
589 rxhand_f *net_get_udp_handler(void) 601 rxhand_f *net_get_udp_handler(void)
590 { 602 {
591 return udp_packet_handler; 603 return udp_packet_handler;
592 } 604 }
593 605
594 void net_set_udp_handler(rxhand_f *f) 606 void net_set_udp_handler(rxhand_f *f)
595 { 607 {
596 if (f == NULL) 608 if (f == NULL)
597 udp_packet_handler = dummy_handler; 609 udp_packet_handler = dummy_handler;
598 else 610 else
599 udp_packet_handler = f; 611 udp_packet_handler = f;
600 } 612 }
601 613
602 rxhand_f *net_get_arp_handler(void) 614 rxhand_f *net_get_arp_handler(void)
603 { 615 {
604 return arp_packet_handler; 616 return arp_packet_handler;
605 } 617 }
606 618
607 void net_set_arp_handler(rxhand_f *f) 619 void net_set_arp_handler(rxhand_f *f)
608 { 620 {
609 if (f == NULL) 621 if (f == NULL)
610 arp_packet_handler = dummy_handler; 622 arp_packet_handler = dummy_handler;
611 else 623 else
612 arp_packet_handler = f; 624 arp_packet_handler = f;
613 } 625 }
614 626
615 #ifdef CONFIG_CMD_TFTPPUT 627 #ifdef CONFIG_CMD_TFTPPUT
616 void net_set_icmp_handler(rxhand_icmp_f *f) 628 void net_set_icmp_handler(rxhand_icmp_f *f)
617 { 629 {
618 packet_icmp_handler = f; 630 packet_icmp_handler = f;
619 } 631 }
620 #endif 632 #endif
621 633
622 void 634 void
623 NetSetTimeout(ulong iv, thand_f *f) 635 NetSetTimeout(ulong iv, thand_f *f)
624 { 636 {
625 if (iv == 0) { 637 if (iv == 0) {
626 timeHandler = (thand_f *)0; 638 timeHandler = (thand_f *)0;
627 } else { 639 } else {
628 timeHandler = f; 640 timeHandler = f;
629 timeStart = get_timer(0); 641 timeStart = get_timer(0);
630 timeDelta = iv; 642 timeDelta = iv;
631 } 643 }
632 } 644 }
633 645
634 int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, 646 int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
635 int payload_len) 647 int payload_len)
636 { 648 {
637 uchar *pkt; 649 uchar *pkt;
638 int eth_hdr_size; 650 int eth_hdr_size;
639 int pkt_hdr_size; 651 int pkt_hdr_size;
640 652
641 /* make sure the NetTxPacket is initialized (NetInit() was called) */ 653 /* make sure the NetTxPacket is initialized (NetInit() was called) */
642 assert(NetTxPacket != NULL); 654 assert(NetTxPacket != NULL);
643 if (NetTxPacket == NULL) 655 if (NetTxPacket == NULL)
644 return -1; 656 return -1;
645 657
646 /* convert to new style broadcast */ 658 /* convert to new style broadcast */
647 if (dest == 0) 659 if (dest == 0)
648 dest = 0xFFFFFFFF; 660 dest = 0xFFFFFFFF;
649 661
650 /* if broadcast, make the ether address a broadcast and don't do ARP */ 662 /* if broadcast, make the ether address a broadcast and don't do ARP */
651 if (dest == 0xFFFFFFFF) 663 if (dest == 0xFFFFFFFF)
652 ether = NetBcastAddr; 664 ether = NetBcastAddr;
653 665
654 pkt = (uchar *)NetTxPacket; 666 pkt = (uchar *)NetTxPacket;
655 667
656 eth_hdr_size = NetSetEther(pkt, ether, PROT_IP); 668 eth_hdr_size = NetSetEther(pkt, ether, PROT_IP);
657 pkt += eth_hdr_size; 669 pkt += eth_hdr_size;
658 net_set_udp_header(pkt, dest, dport, sport, payload_len); 670 net_set_udp_header(pkt, dest, dport, sport, payload_len);
659 pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE; 671 pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE;
660 672
661 /* if MAC address was not discovered yet, do an ARP request */ 673 /* if MAC address was not discovered yet, do an ARP request */
662 if (memcmp(ether, NetEtherNullAddr, 6) == 0) { 674 if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
663 debug("sending ARP for %pI4\n", &dest); 675 debug("sending ARP for %pI4\n", &dest);
664 676
665 /* save the ip and eth addr for the packet to send after arp */ 677 /* save the ip and eth addr for the packet to send after arp */
666 NetArpWaitPacketIP = dest; 678 NetArpWaitPacketIP = dest;
667 NetArpWaitPacketMAC = ether; 679 NetArpWaitPacketMAC = ether;
668 680
669 /* size of the waiting packet */ 681 /* size of the waiting packet */
670 NetArpWaitTxPacketSize = pkt_hdr_size + payload_len; 682 NetArpWaitTxPacketSize = pkt_hdr_size + payload_len;
671 683
672 /* and do the ARP request */ 684 /* and do the ARP request */
673 NetArpWaitTry = 1; 685 NetArpWaitTry = 1;
674 NetArpWaitTimerStart = get_timer(0); 686 NetArpWaitTimerStart = get_timer(0);
675 ArpRequest(); 687 ArpRequest();
676 return 1; /* waiting */ 688 return 1; /* waiting */
677 } else { 689 } else {
678 debug("sending UDP to %pI4/%pM\n", &dest, ether); 690 debug("sending UDP to %pI4/%pM\n", &dest, ether);
679 NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len); 691 NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len);
680 return 0; /* transmitted */ 692 return 0; /* transmitted */
681 } 693 }
682 } 694 }
683 695
684 #ifdef CONFIG_IP_DEFRAG 696 #ifdef CONFIG_IP_DEFRAG
685 /* 697 /*
686 * This function collects fragments in a single packet, according 698 * This function collects fragments in a single packet, according
687 * to the algorithm in RFC815. It returns NULL or the pointer to 699 * to the algorithm in RFC815. It returns NULL or the pointer to
688 * a complete packet, in static storage 700 * a complete packet, in static storage
689 */ 701 */
690 #ifndef CONFIG_NET_MAXDEFRAG 702 #ifndef CONFIG_NET_MAXDEFRAG
691 #define CONFIG_NET_MAXDEFRAG 16384 703 #define CONFIG_NET_MAXDEFRAG 16384
692 #endif 704 #endif
693 /* 705 /*
694 * MAXDEFRAG, above, is chosen in the config file and is real data 706 * MAXDEFRAG, above, is chosen in the config file and is real data
695 * so we need to add the NFS overhead, which is more than TFTP. 707 * so we need to add the NFS overhead, which is more than TFTP.
696 * To use sizeof in the internal unnamed structures, we need a real 708 * To use sizeof in the internal unnamed structures, we need a real
697 * instance (can't do "sizeof(struct rpc_t.u.reply))", unfortunately). 709 * instance (can't do "sizeof(struct rpc_t.u.reply))", unfortunately).
698 * The compiler doesn't complain nor allocates the actual structure 710 * The compiler doesn't complain nor allocates the actual structure
699 */ 711 */
700 static struct rpc_t rpc_specimen; 712 static struct rpc_t rpc_specimen;
701 #define IP_PKTSIZE (CONFIG_NET_MAXDEFRAG + sizeof(rpc_specimen.u.reply)) 713 #define IP_PKTSIZE (CONFIG_NET_MAXDEFRAG + sizeof(rpc_specimen.u.reply))
702 714
703 #define IP_MAXUDP (IP_PKTSIZE - IP_HDR_SIZE) 715 #define IP_MAXUDP (IP_PKTSIZE - IP_HDR_SIZE)
704 716
705 /* 717 /*
706 * this is the packet being assembled, either data or frag control. 718 * this is the packet being assembled, either data or frag control.
707 * Fragments go by 8 bytes, so this union must be 8 bytes long 719 * Fragments go by 8 bytes, so this union must be 8 bytes long
708 */ 720 */
709 struct hole { 721 struct hole {
710 /* first_byte is address of this structure */ 722 /* first_byte is address of this structure */
711 u16 last_byte; /* last byte in this hole + 1 (begin of next hole) */ 723 u16 last_byte; /* last byte in this hole + 1 (begin of next hole) */
712 u16 next_hole; /* index of next (in 8-b blocks), 0 == none */ 724 u16 next_hole; /* index of next (in 8-b blocks), 0 == none */
713 u16 prev_hole; /* index of prev, 0 == none */ 725 u16 prev_hole; /* index of prev, 0 == none */
714 u16 unused; 726 u16 unused;
715 }; 727 };
716 728
717 static struct ip_udp_hdr *__NetDefragment(struct ip_udp_hdr *ip, int *lenp) 729 static struct ip_udp_hdr *__NetDefragment(struct ip_udp_hdr *ip, int *lenp)
718 { 730 {
719 static uchar pkt_buff[IP_PKTSIZE] __aligned(PKTALIGN); 731 static uchar pkt_buff[IP_PKTSIZE] __aligned(PKTALIGN);
720 static u16 first_hole, total_len; 732 static u16 first_hole, total_len;
721 struct hole *payload, *thisfrag, *h, *newh; 733 struct hole *payload, *thisfrag, *h, *newh;
722 struct ip_udp_hdr *localip = (struct ip_udp_hdr *)pkt_buff; 734 struct ip_udp_hdr *localip = (struct ip_udp_hdr *)pkt_buff;
723 uchar *indata = (uchar *)ip; 735 uchar *indata = (uchar *)ip;
724 int offset8, start, len, done = 0; 736 int offset8, start, len, done = 0;
725 u16 ip_off = ntohs(ip->ip_off); 737 u16 ip_off = ntohs(ip->ip_off);
726 738
727 /* payload starts after IP header, this fragment is in there */ 739 /* payload starts after IP header, this fragment is in there */
728 payload = (struct hole *)(pkt_buff + IP_HDR_SIZE); 740 payload = (struct hole *)(pkt_buff + IP_HDR_SIZE);
729 offset8 = (ip_off & IP_OFFS); 741 offset8 = (ip_off & IP_OFFS);
730 thisfrag = payload + offset8; 742 thisfrag = payload + offset8;
731 start = offset8 * 8; 743 start = offset8 * 8;
732 len = ntohs(ip->ip_len) - IP_HDR_SIZE; 744 len = ntohs(ip->ip_len) - IP_HDR_SIZE;
733 745
734 if (start + len > IP_MAXUDP) /* fragment extends too far */ 746 if (start + len > IP_MAXUDP) /* fragment extends too far */
735 return NULL; 747 return NULL;
736 748
737 if (!total_len || localip->ip_id != ip->ip_id) { 749 if (!total_len || localip->ip_id != ip->ip_id) {
738 /* new (or different) packet, reset structs */ 750 /* new (or different) packet, reset structs */
739 total_len = 0xffff; 751 total_len = 0xffff;
740 payload[0].last_byte = ~0; 752 payload[0].last_byte = ~0;
741 payload[0].next_hole = 0; 753 payload[0].next_hole = 0;
742 payload[0].prev_hole = 0; 754 payload[0].prev_hole = 0;
743 first_hole = 0; 755 first_hole = 0;
744 /* any IP header will work, copy the first we received */ 756 /* any IP header will work, copy the first we received */
745 memcpy(localip, ip, IP_HDR_SIZE); 757 memcpy(localip, ip, IP_HDR_SIZE);
746 } 758 }
747 759
748 /* 760 /*
749 * What follows is the reassembly algorithm. We use the payload 761 * What follows is the reassembly algorithm. We use the payload
750 * array as a linked list of hole descriptors, as each hole starts 762 * array as a linked list of hole descriptors, as each hole starts
751 * at a multiple of 8 bytes. However, last byte can be whatever value, 763 * at a multiple of 8 bytes. However, last byte can be whatever value,
752 * so it is represented as byte count, not as 8-byte blocks. 764 * so it is represented as byte count, not as 8-byte blocks.
753 */ 765 */
754 766
755 h = payload + first_hole; 767 h = payload + first_hole;
756 while (h->last_byte < start) { 768 while (h->last_byte < start) {
757 if (!h->next_hole) { 769 if (!h->next_hole) {
758 /* no hole that far away */ 770 /* no hole that far away */
759 return NULL; 771 return NULL;
760 } 772 }
761 h = payload + h->next_hole; 773 h = payload + h->next_hole;
762 } 774 }
763 775
764 /* last fragment may be 1..7 bytes, the "+7" forces acceptance */ 776 /* last fragment may be 1..7 bytes, the "+7" forces acceptance */
765 if (offset8 + ((len + 7) / 8) <= h - payload) { 777 if (offset8 + ((len + 7) / 8) <= h - payload) {
766 /* no overlap with holes (dup fragment?) */ 778 /* no overlap with holes (dup fragment?) */
767 return NULL; 779 return NULL;
768 } 780 }
769 781
770 if (!(ip_off & IP_FLAGS_MFRAG)) { 782 if (!(ip_off & IP_FLAGS_MFRAG)) {
771 /* no more fragmentss: truncate this (last) hole */ 783 /* no more fragmentss: truncate this (last) hole */
772 total_len = start + len; 784 total_len = start + len;
773 h->last_byte = start + len; 785 h->last_byte = start + len;
774 } 786 }
775 787
776 /* 788 /*
777 * There is some overlap: fix the hole list. This code doesn't 789 * There is some overlap: fix the hole list. This code doesn't
778 * deal with a fragment that overlaps with two different holes 790 * deal with a fragment that overlaps with two different holes
779 * (thus being a superset of a previously-received fragment). 791 * (thus being a superset of a previously-received fragment).
780 */ 792 */
781 793
782 if ((h >= thisfrag) && (h->last_byte <= start + len)) { 794 if ((h >= thisfrag) && (h->last_byte <= start + len)) {
783 /* complete overlap with hole: remove hole */ 795 /* complete overlap with hole: remove hole */
784 if (!h->prev_hole && !h->next_hole) { 796 if (!h->prev_hole && !h->next_hole) {
785 /* last remaining hole */ 797 /* last remaining hole */
786 done = 1; 798 done = 1;
787 } else if (!h->prev_hole) { 799 } else if (!h->prev_hole) {
788 /* first hole */ 800 /* first hole */
789 first_hole = h->next_hole; 801 first_hole = h->next_hole;
790 payload[h->next_hole].prev_hole = 0; 802 payload[h->next_hole].prev_hole = 0;
791 } else if (!h->next_hole) { 803 } else if (!h->next_hole) {
792 /* last hole */ 804 /* last hole */
793 payload[h->prev_hole].next_hole = 0; 805 payload[h->prev_hole].next_hole = 0;
794 } else { 806 } else {
795 /* in the middle of the list */ 807 /* in the middle of the list */
796 payload[h->next_hole].prev_hole = h->prev_hole; 808 payload[h->next_hole].prev_hole = h->prev_hole;
797 payload[h->prev_hole].next_hole = h->next_hole; 809 payload[h->prev_hole].next_hole = h->next_hole;
798 } 810 }
799 811
800 } else if (h->last_byte <= start + len) { 812 } else if (h->last_byte <= start + len) {
801 /* overlaps with final part of the hole: shorten this hole */ 813 /* overlaps with final part of the hole: shorten this hole */
802 h->last_byte = start; 814 h->last_byte = start;
803 815
804 } else if (h >= thisfrag) { 816 } else if (h >= thisfrag) {
805 /* overlaps with initial part of the hole: move this hole */ 817 /* overlaps with initial part of the hole: move this hole */
806 newh = thisfrag + (len / 8); 818 newh = thisfrag + (len / 8);
807 *newh = *h; 819 *newh = *h;
808 h = newh; 820 h = newh;
809 if (h->next_hole) 821 if (h->next_hole)
810 payload[h->next_hole].prev_hole = (h - payload); 822 payload[h->next_hole].prev_hole = (h - payload);
811 if (h->prev_hole) 823 if (h->prev_hole)
812 payload[h->prev_hole].next_hole = (h - payload); 824 payload[h->prev_hole].next_hole = (h - payload);
813 else 825 else
814 first_hole = (h - payload); 826 first_hole = (h - payload);
815 827
816 } else { 828 } else {
817 /* fragment sits in the middle: split the hole */ 829 /* fragment sits in the middle: split the hole */
818 newh = thisfrag + (len / 8); 830 newh = thisfrag + (len / 8);
819 *newh = *h; 831 *newh = *h;
820 h->last_byte = start; 832 h->last_byte = start;
821 h->next_hole = (newh - payload); 833 h->next_hole = (newh - payload);
822 newh->prev_hole = (h - payload); 834 newh->prev_hole = (h - payload);
823 if (newh->next_hole) 835 if (newh->next_hole)
824 payload[newh->next_hole].prev_hole = (newh - payload); 836 payload[newh->next_hole].prev_hole = (newh - payload);
825 } 837 }
826 838
827 /* finally copy this fragment and possibly return whole packet */ 839 /* finally copy this fragment and possibly return whole packet */
828 memcpy((uchar *)thisfrag, indata + IP_HDR_SIZE, len); 840 memcpy((uchar *)thisfrag, indata + IP_HDR_SIZE, len);
829 if (!done) 841 if (!done)
830 return NULL; 842 return NULL;
831 843
832 localip->ip_len = htons(total_len); 844 localip->ip_len = htons(total_len);
833 *lenp = total_len + IP_HDR_SIZE; 845 *lenp = total_len + IP_HDR_SIZE;
834 return localip; 846 return localip;
835 } 847 }
836 848
837 static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp) 849 static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp)
838 { 850 {
839 u16 ip_off = ntohs(ip->ip_off); 851 u16 ip_off = ntohs(ip->ip_off);
840 if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG))) 852 if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG)))
841 return ip; /* not a fragment */ 853 return ip; /* not a fragment */
842 return __NetDefragment(ip, lenp); 854 return __NetDefragment(ip, lenp);
843 } 855 }
844 856
845 #else /* !CONFIG_IP_DEFRAG */ 857 #else /* !CONFIG_IP_DEFRAG */
846 858
847 static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp) 859 static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp)
848 { 860 {
849 u16 ip_off = ntohs(ip->ip_off); 861 u16 ip_off = ntohs(ip->ip_off);
850 if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG))) 862 if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG)))
851 return ip; /* not a fragment */ 863 return ip; /* not a fragment */
852 return NULL; 864 return NULL;
853 } 865 }
854 #endif 866 #endif
855 867
856 /** 868 /**
857 * Receive an ICMP packet. We deal with REDIRECT and PING here, and silently 869 * Receive an ICMP packet. We deal with REDIRECT and PING here, and silently
858 * drop others. 870 * drop others.
859 * 871 *
860 * @parma ip IP packet containing the ICMP 872 * @parma ip IP packet containing the ICMP
861 */ 873 */
862 static void receive_icmp(struct ip_udp_hdr *ip, int len, 874 static void receive_icmp(struct ip_udp_hdr *ip, int len,
863 IPaddr_t src_ip, struct ethernet_hdr *et) 875 IPaddr_t src_ip, struct ethernet_hdr *et)
864 { 876 {
865 struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src; 877 struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src;
866 878
867 switch (icmph->type) { 879 switch (icmph->type) {
868 case ICMP_REDIRECT: 880 case ICMP_REDIRECT:
869 if (icmph->code != ICMP_REDIR_HOST) 881 if (icmph->code != ICMP_REDIR_HOST)
870 return; 882 return;
871 printf(" ICMP Host Redirect to %pI4 ", 883 printf(" ICMP Host Redirect to %pI4 ",
872 &icmph->un.gateway); 884 &icmph->un.gateway);
873 break; 885 break;
874 default: 886 default:
875 #if defined(CONFIG_CMD_PING) 887 #if defined(CONFIG_CMD_PING)
876 ping_receive(et, ip, len); 888 ping_receive(et, ip, len);
877 #endif 889 #endif
878 #ifdef CONFIG_CMD_TFTPPUT 890 #ifdef CONFIG_CMD_TFTPPUT
879 if (packet_icmp_handler) 891 if (packet_icmp_handler)
880 packet_icmp_handler(icmph->type, icmph->code, 892 packet_icmp_handler(icmph->type, icmph->code,
881 ntohs(ip->udp_dst), src_ip, ntohs(ip->udp_src), 893 ntohs(ip->udp_dst), src_ip, ntohs(ip->udp_src),
882 icmph->un.data, ntohs(ip->udp_len)); 894 icmph->un.data, ntohs(ip->udp_len));
883 #endif 895 #endif
884 break; 896 break;
885 } 897 }
886 } 898 }
887 899
888 void 900 void
889 NetReceive(uchar *inpkt, int len) 901 NetReceive(uchar *inpkt, int len)
890 { 902 {
891 struct ethernet_hdr *et; 903 struct ethernet_hdr *et;
892 struct ip_udp_hdr *ip; 904 struct ip_udp_hdr *ip;
893 IPaddr_t dst_ip; 905 IPaddr_t dst_ip;
894 IPaddr_t src_ip; 906 IPaddr_t src_ip;
895 int eth_proto; 907 int eth_proto;
896 #if defined(CONFIG_CMD_CDP) 908 #if defined(CONFIG_CMD_CDP)
897 int iscdp; 909 int iscdp;
898 #endif 910 #endif
899 ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid; 911 ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
900 912
901 debug("packet received\n"); 913 debug("packet received\n");
902 914
903 NetRxPacket = inpkt; 915 NetRxPacket = inpkt;
904 NetRxPacketLen = len; 916 NetRxPacketLen = len;
905 et = (struct ethernet_hdr *)inpkt; 917 et = (struct ethernet_hdr *)inpkt;
906 918
907 /* too small packet? */ 919 /* too small packet? */
908 if (len < ETHER_HDR_SIZE) 920 if (len < ETHER_HDR_SIZE)
909 return; 921 return;
910 922
911 #ifdef CONFIG_API 923 #ifdef CONFIG_API
912 if (push_packet) { 924 if (push_packet) {
913 (*push_packet)(inpkt, len); 925 (*push_packet)(inpkt, len);
914 return; 926 return;
915 } 927 }
916 #endif 928 #endif
917 929
918 #if defined(CONFIG_CMD_CDP) 930 #if defined(CONFIG_CMD_CDP)
919 /* keep track if packet is CDP */ 931 /* keep track if packet is CDP */
920 iscdp = is_cdp_packet(et->et_dest); 932 iscdp = is_cdp_packet(et->et_dest);
921 #endif 933 #endif
922 934
923 myvlanid = ntohs(NetOurVLAN); 935 myvlanid = ntohs(NetOurVLAN);
924 if (myvlanid == (ushort)-1) 936 if (myvlanid == (ushort)-1)
925 myvlanid = VLAN_NONE; 937 myvlanid = VLAN_NONE;
926 mynvlanid = ntohs(NetOurNativeVLAN); 938 mynvlanid = ntohs(NetOurNativeVLAN);
927 if (mynvlanid == (ushort)-1) 939 if (mynvlanid == (ushort)-1)
928 mynvlanid = VLAN_NONE; 940 mynvlanid = VLAN_NONE;
929 941
930 eth_proto = ntohs(et->et_protlen); 942 eth_proto = ntohs(et->et_protlen);
931 943
932 debug("packet received\n"); 944 debug("packet received\n");
933 945
934 if (eth_proto < 1514) { 946 if (eth_proto < 1514) {
935 struct e802_hdr *et802 = (struct e802_hdr *)et; 947 struct e802_hdr *et802 = (struct e802_hdr *)et;
936 /* 948 /*
937 * Got a 802.2 packet. Check the other protocol field. 949 * Got a 802.2 packet. Check the other protocol field.
938 * XXX VLAN over 802.2+SNAP not implemented! 950 * XXX VLAN over 802.2+SNAP not implemented!
939 */ 951 */
940 eth_proto = ntohs(et802->et_prot); 952 eth_proto = ntohs(et802->et_prot);
941 953
942 ip = (struct ip_udp_hdr *)(inpkt + E802_HDR_SIZE); 954 ip = (struct ip_udp_hdr *)(inpkt + E802_HDR_SIZE);
943 len -= E802_HDR_SIZE; 955 len -= E802_HDR_SIZE;
944 956
945 } else if (eth_proto != PROT_VLAN) { /* normal packet */ 957 } else if (eth_proto != PROT_VLAN) { /* normal packet */
946 ip = (struct ip_udp_hdr *)(inpkt + ETHER_HDR_SIZE); 958 ip = (struct ip_udp_hdr *)(inpkt + ETHER_HDR_SIZE);
947 len -= ETHER_HDR_SIZE; 959 len -= ETHER_HDR_SIZE;
948 960
949 } else { /* VLAN packet */ 961 } else { /* VLAN packet */
950 struct vlan_ethernet_hdr *vet = 962 struct vlan_ethernet_hdr *vet =
951 (struct vlan_ethernet_hdr *)et; 963 (struct vlan_ethernet_hdr *)et;
952 964
953 debug("VLAN packet received\n"); 965 debug("VLAN packet received\n");
954 966
955 /* too small packet? */ 967 /* too small packet? */
956 if (len < VLAN_ETHER_HDR_SIZE) 968 if (len < VLAN_ETHER_HDR_SIZE)
957 return; 969 return;
958 970
959 /* if no VLAN active */ 971 /* if no VLAN active */
960 if ((ntohs(NetOurVLAN) & VLAN_IDMASK) == VLAN_NONE 972 if ((ntohs(NetOurVLAN) & VLAN_IDMASK) == VLAN_NONE
961 #if defined(CONFIG_CMD_CDP) 973 #if defined(CONFIG_CMD_CDP)
962 && iscdp == 0 974 && iscdp == 0
963 #endif 975 #endif
964 ) 976 )
965 return; 977 return;
966 978
967 cti = ntohs(vet->vet_tag); 979 cti = ntohs(vet->vet_tag);
968 vlanid = cti & VLAN_IDMASK; 980 vlanid = cti & VLAN_IDMASK;
969 eth_proto = ntohs(vet->vet_type); 981 eth_proto = ntohs(vet->vet_type);
970 982
971 ip = (struct ip_udp_hdr *)(inpkt + VLAN_ETHER_HDR_SIZE); 983 ip = (struct ip_udp_hdr *)(inpkt + VLAN_ETHER_HDR_SIZE);
972 len -= VLAN_ETHER_HDR_SIZE; 984 len -= VLAN_ETHER_HDR_SIZE;
973 } 985 }
974 986
975 debug("Receive from protocol 0x%x\n", eth_proto); 987 debug("Receive from protocol 0x%x\n", eth_proto);
976 988
977 #if defined(CONFIG_CMD_CDP) 989 #if defined(CONFIG_CMD_CDP)
978 if (iscdp) { 990 if (iscdp) {
979 cdp_receive((uchar *)ip, len); 991 cdp_receive((uchar *)ip, len);
980 return; 992 return;
981 } 993 }
982 #endif 994 #endif
983 995
984 if ((myvlanid & VLAN_IDMASK) != VLAN_NONE) { 996 if ((myvlanid & VLAN_IDMASK) != VLAN_NONE) {
985 if (vlanid == VLAN_NONE) 997 if (vlanid == VLAN_NONE)
986 vlanid = (mynvlanid & VLAN_IDMASK); 998 vlanid = (mynvlanid & VLAN_IDMASK);
987 /* not matched? */ 999 /* not matched? */
988 if (vlanid != (myvlanid & VLAN_IDMASK)) 1000 if (vlanid != (myvlanid & VLAN_IDMASK))
989 return; 1001 return;
990 } 1002 }
991 1003
992 switch (eth_proto) { 1004 switch (eth_proto) {
993 1005
994 case PROT_ARP: 1006 case PROT_ARP:
995 ArpReceive(et, ip, len); 1007 ArpReceive(et, ip, len);
996 break; 1008 break;
997 1009
998 #ifdef CONFIG_CMD_RARP 1010 #ifdef CONFIG_CMD_RARP
999 case PROT_RARP: 1011 case PROT_RARP:
1000 rarp_receive(ip, len); 1012 rarp_receive(ip, len);
1001 break; 1013 break;
1002 #endif 1014 #endif
1003 case PROT_IP: 1015 case PROT_IP:
1004 debug("Got IP\n"); 1016 debug("Got IP\n");
1005 /* Before we start poking the header, make sure it is there */ 1017 /* Before we start poking the header, make sure it is there */
1006 if (len < IP_UDP_HDR_SIZE) { 1018 if (len < IP_UDP_HDR_SIZE) {
1007 debug("len bad %d < %lu\n", len, 1019 debug("len bad %d < %lu\n", len,
1008 (ulong)IP_UDP_HDR_SIZE); 1020 (ulong)IP_UDP_HDR_SIZE);
1009 return; 1021 return;
1010 } 1022 }
1011 /* Check the packet length */ 1023 /* Check the packet length */
1012 if (len < ntohs(ip->ip_len)) { 1024 if (len < ntohs(ip->ip_len)) {
1013 printf("len bad %d < %d\n", len, ntohs(ip->ip_len)); 1025 printf("len bad %d < %d\n", len, ntohs(ip->ip_len));
1014 return; 1026 return;
1015 } 1027 }
1016 len = ntohs(ip->ip_len); 1028 len = ntohs(ip->ip_len);
1017 debug("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff); 1029 debug("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff);
1018 1030
1019 /* Can't deal with anything except IPv4 */ 1031 /* Can't deal with anything except IPv4 */
1020 if ((ip->ip_hl_v & 0xf0) != 0x40) 1032 if ((ip->ip_hl_v & 0xf0) != 0x40)
1021 return; 1033 return;
1022 /* Can't deal with IP options (headers != 20 bytes) */ 1034 /* Can't deal with IP options (headers != 20 bytes) */
1023 if ((ip->ip_hl_v & 0x0f) > 0x05) 1035 if ((ip->ip_hl_v & 0x0f) > 0x05)
1024 return; 1036 return;
1025 /* Check the Checksum of the header */ 1037 /* Check the Checksum of the header */
1026 if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) { 1038 if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) {
1027 puts("checksum bad\n"); 1039 puts("checksum bad\n");
1028 return; 1040 return;
1029 } 1041 }
1030 /* If it is not for us, ignore it */ 1042 /* If it is not for us, ignore it */
1031 dst_ip = NetReadIP(&ip->ip_dst); 1043 dst_ip = NetReadIP(&ip->ip_dst);
1032 if (NetOurIP && dst_ip != NetOurIP && dst_ip != 0xFFFFFFFF) { 1044 if (NetOurIP && dst_ip != NetOurIP && dst_ip != 0xFFFFFFFF) {
1033 #ifdef CONFIG_MCAST_TFTP 1045 #ifdef CONFIG_MCAST_TFTP
1034 if (Mcast_addr != dst_ip) 1046 if (Mcast_addr != dst_ip)
1035 #endif 1047 #endif
1036 return; 1048 return;
1037 } 1049 }
1038 /* Read source IP address for later use */ 1050 /* Read source IP address for later use */
1039 src_ip = NetReadIP(&ip->ip_src); 1051 src_ip = NetReadIP(&ip->ip_src);
1040 /* 1052 /*
1041 * The function returns the unchanged packet if it's not 1053 * The function returns the unchanged packet if it's not
1042 * a fragment, and either the complete packet or NULL if 1054 * a fragment, and either the complete packet or NULL if
1043 * it is a fragment (if !CONFIG_IP_DEFRAG, it returns NULL) 1055 * it is a fragment (if !CONFIG_IP_DEFRAG, it returns NULL)
1044 */ 1056 */
1045 ip = NetDefragment(ip, &len); 1057 ip = NetDefragment(ip, &len);
1046 if (!ip) 1058 if (!ip)
1047 return; 1059 return;
1048 /* 1060 /*
1049 * watch for ICMP host redirects 1061 * watch for ICMP host redirects
1050 * 1062 *
1051 * There is no real handler code (yet). We just watch 1063 * There is no real handler code (yet). We just watch
1052 * for ICMP host redirect messages. In case anybody 1064 * for ICMP host redirect messages. In case anybody
1053 * sees these messages: please contact me 1065 * sees these messages: please contact me
1054 * (wd@denx.de), or - even better - send me the 1066 * (wd@denx.de), or - even better - send me the
1055 * necessary fixes :-) 1067 * necessary fixes :-)
1056 * 1068 *
1057 * Note: in all cases where I have seen this so far 1069 * Note: in all cases where I have seen this so far
1058 * it was a problem with the router configuration, 1070 * it was a problem with the router configuration,
1059 * for instance when a router was configured in the 1071 * for instance when a router was configured in the
1060 * BOOTP reply, but the TFTP server was on the same 1072 * BOOTP reply, but the TFTP server was on the same
1061 * subnet. So this is probably a warning that your 1073 * subnet. So this is probably a warning that your
1062 * configuration might be wrong. But I'm not really 1074 * configuration might be wrong. But I'm not really
1063 * sure if there aren't any other situations. 1075 * sure if there aren't any other situations.
1064 * 1076 *
1065 * Simon Glass <sjg@chromium.org>: We get an ICMP when 1077 * Simon Glass <sjg@chromium.org>: We get an ICMP when
1066 * we send a tftp packet to a dead connection, or when 1078 * we send a tftp packet to a dead connection, or when
1067 * there is no server at the other end. 1079 * there is no server at the other end.
1068 */ 1080 */
1069 if (ip->ip_p == IPPROTO_ICMP) { 1081 if (ip->ip_p == IPPROTO_ICMP) {
1070 receive_icmp(ip, len, src_ip, et); 1082 receive_icmp(ip, len, src_ip, et);
1071 return; 1083 return;
1072 } else if (ip->ip_p != IPPROTO_UDP) { /* Only UDP packets */ 1084 } else if (ip->ip_p != IPPROTO_UDP) { /* Only UDP packets */
1073 return; 1085 return;
1074 } 1086 }
1075 1087
1076 #ifdef CONFIG_UDP_CHECKSUM 1088 #ifdef CONFIG_UDP_CHECKSUM
1077 if (ip->udp_xsum != 0) { 1089 if (ip->udp_xsum != 0) {
1078 ulong xsum; 1090 ulong xsum;
1079 ushort *sumptr; 1091 ushort *sumptr;
1080 ushort sumlen; 1092 ushort sumlen;
1081 1093
1082 xsum = ip->ip_p; 1094 xsum = ip->ip_p;
1083 xsum += (ntohs(ip->udp_len)); 1095 xsum += (ntohs(ip->udp_len));
1084 xsum += (ntohl(ip->ip_src) >> 16) & 0x0000ffff; 1096 xsum += (ntohl(ip->ip_src) >> 16) & 0x0000ffff;
1085 xsum += (ntohl(ip->ip_src) >> 0) & 0x0000ffff; 1097 xsum += (ntohl(ip->ip_src) >> 0) & 0x0000ffff;
1086 xsum += (ntohl(ip->ip_dst) >> 16) & 0x0000ffff; 1098 xsum += (ntohl(ip->ip_dst) >> 16) & 0x0000ffff;
1087 xsum += (ntohl(ip->ip_dst) >> 0) & 0x0000ffff; 1099 xsum += (ntohl(ip->ip_dst) >> 0) & 0x0000ffff;
1088 1100
1089 sumlen = ntohs(ip->udp_len); 1101 sumlen = ntohs(ip->udp_len);
1090 sumptr = (ushort *) &(ip->udp_src); 1102 sumptr = (ushort *) &(ip->udp_src);
1091 1103
1092 while (sumlen > 1) { 1104 while (sumlen > 1) {
1093 ushort sumdata; 1105 ushort sumdata;
1094 1106
1095 sumdata = *sumptr++; 1107 sumdata = *sumptr++;
1096 xsum += ntohs(sumdata); 1108 xsum += ntohs(sumdata);
1097 sumlen -= 2; 1109 sumlen -= 2;
1098 } 1110 }
1099 if (sumlen > 0) { 1111 if (sumlen > 0) {
1100 ushort sumdata; 1112 ushort sumdata;
1101 1113
1102 sumdata = *(unsigned char *) sumptr; 1114 sumdata = *(unsigned char *) sumptr;
1103 sumdata = (sumdata << 8) & 0xff00; 1115 sumdata = (sumdata << 8) & 0xff00;
1104 xsum += sumdata; 1116 xsum += sumdata;
1105 } 1117 }
1106 while ((xsum >> 16) != 0) { 1118 while ((xsum >> 16) != 0) {
1107 xsum = (xsum & 0x0000ffff) + 1119 xsum = (xsum & 0x0000ffff) +
1108 ((xsum >> 16) & 0x0000ffff); 1120 ((xsum >> 16) & 0x0000ffff);
1109 } 1121 }
1110 if ((xsum != 0x00000000) && (xsum != 0x0000ffff)) { 1122 if ((xsum != 0x00000000) && (xsum != 0x0000ffff)) {
1111 printf(" UDP wrong checksum %08lx %08x\n", 1123 printf(" UDP wrong checksum %08lx %08x\n",
1112 xsum, ntohs(ip->udp_xsum)); 1124 xsum, ntohs(ip->udp_xsum));
1113 return; 1125 return;
1114 } 1126 }
1115 } 1127 }
1116 #endif 1128 #endif
1117 1129
1118 1130
1119 #ifdef CONFIG_NETCONSOLE 1131 #ifdef CONFIG_NETCONSOLE
1120 nc_input_packet((uchar *)ip + IP_UDP_HDR_SIZE, 1132 nc_input_packet((uchar *)ip + IP_UDP_HDR_SIZE,
1121 ntohs(ip->udp_dst), 1133 ntohs(ip->udp_dst),
1122 ntohs(ip->udp_src), 1134 ntohs(ip->udp_src),
1123 ntohs(ip->udp_len) - UDP_HDR_SIZE); 1135 ntohs(ip->udp_len) - UDP_HDR_SIZE);
1124 #endif 1136 #endif
1125 /* 1137 /*
1126 * IP header OK. Pass the packet to the current handler. 1138 * IP header OK. Pass the packet to the current handler.
1127 */ 1139 */
1128 (*udp_packet_handler)((uchar *)ip + IP_UDP_HDR_SIZE, 1140 (*udp_packet_handler)((uchar *)ip + IP_UDP_HDR_SIZE,
1129 ntohs(ip->udp_dst), 1141 ntohs(ip->udp_dst),
1130 src_ip, 1142 src_ip,
1131 ntohs(ip->udp_src), 1143 ntohs(ip->udp_src),
1132 ntohs(ip->udp_len) - UDP_HDR_SIZE); 1144 ntohs(ip->udp_len) - UDP_HDR_SIZE);
1133 break; 1145 break;
1134 } 1146 }
1135 } 1147 }
1136 1148
1137 1149
1138 /**********************************************************************/ 1150 /**********************************************************************/
1139 1151
1140 static int net_check_prereq(enum proto_t protocol) 1152 static int net_check_prereq(enum proto_t protocol)
1141 { 1153 {
1142 switch (protocol) { 1154 switch (protocol) {
1143 /* Fall through */ 1155 /* Fall through */
1144 #if defined(CONFIG_CMD_PING) 1156 #if defined(CONFIG_CMD_PING)
1145 case PING: 1157 case PING:
1146 if (NetPingIP == 0) { 1158 if (NetPingIP == 0) {
1147 puts("*** ERROR: ping address not given\n"); 1159 puts("*** ERROR: ping address not given\n");
1148 return 1; 1160 return 1;
1149 } 1161 }
1150 goto common; 1162 goto common;
1151 #endif 1163 #endif
1152 #if defined(CONFIG_CMD_SNTP) 1164 #if defined(CONFIG_CMD_SNTP)
1153 case SNTP: 1165 case SNTP:
1154 if (NetNtpServerIP == 0) { 1166 if (NetNtpServerIP == 0) {
1155 puts("*** ERROR: NTP server address not given\n"); 1167 puts("*** ERROR: NTP server address not given\n");
1156 return 1; 1168 return 1;
1157 } 1169 }
1158 goto common; 1170 goto common;
1159 #endif 1171 #endif
1160 #if defined(CONFIG_CMD_DNS) 1172 #if defined(CONFIG_CMD_DNS)
1161 case DNS: 1173 case DNS:
1162 if (NetOurDNSIP == 0) { 1174 if (NetOurDNSIP == 0) {
1163 puts("*** ERROR: DNS server address not given\n"); 1175 puts("*** ERROR: DNS server address not given\n");
1164 return 1; 1176 return 1;
1165 } 1177 }
1166 goto common; 1178 goto common;
1167 #endif 1179 #endif
1168 #if defined(CONFIG_CMD_NFS) 1180 #if defined(CONFIG_CMD_NFS)
1169 case NFS: 1181 case NFS:
1170 #endif 1182 #endif
1171 case TFTPGET: 1183 case TFTPGET:
1172 case TFTPPUT: 1184 case TFTPPUT:
1173 if (NetServerIP == 0) { 1185 if (NetServerIP == 0) {
1174 puts("*** ERROR: `serverip' not set\n"); 1186 puts("*** ERROR: `serverip' not set\n");
1175 return 1; 1187 return 1;
1176 } 1188 }
1177 #if defined(CONFIG_CMD_PING) || defined(CONFIG_CMD_SNTP) || \ 1189 #if defined(CONFIG_CMD_PING) || defined(CONFIG_CMD_SNTP) || \
1178 defined(CONFIG_CMD_DNS) 1190 defined(CONFIG_CMD_DNS)
1179 common: 1191 common:
1180 #endif 1192 #endif
1181 /* Fall through */ 1193 /* Fall through */
1182 1194
1183 case NETCONS: 1195 case NETCONS:
1184 case TFTPSRV: 1196 case TFTPSRV:
1185 if (NetOurIP == 0) { 1197 if (NetOurIP == 0) {
1186 puts("*** ERROR: `ipaddr' not set\n"); 1198 puts("*** ERROR: `ipaddr' not set\n");
1187 return 1; 1199 return 1;
1188 } 1200 }
1189 /* Fall through */ 1201 /* Fall through */
1190 1202
1191 #ifdef CONFIG_CMD_RARP 1203 #ifdef CONFIG_CMD_RARP
1192 case RARP: 1204 case RARP:
1193 #endif 1205 #endif
1194 case BOOTP: 1206 case BOOTP:
1195 case CDP: 1207 case CDP:
1196 case DHCP: 1208 case DHCP:
1209 case LINKLOCAL:
1197 if (memcmp(NetOurEther, "\0\0\0\0\0\0", 6) == 0) { 1210 if (memcmp(NetOurEther, "\0\0\0\0\0\0", 6) == 0) {
1198 int num = eth_get_dev_index(); 1211 int num = eth_get_dev_index();
1199 1212
1200 switch (num) { 1213 switch (num) {
1201 case -1: 1214 case -1:
1202 puts("*** ERROR: No ethernet found.\n"); 1215 puts("*** ERROR: No ethernet found.\n");
1203 return 1; 1216 return 1;
1204 case 0: 1217 case 0:
1205 puts("*** ERROR: `ethaddr' not set\n"); 1218 puts("*** ERROR: `ethaddr' not set\n");
1206 break; 1219 break;
1207 default: 1220 default:
1208 printf("*** ERROR: `eth%daddr' not set\n", 1221 printf("*** ERROR: `eth%daddr' not set\n",
1209 num); 1222 num);
1210 break; 1223 break;
1211 } 1224 }
1212 1225
1213 NetStartAgain(); 1226 NetStartAgain();
1214 return 2; 1227 return 2;
1215 } 1228 }
1216 /* Fall through */ 1229 /* Fall through */
1217 default: 1230 default:
1218 return 0; 1231 return 0;
1219 } 1232 }
1220 return 0; /* OK */ 1233 return 0; /* OK */
1221 } 1234 }
1222 /**********************************************************************/ 1235 /**********************************************************************/
1223 1236
1224 int 1237 int
1225 NetCksumOk(uchar *ptr, int len) 1238 NetCksumOk(uchar *ptr, int len)
1226 { 1239 {
1227 return !((NetCksum(ptr, len) + 1) & 0xfffe); 1240 return !((NetCksum(ptr, len) + 1) & 0xfffe);
1228 } 1241 }
1229 1242
1230 1243
1231 unsigned 1244 unsigned
1232 NetCksum(uchar *ptr, int len) 1245 NetCksum(uchar *ptr, int len)
1233 { 1246 {
1234 ulong xsum; 1247 ulong xsum;
1235 ushort *p = (ushort *)ptr; 1248 ushort *p = (ushort *)ptr;
1236 1249
1237 xsum = 0; 1250 xsum = 0;
1238 while (len-- > 0) 1251 while (len-- > 0)
1239 xsum += *p++; 1252 xsum += *p++;
1240 xsum = (xsum & 0xffff) + (xsum >> 16); 1253 xsum = (xsum & 0xffff) + (xsum >> 16);
1241 xsum = (xsum & 0xffff) + (xsum >> 16); 1254 xsum = (xsum & 0xffff) + (xsum >> 16);
1242 return xsum & 0xffff; 1255 return xsum & 0xffff;
1243 } 1256 }
1244 1257
1245 int 1258 int
1246 NetEthHdrSize(void) 1259 NetEthHdrSize(void)
1247 { 1260 {
1248 ushort myvlanid; 1261 ushort myvlanid;
1249 1262
1250 myvlanid = ntohs(NetOurVLAN); 1263 myvlanid = ntohs(NetOurVLAN);
1251 if (myvlanid == (ushort)-1) 1264 if (myvlanid == (ushort)-1)
1252 myvlanid = VLAN_NONE; 1265 myvlanid = VLAN_NONE;
1253 1266
1254 return ((myvlanid & VLAN_IDMASK) == VLAN_NONE) ? ETHER_HDR_SIZE : 1267 return ((myvlanid & VLAN_IDMASK) == VLAN_NONE) ? ETHER_HDR_SIZE :
1255 VLAN_ETHER_HDR_SIZE; 1268 VLAN_ETHER_HDR_SIZE;
1256 } 1269 }
1257 1270
1258 int 1271 int
1259 NetSetEther(uchar *xet, uchar * addr, uint prot) 1272 NetSetEther(uchar *xet, uchar * addr, uint prot)
1260 { 1273 {
1261 struct ethernet_hdr *et = (struct ethernet_hdr *)xet; 1274 struct ethernet_hdr *et = (struct ethernet_hdr *)xet;
1262 ushort myvlanid; 1275 ushort myvlanid;
1263 1276
1264 myvlanid = ntohs(NetOurVLAN); 1277 myvlanid = ntohs(NetOurVLAN);
1265 if (myvlanid == (ushort)-1) 1278 if (myvlanid == (ushort)-1)
1266 myvlanid = VLAN_NONE; 1279 myvlanid = VLAN_NONE;
1267 1280
1268 memcpy(et->et_dest, addr, 6); 1281 memcpy(et->et_dest, addr, 6);
1269 memcpy(et->et_src, NetOurEther, 6); 1282 memcpy(et->et_src, NetOurEther, 6);
1270 if ((myvlanid & VLAN_IDMASK) == VLAN_NONE) { 1283 if ((myvlanid & VLAN_IDMASK) == VLAN_NONE) {
1271 et->et_protlen = htons(prot); 1284 et->et_protlen = htons(prot);
1272 return ETHER_HDR_SIZE; 1285 return ETHER_HDR_SIZE;
1273 } else { 1286 } else {
1274 struct vlan_ethernet_hdr *vet = 1287 struct vlan_ethernet_hdr *vet =
1275 (struct vlan_ethernet_hdr *)xet; 1288 (struct vlan_ethernet_hdr *)xet;
1276 1289
1277 vet->vet_vlan_type = htons(PROT_VLAN); 1290 vet->vet_vlan_type = htons(PROT_VLAN);
1278 vet->vet_tag = htons((0 << 5) | (myvlanid & VLAN_IDMASK)); 1291 vet->vet_tag = htons((0 << 5) | (myvlanid & VLAN_IDMASK));
1279 vet->vet_type = htons(prot); 1292 vet->vet_type = htons(prot);
1280 return VLAN_ETHER_HDR_SIZE; 1293 return VLAN_ETHER_HDR_SIZE;
1281 } 1294 }
1282 } 1295 }
1283 1296
1284 int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot) 1297 int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot)
1285 { 1298 {
1286 ushort protlen; 1299 ushort protlen;
1287 1300
1288 memcpy(et->et_dest, addr, 6); 1301 memcpy(et->et_dest, addr, 6);
1289 memcpy(et->et_src, NetOurEther, 6); 1302 memcpy(et->et_src, NetOurEther, 6);
1290 protlen = ntohs(et->et_protlen); 1303 protlen = ntohs(et->et_protlen);
1291 if (protlen == PROT_VLAN) { 1304 if (protlen == PROT_VLAN) {
1292 struct vlan_ethernet_hdr *vet = 1305 struct vlan_ethernet_hdr *vet =
1293 (struct vlan_ethernet_hdr *)et; 1306 (struct vlan_ethernet_hdr *)et;
1294 vet->vet_type = htons(prot); 1307 vet->vet_type = htons(prot);
1295 return VLAN_ETHER_HDR_SIZE; 1308 return VLAN_ETHER_HDR_SIZE;
1296 } else if (protlen > 1514) { 1309 } else if (protlen > 1514) {
1297 et->et_protlen = htons(prot); 1310 et->et_protlen = htons(prot);
1298 return ETHER_HDR_SIZE; 1311 return ETHER_HDR_SIZE;
1299 } else { 1312 } else {
1300 /* 802.2 + SNAP */ 1313 /* 802.2 + SNAP */
1301 struct e802_hdr *et802 = (struct e802_hdr *)et; 1314 struct e802_hdr *et802 = (struct e802_hdr *)et;
1302 et802->et_prot = htons(prot); 1315 et802->et_prot = htons(prot);
1303 return E802_HDR_SIZE; 1316 return E802_HDR_SIZE;
1304 } 1317 }
1305 } 1318 }
1306 1319
1307 void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source) 1320 void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source)
1308 { 1321 {
1309 struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt; 1322 struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt;
1310 1323
1311 /* 1324 /*
1312 * Construct an IP header. 1325 * Construct an IP header.
1313 */ 1326 */
1314 /* IP_HDR_SIZE / 4 (not including UDP) */ 1327 /* IP_HDR_SIZE / 4 (not including UDP) */
1315 ip->ip_hl_v = 0x45; 1328 ip->ip_hl_v = 0x45;
1316 ip->ip_tos = 0; 1329 ip->ip_tos = 0;
1317 ip->ip_len = htons(IP_HDR_SIZE); 1330 ip->ip_len = htons(IP_HDR_SIZE);
1318 ip->ip_id = htons(NetIPID++); 1331 ip->ip_id = htons(NetIPID++);
1319 ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */ 1332 ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */
1320 ip->ip_ttl = 255; 1333 ip->ip_ttl = 255;
1321 ip->ip_sum = 0; 1334 ip->ip_sum = 0;
1322 /* already in network byte order */ 1335 /* already in network byte order */
1323 NetCopyIP((void *)&ip->ip_src, &source); 1336 NetCopyIP((void *)&ip->ip_src, &source);
1324 /* already in network byte order */ 1337 /* already in network byte order */
1325 NetCopyIP((void *)&ip->ip_dst, &dest); 1338 NetCopyIP((void *)&ip->ip_dst, &dest);
1326 } 1339 }
1327 1340
1328 void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, int sport, 1341 void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, int sport,
1329 int len) 1342 int len)
1330 { 1343 {
1331 struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt; 1344 struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt;
1332 1345
1333 /* 1346 /*
1334 * If the data is an odd number of bytes, zero the 1347 * If the data is an odd number of bytes, zero the
1335 * byte after the last byte so that the checksum 1348 * byte after the last byte so that the checksum
1336 * will work. 1349 * will work.
1337 */ 1350 */
1338 if (len & 1) 1351 if (len & 1)
1339 pkt[IP_UDP_HDR_SIZE + len] = 0; 1352 pkt[IP_UDP_HDR_SIZE + len] = 0;
1340 1353
1341 net_set_ip_header(pkt, dest, NetOurIP); 1354 net_set_ip_header(pkt, dest, NetOurIP);
1342 ip->ip_len = htons(IP_UDP_HDR_SIZE + len); 1355 ip->ip_len = htons(IP_UDP_HDR_SIZE + len);
1343 ip->ip_p = IPPROTO_UDP; 1356 ip->ip_p = IPPROTO_UDP;
1344 ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE >> 1); 1357 ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE >> 1);
1345 1358
1346 ip->udp_src = htons(sport); 1359 ip->udp_src = htons(sport);
1347 ip->udp_dst = htons(dport); 1360 ip->udp_dst = htons(dport);
1348 ip->udp_len = htons(UDP_HDR_SIZE + len); 1361 ip->udp_len = htons(UDP_HDR_SIZE + len);
1349 ip->udp_xsum = 0; 1362 ip->udp_xsum = 0;
1350 } 1363 }
1351 1364
1352 void copy_filename(char *dst, const char *src, int size) 1365 void copy_filename(char *dst, const char *src, int size)
1353 { 1366 {
1354 if (*src && (*src == '"')) { 1367 if (*src && (*src == '"')) {
1355 ++src; 1368 ++src;
1356 --size; 1369 --size;
1357 } 1370 }
1358 1371
1359 while ((--size > 0) && *src && (*src != '"')) 1372 while ((--size > 0) && *src && (*src != '"'))
1360 *dst++ = *src++; 1373 *dst++ = *src++;
1361 *dst = '\0'; 1374 *dst = '\0';
1362 } 1375 }
1363 1376
1364 #if defined(CONFIG_CMD_NFS) || \ 1377 #if defined(CONFIG_CMD_NFS) || \
1365 defined(CONFIG_CMD_SNTP) || \ 1378 defined(CONFIG_CMD_SNTP) || \
1366 defined(CONFIG_CMD_DNS) 1379 defined(CONFIG_CMD_DNS)
1367 /* 1380 /*
1368 * make port a little random (1024-17407) 1381 * make port a little random (1024-17407)
1369 * This keeps the math somewhat trivial to compute, and seems to work with 1382 * This keeps the math somewhat trivial to compute, and seems to work with
1370 * all supported protocols/clients/servers 1383 * all supported protocols/clients/servers
1371 */ 1384 */
1372 unsigned int random_port(void) 1385 unsigned int random_port(void)
1373 { 1386 {
1374 return 1024 + (get_timer(0) % 0x4000); 1387 return 1024 + (get_timer(0) % 0x4000);
1375 } 1388 }
1376 #endif 1389 #endif
1377 1390
1378 void ip_to_string(IPaddr_t x, char *s) 1391 void ip_to_string(IPaddr_t x, char *s)
1379 { 1392 {
1380 x = ntohl(x); 1393 x = ntohl(x);
1381 sprintf(s, "%d.%d.%d.%d", 1394 sprintf(s, "%d.%d.%d.%d",
1382 (int) ((x >> 24) & 0xff), 1395 (int) ((x >> 24) & 0xff),
1383 (int) ((x >> 16) & 0xff), 1396 (int) ((x >> 16) & 0xff),
1384 (int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff) 1397 (int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff)
1385 ); 1398 );
1386 } 1399 }
1387 1400
1388 void VLAN_to_string(ushort x, char *s) 1401 void VLAN_to_string(ushort x, char *s)
1389 { 1402 {
1390 x = ntohs(x); 1403 x = ntohs(x);
1391 1404
1392 if (x == (ushort)-1) 1405 if (x == (ushort)-1)
1393 x = VLAN_NONE; 1406 x = VLAN_NONE;
1394 1407
1395 if (x == VLAN_NONE) 1408 if (x == VLAN_NONE)
1396 strcpy(s, "none"); 1409 strcpy(s, "none");
1397 else 1410 else
1398 sprintf(s, "%d", x & VLAN_IDMASK); 1411 sprintf(s, "%d", x & VLAN_IDMASK);
1399 } 1412 }
1400 1413
1401 ushort string_to_VLAN(const char *s) 1414 ushort string_to_VLAN(const char *s)
1402 { 1415 {
1403 ushort id; 1416 ushort id;
1404 1417
1405 if (s == NULL) 1418 if (s == NULL)
1406 return htons(VLAN_NONE); 1419 return htons(VLAN_NONE);
1407 1420
1408 if (*s < '0' || *s > '9') 1421 if (*s < '0' || *s > '9')
1409 id = VLAN_NONE; 1422 id = VLAN_NONE;
1410 else 1423 else
1411 id = (ushort)simple_strtoul(s, NULL, 10); 1424 id = (ushort)simple_strtoul(s, NULL, 10);
1412 1425
1413 return htons(id); 1426 return htons(id);
1414 } 1427 }
1415 1428
1416 ushort getenv_VLAN(char *var) 1429 ushort getenv_VLAN(char *var)
1417 { 1430 {
1418 return string_to_VLAN(getenv(var)); 1431 return string_to_VLAN(getenv(var));
1419 } 1432 }
1420 1433