xref: /openbmc/u-boot/README (revision c609719b8d1b2dca590e0ed499016d041203e403)
1*c609719bSwdenk#
2*c609719bSwdenk# (C) Copyright 2000 - 2002
3*c609719bSwdenk# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4*c609719bSwdenk#
5*c609719bSwdenk# See file CREDITS for list of people who contributed to this
6*c609719bSwdenk# project.
7*c609719bSwdenk#
8*c609719bSwdenk# This program is free software; you can redistribute it and/or
9*c609719bSwdenk# modify it under the terms of the GNU General Public License as
10*c609719bSwdenk# published by the Free Software Foundation; either version 2 of
11*c609719bSwdenk# the License, or (at your option) any later version.
12*c609719bSwdenk#
13*c609719bSwdenk# This program is distributed in the hope that it will be useful,
14*c609719bSwdenk# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*c609719bSwdenk# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
16*c609719bSwdenk# GNU General Public License for more details.
17*c609719bSwdenk#
18*c609719bSwdenk# You should have received a copy of the GNU General Public License
19*c609719bSwdenk# along with this program; if not, write to the Free Software
20*c609719bSwdenk# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21*c609719bSwdenk# MA 02111-1307 USA
22*c609719bSwdenk#
23*c609719bSwdenk
24*c609719bSwdenkSummary:
25*c609719bSwdenk========
26*c609719bSwdenk
27*c609719bSwdenkThis directory contains the source code for U-Boot, a monitor for
28*c609719bSwdenkEmbedded PowerPC boards, which can be installed in a boot ROM and
29*c609719bSwdenkused to test the hardware or download and run application code.
30*c609719bSwdenk
31*c609719bSwdenkThe development of U-Boot is closely related to Linux: some parts of
32*c609719bSwdenkthe source code originate in the Linux source tree, we still have
33*c609719bSwdenksome header files in common, and special provision has been made to
34*c609719bSwdenksupport booting of Linux images.
35*c609719bSwdenk
36*c609719bSwdenkSome attention has been paid to make this software easily
37*c609719bSwdenkconfigurable and extendable. For instance, all monitor commands are
38*c609719bSwdenkimplemented with the same call interface, so that it's very easy to
39*c609719bSwdenkadd new commands. Also, instead of permanently adding rarely used
40*c609719bSwdenkcode (for instance hardware test utilities) to the monitor, you can
41*c609719bSwdenkload and run it dynamically.
42*c609719bSwdenk
43*c609719bSwdenk
44*c609719bSwdenkStatus:
45*c609719bSwdenk=======
46*c609719bSwdenk
47*c609719bSwdenkIn general, all boards for which a configuration option exists in the
48*c609719bSwdenkMakefile have been tested  to  some  extent  and  can  be  considered
49*c609719bSwdenk"working". In fact, many of them are used in production systems.
50*c609719bSwdenk
51*c609719bSwdenkIn case of problems see the CHANGELOG and CREDITS files to  find  out
52*c609719bSwdenkwho contributed the specific port.
53*c609719bSwdenk
54*c609719bSwdenkException from this rule: the port to the Sandpoint 8240 has not been
55*c609719bSwdenkcompleted yet.
56*c609719bSwdenk
57*c609719bSwdenk
58*c609719bSwdenkWhere to get help:
59*c609719bSwdenk==================
60*c609719bSwdenk
61*c609719bSwdenkIn case you have questions about, problems with or contributions  for
62*c609719bSwdenkU-Boot	 you  should  send  a  message to the U-Boot mailing list at
63*c609719bSwdenk<u-boot-users@lists.sourceforge.net>. There is also  an  archive  of
64*c609719bSwdenkprevious  traffic  on  the  mailing  list - please search the archive
65*c609719bSwdenkbefore asking FAQ's. Please see
66*c609719bSwdenkhttp://lists.sourceforge.net/lists/listinfo/u-boot-users/
67*c609719bSwdenk
68*c609719bSwdenk
69*c609719bSwdenkWhere we come from:
70*c609719bSwdenk===================
71*c609719bSwdenk
72*c609719bSwdenk- start from 8xxrom sources
73*c609719bSwdenk- clean up code
74*c609719bSwdenk- make it easier to add custom boards
75*c609719bSwdenk- make it possible to add other [PowerPC] CPUs
76*c609719bSwdenk- extend functions, especially:
77*c609719bSwdenk  * Provide extended interface to Linux boot loader
78*c609719bSwdenk  * S-Record download
79*c609719bSwdenk  * network boot
80*c609719bSwdenk  * PCMCIA / CompactFLash / ATA disk / SCSI ... boot
81*c609719bSwdenk- add other CPU families (starting with ARM)
82*c609719bSwdenk
83*c609719bSwdenk
84*c609719bSwdenkDirectory Hierarchy:
85*c609719bSwdenk====================
86*c609719bSwdenk
87*c609719bSwdenk- board		Board dependend files
88*c609719bSwdenk- common	Misc architecture independend functions
89*c609719bSwdenk- cpu		CPU specific files
90*c609719bSwdenk- disk		Code for disk drive partition handling
91*c609719bSwdenk- doc		Documentation (don't expect too much)
92*c609719bSwdenk- drivers	Common used device drivers
93*c609719bSwdenk- dtt		Digital Thermometer and Thermostat drivers
94*c609719bSwdenk- examples	Example code for standalone applications, etc.
95*c609719bSwdenk- include	Header Files
96*c609719bSwdenk- disk		Harddisk interface code
97*c609719bSwdenk- net		Networking code
98*c609719bSwdenk- ppc		Files generic to PowerPC architecture
99*c609719bSwdenk- post		Power On Self Test
100*c609719bSwdenk- post/arch		Symlink to architecture specific Power On Self Test
101*c609719bSwdenk- post/arch-ppc		PowerPC architecture specific Power On Self Test
102*c609719bSwdenk- post/cpu/mpc8260	MPC8260 CPU specific Power On Self Test
103*c609719bSwdenk- post/cpu/mpc8xx	MPC8xx CPU specific Power On Self Test
104*c609719bSwdenk- rtc		Real Time Clock drivers
105*c609719bSwdenk- tools		Tools to build S-Record or U-Boot images, etc.
106*c609719bSwdenk
107*c609719bSwdenk- cpu/74xx_7xx	Files specific to Motorola MPC74xx and 7xx CPUs
108*c609719bSwdenk- cpu/mpc8xx	Files specific to Motorola MPC8xx  CPUs
109*c609719bSwdenk- cpu/mpc824x	Files specific to Motorola MPC824x CPUs
110*c609719bSwdenk- cpu/mpc8260	Files specific to Motorola MPC8260 CPU
111*c609719bSwdenk- cpu/ppc4xx	Files specific to IBM	   4xx	   CPUs
112*c609719bSwdenk
113*c609719bSwdenk- board/RPXClassic
114*c609719bSwdenk		Files specific to RPXClassic boards
115*c609719bSwdenk- board/RPXlite	Files specific to RPXlite    boards
116*c609719bSwdenk- board/c2mon	Files specific to c2mon	     boards
117*c609719bSwdenk- board/cogent	Files specific to Cogent     boards
118*c609719bSwdenk		(need further configuration)
119*c609719bSwdenk		Files specific to CPCIISER4  boards
120*c609719bSwdenk- board/cpu86	Files specific to CPU86      boards
121*c609719bSwdenk- board/cray/	Files specific to boards manufactured by Cray
122*c609719bSwdenk- board/cray/L1		Files specific to L1         boards
123*c609719bSwdenk- board/cu824	Files specific to CU824	     boards
124*c609719bSwdenk- board/ebony   Files specific to IBM Ebony board
125*c609719bSwdenk- board/eric	Files specific to ERIC	     boards
126*c609719bSwdenk- board/esd/	Files specific to boards manufactured by ESD
127*c609719bSwdenk- board/esd/adciop	Files specific to ADCIOP     boards
128*c609719bSwdenk- board/esd/ar405	Files specific to AR405	     boards
129*c609719bSwdenk- board/esd/canbt	Files specific to CANBT	     boards
130*c609719bSwdenk- board/esd/cpci405	Files specific to CPCI405    boards
131*c609719bSwdenk- board/esd/cpciiser4	Files specific to CPCIISER4  boards
132*c609719bSwdenk- board/esd/common	Common files for ESD boards
133*c609719bSwdenk- board/esd/dasa_sim	Files specific to DASA_SIM   boards
134*c609719bSwdenk- board/esd/du405	Files specific to DU405      boards
135*c609719bSwdenk- board/esd/ocrtc	Files specific to OCRTC      boards
136*c609719bSwdenk- board/esd/pci405	Files specific to PCI405     boards
137*c609719bSwdenk- board/esteem192e
138*c609719bSwdenk		Files specific to ESTEEM192E boards
139*c609719bSwdenk- board/etx094	Files specific to ETX_094    boards
140*c609719bSwdenk- board/evb64260
141*c609719bSwdenk		Files specific to EVB64260   boards
142*c609719bSwdenk- board/fads	Files specific to FADS	     boards
143*c609719bSwdenk- board/flagadm Files specific to FLAGADM    boards
144*c609719bSwdenk- board/gen860t Files specific to GEN860T    boards
145*c609719bSwdenk- board/genietv Files specific to GENIETV    boards
146*c609719bSwdenk- board/gth	Files specific to GTH	     boards
147*c609719bSwdenk- board/hermes	Files specific to HERMES     boards
148*c609719bSwdenk- board/hymod	Files specific to HYMOD	     boards
149*c609719bSwdenk- board/icu862	Files specific to ICU862     boards
150*c609719bSwdenk- board/ip860	Files specific to IP860	     boards
151*c609719bSwdenk- board/iphase4539
152*c609719bSwdenk		Files specific to Interphase4539 boards
153*c609719bSwdenk- board/ivm	Files specific to IVMS8/IVML24 boards
154*c609719bSwdenk- board/lantec	Files specific to LANTEC     boards
155*c609719bSwdenk- board/lwmon	Files specific to LWMON	     boards
156*c609719bSwdenk- board/mbx8xx	Files specific to MBX	     boards
157*c609719bSwdenk- board/mpc8260ads
158*c609719bSwdenk		Files specific to MMPC8260ADS boards
159*c609719bSwdenk- board/mpl/	Files specific to boards manufactured by MPL
160*c609719bSwdenk- board/mpl/common	Common files for MPL boards
161*c609719bSwdenk- board/mpl/pip405	Files specific to PIP405     boards
162*c609719bSwdenk- board/mpl/mip405	Files specific to MIP405     boards
163*c609719bSwdenk- board/musenki	Files specific to MUSEKNI    boards
164*c609719bSwdenk- board/mvs1	Files specific to MVS1       boards
165*c609719bSwdenk- board/nx823   Files specific to NX823      boards
166*c609719bSwdenk- board/oxc	Files specific to OXC        boards
167*c609719bSwdenk- board/pcippc2	Files specific to PCIPPC2/PCIPPC6 boards
168*c609719bSwdenk- board/pm826	Files specific to PM826      boards
169*c609719bSwdenk- board/ppmc8260
170*c609719bSwdenk		Files specific to PPMC8260   boards
171*c609719bSwdenk- board/rpxsuper
172*c609719bSwdenk		Files specific to RPXsuper   boards
173*c609719bSwdenk- board/rsdproto
174*c609719bSwdenk		Files specific to RSDproto   boards
175*c609719bSwdenk- board/sandpoint
176*c609719bSwdenk		Files specific to Sandpoint  boards
177*c609719bSwdenk- board/sbc8260	Files specific to SBC8260    boards
178*c609719bSwdenk- board/sacsng	Files specific to SACSng     boards
179*c609719bSwdenk- board/siemens Files specific to boards manufactured by Siemens AG
180*c609719bSwdenk- board/siemens/CCM	Files specific to CCM	     boards
181*c609719bSwdenk- board/siemens/IAD210	Files specific to IAD210     boards
182*c609719bSwdenk- board/siemens/SCM	Files specific to SCM        boards
183*c609719bSwdenk- board/siemens/pcu_e	Files specific to PCU_E	     boards
184*c609719bSwdenk- board/sixnet	Files specific to SIXNET     boards
185*c609719bSwdenk- board/spd8xx	Files specific to SPD8xxTS   boards
186*c609719bSwdenk- board/tqm8260 Files specific to TQM8260    boards
187*c609719bSwdenk- board/tqm8xx	Files specific to TQM8xxL    boards
188*c609719bSwdenk- board/w7o	Files specific to W7O        boards
189*c609719bSwdenk- board/walnut405
190*c609719bSwdenk		Files specific to Walnut405  boards
191*c609719bSwdenk- board/westel/	Files specific to boards manufactured by Westel Wireless
192*c609719bSwdenk- board/westel/amx860	Files specific to AMX860     boards
193*c609719bSwdenk- board/utx8245	Files specific to UTX8245   boards
194*c609719bSwdenk
195*c609719bSwdenkSoftware Configuration:
196*c609719bSwdenk=======================
197*c609719bSwdenk
198*c609719bSwdenkConfiguration is usually done using C preprocessor defines; the
199*c609719bSwdenkrationale behind that is to avoid dead code whenever possible.
200*c609719bSwdenk
201*c609719bSwdenkThere are two classes of configuration variables:
202*c609719bSwdenk
203*c609719bSwdenk* Configuration _OPTIONS_:
204*c609719bSwdenk  These are selectable by the user and have names beginning with
205*c609719bSwdenk  "CONFIG_".
206*c609719bSwdenk
207*c609719bSwdenk* Configuration _SETTINGS_:
208*c609719bSwdenk  These depend on the hardware etc. and should not be meddled with if
209*c609719bSwdenk  you don't know what you're doing; they have names beginning with
210*c609719bSwdenk  "CFG_".
211*c609719bSwdenk
212*c609719bSwdenkLater we will add a configuration tool - probably similar to or even
213*c609719bSwdenkidentical to what's used for the Linux kernel. Right now, we have to
214*c609719bSwdenkdo the configuration by hand, which means creating some symbolic
215*c609719bSwdenklinks and editing some configuration files. We use the TQM8xxL boards
216*c609719bSwdenkas an example here.
217*c609719bSwdenk
218*c609719bSwdenk
219*c609719bSwdenkSelection of Processor Architecture and Board Type:
220*c609719bSwdenk---------------------------------------------------
221*c609719bSwdenk
222*c609719bSwdenkFor all supported boards there are ready-to-use default
223*c609719bSwdenkconfigurations available; just type "make <board_name>_config".
224*c609719bSwdenk
225*c609719bSwdenkExample: For a TQM823L module type:
226*c609719bSwdenk
227*c609719bSwdenk	cd u-boot
228*c609719bSwdenk	make TQM823L_config
229*c609719bSwdenk
230*c609719bSwdenkFor the Cogent platform, you need to specify the cpu type as well;
231*c609719bSwdenke.g. "make cogent_mpc8xx_config". And also configure the cogent
232*c609719bSwdenkdirectory according to the instructions in cogent/README.
233*c609719bSwdenk
234*c609719bSwdenk
235*c609719bSwdenkConfiguration Options:
236*c609719bSwdenk----------------------
237*c609719bSwdenk
238*c609719bSwdenkConfiguration depends on the combination of board and CPU type; all
239*c609719bSwdenksuch information is kept in a configuration file
240*c609719bSwdenk"include/configs/<board_name>.h".
241*c609719bSwdenk
242*c609719bSwdenkExample: For a TQM823L module, all configuration settings are in
243*c609719bSwdenk"include/configs/TQM823L.h".
244*c609719bSwdenk
245*c609719bSwdenk
246*c609719bSwdenkThe following options need to be configured:
247*c609719bSwdenk
248*c609719bSwdenk- CPU Type:	Define exactly one of
249*c609719bSwdenk
250*c609719bSwdenk		PowerPC based CPUs:
251*c609719bSwdenk		-------------------
252*c609719bSwdenk		CONFIG_MPC823,	CONFIG_MPC850,	CONFIG_MPC855,	CONFIG_MPC860
253*c609719bSwdenk	or	CONFIG_MPC824X, CONFIG_MPC8260
254*c609719bSwdenk	or	CONFIG_IOP480
255*c609719bSwdenk	or	CONFIG_405GP
256*c609719bSwdenk	or	CONFIG_440
257*c609719bSwdenk	or	CONFIG_MPC74xx
258*c609719bSwdenk
259*c609719bSwdenk		ARM based CPUs:
260*c609719bSwdenk		---------------
261*c609719bSwdenk		CONFIG_SA1110
262*c609719bSwdenk		CONFIG_ARM7
263*c609719bSwdenk		CONFIG_PXA250
264*c609719bSwdenk
265*c609719bSwdenk
266*c609719bSwdenk- Board Type:	Define exactly one of
267*c609719bSwdenk
268*c609719bSwdenk		PowerPC based boards:
269*c609719bSwdenk		---------------------
270*c609719bSwdenk
271*c609719bSwdenk		CONFIG_ADCIOP,     CONFIG_ICU862      CONFIG_RPXsuper,
272*c609719bSwdenk		CONFIG_ADS860,     CONFIG_IP860,      CONFIG_SM850,
273*c609719bSwdenk		CONFIG_AMX860,     CONFIG_IPHASE4539, CONFIG_SPD823TS,
274*c609719bSwdenk		CONFIG_AR405,      CONFIG_IVML24,     CONFIG_SXNI855T,
275*c609719bSwdenk		CONFIG_BAB7xx,     CONFIG_IVML24_128, CONFIG_Sandpoint8240,
276*c609719bSwdenk		CONFIG_CANBT,      CONFIG_IVML24_256, CONFIG_Sandpoint8245,
277*c609719bSwdenk		CONFIG_CCM,        CONFIG_IVMS8,      CONFIG_TQM823L,
278*c609719bSwdenk		CONFIG_CPCI405,    CONFIG_IVMS8_128,  CONFIG_TQM850L,
279*c609719bSwdenk		CONFIG_CPCI4052,   CONFIG_IVMS8_256,  CONFIG_TQM855L,
280*c609719bSwdenk		CONFIG_CPCIISER4,  CONFIG_LANTEC,     CONFIG_TQM860L,
281*c609719bSwdenk		CONFIG_CPU86,      CONFIG_MBX,        CONFIG_TQM8260,
282*c609719bSwdenk		CONFIG_CRAYL1,     CONFIG_MBX860T,    CONFIG_TTTech,
283*c609719bSwdenk		CONFIG_CU824,      CONFIG_MHPC,       CONFIG_UTX8245,
284*c609719bSwdenk		CONFIG_DASA_SIM,   CONFIG_MIP405,     CONFIG_W7OLMC,
285*c609719bSwdenk		CONFIG_DU405,      CONFIG_MOUSSE,     CONFIG_W7OLMG,
286*c609719bSwdenk		CONFIG_ELPPC,      CONFIG_MPC8260ADS, CONFIG_WALNUT405,
287*c609719bSwdenk		CONFIG_ERIC,       CONFIG_MUSENKI,    CONFIG_ZUMA,
288*c609719bSwdenk		CONFIG_ESTEEM192E, CONFIG_MVS1,       CONFIG_c2mon,
289*c609719bSwdenk		CONFIG_ETX094,     CONFIG_NX823,      CONFIG_cogent_mpc8260,
290*c609719bSwdenk		CONFIG_EVB64260,   CONFIG_OCRTC,      CONFIG_cogent_mpc8xx,
291*c609719bSwdenk		CONFIG_FADS823,    CONFIG_ORSG,       CONFIG_ep8260,
292*c609719bSwdenk		CONFIG_FADS850SAR, CONFIG_OXC,        CONFIG_gw8260,
293*c609719bSwdenk		CONFIG_FADS860T,   CONFIG_PCI405,     CONFIG_hermes,
294*c609719bSwdenk		CONFIG_FLAGADM,    CONFIG_PCIPPC2,    CONFIG_hymod,
295*c609719bSwdenk		CONFIG_FPS850L,    CONFIG_PCIPPC6,    CONFIG_lwmon,
296*c609719bSwdenk		CONFIG_GEN860T,    CONFIG_PIP405,     CONFIG_pcu_e,
297*c609719bSwdenk		CONFIG_GENIETV,    CONFIG_PM826,      CONFIG_ppmc8260,
298*c609719bSwdenk		CONFIG_GTH,        CONFIG_RPXClassic, CONFIG_rsdproto,
299*c609719bSwdenk		CONFIG_IAD210,     CONFIG_RPXlite,    CONFIG_sbc8260,
300*c609719bSwdenk		CONFIG_EBONY,      CONFIG_sacsng
301*c609719bSwdenk
302*c609719bSwdenk		ARM based boards:
303*c609719bSwdenk		-----------------
304*c609719bSwdenk
305*c609719bSwdenk		CONFIG_HHP_CRADLE,  CONFIG_DNP1110,    CONFIG_EP7312,
306*c609719bSwdenk		CONFIG_IMPA7,       CONFIG_LART,       CONFIG_LUBBOCK,
307*c609719bSwdenk		CONFIG_SHANNON,     CONFIG_SMDK2400,   CONFIG_SMDK2410,
308*c609719bSwdenk		CONFIG_TRAB
309*c609719bSwdenk
310*c609719bSwdenk
311*c609719bSwdenk- CPU Module Type: (if CONFIG_COGENT is defined)
312*c609719bSwdenk		Define exactly one of
313*c609719bSwdenk		CONFIG_CMA286_60_OLD
314*c609719bSwdenk--- FIXME --- not tested yet:
315*c609719bSwdenk		CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
316*c609719bSwdenk		CONFIG_CMA287_23, CONFIG_CMA287_50
317*c609719bSwdenk
318*c609719bSwdenk- Motherboard Type: (if CONFIG_COGENT is defined)
319*c609719bSwdenk		Define exactly one of
320*c609719bSwdenk		CONFIG_CMA101, CONFIG_CMA102
321*c609719bSwdenk
322*c609719bSwdenk- Motherboard I/O Modules: (if CONFIG_COGENT is defined)
323*c609719bSwdenk		Define one or more of
324*c609719bSwdenk		CONFIG_CMA302
325*c609719bSwdenk
326*c609719bSwdenk- Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined)
327*c609719bSwdenk		Define one or more of
328*c609719bSwdenk		CONFIG_LCD_HEARTBEAT	- update a character position on
329*c609719bSwdenk					  the lcd display every second with
330*c609719bSwdenk					  a "rotator" |\-/|\-/
331*c609719bSwdenk
332*c609719bSwdenk- MPC824X Family Member (if CONFIG_MPC824X is defined)
333*c609719bSwdenk	Define exactly one of
334*c609719bSwdenk	CONFIG_MPC8240, CONFIG_MPC8245
335*c609719bSwdenk
336*c609719bSwdenk- 8xx CPU Options: (if using an 8xx cpu)
337*c609719bSwdenk		Define one or more of
338*c609719bSwdenk		CONFIG_8xx_GCLK_FREQ	- if get_gclk_freq() can not work e.g.
339*c609719bSwdenk					  no 32KHz reference PIT/RTC clock
340*c609719bSwdenk
341*c609719bSwdenk- Clock Interface:
342*c609719bSwdenk		CONFIG_CLOCKS_IN_MHZ
343*c609719bSwdenk
344*c609719bSwdenk		U-Boot stores all clock information in Hz
345*c609719bSwdenk		internally. For binary compatibility with older Linux
346*c609719bSwdenk		kernels (which expect the clocks passed in the
347*c609719bSwdenk		bd_info data to be in MHz) the environment variable
348*c609719bSwdenk		"clocks_in_mhz" can be defined so that U-Boot
349*c609719bSwdenk		converts clock data to MHZ before passing it to the
350*c609719bSwdenk		Linux kernel.
351*c609719bSwdenk
352*c609719bSwdenk		When CONFIG_CLOCKS_IN_MHZ is defined, a definition of
353*c609719bSwdenk		"clocks_in_mhz=1" is  automatically  included  in  the
354*c609719bSwdenk		default environment.
355*c609719bSwdenk
356*c609719bSwdenk- Console Interface:
357*c609719bSwdenk                Depending on board, define exactly one serial port
358*c609719bSwdenk                (like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2,
359*c609719bSwdenk                CONFIG_8xx_CONS_SCC1, ...), or switch off the serial
360*c609719bSwdenk                console by defining CONFIG_8xx_CONS_NONE
361*c609719bSwdenk
362*c609719bSwdenk		Note: if CONFIG_8xx_CONS_NONE is defined, the serial
363*c609719bSwdenk		port routines must be defined elsewhere
364*c609719bSwdenk		(i.e. serial_init(), serial_getc(), ...)
365*c609719bSwdenk
366*c609719bSwdenk		CONFIG_CFB_CONSOLE
367*c609719bSwdenk		Enables console device for a color framebuffer. Needs following
368*c609719bSwdenk		defines (cf. smiLynxEM, i8042, board/eltec/bab7xx)
369*c609719bSwdenk			VIDEO_FB_LITTLE_ENDIAN	graphic memory organisation
370*c609719bSwdenk						(default big endian)
371*c609719bSwdenk			VIDEO_HW_RECTFILL	graphic chip supports
372*c609719bSwdenk						rectangle fill
373*c609719bSwdenk						(cf. smiLynxEM)
374*c609719bSwdenk			VIDEO_HW_BITBLT		graphic chip supports
375*c609719bSwdenk						bit-blit (cf. smiLynxEM)
376*c609719bSwdenk			VIDEO_VISIBLE_COLS	visible pixel columns
377*c609719bSwdenk						(cols=pitch)
378*c609719bSwdenk			VIDEO_VISIBLE_ROWS      visible pixel rows
379*c609719bSwdenk			VIDEO_PIXEL_SIZE        bytes per pixel
380*c609719bSwdenk			VIDEO_DATA_FORMAT	graphic data format
381*c609719bSwdenk						(0-5, cf. cfb_console.c)
382*c609719bSwdenk			VIDEO_FB_ADRS           framebuffer address
383*c609719bSwdenk			VIDEO_KBD_INIT_FCT	keyboard int fct
384*c609719bSwdenk						(i.e. i8042_kbd_init())
385*c609719bSwdenk			VIDEO_TSTC_FCT		test char fct
386*c609719bSwdenk						(i.e. i8042_tstc)
387*c609719bSwdenk			VIDEO_GETC_FCT		get char fct
388*c609719bSwdenk						(i.e. i8042_getc)
389*c609719bSwdenk			CONFIG_CONSOLE_CURSOR	cursor drawing on/off
390*c609719bSwdenk						(requires blink timer
391*c609719bSwdenk						cf. i8042.c)
392*c609719bSwdenk			CFG_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c)
393*c609719bSwdenk			CONFIG_CONSOLE_TIME	display time/date info in
394*c609719bSwdenk						upper right corner
395*c609719bSwdenk						(requires CFG_CMD_DATE)
396*c609719bSwdenk			CONFIG_VIDEO_LOGO	display Linux logo in
397*c609719bSwdenk						upper left corner
398*c609719bSwdenk			CONFIG_CONSOLE_EXTRA_INFO
399*c609719bSwdenk						addional board info beside
400*c609719bSwdenk						the logo
401*c609719bSwdenk
402*c609719bSwdenk                When CONFIG_CFB_CONSOLE is defined, video console is
403*c609719bSwdenk                default i/o. Serial console can be forced with
404*c609719bSwdenk                environment 'console=serial'.
405*c609719bSwdenk
406*c609719bSwdenk- Console Baudrate:
407*c609719bSwdenk		CONFIG_BAUDRATE - in bps
408*c609719bSwdenk		Select one of the baudrates listed in
409*c609719bSwdenk		CFG_BAUDRATE_TABLE, see below.
410*c609719bSwdenk
411*c609719bSwdenk- Interrupt driven serial port input:
412*c609719bSwdenk		CONFIG_SERIAL_SOFTWARE_FIFO
413*c609719bSwdenk
414*c609719bSwdenk		PPC405GP only.
415*c609719bSwdenk		Use an interrupt handler for receiving data on the
416*c609719bSwdenk		serial port. It also enables using hardware handshake
417*c609719bSwdenk		(RTS/CTS) and UART's built-in FIFO. Set the number of
418*c609719bSwdenk		bytes the interrupt driven input buffer should have.
419*c609719bSwdenk
420*c609719bSwdenk		Set to 0 to disable this feature (this is the default).
421*c609719bSwdenk		This will also disable hardware handshake.
422*c609719bSwdenk
423*c609719bSwdenk- Boot Delay:	CONFIG_BOOTDELAY - in seconds
424*c609719bSwdenk		Delay before automatically booting the default image;
425*c609719bSwdenk		set to -1 to disable autoboot.
426*c609719bSwdenk
427*c609719bSwdenk		See doc/README.autoboot for these options that
428*c609719bSwdenk		work with CONFIG_BOOTDELAY. None are required.
429*c609719bSwdenk		CONFIG_BOOT_RETRY_TIME
430*c609719bSwdenk		CONFIG_BOOT_RETRY_MIN
431*c609719bSwdenk		CONFIG_AUTOBOOT_KEYED
432*c609719bSwdenk		CONFIG_AUTOBOOT_PROMPT
433*c609719bSwdenk		CONFIG_AUTOBOOT_DELAY_STR
434*c609719bSwdenk		CONFIG_AUTOBOOT_STOP_STR
435*c609719bSwdenk		CONFIG_AUTOBOOT_DELAY_STR2
436*c609719bSwdenk		CONFIG_AUTOBOOT_STOP_STR2
437*c609719bSwdenk		CONFIG_ZERO_BOOTDELAY_CHECK
438*c609719bSwdenk		CONFIG_RESET_TO_RETRY
439*c609719bSwdenk
440*c609719bSwdenk- Autoboot Command:
441*c609719bSwdenk		CONFIG_BOOTCOMMAND
442*c609719bSwdenk		Only needed when CONFIG_BOOTDELAY is enabled;
443*c609719bSwdenk		define a command string that is automatically executed
444*c609719bSwdenk		when no character is read on the console interface
445*c609719bSwdenk		within "Boot Delay" after reset.
446*c609719bSwdenk
447*c609719bSwdenk		CONFIG_BOOTARGS
448*c609719bSwdenk                This can be used to pass arguments to the bootm
449*c609719bSwdenk                command. The value of CONFIG_BOOTARGS goes into the
450*c609719bSwdenk                environment value "bootargs".
451*c609719bSwdenk
452*c609719bSwdenk		CONFIG_RAMBOOT and CONFIG_NFSBOOT
453*c609719bSwdenk                The value of these goes into the environment as
454*c609719bSwdenk                "ramboot" and "nfsboot" respectively, and can be used
455*c609719bSwdenk                as a convenience, when switching between booting from
456*c609719bSwdenk                ram and nfs.
457*c609719bSwdenk
458*c609719bSwdenk- Pre-Boot Commands:
459*c609719bSwdenk		CONFIG_PREBOOT
460*c609719bSwdenk
461*c609719bSwdenk		When this option is #defined, the existence of the
462*c609719bSwdenk		environment variable "preboot" will be checked
463*c609719bSwdenk		immediately before starting the CONFIG_BOOTDELAY
464*c609719bSwdenk		countdown and/or running the auto-boot command resp.
465*c609719bSwdenk		entering interactive mode.
466*c609719bSwdenk
467*c609719bSwdenk		This feature is especially useful when "preboot" is
468*c609719bSwdenk		automatically generated or modified. For an example
469*c609719bSwdenk		see the LWMON board specific code: here "preboot" is
470*c609719bSwdenk		modified when the user holds down a certain
471*c609719bSwdenk		combination of keys on the (special) keyboard when
472*c609719bSwdenk		booting the systems
473*c609719bSwdenk
474*c609719bSwdenk- Serial Download Echo Mode:
475*c609719bSwdenk		CONFIG_LOADS_ECHO
476*c609719bSwdenk		If defined to 1, all characters received during a
477*c609719bSwdenk		serial download (using the "loads" command) are
478*c609719bSwdenk		echoed back. This might be needed by some terminal
479*c609719bSwdenk		emulations (like "cu"), but may as well just take
480*c609719bSwdenk		time on others. This setting #define's the initial
481*c609719bSwdenk		value of the "loads_echo" environment variable.
482*c609719bSwdenk
483*c609719bSwdenk- Kgdb Serial Baudrate: (if CFG_CMD_KGDB is defined)
484*c609719bSwdenk		CONFIG_KGDB_BAUDRATE
485*c609719bSwdenk		Select one of the baudrates listed in
486*c609719bSwdenk		CFG_BAUDRATE_TABLE, see below.
487*c609719bSwdenk
488*c609719bSwdenk- Monitor Functions:
489*c609719bSwdenk		CONFIG_COMMANDS
490*c609719bSwdenk		Most monitor functions can be selected (or
491*c609719bSwdenk		de-selected) by adjusting the definition of
492*c609719bSwdenk		CONFIG_COMMANDS; to select individual functions,
493*c609719bSwdenk		#define CONFIG_COMMANDS by "OR"ing any of the
494*c609719bSwdenk		following values:
495*c609719bSwdenk
496*c609719bSwdenk		#define enables commands:
497*c609719bSwdenk		-------------------------
498*c609719bSwdenk		CFG_CMD_ASKENV	* ask for env variable
499*c609719bSwdenk		CFG_CMD_BDI	  bdinfo
500*c609719bSwdenk		CFG_CMD_BEDBUG	  Include BedBug Debugger
501*c609719bSwdenk		CFG_CMD_BOOTD	  bootd
502*c609719bSwdenk		CFG_CMD_CACHE	  icache, dcache
503*c609719bSwdenk		CFG_CMD_CONSOLE	  coninfo
504*c609719bSwdenk		CFG_CMD_DATE	* support for RTC, date/time...
505*c609719bSwdenk		CFG_CMD_DHCP	  DHCP support
506*c609719bSwdenk		CFG_CMD_ECHO	* echo arguments
507*c609719bSwdenk		CFG_CMD_EEPROM	* EEPROM read/write support
508*c609719bSwdenk		CFG_CMD_ELF	  bootelf, bootvx
509*c609719bSwdenk		CFG_CMD_ENV	  saveenv
510*c609719bSwdenk		CFG_CMD_FDC	* Floppy Disk Support
511*c609719bSwdenk		CFG_CMD_FLASH	  flinfo, erase, protect
512*c609719bSwdenk		CFG_CMD_FPGA	  FPGA device initialization support
513*c609719bSwdenk		CFG_CMD_I2C	* I2C serial bus support
514*c609719bSwdenk		CFG_CMD_IDE	* IDE harddisk support
515*c609719bSwdenk		CFG_CMD_IMI	  iminfo
516*c609719bSwdenk		CFG_CMD_IMMAP	* IMMR dump support
517*c609719bSwdenk		CFG_CMD_IRQ	* irqinfo
518*c609719bSwdenk		CFG_CMD_KGDB	* kgdb
519*c609719bSwdenk		CFG_CMD_LOADB	  loadb
520*c609719bSwdenk		CFG_CMD_LOADS	  loads
521*c609719bSwdenk		CFG_CMD_MEMORY	  md, mm, nm, mw, cp, cmp, crc, base,
522*c609719bSwdenk				  loop, mtest
523*c609719bSwdenk		CFG_CMD_MII	  MII utility commands
524*c609719bSwdenk		CFG_CMD_NET	  bootp, tftpboot, rarpboot
525*c609719bSwdenk		CFG_CMD_PCI	* pciinfo
526*c609719bSwdenk		CFG_CMD_PCMCIA	* PCMCIA support
527*c609719bSwdenk		CFG_CMD_REGINFO * Register dump
528*c609719bSwdenk		CFG_CMD_RUN	  run command in env variable
529*c609719bSwdenk		CFG_CMD_SCSI	* SCSI Support
530*c609719bSwdenk		CFG_CMD_SETGETDCR Support for DCR Register access (4xx only)
531*c609719bSwdenk		CFG_CMD_SPI	* SPI serial bus support
532*c609719bSwdenk		CFG_CMD_USB	* USB support
533*c609719bSwdenk		CFG_CMD_BSP	* Board SPecific functions
534*c609719bSwdenk		-----------------------------------------------
535*c609719bSwdenk		CFG_CMD_ALL	all
536*c609719bSwdenk
537*c609719bSwdenk		CFG_CMD_DFL	Default configuration; at the moment
538*c609719bSwdenk				this is includes all commands, except
539*c609719bSwdenk				the ones marked with "*" in the list
540*c609719bSwdenk				above.
541*c609719bSwdenk
542*c609719bSwdenk		If you don't define CONFIG_COMMANDS it defaults to
543*c609719bSwdenk		CFG_CMD_DFL in include/cmd_confdefs.h. A board can
544*c609719bSwdenk		override the default settings in the respective
545*c609719bSwdenk		include file.
546*c609719bSwdenk
547*c609719bSwdenk		EXAMPLE: If you want all functions except of network
548*c609719bSwdenk		support you can write:
549*c609719bSwdenk
550*c609719bSwdenk		#define CONFIG_COMMANDS (CFG_CMD_ALL & ~CFG_CMD_NET)
551*c609719bSwdenk
552*c609719bSwdenk
553*c609719bSwdenk	Note:	Don't enable the "icache" and "dcache" commands
554*c609719bSwdenk                (configuration option CFG_CMD_CACHE) unless you know
555*c609719bSwdenk                what you (and your U-Boot users) are doing. Data
556*c609719bSwdenk                cache cannot be enabled on systems like the 8xx or
557*c609719bSwdenk                8260 (where accesses to the IMMR region must be
558*c609719bSwdenk                uncached), and it cannot be disabled on all other
559*c609719bSwdenk                systems where we (mis-) use the data cache to hold an
560*c609719bSwdenk                initial stack and some data.
561*c609719bSwdenk
562*c609719bSwdenk
563*c609719bSwdenk		XXX - this list needs to get updated!
564*c609719bSwdenk
565*c609719bSwdenk- Watchdog:
566*c609719bSwdenk		CONFIG_WATCHDOG
567*c609719bSwdenk		If this variable is defined, it enables watchdog
568*c609719bSwdenk		support. There must support in the platform specific
569*c609719bSwdenk		code for a watchdog. For the 8xx and 8260 CPUs, the
570*c609719bSwdenk		SIU Watchdog feature is enabled in the SYPCR
571*c609719bSwdenk		register.
572*c609719bSwdenk
573*c609719bSwdenk- Real-Time Clock:
574*c609719bSwdenk
575*c609719bSwdenk		When CFG_CMD_DATE is selected, the type of the RTC
576*c609719bSwdenk		has to be selected, too. Define exactly one of the
577*c609719bSwdenk		following options:
578*c609719bSwdenk
579*c609719bSwdenk		CONFIG_RTC_MPC8xx	- use internal RTC of MPC8xx
580*c609719bSwdenk		CONFIG_RTC_PCF8563	- use Philips PCF8563 RTC
581*c609719bSwdenk		CONFIG_RTC_MC146818	- use MC146818 RTC
582*c609719bSwdenk		CONFIG_RTC_DS1337	- use Maxim, Inc. DS1337 RTC
583*c609719bSwdenk
584*c609719bSwdenk- Timestamp Support:
585*c609719bSwdenk
586*c609719bSwdenk                When CONFIG_TIMESTAMP is selected, the timestamp
587*c609719bSwdenk                (date and time) of an image is printed by image
588*c609719bSwdenk                commands like bootm or iminfo. This option is
589*c609719bSwdenk                automatically enabled when you select CFG_CMD_DATE .
590*c609719bSwdenk
591*c609719bSwdenk- Partition Support:
592*c609719bSwdenk		CONFIG_MAC_PARTITION and/or CONFIG_DOS_PARTITION
593*c609719bSwdenk		and/or CONFIG_ISO_PARTITION
594*c609719bSwdenk
595*c609719bSwdenk		If IDE or SCSI support	is  enabled  (CFG_CMD_IDE  or
596*c609719bSwdenk		CFG_CMD_SCSI) you must configure support for at least
597*c609719bSwdenk		one partition type as well.
598*c609719bSwdenk
599*c609719bSwdenk- IDE Reset method:
600*c609719bSwdenk		CONFIG_IDE_RESET_ROUTINE
601*c609719bSwdenk
602*c609719bSwdenk		Set this to define that instead of a reset Pin, the
603*c609719bSwdenk		routine ide_set_reset(int idereset) will be used.
604*c609719bSwdenk
605*c609719bSwdenk- ATAPI Support:
606*c609719bSwdenk		CONFIG_ATAPI
607*c609719bSwdenk
608*c609719bSwdenk		Set this to enable ATAPI support.
609*c609719bSwdenk
610*c609719bSwdenk- SCSI Support:
611*c609719bSwdenk		At the moment only there is only support for the
612*c609719bSwdenk		SYM53C8XX SCSI controller; define
613*c609719bSwdenk		CONFIG_SCSI_SYM53C8XX to enable it.
614*c609719bSwdenk
615*c609719bSwdenk		CFG_SCSI_MAX_LUN [8], CFG_SCSI_MAX_SCSI_ID [7] and
616*c609719bSwdenk		CFG_SCSI_MAX_DEVICE [CFG_SCSI_MAX_SCSI_ID *
617*c609719bSwdenk		CFG_SCSI_MAX_LUN] can be adjusted to define the
618*c609719bSwdenk		maximum numbers of LUNs, SCSI ID's and target
619*c609719bSwdenk		devices.
620*c609719bSwdenk		CFG_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz)
621*c609719bSwdenk
622*c609719bSwdenk- NETWORK Support (PCI):
623*c609719bSwdenk		CONFIG_EEPRO100
624*c609719bSwdenk		Support for Intel 82557/82559/82559ER chips.
625*c609719bSwdenk		Optional CONFIG_EEPRO100_SROM_WRITE enables eeprom
626*c609719bSwdenk		write routine for first time initialisation.
627*c609719bSwdenk
628*c609719bSwdenk		CONFIG_TULIP
629*c609719bSwdenk		Support for Digital 2114x chips.
630*c609719bSwdenk		Optional CONFIG_TULIP_SELECT_MEDIA for board specific
631*c609719bSwdenk		modem chip initialisation (KS8761/QS6611).
632*c609719bSwdenk
633*c609719bSwdenk		CONFIG_NATSEMI
634*c609719bSwdenk		Support for National dp83815 chips.
635*c609719bSwdenk
636*c609719bSwdenk		CONFIG_NS8382X
637*c609719bSwdenk		Support for National dp8382[01] gigabit chips.
638*c609719bSwdenk
639*c609719bSwdenk- USB Support:
640*c609719bSwdenk		At the moment only the UHCI host controller is
641*c609719bSwdenk		supported (PIP405, MIP405); define
642*c609719bSwdenk		CONFIG_USB_UHCI to enable it.
643*c609719bSwdenk		define CONFIG_USB_KEYBOARD to enable the USB Keyboard
644*c609719bSwdenk		end define CONFIG_USB_STORAGE to enable the USB
645*c609719bSwdenk		storage devices.
646*c609719bSwdenk		Note:
647*c609719bSwdenk		Supported are USB Keyboards and USB Floppy drives
648*c609719bSwdenk		(TEAC FD-05PUB).
649*c609719bSwdenk
650*c609719bSwdenk- Keyboard Support:
651*c609719bSwdenk		CONFIG_ISA_KEYBOARD
652*c609719bSwdenk
653*c609719bSwdenk		Define this to enable standard (PC-Style) keyboard
654*c609719bSwdenk		support
655*c609719bSwdenk
656*c609719bSwdenk		CONFIG_I8042_KBD
657*c609719bSwdenk		Standard PC keyboard driver with US (is default) and
658*c609719bSwdenk		GERMAN key layout (switch via environment 'keymap=de') support.
659*c609719bSwdenk		Export function i8042_kbd_init, i8042_tstc and i8042_getc
660*c609719bSwdenk		for cfb_console. Supports cursor blinking.
661*c609719bSwdenk
662*c609719bSwdenk- Video support:
663*c609719bSwdenk		CONFIG_VIDEO
664*c609719bSwdenk
665*c609719bSwdenk		Define this to enable video support (for output to
666*c609719bSwdenk		video).
667*c609719bSwdenk
668*c609719bSwdenk		CONFIG_VIDEO_CT69000
669*c609719bSwdenk
670*c609719bSwdenk		Enable Chips & Technologies 69000 Video chip
671*c609719bSwdenk
672*c609719bSwdenk		CONFIG_VIDEO_SMI_LYNXEM
673*c609719bSwdenk		Enable Silicon Motion SMI 712/710/810 Video chip
674*c609719bSwdenk		Videomode are selected via environment 'videomode' with
675*c609719bSwdenk		standard LiLo mode numbers.
676*c609719bSwdenk		Following modes are supported  (* is default):
677*c609719bSwdenk
678*c609719bSwdenk                            800x600  1024x768  1280x1024
679*c609719bSwdenk              256  (8bit)     303*      305       307
680*c609719bSwdenk            65536 (16bit)     314       317       31a
681*c609719bSwdenk        16,7 Mill (24bit)     315       318       31b
682*c609719bSwdenk		(i.e. setenv videomode 317; saveenv; reset;)
683*c609719bSwdenk
684*c609719bSwdenk- LCD Support:	CONFIG_LCD
685*c609719bSwdenk
686*c609719bSwdenk		Define this to enable LCD support (for output to LCD
687*c609719bSwdenk		display); also select one of the supported displays
688*c609719bSwdenk		by defining one of these:
689*c609719bSwdenk
690*c609719bSwdenk		CONFIG_NEC_NL6648AC33:
691*c609719bSwdenk
692*c609719bSwdenk			NEC NL6648AC33-18. Active, color, single scan.
693*c609719bSwdenk
694*c609719bSwdenk		CONFIG_NEC_NL6648BC20
695*c609719bSwdenk
696*c609719bSwdenk			NEC NL6648BC20-08. 6.5", 640x480.
697*c609719bSwdenk			Active, color, single scan.
698*c609719bSwdenk
699*c609719bSwdenk		CONFIG_SHARP_16x9
700*c609719bSwdenk
701*c609719bSwdenk			Sharp 320x240. Active, color, single scan.
702*c609719bSwdenk			It isn't 16x9, and I am not sure what it is.
703*c609719bSwdenk
704*c609719bSwdenk		CONFIG_SHARP_LQ64D341
705*c609719bSwdenk
706*c609719bSwdenk			Sharp LQ64D341 display, 640x480.
707*c609719bSwdenk			Active, color, single scan.
708*c609719bSwdenk
709*c609719bSwdenk		CONFIG_HLD1045
710*c609719bSwdenk
711*c609719bSwdenk			HLD1045 display, 640x480.
712*c609719bSwdenk			Active, color, single scan.
713*c609719bSwdenk
714*c609719bSwdenk		CONFIG_OPTREX_BW
715*c609719bSwdenk
716*c609719bSwdenk			Optrex	 CBL50840-2 NF-FW 99 22 M5
717*c609719bSwdenk			or
718*c609719bSwdenk			Hitachi	 LMG6912RPFC-00T
719*c609719bSwdenk			or
720*c609719bSwdenk			Hitachi	 SP14Q002
721*c609719bSwdenk
722*c609719bSwdenk			320x240. Black & white.
723*c609719bSwdenk
724*c609719bSwdenk		Normally display is black on white background; define
725*c609719bSwdenk		CFG_WHITE_ON_BLACK to get it inverted.
726*c609719bSwdenk
727*c609719bSwdenk- Ethernet address:
728*c609719bSwdenk		CONFIG_ETHADDR
729*c609719bSwdenk		CONFIG_ETH2ADDR
730*c609719bSwdenk		CONFIG_ETH3ADDR
731*c609719bSwdenk
732*c609719bSwdenk		Define a default value for ethernet address to use
733*c609719bSwdenk		for the respective ethernet interface, in case this
734*c609719bSwdenk		is not determined automatically.
735*c609719bSwdenk
736*c609719bSwdenk- IP address:
737*c609719bSwdenk		CONFIG_IPADDR
738*c609719bSwdenk
739*c609719bSwdenk		Define a default value for the IP address to use for
740*c609719bSwdenk		the default ethernet interface, in case this is not
741*c609719bSwdenk		determined through e.g. bootp.
742*c609719bSwdenk
743*c609719bSwdenk- Server IP address:
744*c609719bSwdenk		CONFIG_SERVERIP
745*c609719bSwdenk
746*c609719bSwdenk		Defines a default value for theIP address of a TFTP
747*c609719bSwdenk		server to contact when using the "tftboot" command.
748*c609719bSwdenk
749*c609719bSwdenk- BOOTP Recovery Mode:
750*c609719bSwdenk		CONFIG_BOOTP_RANDOM_DELAY
751*c609719bSwdenk
752*c609719bSwdenk		If you have many targets in a network that try to
753*c609719bSwdenk		boot using BOOTP, you may want to avoid that all
754*c609719bSwdenk		systems send out BOOTP requests at precisely the same
755*c609719bSwdenk		moment (which would happen for instance at recovery
756*c609719bSwdenk		from a power failure, when all systems will try to
757*c609719bSwdenk		boot, thus flooding the BOOTP server. Defining
758*c609719bSwdenk		CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be
759*c609719bSwdenk		inserted before sending out BOOTP requests. The
760*c609719bSwdenk		following delays are insterted then:
761*c609719bSwdenk
762*c609719bSwdenk		1st BOOTP request:	delay 0 ... 1 sec
763*c609719bSwdenk		2nd BOOTP request:	delay 0 ... 2 sec
764*c609719bSwdenk		3rd BOOTP request:	delay 0 ... 4 sec
765*c609719bSwdenk		4th and following
766*c609719bSwdenk		BOOTP requests:		delay 0 ... 8 sec
767*c609719bSwdenk
768*c609719bSwdenk- Status LED:	CONFIG_STATUS_LED
769*c609719bSwdenk
770*c609719bSwdenk		Several configurations allow to display the current
771*c609719bSwdenk		status using a LED. For instance, the LED will blink
772*c609719bSwdenk		fast while running U-Boot code, stop blinking as
773*c609719bSwdenk		soon as a reply to a BOOTP request was received, and
774*c609719bSwdenk		start blinking slow once the Linux kernel is running
775*c609719bSwdenk		(supported by a status LED driver in the Linux
776*c609719bSwdenk		kernel). Defining CONFIG_STATUS_LED enables this
777*c609719bSwdenk		feature in U-Boot.
778*c609719bSwdenk
779*c609719bSwdenk- CAN Support:	CONFIG_CAN_DRIVER
780*c609719bSwdenk
781*c609719bSwdenk		Defining CONFIG_CAN_DRIVER enables CAN driver support
782*c609719bSwdenk		on those systems that support this (optional)
783*c609719bSwdenk		feature, like the TQM8xxL modules.
784*c609719bSwdenk
785*c609719bSwdenk- I2C Support:	CONFIG_HARD_I2C | CONFIG_SOFT_I2C
786*c609719bSwdenk
787*c609719bSwdenk		Enables I2C serial bus commands.  If this is selected,
788*c609719bSwdenk		either CONFIG_HARD_I2C or CONFIG_SOFT_I2C must be defined
789*c609719bSwdenk		to include the appropriate I2C driver.
790*c609719bSwdenk
791*c609719bSwdenk                See also: common/cmd_i2c.c for a description of the
792*c609719bSwdenk                command line interface.
793*c609719bSwdenk
794*c609719bSwdenk
795*c609719bSwdenk		CONFIG_HARD_I2C
796*c609719bSwdenk
797*c609719bSwdenk		Selects the CPM hardware driver for I2C.
798*c609719bSwdenk
799*c609719bSwdenk		CONFIG_SOFT_I2C
800*c609719bSwdenk
801*c609719bSwdenk		Use software (aka bit-banging) driver instead of CPM
802*c609719bSwdenk		or similar hardware support for I2C.  This is configured
803*c609719bSwdenk		via the following defines.
804*c609719bSwdenk
805*c609719bSwdenk		I2C_INIT
806*c609719bSwdenk
807*c609719bSwdenk                (Optional). Any commands necessary to enable I2C
808*c609719bSwdenk                controller or configure ports.
809*c609719bSwdenk
810*c609719bSwdenk		I2C_PORT
811*c609719bSwdenk
812*c609719bSwdenk                (Only for MPC8260 CPU). The I/O port to use (the code
813*c609719bSwdenk                assumes both bits are on the same port). Valid values
814*c609719bSwdenk                are 0..3 for ports A..D.
815*c609719bSwdenk
816*c609719bSwdenk		I2C_ACTIVE
817*c609719bSwdenk
818*c609719bSwdenk		The code necessary to make the I2C data line active
819*c609719bSwdenk		(driven).  If the data line is open collector, this
820*c609719bSwdenk		define can be null.
821*c609719bSwdenk
822*c609719bSwdenk		I2C_TRISTATE
823*c609719bSwdenk
824*c609719bSwdenk		The code necessary to make the I2C data line tri-stated
825*c609719bSwdenk		(inactive).  If the data line is open collector, this
826*c609719bSwdenk		define can be null.
827*c609719bSwdenk
828*c609719bSwdenk		I2C_READ
829*c609719bSwdenk
830*c609719bSwdenk		Code that returns TRUE if the I2C data line is high,
831*c609719bSwdenk		FALSE if it is low.
832*c609719bSwdenk
833*c609719bSwdenk		I2C_SDA(bit)
834*c609719bSwdenk
835*c609719bSwdenk		If <bit> is TRUE, sets the I2C data line high. If it
836*c609719bSwdenk		is FALSE, it clears it (low).
837*c609719bSwdenk
838*c609719bSwdenk		I2C_SCL(bit)
839*c609719bSwdenk
840*c609719bSwdenk		If <bit> is TRUE, sets the I2C clock line high. If it
841*c609719bSwdenk		is FALSE, it clears it (low).
842*c609719bSwdenk
843*c609719bSwdenk		I2C_DELAY
844*c609719bSwdenk
845*c609719bSwdenk		This delay is invoked four times per clock cycle so this
846*c609719bSwdenk		controls the rate of data transfer.  The data rate thus
847*c609719bSwdenk		is 1 / (I2C_DELAY * 4).
848*c609719bSwdenk
849*c609719bSwdenk- SPI Support:	CONFIG_SPI
850*c609719bSwdenk
851*c609719bSwdenk		Enables SPI driver (so far only tested with
852*c609719bSwdenk		SPI EEPROM, also an instance works with Crystal A/D and
853*c609719bSwdenk		D/As on the SACSng board)
854*c609719bSwdenk
855*c609719bSwdenk		CONFIG_SPI_X
856*c609719bSwdenk
857*c609719bSwdenk		Enables extended (16-bit) SPI EEPROM addressing.
858*c609719bSwdenk		(symmetrical to CONFIG_I2C_X)
859*c609719bSwdenk
860*c609719bSwdenk		CONFIG_SOFT_SPI
861*c609719bSwdenk
862*c609719bSwdenk                Enables a software (bit-bang) SPI driver rather than
863*c609719bSwdenk                using hardware support. This is a general purpose
864*c609719bSwdenk                driver that only requires three general I/O port pins
865*c609719bSwdenk                (two outputs, one input) to function. If this is
866*c609719bSwdenk                defined, the board configuration must define several
867*c609719bSwdenk                SPI configuration items (port pins to use, etc). For
868*c609719bSwdenk                an example, see include/configs/sacsng.h.
869*c609719bSwdenk
870*c609719bSwdenk- FPGA Support: CONFIG_FPGA_COUNT
871*c609719bSwdenk
872*c609719bSwdenk                Specify the number of FPGA devices to support.
873*c609719bSwdenk
874*c609719bSwdenk                CONFIG_FPGA
875*c609719bSwdenk
876*c609719bSwdenk                Used to specify the types of FPGA devices. For
877*c609719bSwdenk		example,
878*c609719bSwdenk 		#define CONFIG_FPGA  CFG_XILINX_VIRTEX2
879*c609719bSwdenk
880*c609719bSwdenk 		CFG_FPGA_PROG_FEEDBACK
881*c609719bSwdenk
882*c609719bSwdenk                Enable printing of hash marks during FPGA
883*c609719bSwdenk		configuration.
884*c609719bSwdenk
885*c609719bSwdenk		CFG_FPGA_CHECK_BUSY
886*c609719bSwdenk
887*c609719bSwdenk                Enable checks on FPGA configuration interface busy
888*c609719bSwdenk                status by the configuration function. This option
889*c609719bSwdenk                will require a board or device specific function to
890*c609719bSwdenk                be written.
891*c609719bSwdenk
892*c609719bSwdenk		CONFIG_FPGA_DELAY
893*c609719bSwdenk
894*c609719bSwdenk                If defined, a function that provides delays in the
895*c609719bSwdenk                FPGA configuration driver.
896*c609719bSwdenk
897*c609719bSwdenk		CFG_FPGA_CHECK_CTRLC
898*c609719bSwdenk
899*c609719bSwdenk		Allow Control-C to interrupt FPGA configuration
900*c609719bSwdenk
901*c609719bSwdenk		CFG_FPGA_CHECK_ERROR
902*c609719bSwdenk
903*c609719bSwdenk                Check for configuration errors during FPGA bitfile
904*c609719bSwdenk                loading. For example, abort during Virtex II
905*c609719bSwdenk                configuration if the INIT_B line goes low (which
906*c609719bSwdenk                indicated a CRC error).
907*c609719bSwdenk
908*c609719bSwdenk		CFG_FPGA_WAIT_INIT
909*c609719bSwdenk
910*c609719bSwdenk                Maximum time to wait for the INIT_B line to deassert
911*c609719bSwdenk                after PROB_B has been deasserted during a Virtex II
912*c609719bSwdenk                FPGA configuration sequence. The default time is 500 mS.
913*c609719bSwdenk
914*c609719bSwdenk		CFG_FPGA_WAIT_BUSY
915*c609719bSwdenk
916*c609719bSwdenk                Maximum time to wait for BUSY to deassert during
917*c609719bSwdenk                Virtex II FPGA configuration. The default is 5 mS.
918*c609719bSwdenk
919*c609719bSwdenk		CFG_FPGA_WAIT_CONFIG
920*c609719bSwdenk
921*c609719bSwdenk                Time to wait after FPGA configuration. The default is
922*c609719bSwdenk		200 mS.
923*c609719bSwdenk
924*c609719bSwdenk- FPGA Support:	CONFIG_FPGA_COUNT
925*c609719bSwdenk
926*c609719bSwdenk 		Specify the number of FPGA devices to support.
927*c609719bSwdenk
928*c609719bSwdenk 		CONFIG_FPGA
929*c609719bSwdenk
930*c609719bSwdenk 		Used to specify the types of FPGA devices.  For example,
931*c609719bSwdenk 		#define CONFIG_FPGA  CFG_XILINX_VIRTEX2
932*c609719bSwdenk
933*c609719bSwdenk 		CFG_FPGA_PROG_FEEDBACK
934*c609719bSwdenk
935*c609719bSwdenk 		Enable printing of hash marks during FPGA configuration.
936*c609719bSwdenk
937*c609719bSwdenk		CFG_FPGA_CHECK_BUSY
938*c609719bSwdenk
939*c609719bSwdenk                Enable checks on FPGA configuration interface busy
940*c609719bSwdenk                status by the configuration function. This option
941*c609719bSwdenk                will require a board or device specific function to
942*c609719bSwdenk                be written.
943*c609719bSwdenk
944*c609719bSwdenk		CONFIG_FPGA_DELAY
945*c609719bSwdenk
946*c609719bSwdenk		If defined, a function that provides delays in the FPGA
947*c609719bSwdenk		configuration driver.
948*c609719bSwdenk
949*c609719bSwdenk		CFG_FPGA_CHECK_CTRLC
950*c609719bSwdenk		Allow Control-C to interrupt FPGA configuration
951*c609719bSwdenk
952*c609719bSwdenk		CFG_FPGA_CHECK_ERROR
953*c609719bSwdenk
954*c609719bSwdenk                Check for configuration errors during FPGA bitfile
955*c609719bSwdenk                loading. For example, abort during Virtex II
956*c609719bSwdenk                configuration if the INIT_B line goes low (which
957*c609719bSwdenk                indicated a CRC error).
958*c609719bSwdenk
959*c609719bSwdenk		CFG_FPGA_WAIT_INIT
960*c609719bSwdenk
961*c609719bSwdenk                Maximum time to wait for the INIT_B line to deassert
962*c609719bSwdenk                after PROB_B has been deasserted during a Virtex II
963*c609719bSwdenk                FPGA configuration sequence. The default time is 500
964*c609719bSwdenk                mS.
965*c609719bSwdenk
966*c609719bSwdenk		CFG_FPGA_WAIT_BUSY
967*c609719bSwdenk
968*c609719bSwdenk                Maximum time to wait for BUSY to deassert during
969*c609719bSwdenk                Virtex II FPGA configuration. The default is 5 mS.
970*c609719bSwdenk
971*c609719bSwdenk		CFG_FPGA_WAIT_CONFIG
972*c609719bSwdenk
973*c609719bSwdenk                Time to wait after FPGA configuration. The default is
974*c609719bSwdenk                200 mS.
975*c609719bSwdenk
976*c609719bSwdenk- Configuration Management:
977*c609719bSwdenk		CONFIG_IDENT_STRING
978*c609719bSwdenk
979*c609719bSwdenk                If defined, this string will be added to the U-Boot
980*c609719bSwdenk                version information (U_BOOT_VERSION)
981*c609719bSwdenk
982*c609719bSwdenk- Vendor Parameter Protection:
983*c609719bSwdenk
984*c609719bSwdenk                U-Boot considers the values of the environment
985*c609719bSwdenk                variables "serial#" (Board Serial Number) and
986*c609719bSwdenk                "ethaddr" (Ethernet Address) to bb parameters that
987*c609719bSwdenk                are set once by the board vendor / manufacturer, and
988*c609719bSwdenk                protects these variables from casual modification by
989*c609719bSwdenk                the user. Once set, these variables are read-only,
990*c609719bSwdenk                and write or delete attempts are rejected. You can
991*c609719bSwdenk                change this behviour:
992*c609719bSwdenk
993*c609719bSwdenk		If CONFIG_ENV_OVERWRITE is #defined in your config
994*c609719bSwdenk		file, the write protection for vendor parameters is
995*c609719bSwdenk		completely disabled. Anybody can change or delte
996*c609719bSwdenk		these parameters.
997*c609719bSwdenk
998*c609719bSwdenk		Alternatively, if you #define _both_ CONFIG_ETHADDR
999*c609719bSwdenk		_and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
1000*c609719bSwdenk		ethernet address is installed in the environment,
1001*c609719bSwdenk		which can be changed exactly ONCE by the user. [The
1002*c609719bSwdenk		serial# is unaffected by this, i. e. it remains
1003*c609719bSwdenk		read-only.]
1004*c609719bSwdenk
1005*c609719bSwdenk- Protected RAM:
1006*c609719bSwdenk		CONFIG_PRAM
1007*c609719bSwdenk
1008*c609719bSwdenk		Define this variable to enable the reservation of
1009*c609719bSwdenk		"protected RAM", i. e. RAM which is not overwritten
1010*c609719bSwdenk		by U-Boot. Define CONFIG_PRAM to hold the number of
1011*c609719bSwdenk		kB you want to reserve for pRAM. You can overwrite
1012*c609719bSwdenk		this default value by defining an environment
1013*c609719bSwdenk		variable "pram" to the number of kB you want to
1014*c609719bSwdenk		reserve. Note that the board info structure will
1015*c609719bSwdenk		still show the full amount of RAM. If pRAM is
1016*c609719bSwdenk		reserved, a new environment variable "mem" will
1017*c609719bSwdenk		automatically be defined to hold the amount of
1018*c609719bSwdenk		remaining RAM in a form that can be passed as boot
1019*c609719bSwdenk		argument to Linux, for instance like that:
1020*c609719bSwdenk
1021*c609719bSwdenk			setenv bootargs ... mem=\$(mem)
1022*c609719bSwdenk			saveenv
1023*c609719bSwdenk
1024*c609719bSwdenk		This way you can tell Linux not to use this memory,
1025*c609719bSwdenk		either, which results in a memory region that will
1026*c609719bSwdenk		not be affected by reboots.
1027*c609719bSwdenk
1028*c609719bSwdenk		*WARNING* If your board configuration uses automatic
1029*c609719bSwdenk		detection of the RAM size, you must make sure that
1030*c609719bSwdenk		this memory test is non-destructive. So far, the
1031*c609719bSwdenk		following board configurations are known to be
1032*c609719bSwdenk		"pRAM-clean":
1033*c609719bSwdenk
1034*c609719bSwdenk			ETX094, IVMS8, IVML24, SPD8xx, TQM8xxL,
1035*c609719bSwdenk			HERMES, IP860, RPXlite, LWMON, LANTEC,
1036*c609719bSwdenk			PCU_E, FLAGADM, TQM8260
1037*c609719bSwdenk
1038*c609719bSwdenk- Error Recovery:
1039*c609719bSwdenk		CONFIG_PANIC_HANG
1040*c609719bSwdenk
1041*c609719bSwdenk		Define this variable to stop the system in case of a
1042*c609719bSwdenk		fatal error, so that you have to reset it manually.
1043*c609719bSwdenk		This is probably NOT a good idea for an embedded
1044*c609719bSwdenk		system where you want to system to reboot
1045*c609719bSwdenk		automatically as fast as possible, but it may be
1046*c609719bSwdenk		useful during development since you can try to debug
1047*c609719bSwdenk		the conditions that lead to the situation.
1048*c609719bSwdenk
1049*c609719bSwdenk		CONFIG_NET_RETRY_COUNT
1050*c609719bSwdenk
1051*c609719bSwdenk                This variable defines the number of retries for
1052*c609719bSwdenk                network operations like ARP, RARP, TFTP, or BOOTP
1053*c609719bSwdenk                before giving up the operation. If not defined, a
1054*c609719bSwdenk                default value of 5 is used.
1055*c609719bSwdenk
1056*c609719bSwdenk- Command Interpreter:
1057*c609719bSwdenk		CFG_HUSH_PARSER
1058*c609719bSwdenk
1059*c609719bSwdenk		Define this variable to enable the "hush" shell (from
1060*c609719bSwdenk		Busybox) as command line interpreter, thus enabling
1061*c609719bSwdenk		powerful command line syntax like
1062*c609719bSwdenk		if...then...else...fi conditionals or `&&' and '||'
1063*c609719bSwdenk		constructs ("shell scripts").
1064*c609719bSwdenk
1065*c609719bSwdenk		If undefined, you get the old, much simpler behaviour
1066*c609719bSwdenk		with a somewhat smaller memory footprint.
1067*c609719bSwdenk
1068*c609719bSwdenk
1069*c609719bSwdenk		CFG_PROMPT_HUSH_PS2
1070*c609719bSwdenk
1071*c609719bSwdenk		This defines the secondary prompt string, which is
1072*c609719bSwdenk		printed when the command interpreter needs more input
1073*c609719bSwdenk		to complete a command. Usually "> ".
1074*c609719bSwdenk
1075*c609719bSwdenk	Note:
1076*c609719bSwdenk
1077*c609719bSwdenk                In the current implementation, the local variables
1078*c609719bSwdenk                space and global environment variables space are
1079*c609719bSwdenk                separated. Local variables are those you define by
1080*c609719bSwdenk                simply typing like `name=value'. To access a local
1081*c609719bSwdenk                variable later on, you have write `$name' or
1082*c609719bSwdenk                `${name}'; variable directly by typing say `$name' at
1083*c609719bSwdenk                the command prompt.
1084*c609719bSwdenk
1085*c609719bSwdenk                Global environment variables are those you use
1086*c609719bSwdenk                setenv/printenv to work with. To run a command stored
1087*c609719bSwdenk                in such a variable, you need to use the run command,
1088*c609719bSwdenk                and you must not use the '$' sign to access them.
1089*c609719bSwdenk
1090*c609719bSwdenk		To store commands and special characters in a
1091*c609719bSwdenk		variable, please use double quotation marks
1092*c609719bSwdenk		surrounding the whole text of the variable, instead
1093*c609719bSwdenk		of the backslashes before semicolons and special
1094*c609719bSwdenk		symbols.
1095*c609719bSwdenk
1096*c609719bSwdenk- Default Environment
1097*c609719bSwdenk		CONFIG_EXTRA_ENV_SETTINGS
1098*c609719bSwdenk
1099*c609719bSwdenk                Define this to contain any number of null terminated
1100*c609719bSwdenk                strings (variable = value pairs) that will be part of
1101*c609719bSwdenk                the default enviroment compiled into the boot image.
1102*c609719bSwdenk                For example, place something like this in your
1103*c609719bSwdenk                board's config file:
1104*c609719bSwdenk
1105*c609719bSwdenk		#define CONFIG_EXTRA_ENV_SETTINGS \
1106*c609719bSwdenk			"myvar1=value1\0" \
1107*c609719bSwdenk			"myvar2=value2\0"
1108*c609719bSwdenk
1109*c609719bSwdenk                Warning: This method is based on knowledge about the
1110*c609719bSwdenk                internal format how the environment is stored by the
1111*c609719bSwdenk                U-Boot code. This is NOT an official, expoerted
1112*c609719bSwdenk                interface! Although it is unlikely that this format
1113*c609719bSwdenk                will change soon, there is no guarantee either.
1114*c609719bSwdenk		You better know what you are doing here.
1115*c609719bSwdenk
1116*c609719bSwdenk                Note: overly (ab)use of the default environment is
1117*c609719bSwdenk                discouraged. Make sure to check other ways to preset
1118*c609719bSwdenk                the environment like the autoscript function or the
1119*c609719bSwdenk                boot command first.
1120*c609719bSwdenk
1121*c609719bSwdenk- Show boot progress
1122*c609719bSwdenk		CONFIG_SHOW_BOOT_PROGRESS
1123*c609719bSwdenk
1124*c609719bSwdenk                Defining this option allows to add some board-
1125*c609719bSwdenk                specific code (calling a user-provided function
1126*c609719bSwdenk                "show_boot_progress(int)") that enables you to show
1127*c609719bSwdenk                the system's boot progress on some display (for
1128*c609719bSwdenk                example, some LED's) on your board. At the moment,
1129*c609719bSwdenk                the following checkpoints are implemented:
1130*c609719bSwdenk
1131*c609719bSwdenk  Arg	Where			When
1132*c609719bSwdenk    1	common/cmd_bootm.c	before attempting to boot an image
1133*c609719bSwdenk   -1	common/cmd_bootm.c	Image header has bad     magic number
1134*c609719bSwdenk    2	common/cmd_bootm.c	Image header has correct magic number
1135*c609719bSwdenk   -2	common/cmd_bootm.c	Image header has bad     checksum
1136*c609719bSwdenk    3	common/cmd_bootm.c	Image header has correct checksum
1137*c609719bSwdenk   -3	common/cmd_bootm.c	Image data   has bad     checksum
1138*c609719bSwdenk    4	common/cmd_bootm.c	Image data   has correct checksum
1139*c609719bSwdenk   -4	common/cmd_bootm.c	Image is for unsupported architecture
1140*c609719bSwdenk    5	common/cmd_bootm.c	Architecture check OK
1141*c609719bSwdenk   -5	common/cmd_bootm.c	Wrong Image Type (not kernel, multi, standalone)
1142*c609719bSwdenk    6	common/cmd_bootm.c	Image Type check OK
1143*c609719bSwdenk   -6	common/cmd_bootm.c	gunzip uncompression error
1144*c609719bSwdenk   -7	common/cmd_bootm.c	Unimplemented compression type
1145*c609719bSwdenk    7	common/cmd_bootm.c	Uncompression OK
1146*c609719bSwdenk   -8	common/cmd_bootm.c	Wrong Image Type (not kernel, multi, standalone)
1147*c609719bSwdenk    8	common/cmd_bootm.c	Image Type check OK
1148*c609719bSwdenk   -9	common/cmd_bootm.c	Unsupported OS (not Linux, BSD, VxWorks, QNX)
1149*c609719bSwdenk    9	common/cmd_bootm.c	Start initial ramdisk verification
1150*c609719bSwdenk  -10	common/cmd_bootm.c	Ramdisk header has bad     magic number
1151*c609719bSwdenk  -11	common/cmd_bootm.c	Ramdisk header has bad     checksum
1152*c609719bSwdenk   10	common/cmd_bootm.c	Ramdisk header is OK
1153*c609719bSwdenk  -12	common/cmd_bootm.c	Ramdisk data   has bad     checksum
1154*c609719bSwdenk   11	common/cmd_bootm.c	Ramdisk data   has correct checksum
1155*c609719bSwdenk   12	common/cmd_bootm.c	Ramdisk verification complete, start loading
1156*c609719bSwdenk  -13	common/cmd_bootm.c	Wrong Image Type (not PPC Linux Ramdisk)
1157*c609719bSwdenk   13	common/cmd_bootm.c	Start multifile image verification
1158*c609719bSwdenk   14	common/cmd_bootm.c	No initial ramdisk, no multifile, continue.
1159*c609719bSwdenk   15	common/cmd_bootm.c	All preparation done, transferring control to OS
1160*c609719bSwdenk
1161*c609719bSwdenk   -1	common/cmd_doc.c	Bad usage of "doc" command
1162*c609719bSwdenk   -1	common/cmd_doc.c	No boot device
1163*c609719bSwdenk   -1	common/cmd_doc.c	Unknown Chip ID on boot device
1164*c609719bSwdenk   -1	common/cmd_doc.c	Read Error on boot device
1165*c609719bSwdenk   -1	common/cmd_doc.c	Image header has bad magic number
1166*c609719bSwdenk
1167*c609719bSwdenk   -1	common/cmd_ide.c	Bad usage of "ide" command
1168*c609719bSwdenk   -1	common/cmd_ide.c	No boot device
1169*c609719bSwdenk   -1	common/cmd_ide.c	Unknown boot device
1170*c609719bSwdenk   -1	common/cmd_ide.c	Unknown partition table
1171*c609719bSwdenk   -1	common/cmd_ide.c	Invalid partition type
1172*c609719bSwdenk   -1	common/cmd_ide.c	Read Error on boot device
1173*c609719bSwdenk   -1	common/cmd_ide.c	Image header has bad magic number
1174*c609719bSwdenk
1175*c609719bSwdenk   -1	common/cmd_nvedit.c	Environment not changable, but has bad CRC
1176*c609719bSwdenk
1177*c609719bSwdenk
1178*c609719bSwdenkModem Support:
1179*c609719bSwdenk--------------
1180*c609719bSwdenk
1181*c609719bSwdenk[so far only for SMDK2400 board]
1182*c609719bSwdenk
1183*c609719bSwdenk- Modem support endable:
1184*c609719bSwdenk		CONFIG_MODEM_SUPPORT
1185*c609719bSwdenk
1186*c609719bSwdenk- RTS/CTS Flow control enable:
1187*c609719bSwdenk		CONFIG_HWFLOW
1188*c609719bSwdenk
1189*c609719bSwdenk- Modem debug support:
1190*c609719bSwdenk		CONFIG_MODEM_SUPPORT_DEBUG
1191*c609719bSwdenk
1192*c609719bSwdenk                Enables debugging stuff (char screen[1024], dbg())
1193*c609719bSwdenk                for modem support. Useful only with BDI2000.
1194*c609719bSwdenk
1195*c609719bSwdenk- General:
1196*c609719bSwdenk
1197*c609719bSwdenk                In the target system modem support is enabled when a
1198*c609719bSwdenk                specific key (key combination) is pressed during
1199*c609719bSwdenk                power-on. Otherwise U-Boot will boot normally
1200*c609719bSwdenk                (autoboot). The key_pressed() fuction is called from
1201*c609719bSwdenk                board_init(). Currently key_pressed() is a dummy
1202*c609719bSwdenk                function, returning 1 and thus enabling modem
1203*c609719bSwdenk                initialization.
1204*c609719bSwdenk
1205*c609719bSwdenk                If there are no modem init strings in the
1206*c609719bSwdenk                environment, U-Boot proceed to autoboot; the
1207*c609719bSwdenk                previous output (banner, info printfs) will be
1208*c609719bSwdenk                supressed, though.
1209*c609719bSwdenk
1210*c609719bSwdenk		See also: doc/README.Modem
1211*c609719bSwdenk
1212*c609719bSwdenk
1213*c609719bSwdenk
1214*c609719bSwdenk
1215*c609719bSwdenkConfiguration Settings:
1216*c609719bSwdenk-----------------------
1217*c609719bSwdenk
1218*c609719bSwdenk- CFG_LONGHELP: Defined when you want long help messages included;
1219*c609719bSwdenk		undefine this when you're short of memory.
1220*c609719bSwdenk
1221*c609719bSwdenk- CFG_PROMPT:	This is what U-Boot prints on the console to
1222*c609719bSwdenk		prompt for user input.
1223*c609719bSwdenk
1224*c609719bSwdenk- CFG_CBSIZE:	Buffer size for input from the Console
1225*c609719bSwdenk
1226*c609719bSwdenk- CFG_PBSIZE:	Buffer size for Console output
1227*c609719bSwdenk
1228*c609719bSwdenk- CFG_MAXARGS:	max. Number of arguments accepted for monitor commands
1229*c609719bSwdenk
1230*c609719bSwdenk- CFG_BARGSIZE: Buffer size for Boot Arguments which are passed to
1231*c609719bSwdenk		the application (usually a Linux kernel) when it is
1232*c609719bSwdenk		booted
1233*c609719bSwdenk
1234*c609719bSwdenk- CFG_BAUDRATE_TABLE:
1235*c609719bSwdenk		List of legal baudrate settings for this board.
1236*c609719bSwdenk
1237*c609719bSwdenk- CFG_CONSOLE_INFO_QUIET
1238*c609719bSwdenk 		Suppress display of console information at boot.
1239*c609719bSwdenk
1240*c609719bSwdenk- CFG_CONSOLE_IS_IN_ENV
1241*c609719bSwdenk 		If the board specific function
1242*c609719bSwdenk 			extern int overwrite_console (void);
1243*c609719bSwdenk 		returns 1, the stdin, stderr and stdout are switched to the
1244*c609719bSwdenk		serial port, else the settings in the environment are used.
1245*c609719bSwdenk
1246*c609719bSwdenk- CFG_CONSOLE_OVERWRITE_ROUTINE
1247*c609719bSwdenk 		Enable the call to overwrite_console().
1248*c609719bSwdenk
1249*c609719bSwdenk- CFG_CONSOLE_ENV_OVERWRITE
1250*c609719bSwdenk		Enable overwrite of previous console environment settings.
1251*c609719bSwdenk
1252*c609719bSwdenk- CFG_MEMTEST_START, CFG_MEMTEST_END:
1253*c609719bSwdenk		Begin and End addresses of the area used by the
1254*c609719bSwdenk		simple memory test.
1255*c609719bSwdenk
1256*c609719bSwdenk- CFG_ALT_MEMTEST:
1257*c609719bSwdenk 		Enable an alternate, more extensive memory test.
1258*c609719bSwdenk
1259*c609719bSwdenk- CFG_TFTP_LOADADDR:
1260*c609719bSwdenk		Default load address for network file downloads
1261*c609719bSwdenk
1262*c609719bSwdenk- CFG_LOADS_BAUD_CHANGE:
1263*c609719bSwdenk		Enable temporary baudrate change while serial download
1264*c609719bSwdenk
1265*c609719bSwdenk- CFG_SDRAM_BASE:
1266*c609719bSwdenk		Physical start address of SDRAM. _Must_ be 0 here.
1267*c609719bSwdenk
1268*c609719bSwdenk- CFG_MBIO_BASE:
1269*c609719bSwdenk		Physical start address of Motherboard I/O (if using a
1270*c609719bSwdenk		Cogent motherboard)
1271*c609719bSwdenk
1272*c609719bSwdenk- CFG_FLASH_BASE:
1273*c609719bSwdenk		Physical start address of Flash memory.
1274*c609719bSwdenk
1275*c609719bSwdenk- CFG_MONITOR_BASE:
1276*c609719bSwdenk		Physical start address of boot monitor code (set by
1277*c609719bSwdenk		make config files to be same as the text base address
1278*c609719bSwdenk		(TEXT_BASE) used when linking) - same as
1279*c609719bSwdenk		CFG_FLASH_BASE when booting from flash.
1280*c609719bSwdenk
1281*c609719bSwdenk- CFG_MONITOR_LEN:
1282*c609719bSwdenk		Size of memory reserved for monitor code
1283*c609719bSwdenk
1284*c609719bSwdenk- CFG_MALLOC_LEN:
1285*c609719bSwdenk		Size of DRAM reserved for malloc() use.
1286*c609719bSwdenk
1287*c609719bSwdenk- CFG_BOOTMAPSZ:
1288*c609719bSwdenk		Maximum size of memory mapped by the startup code of
1289*c609719bSwdenk		the Linux kernel; all data that must be processed by
1290*c609719bSwdenk		the Linux kernel (bd_info, boot arguments, eventually
1291*c609719bSwdenk		initrd image) must be put below this limit.
1292*c609719bSwdenk
1293*c609719bSwdenk- CFG_MAX_FLASH_BANKS:
1294*c609719bSwdenk		Max number of Flash memory banks
1295*c609719bSwdenk
1296*c609719bSwdenk- CFG_MAX_FLASH_SECT:
1297*c609719bSwdenk		Max number of sectors on a Flash chip
1298*c609719bSwdenk
1299*c609719bSwdenk- CFG_FLASH_ERASE_TOUT:
1300*c609719bSwdenk		Timeout for Flash erase operations (in ms)
1301*c609719bSwdenk
1302*c609719bSwdenk- CFG_FLASH_WRITE_TOUT:
1303*c609719bSwdenk		Timeout for Flash write operations (in ms)
1304*c609719bSwdenk
1305*c609719bSwdenk- CFG_DIRECT_FLASH_TFTP:
1306*c609719bSwdenk
1307*c609719bSwdenk		Enable TFTP transfers directly to flash memory;
1308*c609719bSwdenk		without this option such a download has to be
1309*c609719bSwdenk		performed in two steps: (1) download to RAM, and (2)
1310*c609719bSwdenk		copy from RAM to flash.
1311*c609719bSwdenk
1312*c609719bSwdenk		The two-step approach is usually more reliable, since
1313*c609719bSwdenk		you can check if the download worked before you erase
1314*c609719bSwdenk		the flash, but in some situations (when sytem RAM is
1315*c609719bSwdenk		too limited to allow for a tempory copy of the
1316*c609719bSwdenk		downloaded image) this option may be very useful.
1317*c609719bSwdenk
1318*c609719bSwdenk- CFG_FLASH_CFI:
1319*c609719bSwdenk                Define if the flash driver uses extra elements in the
1320*c609719bSwdenk                common flash structure for storing flash geometry
1321*c609719bSwdenk
1322*c609719bSwdenkThe following definitions that deal with the placement and management
1323*c609719bSwdenkof environment data (variable area); in general, we support the
1324*c609719bSwdenkfollowing configurations:
1325*c609719bSwdenk
1326*c609719bSwdenk- CFG_ENV_IS_IN_FLASH:
1327*c609719bSwdenk
1328*c609719bSwdenk	Define this if the environment is in flash memory.
1329*c609719bSwdenk
1330*c609719bSwdenk	a) The environment occupies one whole flash sector, which is
1331*c609719bSwdenk	   "embedded" in the text segment with the U-Boot code. This
1332*c609719bSwdenk	   happens usually with "bottom boot sector" or "top boot
1333*c609719bSwdenk	   sector" type flash chips, which have several smaller
1334*c609719bSwdenk	   sectors at the start or the end. For instance, such a
1335*c609719bSwdenk	   layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In
1336*c609719bSwdenk	   such a case you would place the environment in one of the
1337*c609719bSwdenk	   4 kB sectors - with U-Boot code before and after it. With
1338*c609719bSwdenk	   "top boot sector" type flash chips, you would put the
1339*c609719bSwdenk	   environment in one of the last sectors, leaving a gap
1340*c609719bSwdenk	   between U-Boot and the environment.
1341*c609719bSwdenk
1342*c609719bSwdenk	- CFG_ENV_OFFSET:
1343*c609719bSwdenk
1344*c609719bSwdenk	   Offset of environment data (variable area) to the
1345*c609719bSwdenk	   beginning of flash memory; for instance, with bottom boot
1346*c609719bSwdenk	   type flash chips the second sector can be used: the offset
1347*c609719bSwdenk	   for this sector is given here.
1348*c609719bSwdenk
1349*c609719bSwdenk	   CFG_ENV_OFFSET is used relative to CFG_FLASH_BASE.
1350*c609719bSwdenk
1351*c609719bSwdenk	- CFG_ENV_ADDR:
1352*c609719bSwdenk
1353*c609719bSwdenk	   This is just another way to specify the start address of
1354*c609719bSwdenk	   the flash sector containing the environment (instead of
1355*c609719bSwdenk	   CFG_ENV_OFFSET).
1356*c609719bSwdenk
1357*c609719bSwdenk	- CFG_ENV_SECT_SIZE:
1358*c609719bSwdenk
1359*c609719bSwdenk	   Size of the sector containing the environment.
1360*c609719bSwdenk
1361*c609719bSwdenk
1362*c609719bSwdenk	b) Sometimes flash chips have few, equal sized, BIG sectors.
1363*c609719bSwdenk	   In such a case you don't want to spend a whole sector for
1364*c609719bSwdenk	   the environment.
1365*c609719bSwdenk
1366*c609719bSwdenk	- CFG_ENV_SIZE:
1367*c609719bSwdenk
1368*c609719bSwdenk	   If you use this in combination with CFG_ENV_IS_IN_FLASH
1369*c609719bSwdenk	   and CFG_ENV_SECT_SIZE, you can specify to use only a part
1370*c609719bSwdenk	   of this flash sector for the environment. This saves
1371*c609719bSwdenk	   memory for the RAM copy of the environment.
1372*c609719bSwdenk
1373*c609719bSwdenk	   It may also save flash memory if you decide to use this
1374*c609719bSwdenk	   when your environment is "embedded" within U-Boot code,
1375*c609719bSwdenk	   since then the remainder of the flash sector could be used
1376*c609719bSwdenk	   for U-Boot code. It should be pointed out that this is
1377*c609719bSwdenk	   STRONGLY DISCOURAGED from a robustness point of view:
1378*c609719bSwdenk	   updating the environment in flash makes it always
1379*c609719bSwdenk	   necessary to erase the WHOLE sector. If something goes
1380*c609719bSwdenk	   wrong before the contents has been restored from a copy in
1381*c609719bSwdenk	   RAM, your target system will be dead.
1382*c609719bSwdenk
1383*c609719bSwdenk	- CFG_ENV_ADDR_REDUND
1384*c609719bSwdenk	  CFG_ENV_SIZE_REDUND
1385*c609719bSwdenk
1386*c609719bSwdenk           These settings describe a second storage area used to hold
1387*c609719bSwdenk           a redundand copy of the environment data, so that there is
1388*c609719bSwdenk           a valid backup copy in case there is a power failur during
1389*c609719bSwdenk           a "saveenv" operation.
1390*c609719bSwdenk
1391*c609719bSwdenkBE CAREFUL! Any changes to the flash layout, and some changes to the
1392*c609719bSwdenksource code will make it necessary to adapt <board>/u-boot.lds*
1393*c609719bSwdenkaccordingly!
1394*c609719bSwdenk
1395*c609719bSwdenk
1396*c609719bSwdenk- CFG_ENV_IS_IN_NVRAM:
1397*c609719bSwdenk
1398*c609719bSwdenk	Define this if you have some non-volatile memory device
1399*c609719bSwdenk	(NVRAM, battery buffered SRAM) which you want to use for the
1400*c609719bSwdenk	environment.
1401*c609719bSwdenk
1402*c609719bSwdenk	- CFG_ENV_ADDR:
1403*c609719bSwdenk	- CFG_ENV_SIZE:
1404*c609719bSwdenk
1405*c609719bSwdenk	  These two #defines are used to determin the memory area you
1406*c609719bSwdenk	  want to use for environment. It is assumed that this memory
1407*c609719bSwdenk	  can just be read and written to, without any special
1408*c609719bSwdenk	  provision.
1409*c609719bSwdenk
1410*c609719bSwdenkBE CAREFUL! The first access to the environment happens quite early
1411*c609719bSwdenkin U-Boot initalization (when we try to get the setting of for the
1412*c609719bSwdenkconsole baudrate). You *MUST* have mappend your NVRAM area then, or
1413*c609719bSwdenkU-Boot will hang.
1414*c609719bSwdenk
1415*c609719bSwdenkPlease note that even with NVRAM we still use a copy of the
1416*c609719bSwdenkenvironment in RAM: we could work on NVRAM directly, but we want to
1417*c609719bSwdenkkeep settings there always unmodified except somebody uses "saveenv"
1418*c609719bSwdenkto save the current settings.
1419*c609719bSwdenk
1420*c609719bSwdenk
1421*c609719bSwdenk- CFG_ENV_IS_IN_EEPROM:
1422*c609719bSwdenk
1423*c609719bSwdenk	Use this if you have an EEPROM or similar serial access
1424*c609719bSwdenk	device and a driver for it.
1425*c609719bSwdenk
1426*c609719bSwdenk	- CFG_ENV_OFFSET:
1427*c609719bSwdenk	- CFG_ENV_SIZE:
1428*c609719bSwdenk
1429*c609719bSwdenk	  These two #defines specify the offset and size of the
1430*c609719bSwdenk	  environment area within the total memory of your EEPROM.
1431*c609719bSwdenk
1432*c609719bSwdenk	- CFG_I2C_EEPROM_ADDR:
1433*c609719bSwdenk	  If defined, specified the chip address of the EEPROM device.
1434*c609719bSwdenk	  The default address is zero.
1435*c609719bSwdenk
1436*c609719bSwdenk	- CFG_EEPROM_PAGE_WRITE_BITS:
1437*c609719bSwdenk	  If defined, the number of bits used to address bytes in a
1438*c609719bSwdenk	  single page in the EEPROM device.  A 64 byte page, for example
1439*c609719bSwdenk	  would require six bits.
1440*c609719bSwdenk
1441*c609719bSwdenk	- CFG_EEPROM_PAGE_WRITE_DELAY_MS:
1442*c609719bSwdenk	  If defined, the number of milliseconds to delay between
1443*c609719bSwdenk	  page writes.  The default is zero milliseconds.
1444*c609719bSwdenk
1445*c609719bSwdenk	- CFG_I2C_EEPROM_ADDR_LEN:
1446*c609719bSwdenk	  The length in bytes of the EEPROM memory array address.  Note
1447*c609719bSwdenk	  that this is NOT the chip address length!
1448*c609719bSwdenk
1449*c609719bSwdenk	- CFG_EEPROM_SIZE:
1450*c609719bSwdenk	  The size in bytes of the EEPROM device.
1451*c609719bSwdenk
1452*c609719bSwdenk	- CFG_I2C_EEPROM_ADDR:
1453*c609719bSwdenk	  If defined, specified the chip address of the EEPROM device.
1454*c609719bSwdenk	  The default address is zero.
1455*c609719bSwdenk
1456*c609719bSwdenk	- CFG_EEPROM_PAGE_WRITE_BITS:
1457*c609719bSwdenk	  If defined, the number of bits used to address bytes in a
1458*c609719bSwdenk	  single page in the EEPROM device.  A 64 byte page, for example
1459*c609719bSwdenk	  would require six bits.
1460*c609719bSwdenk
1461*c609719bSwdenk	- CFG_EEPROM_PAGE_WRITE_DELAY_MS:
1462*c609719bSwdenk	  If defined, the number of milliseconds to delay between
1463*c609719bSwdenk	  page writes.  The default is zero milliseconds.
1464*c609719bSwdenk
1465*c609719bSwdenk	- CFG_I2C_EEPROM_ADDR_LEN:
1466*c609719bSwdenk	  The length in bytes of the EEPROM memory array address.  Note
1467*c609719bSwdenk	  that this is NOT the chip address length!
1468*c609719bSwdenk
1469*c609719bSwdenk	- CFG_EEPROM_SIZE:
1470*c609719bSwdenk	  The size in bytes of the EEPROM device.
1471*c609719bSwdenk
1472*c609719bSwdenk- CFG_SPI_INIT_OFFSET
1473*c609719bSwdenk
1474*c609719bSwdenk	Defines offset to the initial SPI buffer area in DPRAM. The
1475*c609719bSwdenk	area is used at an early stage (ROM part) if the environment
1476*c609719bSwdenk	is configured to reside in the SPI EEPROM: We need a 520 byte
1477*c609719bSwdenk	scratch DPRAM area. It is used between the two initialization
1478*c609719bSwdenk	calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems
1479*c609719bSwdenk	to be a good choice since it makes it far enough from the
1480*c609719bSwdenk	start of the data area as well as from the stack pointer.
1481*c609719bSwdenk
1482*c609719bSwdenkPlease note that the environment is read-only as long as the monitor
1483*c609719bSwdenkhas been relocated to RAM and a RAM copy of the environment has been
1484*c609719bSwdenkcreated; also, when using EEPROM you will have to use getenv_r()
1485*c609719bSwdenkuntil then to read environment variables.
1486*c609719bSwdenk
1487*c609719bSwdenkThe environment is now protected by a CRC32 checksum. Before the
1488*c609719bSwdenkmonitor is relocated into RAM, as a result of a bad CRC you will be
1489*c609719bSwdenkworking with the compiled-in default environment - *silently*!!!
1490*c609719bSwdenk[This is necessary, because the first environment variable we need is
1491*c609719bSwdenkthe "baudrate" setting for the console - if we have a bad CRC, we
1492*c609719bSwdenkdon't have any device yet where we could complain.]
1493*c609719bSwdenk
1494*c609719bSwdenkNote: once the monitor has been relocated, then it will complain if
1495*c609719bSwdenkthe default environment is used; a new CRC is computed as soon as you
1496*c609719bSwdenkuse the "setenv" command to modify / delete / add any environment
1497*c609719bSwdenkvariable [even when you try to delete a non-existing variable!].
1498*c609719bSwdenk
1499*c609719bSwdenkNote2: you must edit your u-boot.lds file to reflect this
1500*c609719bSwdenkconfiguration.
1501*c609719bSwdenk
1502*c609719bSwdenk
1503*c609719bSwdenkMany of the options are named exactly as the corresponding Linux
1504*c609719bSwdenkkernel configuration options. The intention is to make it easier to
1505*c609719bSwdenkbuild a config tool - later.
1506*c609719bSwdenk
1507*c609719bSwdenkLow Level (hardware related) configuration options:
1508*c609719bSwdenk
1509*c609719bSwdenk- CFG_CACHELINE_SIZE:
1510*c609719bSwdenk		Cache Line Size of the CPU.
1511*c609719bSwdenk
1512*c609719bSwdenk- CFG_DEFAULT_IMMR:
1513*c609719bSwdenk		Default address of the IMMR after system reset.
1514*c609719bSwdenk		Needed on some 8260 systems (MPC8260ADS and RPXsuper)
1515*c609719bSwdenk		to be able to adjust the position of the IMMR
1516*c609719bSwdenk		register after a reset.
1517*c609719bSwdenk
1518*c609719bSwdenk- CFG_IMMR:	Physical address of the Internal Memory Mapped
1519*c609719bSwdenk		Register; DO NOT CHANGE! (11-4)
1520*c609719bSwdenk		[MPC8xx systems only]
1521*c609719bSwdenk
1522*c609719bSwdenk- CFG_INIT_RAM_ADDR:
1523*c609719bSwdenk
1524*c609719bSwdenk		Start address of memory area tha can be used for
1525*c609719bSwdenk		initial data and stack; please note that this must be
1526*c609719bSwdenk		writable memory that is working WITHOUT special
1527*c609719bSwdenk		initialization, i. e. you CANNOT use normal RAM which
1528*c609719bSwdenk		will become available only after programming the
1529*c609719bSwdenk		memory controller and running certain initialization
1530*c609719bSwdenk		sequences.
1531*c609719bSwdenk
1532*c609719bSwdenk		U-Boot uses the following memory types:
1533*c609719bSwdenk		- MPC8xx and MPC8260: IMMR (internal memory of the CPU)
1534*c609719bSwdenk		- MPC824X: data cache
1535*c609719bSwdenk		- PPC4xx:  data cache
1536*c609719bSwdenk
1537*c609719bSwdenk- CFG_INIT_DATA_OFFSET:
1538*c609719bSwdenk
1539*c609719bSwdenk		Offset of the initial data structure in the memory
1540*c609719bSwdenk		area defined by CFG_INIT_RAM_ADDR. Usually
1541*c609719bSwdenk		CFG_INIT_DATA_OFFSET is chosen such that the initial
1542*c609719bSwdenk		data is located at the end of the available space
1543*c609719bSwdenk		(sometimes written as (CFG_INIT_RAM_END -
1544*c609719bSwdenk		CFG_INIT_DATA_SIZE), and the initial stack is just
1545*c609719bSwdenk		below that area (growing from (CFG_INIT_RAM_ADDR +
1546*c609719bSwdenk		CFG_INIT_DATA_OFFSET) downward.
1547*c609719bSwdenk
1548*c609719bSwdenk	Note:
1549*c609719bSwdenk		On the MPC824X (or other systems that use the data
1550*c609719bSwdenk		cache for initial memory) the address chosen for
1551*c609719bSwdenk		CFG_INIT_RAM_ADDR is basically arbitrary - it must
1552*c609719bSwdenk		point to an otherwise UNUSED address space between
1553*c609719bSwdenk		the top of RAM and the start of the PCI space.
1554*c609719bSwdenk
1555*c609719bSwdenk- CFG_SIUMCR:	SIU Module Configuration (11-6)
1556*c609719bSwdenk
1557*c609719bSwdenk- CFG_SYPCR:	System Protection Control (11-9)
1558*c609719bSwdenk
1559*c609719bSwdenk- CFG_TBSCR:	Time Base Status and Control (11-26)
1560*c609719bSwdenk
1561*c609719bSwdenk- CFG_PISCR:	Periodic Interrupt Status and Control (11-31)
1562*c609719bSwdenk
1563*c609719bSwdenk- CFG_PLPRCR:	PLL, Low-Power, and Reset Control Register (15-30)
1564*c609719bSwdenk
1565*c609719bSwdenk- CFG_SCCR:	System Clock and reset Control Register (15-27)
1566*c609719bSwdenk
1567*c609719bSwdenk- CFG_OR_TIMING_SDRAM:
1568*c609719bSwdenk		SDRAM timing
1569*c609719bSwdenk
1570*c609719bSwdenk- CFG_MAMR_PTA:
1571*c609719bSwdenk		periodic timer for refresh
1572*c609719bSwdenk
1573*c609719bSwdenk- CFG_DER:	Debug Event Register (37-47)
1574*c609719bSwdenk
1575*c609719bSwdenk- FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CFG_REMAP_OR_AM,
1576*c609719bSwdenk  CFG_PRELIM_OR_AM, CFG_OR_TIMING_FLASH, CFG_OR0_REMAP,
1577*c609719bSwdenk  CFG_OR0_PRELIM, CFG_BR0_PRELIM, CFG_OR1_REMAP, CFG_OR1_PRELIM,
1578*c609719bSwdenk  CFG_BR1_PRELIM:
1579*c609719bSwdenk		Memory Controller Definitions: BR0/1 and OR0/1 (FLASH)
1580*c609719bSwdenk
1581*c609719bSwdenk- SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE,
1582*c609719bSwdenk  CFG_OR_TIMING_SDRAM, CFG_OR2_PRELIM, CFG_BR2_PRELIM,
1583*c609719bSwdenk  CFG_OR3_PRELIM, CFG_BR3_PRELIM:
1584*c609719bSwdenk		Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM)
1585*c609719bSwdenk
1586*c609719bSwdenk- CFG_MAMR_PTA, CFG_MPTPR_2BK_4K, CFG_MPTPR_1BK_4K, CFG_MPTPR_2BK_8K,
1587*c609719bSwdenk  CFG_MPTPR_1BK_8K, CFG_MAMR_8COL, CFG_MAMR_9COL:
1588*c609719bSwdenk		Machine Mode Register and Memory Periodic Timer
1589*c609719bSwdenk		Prescaler definitions (SDRAM timing)
1590*c609719bSwdenk
1591*c609719bSwdenk- CFG_I2C_UCODE_PATCH, CFG_I2C_DPMEM_OFFSET [0x1FC0]:
1592*c609719bSwdenk		enable I2C microcode relocation patch (MPC8xx);
1593*c609719bSwdenk		define relocation offset in DPRAM [DSP2]
1594*c609719bSwdenk
1595*c609719bSwdenk- CFG_SPI_UCODE_PATCH, CFG_SPI_DPMEM_OFFSET [0x1FC0]:
1596*c609719bSwdenk		enable SPI microcode relocation patch (MPC8xx);
1597*c609719bSwdenk		define relocation offset in DPRAM [SCC4]
1598*c609719bSwdenk
1599*c609719bSwdenk- CFG_USE_OSCCLK:
1600*c609719bSwdenk		Use OSCM clock mode on MBX8xx board. Be careful,
1601*c609719bSwdenk		wrong setting might damage your board. Read
1602*c609719bSwdenk		doc/README.MBX before setting this variable!
1603*c609719bSwdenk
1604*c609719bSwdenkBuilding the Software:
1605*c609719bSwdenk======================
1606*c609719bSwdenk
1607*c609719bSwdenkBuilding U-Boot has been tested in native PPC environments (on a
1608*c609719bSwdenkPowerBook G3 running LinuxPPC 2000) and in cross environments
1609*c609719bSwdenk(running RedHat 6.x and 7.x Linux on x86, Solaris 2.6 on a SPARC, and
1610*c609719bSwdenkNetBSD 1.5 on x86).
1611*c609719bSwdenk
1612*c609719bSwdenkIf you are not using a native PPC environment, it is assumed that you
1613*c609719bSwdenkhave the GNU cross compiling tools available in your path and named
1614*c609719bSwdenkwith a prefix of "powerpc-linux-". If this is not the case, (e.g. if
1615*c609719bSwdenkyou are using Monta Vista's Hard Hat Linux CDK 1.2) you must change
1616*c609719bSwdenkthe definition of CROSS_COMPILE in Makefile. For HHL on a 4xx CPU,
1617*c609719bSwdenkchange it to:
1618*c609719bSwdenk
1619*c609719bSwdenk	CROSS_COMPILE = ppc_4xx-
1620*c609719bSwdenk
1621*c609719bSwdenk
1622*c609719bSwdenkU-Boot is intended to be  simple  to  build.  After  installing  the
1623*c609719bSwdenksources	 you must configure U-Boot for one specific board type. This
1624*c609719bSwdenkis done by typing:
1625*c609719bSwdenk
1626*c609719bSwdenk	make NAME_config
1627*c609719bSwdenk
1628*c609719bSwdenkwhere "NAME_config" is the name of one of the existing
1629*c609719bSwdenkconfigurations; the following names are supported:
1630*c609719bSwdenk
1631*c609719bSwdenk    ADCIOP_config	  GTH_config		TQM850L_config
1632*c609719bSwdenk    ADS860_config	  IP860_config		TQM855L_config
1633*c609719bSwdenk    AR405_config	  IVML24_config		TQM860L_config
1634*c609719bSwdenk    CANBT_config	  IVMS8_config		WALNUT405_config
1635*c609719bSwdenk    CPCI405_config	  LANTEC_config		cogent_common_config
1636*c609719bSwdenk    CPCIISER4_config	  MBX_config		cogent_mpc8260_config
1637*c609719bSwdenk    CU824_config	  MBX860T_config	cogent_mpc8xx_config
1638*c609719bSwdenk    ESTEEM192E_config	  RPXlite_config	hermes_config
1639*c609719bSwdenk    ETX094_config	  RPXsuper_config	hymod_config
1640*c609719bSwdenk    FADS823_config	  SM850_config		lwmon_config
1641*c609719bSwdenk    FADS850SAR_config	  SPD823TS_config	pcu_e_config
1642*c609719bSwdenk    FADS860T_config	  SXNI855T_config	rsdproto_config
1643*c609719bSwdenk    FPS850L_config	  Sandpoint8240_config	sbc8260_config
1644*c609719bSwdenk    GENIETV_config	  TQM823L_config	PIP405_config
1645*c609719bSwdenk    GEN860T_config	  EBONY_config
1646*c609719bSwdenk
1647*c609719bSwdenkNote: for some board special configuration names may exist; check  if
1648*c609719bSwdenk      additional  information is available from the board vendor; for
1649*c609719bSwdenk      instance, the TQM8xxL systems run normally at 50 MHz and use  a
1650*c609719bSwdenk      SCC  for	10baseT	 ethernet; there are also systems with 80 MHz
1651*c609719bSwdenk      CPU clock, and an optional Fast Ethernet	module	is  available
1652*c609719bSwdenk      for  CPU's  with FEC. You can select such additional "features"
1653*c609719bSwdenk      when chosing the configuration, i. e.
1654*c609719bSwdenk
1655*c609719bSwdenk      make TQM860L_config
1656*c609719bSwdenk	- will configure for a plain TQM860L, i. e. 50MHz, no FEC
1657*c609719bSwdenk
1658*c609719bSwdenk      make TQM860L_FEC_config
1659*c609719bSwdenk	- will configure for a TQM860L at 50MHz with FEC for ethernet
1660*c609719bSwdenk
1661*c609719bSwdenk      make TQM860L_80MHz_config
1662*c609719bSwdenk	- will configure for a TQM860L at 80 MHz, with normal 10baseT
1663*c609719bSwdenk	  interface
1664*c609719bSwdenk
1665*c609719bSwdenk      make TQM860L_FEC_80MHz_config
1666*c609719bSwdenk	- will configure for a TQM860L at 80 MHz with FEC for ethernet
1667*c609719bSwdenk
1668*c609719bSwdenk      make TQM823L_LCD_config
1669*c609719bSwdenk	- will configure for a TQM823L with U-Boot console on LCD
1670*c609719bSwdenk
1671*c609719bSwdenk      make TQM823L_LCD_80MHz_config
1672*c609719bSwdenk	- will configure for a TQM823L at 80 MHz with U-Boot console on LCD
1673*c609719bSwdenk
1674*c609719bSwdenk      etc.
1675*c609719bSwdenk
1676*c609719bSwdenk
1677*c609719bSwdenk
1678*c609719bSwdenkFinally, type "make all", and you should  get  some  working  U-Boot
1679*c609719bSwdenkimages ready for downlod to / installation on your system:
1680*c609719bSwdenk
1681*c609719bSwdenk- "u-boot.bin" is a raw binary image
1682*c609719bSwdenk- "u-boot" is an image in ELF binary format
1683*c609719bSwdenk- "u-boot.srec" is in Motorola S-Record format
1684*c609719bSwdenk
1685*c609719bSwdenk
1686*c609719bSwdenkPlease be aware that the Makefiles assume you are using GNU make, so
1687*c609719bSwdenkfor instance on NetBSD you might need to use "gmake" instead of
1688*c609719bSwdenknative "make".
1689*c609719bSwdenk
1690*c609719bSwdenk
1691*c609719bSwdenkIf the system board that you have is not listed, then you will need
1692*c609719bSwdenkto port U-Boot to your hardware platform. To do this, follow these
1693*c609719bSwdenksteps:
1694*c609719bSwdenk
1695*c609719bSwdenk1.  Add a new configuration option for your board to the toplevel
1696*c609719bSwdenk    "Makefile", using the existing entries as examples.
1697*c609719bSwdenk2.  Create a new directory to hold your board specific code. Add any
1698*c609719bSwdenk    files you need.
1699*c609719bSwdenk3.  If you're porting U-Boot to a new CPU, then also create a new
1700*c609719bSwdenk    directory to hold your CPU specific code. Add any files you need.
1701*c609719bSwdenk4.  Run "make config_name" with your new name.
1702*c609719bSwdenk5.  Type "make", and you should get a working "u-boot.srec" file
1703*c609719bSwdenk    to be installed on your target system.
1704*c609719bSwdenk    [Of course, this last step is much harder than it sounds.]
1705*c609719bSwdenk
1706*c609719bSwdenk
1707*c609719bSwdenkTesting of U-Boot Modifications, Ports to New Hardware, etc.:
1708*c609719bSwdenk==============================================================
1709*c609719bSwdenk
1710*c609719bSwdenkIf you have modified U-Boot sources (for instance added a new	board
1711*c609719bSwdenkor  support  for  new  devices,	 a new CPU, etc.) you are expected to
1712*c609719bSwdenkprovide feedback to the other developers. The feedback normally takes
1713*c609719bSwdenkthe form of a "patch", i. e. a context diff against a certain (latest
1714*c609719bSwdenkofficial or latest in CVS) version of U-Boot sources.
1715*c609719bSwdenk
1716*c609719bSwdenkBut before you submit such a patch, please verify that	your  modifi-
1717*c609719bSwdenkcation	did not break existing code. At least make sure that *ALL* of
1718*c609719bSwdenkthe supported boards compile WITHOUT ANY compiler warnings. To do so,
1719*c609719bSwdenkjust run the "MAKEALL" script, which will configure and build U-Boot
1720*c609719bSwdenkfor ALL supported system. Be warned, this will take a while. You  can
1721*c609719bSwdenkselect	which  (cross)	compiler  to use py passing a `CROSS_COMPILE'
1722*c609719bSwdenkenvironment variable to the script, i. e. to use the cross tools from
1723*c609719bSwdenkMontaVista's Hard Hat Linux you can type
1724*c609719bSwdenk
1725*c609719bSwdenk	CROSS_COMPILE=ppc_8xx- MAKEALL
1726*c609719bSwdenk
1727*c609719bSwdenkor to build on a native PowerPC system you can type
1728*c609719bSwdenk
1729*c609719bSwdenk	CROSS_COMPILE=' ' MAKEALL
1730*c609719bSwdenk
1731*c609719bSwdenkSee also "U-Boot Porting Guide" below.
1732*c609719bSwdenk
1733*c609719bSwdenk
1734*c609719bSwdenk
1735*c609719bSwdenkMonitor Commands - Overview:
1736*c609719bSwdenk============================
1737*c609719bSwdenk
1738*c609719bSwdenkgo	- start application at address 'addr'
1739*c609719bSwdenkrun	- run commands in an environment variable
1740*c609719bSwdenkbootm	- boot application image from memory
1741*c609719bSwdenkbootp	- boot image via network using BootP/TFTP protocol
1742*c609719bSwdenktftpboot- boot image via network using TFTP protocol
1743*c609719bSwdenk	       and env variables "ipaddr" and "serverip"
1744*c609719bSwdenk	       (and eventually "gatewayip")
1745*c609719bSwdenkrarpboot- boot image via network using RARP/TFTP protocol
1746*c609719bSwdenkdiskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'
1747*c609719bSwdenkloads	- load S-Record file over serial line
1748*c609719bSwdenkloadb	- load binary file over serial line (kermit mode)
1749*c609719bSwdenkmd	- memory display
1750*c609719bSwdenkmm	- memory modify (auto-incrementing)
1751*c609719bSwdenknm	- memory modify (constant address)
1752*c609719bSwdenkmw	- memory write (fill)
1753*c609719bSwdenkcp	- memory copy
1754*c609719bSwdenkcmp	- memory compare
1755*c609719bSwdenkcrc32	- checksum calculation
1756*c609719bSwdenkimd     - i2c memory display
1757*c609719bSwdenkimm     - i2c memory modify (auto-incrementing)
1758*c609719bSwdenkinm     - i2c memory modify (constant address)
1759*c609719bSwdenkimw     - i2c memory write (fill)
1760*c609719bSwdenkicrc32  - i2c checksum calculation
1761*c609719bSwdenkiprobe  - probe to discover valid I2C chip addresses
1762*c609719bSwdenkiloop   - infinite loop on address range
1763*c609719bSwdenkisdram  - print SDRAM configuration information
1764*c609719bSwdenksspi    - SPI utility commands
1765*c609719bSwdenkbase	- print or set address offset
1766*c609719bSwdenkprintenv- print environment variables
1767*c609719bSwdenksetenv	- set environment variables
1768*c609719bSwdenksaveenv - save environment variables to persistent storage
1769*c609719bSwdenkprotect - enable or disable FLASH write protection
1770*c609719bSwdenkerase	- erase FLASH memory
1771*c609719bSwdenkflinfo	- print FLASH memory information
1772*c609719bSwdenkbdinfo	- print Board Info structure
1773*c609719bSwdenkiminfo	- print header information for application image
1774*c609719bSwdenkconinfo - print console devices and informations
1775*c609719bSwdenkide	- IDE sub-system
1776*c609719bSwdenkloop	- infinite loop on address range
1777*c609719bSwdenkmtest	- simple RAM test
1778*c609719bSwdenkicache	- enable or disable instruction cache
1779*c609719bSwdenkdcache	- enable or disable data cache
1780*c609719bSwdenkreset	- Perform RESET of the CPU
1781*c609719bSwdenkecho	- echo args to console
1782*c609719bSwdenkversion - print monitor version
1783*c609719bSwdenkhelp	- print online help
1784*c609719bSwdenk?	- alias for 'help'
1785*c609719bSwdenk
1786*c609719bSwdenk
1787*c609719bSwdenkMonitor Commands - Detailed Description:
1788*c609719bSwdenk========================================
1789*c609719bSwdenk
1790*c609719bSwdenkTODO.
1791*c609719bSwdenk
1792*c609719bSwdenkFor now: just type "help <command>".
1793*c609719bSwdenk
1794*c609719bSwdenk
1795*c609719bSwdenkEnvironment Variables:
1796*c609719bSwdenk======================
1797*c609719bSwdenk
1798*c609719bSwdenkU-Boot supports user configuration using Environment Variables which
1799*c609719bSwdenkcan be made persistent by saving to Flash memory.
1800*c609719bSwdenk
1801*c609719bSwdenkEnvironment Variables are set using "setenv", printed using
1802*c609719bSwdenk"printenv", and saved to Flash using "saveenv". Using "setenv"
1803*c609719bSwdenkwithout a value can be used to delete a variable from the
1804*c609719bSwdenkenvironment. As long as you don't save the environment you are
1805*c609719bSwdenkworking with an in-memory copy. In case the Flash area containing the
1806*c609719bSwdenkenvironment is erased by accident, a default environment is provided.
1807*c609719bSwdenk
1808*c609719bSwdenkSome configuration options can be set using Environment Variables:
1809*c609719bSwdenk
1810*c609719bSwdenk  baudrate	- see CONFIG_BAUDRATE
1811*c609719bSwdenk
1812*c609719bSwdenk  bootdelay	- see CONFIG_BOOTDELAY
1813*c609719bSwdenk
1814*c609719bSwdenk  bootcmd	- see CONFIG_BOOTCOMMAND
1815*c609719bSwdenk
1816*c609719bSwdenk  bootargs	- Boot arguments when booting an RTOS image
1817*c609719bSwdenk
1818*c609719bSwdenk  bootfile	- Name of the image to load with TFTP
1819*c609719bSwdenk
1820*c609719bSwdenk  autoload	- if set to "no" (any string beginning with 'n'),
1821*c609719bSwdenk		  "bootp" will just load perform a lookup of the
1822*c609719bSwdenk		  configuration from the BOOTP server, but not try to
1823*c609719bSwdenk		  load any image using TFTP
1824*c609719bSwdenk
1825*c609719bSwdenk  autostart	- if set to "yes", an image loaded using the "bootp",
1826*c609719bSwdenk		  "rarpboot", "tftpboot" or "diskboot" commands will
1827*c609719bSwdenk		  be automatically started (by internally calling
1828*c609719bSwdenk		  "bootm")
1829*c609719bSwdenk
1830*c609719bSwdenk  initrd_high	- restrict positioning of initrd images:
1831*c609719bSwdenk		  If this variable is not set, initrd images will be
1832*c609719bSwdenk		  copied to the highest possible address in RAM; this
1833*c609719bSwdenk		  is usually what you want since it allows for
1834*c609719bSwdenk		  maximum initrd size. If for some reason you want to
1835*c609719bSwdenk		  make sure that the initrd image is loaded below the
1836*c609719bSwdenk		  CFG_BOOTMAPSZ limit, you can set this environment
1837*c609719bSwdenk		  variable to a value of "no" or "off" or "0".
1838*c609719bSwdenk		  Alternatively, you can set it to a maximum upper
1839*c609719bSwdenk		  address to use (U-Boot will still check that it
1840*c609719bSwdenk		  does not overwrite the U-Boot stack and data).
1841*c609719bSwdenk
1842*c609719bSwdenk		  For instance, when you have a system with 16 MB
1843*c609719bSwdenk		  RAM, and want to reseve 4 MB from use by Linux,
1844*c609719bSwdenk		  you can do this by adding "mem=12M" to the value of
1845*c609719bSwdenk		  the "bootargs" variable. However, now you must make
1846*c609719bSwdenk		  sure, that the initrd image is placed in the first
1847*c609719bSwdenk		  12 MB as well - this can be done with
1848*c609719bSwdenk
1849*c609719bSwdenk		  setenv initrd_high 00c00000
1850*c609719bSwdenk
1851*c609719bSwdenk  ipaddr	- IP address; needed for tftpboot command
1852*c609719bSwdenk
1853*c609719bSwdenk  loadaddr	- Default load address for commands like "bootp",
1854*c609719bSwdenk		  "rarpboot", "tftpboot" or "diskboot"
1855*c609719bSwdenk
1856*c609719bSwdenk  loads_echo	- see CONFIG_LOADS_ECHO
1857*c609719bSwdenk
1858*c609719bSwdenk  serverip	- TFTP server IP address; needed for tftpboot command
1859*c609719bSwdenk
1860*c609719bSwdenk  bootretry	- see CONFIG_BOOT_RETRY_TIME
1861*c609719bSwdenk
1862*c609719bSwdenk  bootdelaykey	- see CONFIG_AUTOBOOT_DELAY_STR
1863*c609719bSwdenk
1864*c609719bSwdenk  bootstopkey	- see CONFIG_AUTOBOOT_STOP_STR
1865*c609719bSwdenk
1866*c609719bSwdenk
1867*c609719bSwdenkThe following environment variables may be used and automatically
1868*c609719bSwdenkupdated by the network boot commands ("bootp" and "rarpboot"),
1869*c609719bSwdenkdepending the information provided by your boot server:
1870*c609719bSwdenk
1871*c609719bSwdenk  bootfile	- see above
1872*c609719bSwdenk  dnsip		- IP address of your Domain Name Server
1873*c609719bSwdenk  gatewayip	- IP address of the Gateway (Router) to use
1874*c609719bSwdenk  hostname	- Target hostname
1875*c609719bSwdenk  ipaddr	- see above
1876*c609719bSwdenk  netmask	- Subnet Mask
1877*c609719bSwdenk  rootpath	- Pathname of the root filesystem on the NFS server
1878*c609719bSwdenk  serverip	- see above
1879*c609719bSwdenk
1880*c609719bSwdenk
1881*c609719bSwdenkThere are two special Environment Variables:
1882*c609719bSwdenk
1883*c609719bSwdenk  serial#	- contains hardware identification information such
1884*c609719bSwdenk		  as type string and/or serial number
1885*c609719bSwdenk  ethaddr	- Ethernet address
1886*c609719bSwdenk
1887*c609719bSwdenkThese variables can be set only once (usually during manufacturing of
1888*c609719bSwdenkthe board). U-Boot refuses to delete or overwrite these variables
1889*c609719bSwdenkonce they have been set once.
1890*c609719bSwdenk
1891*c609719bSwdenk
1892*c609719bSwdenkPlease note that changes to some configuration parameters may take
1893*c609719bSwdenkonly effect after the next boot (yes, that's just like Windoze :-).
1894*c609719bSwdenk
1895*c609719bSwdenk
1896*c609719bSwdenkNote for Redundant Ethernet Interfaces:
1897*c609719bSwdenk=======================================
1898*c609719bSwdenk
1899*c609719bSwdenkSome boards come with redundand ethernet interfaces; U-Boot supports
1900*c609719bSwdenksuch configurations and is capable of automatic selection of a
1901*c609719bSwdenk"working" interface when needed. MAC assignemnt works as follows:
1902*c609719bSwdenk
1903*c609719bSwdenkNetwork interfaces are numbered eth0, eth1, eth2, ... Corresponding
1904*c609719bSwdenkMAC addresses can be stored in the environment as "ethaddr" (=>eth0),
1905*c609719bSwdenk"eth1addr" (=>eth1), "eth2addr", ...
1906*c609719bSwdenk
1907*c609719bSwdenkIf the network interface stores some valid MAC address (for instance
1908*c609719bSwdenkin SROM), this is used as default address if there is NO correspon-
1909*c609719bSwdenkding setting in the environment; if the corresponding environment
1910*c609719bSwdenkvariable is set, this overrides the settings in the card; that means:
1911*c609719bSwdenk
1912*c609719bSwdenko If the SROM has a valid MAC address, and there is no address in the
1913*c609719bSwdenk  environment, the SROM's address is used.
1914*c609719bSwdenk
1915*c609719bSwdenko If there is no valid address in the SROM, and a definition in the
1916*c609719bSwdenk  environment exists, then the value from the environment variable is
1917*c609719bSwdenk  used.
1918*c609719bSwdenk
1919*c609719bSwdenko If both the SROM and the environment contain a MAC address, and
1920*c609719bSwdenk  both addresses are the same, this MAC address is used.
1921*c609719bSwdenk
1922*c609719bSwdenko If both the SROM and the environment contain a MAC address, and the
1923*c609719bSwdenk  addresses differ, the value from the environment is used and a
1924*c609719bSwdenk  warning is printed.
1925*c609719bSwdenk
1926*c609719bSwdenko If neither SROM nor the environment contain a MAC address, an error
1927*c609719bSwdenk  is raised.
1928*c609719bSwdenk
1929*c609719bSwdenk
1930*c609719bSwdenk
1931*c609719bSwdenkImage Formats:
1932*c609719bSwdenk==============
1933*c609719bSwdenk
1934*c609719bSwdenkThe "boot" commands of this monitor operate on "image" files which
1935*c609719bSwdenkcan be basicly anything, preceeded by a special header; see the
1936*c609719bSwdenkdefinitions in include/image.h for details; basicly, the header
1937*c609719bSwdenkdefines the following image properties:
1938*c609719bSwdenk
1939*c609719bSwdenk* Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
1940*c609719bSwdenk  4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
1941*c609719bSwdenk  LynxOS, pSOS, QNX;
1942*c609719bSwdenk  Currently supported: Linux, NetBSD, VxWorks, QNX).
1943*c609719bSwdenk* Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,
1944*c609719bSwdenk  IA64, MIPS, MIPS, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
1945*c609719bSwdenk  Currently supported: PowerPC).
1946*c609719bSwdenk* Compression Type (Provisions for uncompressed, gzip, bzip2;
1947*c609719bSwdenk  Currently supported: uncompressed, gzip).
1948*c609719bSwdenk* Load Address
1949*c609719bSwdenk* Entry Point
1950*c609719bSwdenk* Image Name
1951*c609719bSwdenk* Image Timestamp
1952*c609719bSwdenk
1953*c609719bSwdenkThe header is marked by a special Magic Number, and both the header
1954*c609719bSwdenkand the data portions of the image are secured against corruption by
1955*c609719bSwdenkCRC32 checksums.
1956*c609719bSwdenk
1957*c609719bSwdenk
1958*c609719bSwdenkLinux Support:
1959*c609719bSwdenk==============
1960*c609719bSwdenk
1961*c609719bSwdenkAlthough U-Boot should support any OS or standalone application
1962*c609719bSwdenkeasily, Linux has always been in the focus during the design of
1963*c609719bSwdenkU-Boot.
1964*c609719bSwdenk
1965*c609719bSwdenkU-Boot includes many features that so far have been part of some
1966*c609719bSwdenkspecial "boot loader" code within the Linux kernel. Also, any
1967*c609719bSwdenk"initrd" images to be used are no longer part of one big Linux image;
1968*c609719bSwdenkinstead, kernel and "initrd" are separate images. This implementation
1969*c609719bSwdenkserves serveral purposes:
1970*c609719bSwdenk
1971*c609719bSwdenk- the same features can be used for other OS or standalone
1972*c609719bSwdenk  applications (for instance: using compressed images to reduce the
1973*c609719bSwdenk  Flash memory footprint)
1974*c609719bSwdenk
1975*c609719bSwdenk- it becomes much easier to port new Linux kernel versions because
1976*c609719bSwdenk  lots of low-level, hardware dependend stuff are done by U-Boot
1977*c609719bSwdenk
1978*c609719bSwdenk- the same Linux kernel image can now be used with different "initrd"
1979*c609719bSwdenk  images; of course this also means that different kernel images can
1980*c609719bSwdenk  be run with the same "initrd". This makes testing easier (you don't
1981*c609719bSwdenk  have to build a new "zImage.initrd" Linux image when you just
1982*c609719bSwdenk  change a file in your "initrd"). Also, a field-upgrade of the
1983*c609719bSwdenk  software is easier now.
1984*c609719bSwdenk
1985*c609719bSwdenk
1986*c609719bSwdenkLinux HOWTO:
1987*c609719bSwdenk============
1988*c609719bSwdenk
1989*c609719bSwdenkPorting Linux to U-Boot based systems:
1990*c609719bSwdenk---------------------------------------
1991*c609719bSwdenk
1992*c609719bSwdenkU-Boot cannot save you from doing all the necessary modifications to
1993*c609719bSwdenkconfigure the Linux device drivers for use with your target hardware
1994*c609719bSwdenk(no, we don't intend to provide a full virtual machine interface to
1995*c609719bSwdenkLinux :-).
1996*c609719bSwdenk
1997*c609719bSwdenkBut now you can ignore ALL boot loader code (in arch/ppc/mbxboot).
1998*c609719bSwdenk
1999*c609719bSwdenkJust make sure your machine specific header file (for instance
2000*c609719bSwdenkinclude/asm-ppc/tqm8xx.h) includes the same definition of the Board
2001*c609719bSwdenkInformation structure as we define in include/u-boot.h, and make
2002*c609719bSwdenksure that your definition of IMAP_ADDR uses the same value as your
2003*c609719bSwdenkU-Boot configuration in CFG_IMMR.
2004*c609719bSwdenk
2005*c609719bSwdenk
2006*c609719bSwdenkConfiguring the Linux kernel:
2007*c609719bSwdenk-----------------------------
2008*c609719bSwdenk
2009*c609719bSwdenkNo specific requirements for U-Boot. Make sure you have some root
2010*c609719bSwdenkdevice (initial ramdisk, NFS) for your target system.
2011*c609719bSwdenk
2012*c609719bSwdenk
2013*c609719bSwdenkBuilding a Linux Image:
2014*c609719bSwdenk-----------------------
2015*c609719bSwdenk
2016*c609719bSwdenkNo specific requirements for U-Boot. There is no need to add a
2017*c609719bSwdenk"ramdisk.image.gz" file when building the kernel, even when you
2018*c609719bSwdenkintend to run it with initial ramdisk.
2019*c609719bSwdenk
2020*c609719bSwdenkExample:
2021*c609719bSwdenk
2022*c609719bSwdenk	make TQM850L_config
2023*c609719bSwdenk	make oldconfig
2024*c609719bSwdenk	make dep
2025*c609719bSwdenk	make zImage
2026*c609719bSwdenk
2027*c609719bSwdenkHowever, we don't use the 'zImage' (= 'arch/ppc/mbxboot/zvmlinux') we
2028*c609719bSwdenkbuild this way. The 'zImage' includes the old boot loader code which
2029*c609719bSwdenkwe don't ned any more. Instead, we use the raw (compressed) Linux
2030*c609719bSwdenkkernel image in 'arch/ppc/coffboot/vmlinux.gz'.
2031*c609719bSwdenk
2032*c609719bSwdenkThere is a special tool (in 'tools/mkimage') to encapsulate this
2033*c609719bSwdenkimage with header information, CRC32 checksum etc. for use with
2034*c609719bSwdenkU-Boot:
2035*c609719bSwdenk
2036*c609719bSwdenkIn the first form (with "-l" option) mkimage  lists  the  information
2037*c609719bSwdenkcontained  in  the header of an existing U-Boot image; this includes
2038*c609719bSwdenkchecksum verification:
2039*c609719bSwdenk
2040*c609719bSwdenk	tools/mkimage -l image
2041*c609719bSwdenk	  -l ==> list image header information
2042*c609719bSwdenk
2043*c609719bSwdenkThe second form (with "-d" option) is used to build a U-Boot image
2044*c609719bSwdenkfrom a "data file" which is used as image payload:
2045*c609719bSwdenk
2046*c609719bSwdenk	tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
2047*c609719bSwdenk		      -n name -d data_file image
2048*c609719bSwdenk	  -A ==> set architecture to 'arch'
2049*c609719bSwdenk	  -O ==> set operating system to 'os'
2050*c609719bSwdenk	  -T ==> set image type to 'type'
2051*c609719bSwdenk	  -C ==> set compression type 'comp'
2052*c609719bSwdenk	  -a ==> set load address to 'addr' (hex)
2053*c609719bSwdenk	  -e ==> set entry point to 'ep' (hex)
2054*c609719bSwdenk	  -n ==> set image name to 'name'
2055*c609719bSwdenk	  -d ==> use image data from 'datafile'
2056*c609719bSwdenk
2057*c609719bSwdenkRight now, all Linux kernels use the same load address	(0x00000000),
2058*c609719bSwdenkbut the entry point address depends on the kernel version:
2059*c609719bSwdenk
2060*c609719bSwdenk- 2.2.x kernels have the entry point at 0x0000000C,
2061*c609719bSwdenk- 2.3.x and 2.4.x kernels have the entry point at 0x00000000.
2062*c609719bSwdenk
2063*c609719bSwdenkSo a typical call to build a U-Boot image would read:
2064*c609719bSwdenk
2065*c609719bSwdenk	-> tools/mkimage -n '2.2.13 for initrd on TQM850L' \
2066*c609719bSwdenk	> -A ppc -O linux -T kernel -C gzip -a 00000000 -e 0000000C \
2067*c609719bSwdenk	> -d /opt/mpc8xx/src/linux-2.2.13/arch/ppc/coffboot/vmlinux.gz \
2068*c609719bSwdenk	> examples/image-2.2.13-initrd
2069*c609719bSwdenk	Image Name:   2.2.13 for initrd on TQM850L
2070*c609719bSwdenk	Created:      Wed Jul 19 02:34:59 2000
2071*c609719bSwdenk	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
2072*c609719bSwdenk	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
2073*c609719bSwdenk	Load Address: 0x00000000
2074*c609719bSwdenk	Entry Point:  0x0000000c
2075*c609719bSwdenk
2076*c609719bSwdenkTo verify the contents of the image (or check for corruption):
2077*c609719bSwdenk
2078*c609719bSwdenk	-> tools/mkimage -l examples/image-2.2.13-initrd
2079*c609719bSwdenk	Image Name:   2.2.13 for initrd on TQM850L
2080*c609719bSwdenk	Created:      Wed Jul 19 02:34:59 2000
2081*c609719bSwdenk	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
2082*c609719bSwdenk	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
2083*c609719bSwdenk	Load Address: 0x00000000
2084*c609719bSwdenk	Entry Point:  0x0000000c
2085*c609719bSwdenk
2086*c609719bSwdenkNOTE: for embedded systems where boot time is critical you can trade
2087*c609719bSwdenkspeed for memory and install an UNCOMPRESSED image instead: this
2088*c609719bSwdenkneeds more space in Flash, but boots much faster since it does not
2089*c609719bSwdenkneed to be uncompressed:
2090*c609719bSwdenk
2091*c609719bSwdenk	-> gunzip /opt/mpc8xx/src/linux-2.2.13/arch/ppc/coffboot/vmlinux.gz
2092*c609719bSwdenk	-> tools/mkimage -n '2.2.13 for initrd on TQM850L' \
2093*c609719bSwdenk	> -A ppc -O linux -T kernel -C none -a 00000000 -e 0000000C \
2094*c609719bSwdenk	> -d /opt/mpc8xx/src/linux-2.2.13/arch/ppc/coffboot/vmlinux \
2095*c609719bSwdenk	> examples/image-2.2.13-initrd-uncompressed
2096*c609719bSwdenk	Image Name:   2.2.13 for initrd on TQM850L
2097*c609719bSwdenk	Created:      Wed Jul 19 02:34:59 2000
2098*c609719bSwdenk	Image Type:   PowerPC Linux Kernel Image (uncompressed)
2099*c609719bSwdenk	Data Size:    792160 Bytes = 773.59 kB = 0.76 MB
2100*c609719bSwdenk	Load Address: 0x00000000
2101*c609719bSwdenk	Entry Point:  0x0000000c
2102*c609719bSwdenk
2103*c609719bSwdenk
2104*c609719bSwdenkSimilar you can build U-Boot images from a 'ramdisk.image.gz' file
2105*c609719bSwdenkwhen your kernel is intended to use an initial ramdisk:
2106*c609719bSwdenk
2107*c609719bSwdenk	-> tools/mkimage -n 'Simple Ramdisk Image' \
2108*c609719bSwdenk	> -A ppc -O linux -T ramdisk -C gzip \
2109*c609719bSwdenk	> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
2110*c609719bSwdenk	Image Name:   Simple Ramdisk Image
2111*c609719bSwdenk	Created:      Wed Jan 12 14:01:50 2000
2112*c609719bSwdenk	Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
2113*c609719bSwdenk	Data Size:    566530 Bytes = 553.25 kB = 0.54 MB
2114*c609719bSwdenk	Load Address: 0x00000000
2115*c609719bSwdenk	Entry Point:  0x00000000
2116*c609719bSwdenk
2117*c609719bSwdenk
2118*c609719bSwdenkInstalling a Linux Image:
2119*c609719bSwdenk-------------------------
2120*c609719bSwdenk
2121*c609719bSwdenkTo downloading a U-Boot image over the serial (console) interface,
2122*c609719bSwdenkyou must convert the image to S-Record format:
2123*c609719bSwdenk
2124*c609719bSwdenk	objcopy -I binary -O srec examples/image examples/image.srec
2125*c609719bSwdenk
2126*c609719bSwdenkThe 'objcopy' does not understand the information in the U-Boot
2127*c609719bSwdenkimage header, so the resulting S-Record file will be relative to
2128*c609719bSwdenkaddress 0x00000000. To load it to a given address, you need to
2129*c609719bSwdenkspecify the target address as 'offset' parameter with the 'loads'
2130*c609719bSwdenkcommand.
2131*c609719bSwdenk
2132*c609719bSwdenkExample: install the image to address 0x40100000 (which on the
2133*c609719bSwdenkTQM8xxL is in the first Flash bank):
2134*c609719bSwdenk
2135*c609719bSwdenk	=> erase 40100000 401FFFFF
2136*c609719bSwdenk
2137*c609719bSwdenk	.......... done
2138*c609719bSwdenk	Erased 8 sectors
2139*c609719bSwdenk
2140*c609719bSwdenk	=> loads 40100000
2141*c609719bSwdenk	## Ready for S-Record download ...
2142*c609719bSwdenk	~>examples/image.srec
2143*c609719bSwdenk	1 2 3 4 5 6 7 8 9 10 11 12 13 ...
2144*c609719bSwdenk	...
2145*c609719bSwdenk	15989 15990 15991 15992
2146*c609719bSwdenk	[file transfer complete]
2147*c609719bSwdenk	[connected]
2148*c609719bSwdenk	## Start Addr = 0x00000000
2149*c609719bSwdenk
2150*c609719bSwdenk
2151*c609719bSwdenkYou can check the success of the download using the 'iminfo' command;
2152*c609719bSwdenkthis includes a checksum verification so you  can  be  sure  no	 data
2153*c609719bSwdenkcorruption happened:
2154*c609719bSwdenk
2155*c609719bSwdenk	=> imi 40100000
2156*c609719bSwdenk
2157*c609719bSwdenk	## Checking Image at 40100000 ...
2158*c609719bSwdenk	   Image Name:	 2.2.13 for initrd on TQM850L
2159*c609719bSwdenk	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
2160*c609719bSwdenk	   Data Size:	 335725 Bytes = 327 kB = 0 MB
2161*c609719bSwdenk	   Load Address: 00000000
2162*c609719bSwdenk	   Entry Point:	 0000000c
2163*c609719bSwdenk	   Verifying Checksum ... OK
2164*c609719bSwdenk
2165*c609719bSwdenk
2166*c609719bSwdenk
2167*c609719bSwdenkBoot Linux:
2168*c609719bSwdenk-----------
2169*c609719bSwdenk
2170*c609719bSwdenkThe "bootm" command is used to boot an application that is stored in
2171*c609719bSwdenkmemory (RAM or Flash). In case of a Linux kernel image, the contents
2172*c609719bSwdenkof the "bootargs" environment variable is passed to the kernel as
2173*c609719bSwdenkparameters. You can check and modify this variable using the
2174*c609719bSwdenk"printenv" and "setenv" commands:
2175*c609719bSwdenk
2176*c609719bSwdenk
2177*c609719bSwdenk	=> printenv bootargs
2178*c609719bSwdenk	bootargs=root=/dev/ram
2179*c609719bSwdenk
2180*c609719bSwdenk	=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
2181*c609719bSwdenk
2182*c609719bSwdenk	=> printenv bootargs
2183*c609719bSwdenk	bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
2184*c609719bSwdenk
2185*c609719bSwdenk	=> bootm 40020000
2186*c609719bSwdenk	## Booting Linux kernel at 40020000 ...
2187*c609719bSwdenk	   Image Name:	 2.2.13 for NFS on TQM850L
2188*c609719bSwdenk	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
2189*c609719bSwdenk	   Data Size:	 381681 Bytes = 372 kB = 0 MB
2190*c609719bSwdenk	   Load Address: 00000000
2191*c609719bSwdenk	   Entry Point:	 0000000c
2192*c609719bSwdenk	   Verifying Checksum ... OK
2193*c609719bSwdenk	   Uncompressing Kernel Image ... OK
2194*c609719bSwdenk	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
2195*c609719bSwdenk	Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
2196*c609719bSwdenk	time_init: decrementer frequency = 187500000/60
2197*c609719bSwdenk	Calibrating delay loop... 49.77 BogoMIPS
2198*c609719bSwdenk	Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
2199*c609719bSwdenk	...
2200*c609719bSwdenk
2201*c609719bSwdenkIf you want to boot a Linux kernel with initial ram disk, you pass
2202*c609719bSwdenkthe memory addreses of both the kernel and the initrd image (PPBCOOT
2203*c609719bSwdenkformat!) to the "bootm" command:
2204*c609719bSwdenk
2205*c609719bSwdenk	=> imi 40100000 40200000
2206*c609719bSwdenk
2207*c609719bSwdenk	## Checking Image at 40100000 ...
2208*c609719bSwdenk	   Image Name:	 2.2.13 for initrd on TQM850L
2209*c609719bSwdenk	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
2210*c609719bSwdenk	   Data Size:	 335725 Bytes = 327 kB = 0 MB
2211*c609719bSwdenk	   Load Address: 00000000
2212*c609719bSwdenk	   Entry Point:	 0000000c
2213*c609719bSwdenk	   Verifying Checksum ... OK
2214*c609719bSwdenk
2215*c609719bSwdenk	## Checking Image at 40200000 ...
2216*c609719bSwdenk	   Image Name:	 Simple Ramdisk Image
2217*c609719bSwdenk	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
2218*c609719bSwdenk	   Data Size:	 566530 Bytes = 553 kB = 0 MB
2219*c609719bSwdenk	   Load Address: 00000000
2220*c609719bSwdenk	   Entry Point:	 00000000
2221*c609719bSwdenk	   Verifying Checksum ... OK
2222*c609719bSwdenk
2223*c609719bSwdenk	=> bootm 40100000 40200000
2224*c609719bSwdenk	## Booting Linux kernel at 40100000 ...
2225*c609719bSwdenk	   Image Name:	 2.2.13 for initrd on TQM850L
2226*c609719bSwdenk	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
2227*c609719bSwdenk	   Data Size:	 335725 Bytes = 327 kB = 0 MB
2228*c609719bSwdenk	   Load Address: 00000000
2229*c609719bSwdenk	   Entry Point:	 0000000c
2230*c609719bSwdenk	   Verifying Checksum ... OK
2231*c609719bSwdenk	   Uncompressing Kernel Image ... OK
2232*c609719bSwdenk	## Loading RAMDisk Image at 40200000 ...
2233*c609719bSwdenk	   Image Name:	 Simple Ramdisk Image
2234*c609719bSwdenk	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
2235*c609719bSwdenk	   Data Size:	 566530 Bytes = 553 kB = 0 MB
2236*c609719bSwdenk	   Load Address: 00000000
2237*c609719bSwdenk	   Entry Point:	 00000000
2238*c609719bSwdenk	   Verifying Checksum ... OK
2239*c609719bSwdenk	   Loading Ramdisk ... OK
2240*c609719bSwdenk	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
2241*c609719bSwdenk	Boot arguments: root=/dev/ram
2242*c609719bSwdenk	time_init: decrementer frequency = 187500000/60
2243*c609719bSwdenk	Calibrating delay loop... 49.77 BogoMIPS
2244*c609719bSwdenk	...
2245*c609719bSwdenk	RAMDISK: Compressed image found at block 0
2246*c609719bSwdenk	VFS: Mounted root (ext2 filesystem).
2247*c609719bSwdenk
2248*c609719bSwdenk	bash#
2249*c609719bSwdenk
2250*c609719bSwdenk
2251*c609719bSwdenkStandalone HOWTO:
2252*c609719bSwdenk=================
2253*c609719bSwdenk
2254*c609719bSwdenkOne of the features of U-Boot is that you can dynamically load and
2255*c609719bSwdenkrun "standalone" applications, which can use some resources of
2256*c609719bSwdenkU-Boot like console I/O functions or interrupt services.
2257*c609719bSwdenk
2258*c609719bSwdenkTwo simple examples are included with the sources:
2259*c609719bSwdenk
2260*c609719bSwdenk"Hello World" Demo:
2261*c609719bSwdenk-------------------
2262*c609719bSwdenk
2263*c609719bSwdenk'examples/hello_world.c' contains a small "Hello World" Demo
2264*c609719bSwdenkapplication; it is automatically compiled when you build U-Boot.
2265*c609719bSwdenkIt's configured to run at address 0x00040004, so you can play with it
2266*c609719bSwdenklike that:
2267*c609719bSwdenk
2268*c609719bSwdenk	=> loads
2269*c609719bSwdenk	## Ready for S-Record download ...
2270*c609719bSwdenk	~>examples/hello_world.srec
2271*c609719bSwdenk	1 2 3 4 5 6 7 8 9 10 11 ...
2272*c609719bSwdenk	[file transfer complete]
2273*c609719bSwdenk	[connected]
2274*c609719bSwdenk	## Start Addr = 0x00040004
2275*c609719bSwdenk
2276*c609719bSwdenk	=> go 40004 Hello World! This is a test.
2277*c609719bSwdenk	## Starting application at 0x00040004 ...
2278*c609719bSwdenk	Hello World
2279*c609719bSwdenk	argc = 7
2280*c609719bSwdenk	argv[0] = "40004"
2281*c609719bSwdenk	argv[1] = "Hello"
2282*c609719bSwdenk	argv[2] = "World!"
2283*c609719bSwdenk	argv[3] = "This"
2284*c609719bSwdenk	argv[4] = "is"
2285*c609719bSwdenk	argv[5] = "a"
2286*c609719bSwdenk	argv[6] = "test."
2287*c609719bSwdenk	argv[7] = "<NULL>"
2288*c609719bSwdenk	Hit any key to exit ...
2289*c609719bSwdenk
2290*c609719bSwdenk	## Application terminated, rc = 0x0
2291*c609719bSwdenk
2292*c609719bSwdenkAnother example, which demonstrates how to register a CPM interrupt
2293*c609719bSwdenkhandler with the U-Boot code, can be found in 'examples/timer.c'.
2294*c609719bSwdenkHere, a CPM timer is set up to generate an interrupt every second.
2295*c609719bSwdenkThe interrupt service routine is trivial, just printing a '.'
2296*c609719bSwdenkcharacter, but this is just a demo program. The application can be
2297*c609719bSwdenkcontrolled by the following keys:
2298*c609719bSwdenk
2299*c609719bSwdenk	? - print current values og the CPM Timer registers
2300*c609719bSwdenk	b - enable interrupts and start timer
2301*c609719bSwdenk	e - stop timer and disable interrupts
2302*c609719bSwdenk	q - quit application
2303*c609719bSwdenk
2304*c609719bSwdenk	=> loads
2305*c609719bSwdenk	## Ready for S-Record download ...
2306*c609719bSwdenk	~>examples/timer.srec
2307*c609719bSwdenk	1 2 3 4 5 6 7 8 9 10 11 ...
2308*c609719bSwdenk	[file transfer complete]
2309*c609719bSwdenk	[connected]
2310*c609719bSwdenk	## Start Addr = 0x00040004
2311*c609719bSwdenk
2312*c609719bSwdenk	=> go 40004
2313*c609719bSwdenk	## Starting application at 0x00040004 ...
2314*c609719bSwdenk	TIMERS=0xfff00980
2315*c609719bSwdenk	Using timer 1
2316*c609719bSwdenk	  tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
2317*c609719bSwdenk
2318*c609719bSwdenkHit 'b':
2319*c609719bSwdenk	[q, b, e, ?] Set interval 1000000 us
2320*c609719bSwdenk	Enabling timer
2321*c609719bSwdenkHit '?':
2322*c609719bSwdenk	[q, b, e, ?] ........
2323*c609719bSwdenk	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
2324*c609719bSwdenkHit '?':
2325*c609719bSwdenk	[q, b, e, ?] .
2326*c609719bSwdenk	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
2327*c609719bSwdenkHit '?':
2328*c609719bSwdenk	[q, b, e, ?] .
2329*c609719bSwdenk	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
2330*c609719bSwdenkHit '?':
2331*c609719bSwdenk	[q, b, e, ?] .
2332*c609719bSwdenk	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
2333*c609719bSwdenkHit 'e':
2334*c609719bSwdenk	[q, b, e, ?] ...Stopping timer
2335*c609719bSwdenkHit 'q':
2336*c609719bSwdenk	[q, b, e, ?] ## Application terminated, rc = 0x0
2337*c609719bSwdenk
2338*c609719bSwdenk
2339*c609719bSwdenkNetBSD Notes:
2340*c609719bSwdenk=============
2341*c609719bSwdenk
2342*c609719bSwdenkStarting at version 0.9.2, U-Boot supports NetBSD both as host
2343*c609719bSwdenk(build U-Boot) and target system (boots NetBSD/mpc8xx).
2344*c609719bSwdenk
2345*c609719bSwdenkBuilding requires a cross environment; it is known to work on
2346*c609719bSwdenkNetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
2347*c609719bSwdenkneed gmake since the Makefiles are not compatible with BSD make).
2348*c609719bSwdenkNote that the cross-powerpc package does not install include files;
2349*c609719bSwdenkattempting to build U-Boot will fail because <machine/ansi.h> is
2350*c609719bSwdenkmissing.  This file has to be installed and patched manually:
2351*c609719bSwdenk
2352*c609719bSwdenk	# cd /usr/pkg/cross/powerpc-netbsd/include
2353*c609719bSwdenk	# mkdir powerpc
2354*c609719bSwdenk	# ln -s powerpc machine
2355*c609719bSwdenk	# cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
2356*c609719bSwdenk	# ${EDIT} powerpc/ansi.h	## must remove __va_list, _BSD_VA_LIST
2357*c609719bSwdenk
2358*c609719bSwdenkNative builds *don't* work due to incompatibilities between native
2359*c609719bSwdenkand U-Boot include files.
2360*c609719bSwdenk
2361*c609719bSwdenkBooting assumes that (the first part of) the image booted is a
2362*c609719bSwdenkstage-2 loader which in turn loads and then invokes the kernel
2363*c609719bSwdenkproper. Loader sources will eventually appear in the NetBSD source
2364*c609719bSwdenktree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
2365*c609719bSwdenkmeantime, send mail to bruno@exet-ag.de and/or wd@denx.de for
2366*c609719bSwdenkdetails.
2367*c609719bSwdenk
2368*c609719bSwdenk
2369*c609719bSwdenkImplementation Internals:
2370*c609719bSwdenk=========================
2371*c609719bSwdenk
2372*c609719bSwdenkThe following is not intended to be a complete description of every
2373*c609719bSwdenkimplementation detail. However, it should help to understand the
2374*c609719bSwdenkinner workings of U-Boot and make it easier to port it to custom
2375*c609719bSwdenkhardware.
2376*c609719bSwdenk
2377*c609719bSwdenk
2378*c609719bSwdenkInitial Stack, Global Data:
2379*c609719bSwdenk---------------------------
2380*c609719bSwdenk
2381*c609719bSwdenkThe implementation of U-Boot is complicated by the fact that U-Boot
2382*c609719bSwdenkstarts running out of ROM (flash memory), usually without access to
2383*c609719bSwdenksystem RAM (because the memory controller is not initialized yet).
2384*c609719bSwdenkThis means that we don't have writable Data or BSS segments, and BSS
2385*c609719bSwdenkis not initialized as zero. To be able to get a C environment working
2386*c609719bSwdenkat all, we have to allocate at least a minimal stack. Implementation
2387*c609719bSwdenkoptions for this are defined and restricted by the CPU used: Some CPU
2388*c609719bSwdenkmodels provide on-chip memory (like the IMMR area on MPC8xx and
2389*c609719bSwdenkMPC826x processors), on others (parts of) the data cache can be
2390*c609719bSwdenklocked as (mis-) used as memory, etc.
2391*c609719bSwdenk
2392*c609719bSwdenkIt is essential to remember this, since it has some impact on the C
2393*c609719bSwdenkcode for the initialization procedures:
2394*c609719bSwdenk
2395*c609719bSwdenk* Initialized global data (data segment) is read-only. Do not attempt
2396*c609719bSwdenk  to write it.
2397*c609719bSwdenk
2398*c609719bSwdenk* Do not use any unitialized global data (or implicitely initialized
2399*c609719bSwdenk  as zero data - BSS segment) at all - this is undefined, initiali-
2400*c609719bSwdenk  zation is performed later (when relocationg to RAM).
2401*c609719bSwdenk
2402*c609719bSwdenk* Stack space is very limited. Avoid big data buffers or things  like
2403*c609719bSwdenk  that.
2404*c609719bSwdenk
2405*c609719bSwdenkHaving only the stack as writable memory limits means we cannot use
2406*c609719bSwdenknormal global data to share information beween the code. But it
2407*c609719bSwdenkturned out that the implementation of U-Boot can be greatly
2408*c609719bSwdenksimplified by making a global data structure (gd_t) available to all
2409*c609719bSwdenkfunctions. We could pass a pointer to this data as argument to _all_
2410*c609719bSwdenkfunctions, but this would bloat the code. Instead we use a feature of
2411*c609719bSwdenkthe GCC compiler (Global Register Variables) to share the data: we
2412*c609719bSwdenkplace a pointer (gd) to the global data into a register which we
2413*c609719bSwdenkreserve for this purpose.
2414*c609719bSwdenk
2415*c609719bSwdenkWhen chosing a register for such a purpose we are restricted  by  the
2416*c609719bSwdenkrelevant  (E)ABI  specifications for the current architecture, and by
2417*c609719bSwdenkGCC's implementation.
2418*c609719bSwdenk
2419*c609719bSwdenkFor PowerPC, the following registers have specific use:
2420*c609719bSwdenk	R1:	stack pointer
2421*c609719bSwdenk	R2:	TOC pointer
2422*c609719bSwdenk	R3-R4:	parameter passing and return values
2423*c609719bSwdenk	R5-R10:	parameter passing
2424*c609719bSwdenk	R13:	small data area pointer
2425*c609719bSwdenk	R30:	GOT pointer
2426*c609719bSwdenk	R31:	frame pointer
2427*c609719bSwdenk
2428*c609719bSwdenk	(U-Boot also uses R14 as internal GOT pointer.)
2429*c609719bSwdenk
2430*c609719bSwdenk    ==> U-Boot will use R29 to hold a pointer to the global data
2431*c609719bSwdenk
2432*c609719bSwdenk    Note: on PPC, we could use a static initializer (since the
2433*c609719bSwdenk    address of the global data structure is known at compile time),
2434*c609719bSwdenk    but it turned out that reserving a register results in somewhat
2435*c609719bSwdenk    smaller code - although the code savings are not that big (on
2436*c609719bSwdenk    average for all boards 752 bytes for the whole U-Boot image,
2437*c609719bSwdenk    624 text + 127 data).
2438*c609719bSwdenk
2439*c609719bSwdenkOn ARM, the following registers are used:
2440*c609719bSwdenk
2441*c609719bSwdenk	R0:	function argument word/integer result
2442*c609719bSwdenk	R1-R3:	function argument word
2443*c609719bSwdenk	R9:	GOT pointer
2444*c609719bSwdenk	R10:	stack limit (used only if stack checking if enabled)
2445*c609719bSwdenk	R11:	argument (frame) pointer
2446*c609719bSwdenk	R12:	temporary workspace
2447*c609719bSwdenk	R13:	stack pointer
2448*c609719bSwdenk	R14:	link register
2449*c609719bSwdenk	R15:	program counter
2450*c609719bSwdenk
2451*c609719bSwdenk    ==> U-Boot will use R8 to hold a pointer to the global data
2452*c609719bSwdenk
2453*c609719bSwdenk
2454*c609719bSwdenk
2455*c609719bSwdenkMemory Management:
2456*c609719bSwdenk------------------
2457*c609719bSwdenk
2458*c609719bSwdenkU-Boot runs in system state and uses physical addresses, i.e. the
2459*c609719bSwdenkMMU is not used either for address mapping nor for memory protection.
2460*c609719bSwdenk
2461*c609719bSwdenkThe available memory is mapped to fixed addresses using the memory
2462*c609719bSwdenkcontroller. In this process, a contiguous block is formed for each
2463*c609719bSwdenkmemory type (Flash, SDRAM, SRAM), even when it consists of several
2464*c609719bSwdenkphysical memory banks.
2465*c609719bSwdenk
2466*c609719bSwdenkU-Boot is installed in the first 128 kB of the first Flash bank (on
2467*c609719bSwdenkTQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
2468*c609719bSwdenkbooting and sizing and initializing DRAM, the code relocates itself
2469*c609719bSwdenkto the upper end of DRAM. Immediately below the U-Boot code some
2470*c609719bSwdenkmemory is reserved for use by malloc() [see CFG_MALLOC_LEN
2471*c609719bSwdenkconfiguration setting]. Below that, a structure with global Board
2472*c609719bSwdenkInfo data is placed, followed by the stack (growing downward).
2473*c609719bSwdenk
2474*c609719bSwdenkAdditionally, some exception handler code is copied to the low 8 kB
2475*c609719bSwdenkof DRAM (0x00000000 ... 0x00001FFF).
2476*c609719bSwdenk
2477*c609719bSwdenkSo a typical memory configuration with 16 MB of DRAM could look like
2478*c609719bSwdenkthis:
2479*c609719bSwdenk
2480*c609719bSwdenk	0x0000 0000	Exception Vector code
2481*c609719bSwdenk	      :
2482*c609719bSwdenk	0x0000 1FFF
2483*c609719bSwdenk	0x0000 2000	Free for Application Use
2484*c609719bSwdenk	      :
2485*c609719bSwdenk	      :
2486*c609719bSwdenk
2487*c609719bSwdenk	      :
2488*c609719bSwdenk	      :
2489*c609719bSwdenk	0x00FB FF20	Monitor Stack (Growing downward)
2490*c609719bSwdenk	0x00FB FFAC	Board Info Data and permanent copy of global data
2491*c609719bSwdenk	0x00FC 0000	Malloc Arena
2492*c609719bSwdenk	      :
2493*c609719bSwdenk	0x00FD FFFF
2494*c609719bSwdenk	0x00FE 0000	RAM Copy of Monitor Code
2495*c609719bSwdenk	...		eventually: LCD or video framebuffer
2496*c609719bSwdenk	...		eventually: pRAM (Protected RAM - unchanged by reset)
2497*c609719bSwdenk	0x00FF FFFF	[End of RAM]
2498*c609719bSwdenk
2499*c609719bSwdenk
2500*c609719bSwdenkSystem Initialization:
2501*c609719bSwdenk----------------------
2502*c609719bSwdenk
2503*c609719bSwdenkIn the reset configuration, U-Boot starts at the reset entry point
2504*c609719bSwdenk(on most PowerPC systens at address 0x00000100). Because of the reset
2505*c609719bSwdenkconfiguration for CS0# this is a mirror of the onboard Flash memory.
2506*c609719bSwdenkTo be able to re-map memory U-Boot then jumps to it's link address.
2507*c609719bSwdenkTo be able to implement the initialization code in C, a (small!)
2508*c609719bSwdenkinitial stack is set up in the internal Dual Ported RAM (in case CPUs
2509*c609719bSwdenkwhich provide such a feature like MPC8xx or MPC8260), or in a locked
2510*c609719bSwdenkpart of the data cache. After that, U-Boot initializes the CPU core,
2511*c609719bSwdenkthe caches and the SIU.
2512*c609719bSwdenk
2513*c609719bSwdenkNext, all (potentially) available memory banks are mapped using a
2514*c609719bSwdenkpreliminary mapping. For example, we put them on 512 MB boundaries
2515*c609719bSwdenk(multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
2516*c609719bSwdenkon 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
2517*c609719bSwdenkprogrammed for SDRAM access. Using the temporary configuration, a
2518*c609719bSwdenksimple memory test is run that determines the size of the SDRAM
2519*c609719bSwdenkbanks.
2520*c609719bSwdenk
2521*c609719bSwdenkWhen there is more than one SDRAM bank, and the banks are of
2522*c609719bSwdenkdifferent size, the larger is mapped first. For equal size, the first
2523*c609719bSwdenkbank (CS2#) is mapped first. The first mapping is always for address
2524*c609719bSwdenk0x00000000, with any additional banks following immediately to create
2525*c609719bSwdenkcontiguous memory starting from 0.
2526*c609719bSwdenk
2527*c609719bSwdenkThen, the monitor installs itself at the upper end of the SDRAM area
2528*c609719bSwdenkand allocates memory for use by malloc() and for the global Board
2529*c609719bSwdenkInfo data; also, the exception vector code is copied to the low RAM
2530*c609719bSwdenkpages, and the final stack is set up.
2531*c609719bSwdenk
2532*c609719bSwdenkOnly after this relocation will you have a "normal" C environment;
2533*c609719bSwdenkuntil that you are restricted in several ways, mostly because you are
2534*c609719bSwdenkrunning from ROM, and because the code will have to be relocated to a
2535*c609719bSwdenknew address in RAM.
2536*c609719bSwdenk
2537*c609719bSwdenk
2538*c609719bSwdenkU-Boot Porting Guide:
2539*c609719bSwdenk----------------------
2540*c609719bSwdenk
2541*c609719bSwdenk[Based on messages by Jerry Van Baren in the U-Boot-Users mailing
2542*c609719bSwdenklist, Octover 2002]
2543*c609719bSwdenk
2544*c609719bSwdenk
2545*c609719bSwdenkint main (int argc, char *argv[])
2546*c609719bSwdenk{
2547*c609719bSwdenk	sighandler_t no_more_time;
2548*c609719bSwdenk
2549*c609719bSwdenk	signal (SIGALRM, no_more_time);
2550*c609719bSwdenk	alarm (PROJECT_DEADLINE - toSec (3 * WEEK));
2551*c609719bSwdenk
2552*c609719bSwdenk	if (available_money > available_manpower) {
2553*c609719bSwdenk		pay consultant to port U-Boot;
2554*c609719bSwdenk		return 0;
2555*c609719bSwdenk	}
2556*c609719bSwdenk
2557*c609719bSwdenk	Download latest U-Boot source;
2558*c609719bSwdenk
2559*c609719bSwdenk	if (clueless) {
2560*c609719bSwdenk		email ("Hi, I am new to U-Boot, how do I get started?");
2561*c609719bSwdenk	}
2562*c609719bSwdenk
2563*c609719bSwdenk	while (learning) {
2564*c609719bSwdenk		Read the README file in the top level directory;
2565*c609719bSwdenk		Read http://www.denx.de/re/DPLG.html
2566*c609719bSwdenk		Read the source, Luke;
2567*c609719bSwdenk	}
2568*c609719bSwdenk
2569*c609719bSwdenk	if (available_money > toLocalCurrency ($2500)) {
2570*c609719bSwdenk		Buy a BDI2000;
2571*c609719bSwdenk	} else {
2572*c609719bSwdenk		Add a lot of aggravation and time;
2573*c609719bSwdenk	}
2574*c609719bSwdenk
2575*c609719bSwdenk	Create your own board support subdirectory;
2576*c609719bSwdenk
2577*c609719bSwdenk	while (!running) {
2578*c609719bSwdenk		do {
2579*c609719bSwdenk			Add / modify source code;
2580*c609719bSwdenk		} until (compiles);
2581*c609719bSwdenk		Debug;
2582*c609719bSwdenk		if (clueless)
2583*c609719bSwdenk			email ("Hi, I am having problems...");
2584*c609719bSwdenk	}
2585*c609719bSwdenk	Send patch file to Wolfgang;
2586*c609719bSwdenk
2587*c609719bSwdenk	return 0;
2588*c609719bSwdenk}
2589*c609719bSwdenk
2590*c609719bSwdenkvoid no_more_time (int sig)
2591*c609719bSwdenk{
2592*c609719bSwdenk      hire_a_guru();
2593*c609719bSwdenk}
2594*c609719bSwdenk
2595*c609719bSwdenk
2596*c609719bSwdenk
2597*c609719bSwdenkCoding Standards:
2598*c609719bSwdenk-----------------
2599*c609719bSwdenk
2600*c609719bSwdenkAll contributions to U-Boot should conform to the Linux kernel
2601*c609719bSwdenkcoding style; see the file "Documentation/CodingStyle" in your Linux
2602*c609719bSwdenkkernel source directory.
2603*c609719bSwdenk
2604*c609719bSwdenkPlease note that U-Boot is implemented in C (and to some small parts
2605*c609719bSwdenkin Assembler); no C++ is used, so please do not use C++ style
2606*c609719bSwdenkcomments (//) in your code.
2607*c609719bSwdenk
2608*c609719bSwdenkSubmissions which do not conform to the standards may be returned
2609*c609719bSwdenkwith a request to reformat the changes.
2610*c609719bSwdenk
2611*c609719bSwdenk
2612*c609719bSwdenkSubmitting Patches:
2613*c609719bSwdenk-------------------
2614*c609719bSwdenk
2615*c609719bSwdenkSince the number of patches for U-Boot is growing, we need to
2616*c609719bSwdenkestablish some rules. Submissions which do not conform to these rules
2617*c609719bSwdenkmay be rejected, even when they contain important and valuable stuff.
2618*c609719bSwdenk
2619*c609719bSwdenk
2620*c609719bSwdenkWhen you send a patch, please include the following information with
2621*c609719bSwdenkit:
2622*c609719bSwdenk
2623*c609719bSwdenk* For bug fixes: a description of the bug and how your patch fixes
2624*c609719bSwdenk  this bug. Please try to include a way of demonstrating that the
2625*c609719bSwdenk  patch actually fixes something.
2626*c609719bSwdenk
2627*c609719bSwdenk* For new features: a description of the feature and your
2628*c609719bSwdenk  implementation.
2629*c609719bSwdenk
2630*c609719bSwdenk* A CHANGELOG entry as plaintext (separate from the patch)
2631*c609719bSwdenk
2632*c609719bSwdenk* For major contributions, your entry to the CREDITS file
2633*c609719bSwdenk
2634*c609719bSwdenk* When you add support for a new board, don't forget to add this
2635*c609719bSwdenk  board to the MAKEALL script, too.
2636*c609719bSwdenk
2637*c609719bSwdenk* If your patch adds new configuration options, don't forget to
2638*c609719bSwdenk  document these in the README file.
2639*c609719bSwdenk
2640*c609719bSwdenk* The patch itself. If you are accessing the CVS repository use "cvs
2641*c609719bSwdenk  update; cvs diff -puRN"; else, use "diff -purN OLD NEW". If your
2642*c609719bSwdenk  version of diff does not support these options, then get the latest
2643*c609719bSwdenk  version of GNU diff.
2644*c609719bSwdenk
2645*c609719bSwdenk  We accept patches as plain text, MIME attachments or as uuencoded
2646*c609719bSwdenk  gzipped text.
2647*c609719bSwdenk
2648*c609719bSwdenkNotes:
2649*c609719bSwdenk
2650*c609719bSwdenk* Before sending the patch, run the MAKEALL script on your patched
2651*c609719bSwdenk  source tree and make sure that no errors or warnings are reported
2652*c609719bSwdenk  for any of the boards.
2653*c609719bSwdenk
2654*c609719bSwdenk* Keep your modifications to the necessary minimum: A patch
2655*c609719bSwdenk  containing several unrelated changes or arbitrary reformats will be
2656*c609719bSwdenk  returned with a request to re-formatting / split it.
2657*c609719bSwdenk
2658*c609719bSwdenk* If you modify existing code, make sure that your new code does not
2659*c609719bSwdenk  add to the memory footprint of the code ;-) Small is beautiful!
2660*c609719bSwdenk  When adding new features, these should compile conditionally only
2661*c609719bSwdenk  (using #ifdef), and the resulting code with the new feature
2662*c609719bSwdenk  disabled must not need more memory than the old code without your
2663*c609719bSwdenk  modification.
2664