Commit 75504e9592745021006cb8905b5ff5a51d9d1cb3

Authored by Mateusz Zalega
Committed by Lukasz Majewski
1 parent 6b423b752b

usb: dfu: fix boards wo USB cable detection

Former usb_cable_connected() patch broke compilation of boards which do
not support this feature.

I've renamed usb_cable_connected() to g_dnl_usb_cable_connected() and added
its default implementation to gadget downloader driver code. There's
only one driver of this kind and it's unlikely there'll be another, so
there's no point in keeping it in /common.

Previously this function was declared in usb.h. I've moved it, since
it's more appropriate to keep it in g_dnl.h - usb.h seems to be intended
for USB host implementation.

Existing code, confronted with default -EOPNOTSUPP return value,
continues as if the cable was connected.

CONFIG_USB_CABLE_CHECK was removed.

Change-Id: Ib9198621adee2811b391c64512f14646cefd0369
Signed-off-by: Mateusz Zalega <m.zalega@samsung.com>
Acked-by: Marek Vasut <marex@denx.de>
Acked-by: Lukasz Majewski <l.majewski@samsung.com>

Showing 11 changed files with 18 additions and 44 deletions Inline Diff

1 # 1 #
2 # (C) Copyright 2000 - 2013 2 # (C) Copyright 2000 - 2013
3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. 3 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 # 4 #
5 # SPDX-License-Identifier: GPL-2.0+ 5 # SPDX-License-Identifier: GPL-2.0+
6 # 6 #
7 7
8 Summary: 8 Summary:
9 ======== 9 ========
10 10
11 This directory contains the source code for U-Boot, a boot loader for 11 This directory contains the source code for U-Boot, a boot loader for
12 Embedded boards based on PowerPC, ARM, MIPS and several other 12 Embedded boards based on PowerPC, ARM, MIPS and several other
13 processors, which can be installed in a boot ROM and used to 13 processors, which can be installed in a boot ROM and used to
14 initialize and test the hardware or to download and run application 14 initialize and test the hardware or to download and run application
15 code. 15 code.
16 16
17 The development of U-Boot is closely related to Linux: some parts of 17 The development of U-Boot is closely related to Linux: some parts of
18 the source code originate in the Linux source tree, we have some 18 the source code originate in the Linux source tree, we have some
19 header files in common, and special provision has been made to 19 header files in common, and special provision has been made to
20 support booting of Linux images. 20 support booting of Linux images.
21 21
22 Some attention has been paid to make this software easily 22 Some attention has been paid to make this software easily
23 configurable and extendable. For instance, all monitor commands are 23 configurable and extendable. For instance, all monitor commands are
24 implemented with the same call interface, so that it's very easy to 24 implemented with the same call interface, so that it's very easy to
25 add new commands. Also, instead of permanently adding rarely used 25 add new commands. Also, instead of permanently adding rarely used
26 code (for instance hardware test utilities) to the monitor, you can 26 code (for instance hardware test utilities) to the monitor, you can
27 load and run it dynamically. 27 load and run it dynamically.
28 28
29 29
30 Status: 30 Status:
31 ======= 31 =======
32 32
33 In general, all boards for which a configuration option exists in the 33 In general, all boards for which a configuration option exists in the
34 Makefile have been tested to some extent and can be considered 34 Makefile have been tested to some extent and can be considered
35 "working". In fact, many of them are used in production systems. 35 "working". In fact, many of them are used in production systems.
36 36
37 In case of problems see the CHANGELOG and CREDITS files to find out 37 In case of problems see the CHANGELOG and CREDITS files to find out
38 who contributed the specific port. The boards.cfg file lists board 38 who contributed the specific port. The boards.cfg file lists board
39 maintainers. 39 maintainers.
40 40
41 Note: There is no CHANGELOG file in the actual U-Boot source tree; 41 Note: There is no CHANGELOG file in the actual U-Boot source tree;
42 it can be created dynamically from the Git log using: 42 it can be created dynamically from the Git log using:
43 43
44 make CHANGELOG 44 make CHANGELOG
45 45
46 46
47 Where to get help: 47 Where to get help:
48 ================== 48 ==================
49 49
50 In case you have questions about, problems with or contributions for 50 In case you have questions about, problems with or contributions for
51 U-Boot you should send a message to the U-Boot mailing list at 51 U-Boot you should send a message to the U-Boot mailing list at
52 <u-boot@lists.denx.de>. There is also an archive of previous traffic 52 <u-boot@lists.denx.de>. There is also an archive of previous traffic
53 on the mailing list - please search the archive before asking FAQ's. 53 on the mailing list - please search the archive before asking FAQ's.
54 Please see http://lists.denx.de/pipermail/u-boot and 54 Please see http://lists.denx.de/pipermail/u-boot and
55 http://dir.gmane.org/gmane.comp.boot-loaders.u-boot 55 http://dir.gmane.org/gmane.comp.boot-loaders.u-boot
56 56
57 57
58 Where to get source code: 58 Where to get source code:
59 ========================= 59 =========================
60 60
61 The U-Boot source code is maintained in the git repository at 61 The U-Boot source code is maintained in the git repository at
62 git://www.denx.de/git/u-boot.git ; you can browse it online at 62 git://www.denx.de/git/u-boot.git ; you can browse it online at
63 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary 63 http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=summary
64 64
65 The "snapshot" links on this page allow you to download tarballs of 65 The "snapshot" links on this page allow you to download tarballs of
66 any version you might be interested in. Official releases are also 66 any version you might be interested in. Official releases are also
67 available for FTP download from the ftp://ftp.denx.de/pub/u-boot/ 67 available for FTP download from the ftp://ftp.denx.de/pub/u-boot/
68 directory. 68 directory.
69 69
70 Pre-built (and tested) images are available from 70 Pre-built (and tested) images are available from
71 ftp://ftp.denx.de/pub/u-boot/images/ 71 ftp://ftp.denx.de/pub/u-boot/images/
72 72
73 73
74 Where we come from: 74 Where we come from:
75 =================== 75 ===================
76 76
77 - start from 8xxrom sources 77 - start from 8xxrom sources
78 - create PPCBoot project (http://sourceforge.net/projects/ppcboot) 78 - create PPCBoot project (http://sourceforge.net/projects/ppcboot)
79 - clean up code 79 - clean up code
80 - make it easier to add custom boards 80 - make it easier to add custom boards
81 - make it possible to add other [PowerPC] CPUs 81 - make it possible to add other [PowerPC] CPUs
82 - extend functions, especially: 82 - extend functions, especially:
83 * Provide extended interface to Linux boot loader 83 * Provide extended interface to Linux boot loader
84 * S-Record download 84 * S-Record download
85 * network boot 85 * network boot
86 * PCMCIA / CompactFlash / ATA disk / SCSI ... boot 86 * PCMCIA / CompactFlash / ATA disk / SCSI ... boot
87 - create ARMBoot project (http://sourceforge.net/projects/armboot) 87 - create ARMBoot project (http://sourceforge.net/projects/armboot)
88 - add other CPU families (starting with ARM) 88 - add other CPU families (starting with ARM)
89 - create U-Boot project (http://sourceforge.net/projects/u-boot) 89 - create U-Boot project (http://sourceforge.net/projects/u-boot)
90 - current project page: see http://www.denx.de/wiki/U-Boot 90 - current project page: see http://www.denx.de/wiki/U-Boot
91 91
92 92
93 Names and Spelling: 93 Names and Spelling:
94 =================== 94 ===================
95 95
96 The "official" name of this project is "Das U-Boot". The spelling 96 The "official" name of this project is "Das U-Boot". The spelling
97 "U-Boot" shall be used in all written text (documentation, comments 97 "U-Boot" shall be used in all written text (documentation, comments
98 in source files etc.). Example: 98 in source files etc.). Example:
99 99
100 This is the README file for the U-Boot project. 100 This is the README file for the U-Boot project.
101 101
102 File names etc. shall be based on the string "u-boot". Examples: 102 File names etc. shall be based on the string "u-boot". Examples:
103 103
104 include/asm-ppc/u-boot.h 104 include/asm-ppc/u-boot.h
105 105
106 #include <asm/u-boot.h> 106 #include <asm/u-boot.h>
107 107
108 Variable names, preprocessor constants etc. shall be either based on 108 Variable names, preprocessor constants etc. shall be either based on
109 the string "u_boot" or on "U_BOOT". Example: 109 the string "u_boot" or on "U_BOOT". Example:
110 110
111 U_BOOT_VERSION u_boot_logo 111 U_BOOT_VERSION u_boot_logo
112 IH_OS_U_BOOT u_boot_hush_start 112 IH_OS_U_BOOT u_boot_hush_start
113 113
114 114
115 Versioning: 115 Versioning:
116 =========== 116 ===========
117 117
118 Starting with the release in October 2008, the names of the releases 118 Starting with the release in October 2008, the names of the releases
119 were changed from numerical release numbers without deeper meaning 119 were changed from numerical release numbers without deeper meaning
120 into a time stamp based numbering. Regular releases are identified by 120 into a time stamp based numbering. Regular releases are identified by
121 names consisting of the calendar year and month of the release date. 121 names consisting of the calendar year and month of the release date.
122 Additional fields (if present) indicate release candidates or bug fix 122 Additional fields (if present) indicate release candidates or bug fix
123 releases in "stable" maintenance trees. 123 releases in "stable" maintenance trees.
124 124
125 Examples: 125 Examples:
126 U-Boot v2009.11 - Release November 2009 126 U-Boot v2009.11 - Release November 2009
127 U-Boot v2009.11.1 - Release 1 in version November 2009 stable tree 127 U-Boot v2009.11.1 - Release 1 in version November 2009 stable tree
128 U-Boot v2010.09-rc1 - Release candiate 1 for September 2010 release 128 U-Boot v2010.09-rc1 - Release candiate 1 for September 2010 release
129 129
130 130
131 Directory Hierarchy: 131 Directory Hierarchy:
132 ==================== 132 ====================
133 133
134 /arch Architecture specific files 134 /arch Architecture specific files
135 /arc Files generic to ARC architecture 135 /arc Files generic to ARC architecture
136 /cpu CPU specific files 136 /cpu CPU specific files
137 /arc700 Files specific to ARC 700 CPUs 137 /arc700 Files specific to ARC 700 CPUs
138 /lib Architecture specific library files 138 /lib Architecture specific library files
139 /arm Files generic to ARM architecture 139 /arm Files generic to ARM architecture
140 /cpu CPU specific files 140 /cpu CPU specific files
141 /arm720t Files specific to ARM 720 CPUs 141 /arm720t Files specific to ARM 720 CPUs
142 /arm920t Files specific to ARM 920 CPUs 142 /arm920t Files specific to ARM 920 CPUs
143 /at91 Files specific to Atmel AT91RM9200 CPU 143 /at91 Files specific to Atmel AT91RM9200 CPU
144 /imx Files specific to Freescale MC9328 i.MX CPUs 144 /imx Files specific to Freescale MC9328 i.MX CPUs
145 /s3c24x0 Files specific to Samsung S3C24X0 CPUs 145 /s3c24x0 Files specific to Samsung S3C24X0 CPUs
146 /arm926ejs Files specific to ARM 926 CPUs 146 /arm926ejs Files specific to ARM 926 CPUs
147 /arm1136 Files specific to ARM 1136 CPUs 147 /arm1136 Files specific to ARM 1136 CPUs
148 /pxa Files specific to Intel XScale PXA CPUs 148 /pxa Files specific to Intel XScale PXA CPUs
149 /sa1100 Files specific to Intel StrongARM SA1100 CPUs 149 /sa1100 Files specific to Intel StrongARM SA1100 CPUs
150 /lib Architecture specific library files 150 /lib Architecture specific library files
151 /avr32 Files generic to AVR32 architecture 151 /avr32 Files generic to AVR32 architecture
152 /cpu CPU specific files 152 /cpu CPU specific files
153 /lib Architecture specific library files 153 /lib Architecture specific library files
154 /blackfin Files generic to Analog Devices Blackfin architecture 154 /blackfin Files generic to Analog Devices Blackfin architecture
155 /cpu CPU specific files 155 /cpu CPU specific files
156 /lib Architecture specific library files 156 /lib Architecture specific library files
157 /m68k Files generic to m68k architecture 157 /m68k Files generic to m68k architecture
158 /cpu CPU specific files 158 /cpu CPU specific files
159 /mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs 159 /mcf52x2 Files specific to Freescale ColdFire MCF52x2 CPUs
160 /mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs 160 /mcf5227x Files specific to Freescale ColdFire MCF5227x CPUs
161 /mcf532x Files specific to Freescale ColdFire MCF5329 CPUs 161 /mcf532x Files specific to Freescale ColdFire MCF5329 CPUs
162 /mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs 162 /mcf5445x Files specific to Freescale ColdFire MCF5445x CPUs
163 /mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs 163 /mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs
164 /lib Architecture specific library files 164 /lib Architecture specific library files
165 /microblaze Files generic to microblaze architecture 165 /microblaze Files generic to microblaze architecture
166 /cpu CPU specific files 166 /cpu CPU specific files
167 /lib Architecture specific library files 167 /lib Architecture specific library files
168 /mips Files generic to MIPS architecture 168 /mips Files generic to MIPS architecture
169 /cpu CPU specific files 169 /cpu CPU specific files
170 /mips32 Files specific to MIPS32 CPUs 170 /mips32 Files specific to MIPS32 CPUs
171 /mips64 Files specific to MIPS64 CPUs 171 /mips64 Files specific to MIPS64 CPUs
172 /lib Architecture specific library files 172 /lib Architecture specific library files
173 /nds32 Files generic to NDS32 architecture 173 /nds32 Files generic to NDS32 architecture
174 /cpu CPU specific files 174 /cpu CPU specific files
175 /n1213 Files specific to Andes Technology N1213 CPUs 175 /n1213 Files specific to Andes Technology N1213 CPUs
176 /lib Architecture specific library files 176 /lib Architecture specific library files
177 /nios2 Files generic to Altera NIOS2 architecture 177 /nios2 Files generic to Altera NIOS2 architecture
178 /cpu CPU specific files 178 /cpu CPU specific files
179 /lib Architecture specific library files 179 /lib Architecture specific library files
180 /openrisc Files generic to OpenRISC architecture 180 /openrisc Files generic to OpenRISC architecture
181 /cpu CPU specific files 181 /cpu CPU specific files
182 /lib Architecture specific library files 182 /lib Architecture specific library files
183 /powerpc Files generic to PowerPC architecture 183 /powerpc Files generic to PowerPC architecture
184 /cpu CPU specific files 184 /cpu CPU specific files
185 /74xx_7xx Files specific to Freescale MPC74xx and 7xx CPUs 185 /74xx_7xx Files specific to Freescale MPC74xx and 7xx CPUs
186 /mpc5xx Files specific to Freescale MPC5xx CPUs 186 /mpc5xx Files specific to Freescale MPC5xx CPUs
187 /mpc5xxx Files specific to Freescale MPC5xxx CPUs 187 /mpc5xxx Files specific to Freescale MPC5xxx CPUs
188 /mpc8xx Files specific to Freescale MPC8xx CPUs 188 /mpc8xx Files specific to Freescale MPC8xx CPUs
189 /mpc824x Files specific to Freescale MPC824x CPUs 189 /mpc824x Files specific to Freescale MPC824x CPUs
190 /mpc8260 Files specific to Freescale MPC8260 CPUs 190 /mpc8260 Files specific to Freescale MPC8260 CPUs
191 /mpc85xx Files specific to Freescale MPC85xx CPUs 191 /mpc85xx Files specific to Freescale MPC85xx CPUs
192 /ppc4xx Files specific to AMCC PowerPC 4xx CPUs 192 /ppc4xx Files specific to AMCC PowerPC 4xx CPUs
193 /lib Architecture specific library files 193 /lib Architecture specific library files
194 /sh Files generic to SH architecture 194 /sh Files generic to SH architecture
195 /cpu CPU specific files 195 /cpu CPU specific files
196 /sh2 Files specific to sh2 CPUs 196 /sh2 Files specific to sh2 CPUs
197 /sh3 Files specific to sh3 CPUs 197 /sh3 Files specific to sh3 CPUs
198 /sh4 Files specific to sh4 CPUs 198 /sh4 Files specific to sh4 CPUs
199 /lib Architecture specific library files 199 /lib Architecture specific library files
200 /sparc Files generic to SPARC architecture 200 /sparc Files generic to SPARC architecture
201 /cpu CPU specific files 201 /cpu CPU specific files
202 /leon2 Files specific to Gaisler LEON2 SPARC CPU 202 /leon2 Files specific to Gaisler LEON2 SPARC CPU
203 /leon3 Files specific to Gaisler LEON3 SPARC CPU 203 /leon3 Files specific to Gaisler LEON3 SPARC CPU
204 /lib Architecture specific library files 204 /lib Architecture specific library files
205 /x86 Files generic to x86 architecture 205 /x86 Files generic to x86 architecture
206 /cpu CPU specific files 206 /cpu CPU specific files
207 /lib Architecture specific library files 207 /lib Architecture specific library files
208 /api Machine/arch independent API for external apps 208 /api Machine/arch independent API for external apps
209 /board Board dependent files 209 /board Board dependent files
210 /common Misc architecture independent functions 210 /common Misc architecture independent functions
211 /disk Code for disk drive partition handling 211 /disk Code for disk drive partition handling
212 /doc Documentation (don't expect too much) 212 /doc Documentation (don't expect too much)
213 /drivers Commonly used device drivers 213 /drivers Commonly used device drivers
214 /dts Contains Makefile for building internal U-Boot fdt. 214 /dts Contains Makefile for building internal U-Boot fdt.
215 /examples Example code for standalone applications, etc. 215 /examples Example code for standalone applications, etc.
216 /fs Filesystem code (cramfs, ext2, jffs2, etc.) 216 /fs Filesystem code (cramfs, ext2, jffs2, etc.)
217 /include Header Files 217 /include Header Files
218 /lib Files generic to all architectures 218 /lib Files generic to all architectures
219 /libfdt Library files to support flattened device trees 219 /libfdt Library files to support flattened device trees
220 /lzma Library files to support LZMA decompression 220 /lzma Library files to support LZMA decompression
221 /lzo Library files to support LZO decompression 221 /lzo Library files to support LZO decompression
222 /net Networking code 222 /net Networking code
223 /post Power On Self Test 223 /post Power On Self Test
224 /spl Secondary Program Loader framework 224 /spl Secondary Program Loader framework
225 /tools Tools to build S-Record or U-Boot images, etc. 225 /tools Tools to build S-Record or U-Boot images, etc.
226 226
227 Software Configuration: 227 Software Configuration:
228 ======================= 228 =======================
229 229
230 Configuration is usually done using C preprocessor defines; the 230 Configuration is usually done using C preprocessor defines; the
231 rationale behind that is to avoid dead code whenever possible. 231 rationale behind that is to avoid dead code whenever possible.
232 232
233 There are two classes of configuration variables: 233 There are two classes of configuration variables:
234 234
235 * Configuration _OPTIONS_: 235 * Configuration _OPTIONS_:
236 These are selectable by the user and have names beginning with 236 These are selectable by the user and have names beginning with
237 "CONFIG_". 237 "CONFIG_".
238 238
239 * Configuration _SETTINGS_: 239 * Configuration _SETTINGS_:
240 These depend on the hardware etc. and should not be meddled with if 240 These depend on the hardware etc. and should not be meddled with if
241 you don't know what you're doing; they have names beginning with 241 you don't know what you're doing; they have names beginning with
242 "CONFIG_SYS_". 242 "CONFIG_SYS_".
243 243
244 Later we will add a configuration tool - probably similar to or even 244 Later we will add a configuration tool - probably similar to or even
245 identical to what's used for the Linux kernel. Right now, we have to 245 identical to what's used for the Linux kernel. Right now, we have to
246 do the configuration by hand, which means creating some symbolic 246 do the configuration by hand, which means creating some symbolic
247 links and editing some configuration files. We use the TQM8xxL boards 247 links and editing some configuration files. We use the TQM8xxL boards
248 as an example here. 248 as an example here.
249 249
250 250
251 Selection of Processor Architecture and Board Type: 251 Selection of Processor Architecture and Board Type:
252 --------------------------------------------------- 252 ---------------------------------------------------
253 253
254 For all supported boards there are ready-to-use default 254 For all supported boards there are ready-to-use default
255 configurations available; just type "make <board_name>_config". 255 configurations available; just type "make <board_name>_config".
256 256
257 Example: For a TQM823L module type: 257 Example: For a TQM823L module type:
258 258
259 cd u-boot 259 cd u-boot
260 make TQM823L_config 260 make TQM823L_config
261 261
262 For the Cogent platform, you need to specify the CPU type as well; 262 For the Cogent platform, you need to specify the CPU type as well;
263 e.g. "make cogent_mpc8xx_config". And also configure the cogent 263 e.g. "make cogent_mpc8xx_config". And also configure the cogent
264 directory according to the instructions in cogent/README. 264 directory according to the instructions in cogent/README.
265 265
266 266
267 Configuration Options: 267 Configuration Options:
268 ---------------------- 268 ----------------------
269 269
270 Configuration depends on the combination of board and CPU type; all 270 Configuration depends on the combination of board and CPU type; all
271 such information is kept in a configuration file 271 such information is kept in a configuration file
272 "include/configs/<board_name>.h". 272 "include/configs/<board_name>.h".
273 273
274 Example: For a TQM823L module, all configuration settings are in 274 Example: For a TQM823L module, all configuration settings are in
275 "include/configs/TQM823L.h". 275 "include/configs/TQM823L.h".
276 276
277 277
278 Many of the options are named exactly as the corresponding Linux 278 Many of the options are named exactly as the corresponding Linux
279 kernel configuration options. The intention is to make it easier to 279 kernel configuration options. The intention is to make it easier to
280 build a config tool - later. 280 build a config tool - later.
281 281
282 282
283 The following options need to be configured: 283 The following options need to be configured:
284 284
285 - CPU Type: Define exactly one, e.g. CONFIG_MPC85XX. 285 - CPU Type: Define exactly one, e.g. CONFIG_MPC85XX.
286 286
287 - Board Type: Define exactly one, e.g. CONFIG_MPC8540ADS. 287 - Board Type: Define exactly one, e.g. CONFIG_MPC8540ADS.
288 288
289 - CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined) 289 - CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined)
290 Define exactly one, e.g. CONFIG_ATSTK1002 290 Define exactly one, e.g. CONFIG_ATSTK1002
291 291
292 - CPU Module Type: (if CONFIG_COGENT is defined) 292 - CPU Module Type: (if CONFIG_COGENT is defined)
293 Define exactly one of 293 Define exactly one of
294 CONFIG_CMA286_60_OLD 294 CONFIG_CMA286_60_OLD
295 --- FIXME --- not tested yet: 295 --- FIXME --- not tested yet:
296 CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P, 296 CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
297 CONFIG_CMA287_23, CONFIG_CMA287_50 297 CONFIG_CMA287_23, CONFIG_CMA287_50
298 298
299 - Motherboard Type: (if CONFIG_COGENT is defined) 299 - Motherboard Type: (if CONFIG_COGENT is defined)
300 Define exactly one of 300 Define exactly one of
301 CONFIG_CMA101, CONFIG_CMA102 301 CONFIG_CMA101, CONFIG_CMA102
302 302
303 - Motherboard I/O Modules: (if CONFIG_COGENT is defined) 303 - Motherboard I/O Modules: (if CONFIG_COGENT is defined)
304 Define one or more of 304 Define one or more of
305 CONFIG_CMA302 305 CONFIG_CMA302
306 306
307 - Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined) 307 - Motherboard Options: (if CONFIG_CMA101 or CONFIG_CMA102 are defined)
308 Define one or more of 308 Define one or more of
309 CONFIG_LCD_HEARTBEAT - update a character position on 309 CONFIG_LCD_HEARTBEAT - update a character position on
310 the LCD display every second with 310 the LCD display every second with
311 a "rotator" |\-/|\-/ 311 a "rotator" |\-/|\-/
312 312
313 - Board flavour: (if CONFIG_MPC8260ADS is defined) 313 - Board flavour: (if CONFIG_MPC8260ADS is defined)
314 CONFIG_ADSTYPE 314 CONFIG_ADSTYPE
315 Possible values are: 315 Possible values are:
316 CONFIG_SYS_8260ADS - original MPC8260ADS 316 CONFIG_SYS_8260ADS - original MPC8260ADS
317 CONFIG_SYS_8266ADS - MPC8266ADS 317 CONFIG_SYS_8266ADS - MPC8266ADS
318 CONFIG_SYS_PQ2FADS - PQ2FADS-ZU or PQ2FADS-VR 318 CONFIG_SYS_PQ2FADS - PQ2FADS-ZU or PQ2FADS-VR
319 CONFIG_SYS_8272ADS - MPC8272ADS 319 CONFIG_SYS_8272ADS - MPC8272ADS
320 320
321 - Marvell Family Member 321 - Marvell Family Member
322 CONFIG_SYS_MVFS - define it if you want to enable 322 CONFIG_SYS_MVFS - define it if you want to enable
323 multiple fs option at one time 323 multiple fs option at one time
324 for marvell soc family 324 for marvell soc family
325 325
326 - MPC824X Family Member (if CONFIG_MPC824X is defined) 326 - MPC824X Family Member (if CONFIG_MPC824X is defined)
327 Define exactly one of 327 Define exactly one of
328 CONFIG_MPC8240, CONFIG_MPC8245 328 CONFIG_MPC8240, CONFIG_MPC8245
329 329
330 - 8xx CPU Options: (if using an MPC8xx CPU) 330 - 8xx CPU Options: (if using an MPC8xx CPU)
331 CONFIG_8xx_GCLK_FREQ - deprecated: CPU clock if 331 CONFIG_8xx_GCLK_FREQ - deprecated: CPU clock if
332 get_gclk_freq() cannot work 332 get_gclk_freq() cannot work
333 e.g. if there is no 32KHz 333 e.g. if there is no 32KHz
334 reference PIT/RTC clock 334 reference PIT/RTC clock
335 CONFIG_8xx_OSCLK - PLL input clock (either EXTCLK 335 CONFIG_8xx_OSCLK - PLL input clock (either EXTCLK
336 or XTAL/EXTAL) 336 or XTAL/EXTAL)
337 337
338 - 859/866/885 CPU options: (if using a MPC859 or MPC866 or MPC885 CPU): 338 - 859/866/885 CPU options: (if using a MPC859 or MPC866 or MPC885 CPU):
339 CONFIG_SYS_8xx_CPUCLK_MIN 339 CONFIG_SYS_8xx_CPUCLK_MIN
340 CONFIG_SYS_8xx_CPUCLK_MAX 340 CONFIG_SYS_8xx_CPUCLK_MAX
341 CONFIG_8xx_CPUCLK_DEFAULT 341 CONFIG_8xx_CPUCLK_DEFAULT
342 See doc/README.MPC866 342 See doc/README.MPC866
343 343
344 CONFIG_SYS_MEASURE_CPUCLK 344 CONFIG_SYS_MEASURE_CPUCLK
345 345
346 Define this to measure the actual CPU clock instead 346 Define this to measure the actual CPU clock instead
347 of relying on the correctness of the configured 347 of relying on the correctness of the configured
348 values. Mostly useful for board bringup to make sure 348 values. Mostly useful for board bringup to make sure
349 the PLL is locked at the intended frequency. Note 349 the PLL is locked at the intended frequency. Note
350 that this requires a (stable) reference clock (32 kHz 350 that this requires a (stable) reference clock (32 kHz
351 RTC clock or CONFIG_SYS_8XX_XIN) 351 RTC clock or CONFIG_SYS_8XX_XIN)
352 352
353 CONFIG_SYS_DELAYED_ICACHE 353 CONFIG_SYS_DELAYED_ICACHE
354 354
355 Define this option if you want to enable the 355 Define this option if you want to enable the
356 ICache only when Code runs from RAM. 356 ICache only when Code runs from RAM.
357 357
358 - 85xx CPU Options: 358 - 85xx CPU Options:
359 CONFIG_SYS_PPC64 359 CONFIG_SYS_PPC64
360 360
361 Specifies that the core is a 64-bit PowerPC implementation (implements 361 Specifies that the core is a 64-bit PowerPC implementation (implements
362 the "64" category of the Power ISA). This is necessary for ePAPR 362 the "64" category of the Power ISA). This is necessary for ePAPR
363 compliance, among other possible reasons. 363 compliance, among other possible reasons.
364 364
365 CONFIG_SYS_FSL_TBCLK_DIV 365 CONFIG_SYS_FSL_TBCLK_DIV
366 366
367 Defines the core time base clock divider ratio compared to the 367 Defines the core time base clock divider ratio compared to the
368 system clock. On most PQ3 devices this is 8, on newer QorIQ 368 system clock. On most PQ3 devices this is 8, on newer QorIQ
369 devices it can be 16 or 32. The ratio varies from SoC to Soc. 369 devices it can be 16 or 32. The ratio varies from SoC to Soc.
370 370
371 CONFIG_SYS_FSL_PCIE_COMPAT 371 CONFIG_SYS_FSL_PCIE_COMPAT
372 372
373 Defines the string to utilize when trying to match PCIe device 373 Defines the string to utilize when trying to match PCIe device
374 tree nodes for the given platform. 374 tree nodes for the given platform.
375 375
376 CONFIG_SYS_PPC_E500_DEBUG_TLB 376 CONFIG_SYS_PPC_E500_DEBUG_TLB
377 377
378 Enables a temporary TLB entry to be used during boot to work 378 Enables a temporary TLB entry to be used during boot to work
379 around limitations in e500v1 and e500v2 external debugger 379 around limitations in e500v1 and e500v2 external debugger
380 support. This reduces the portions of the boot code where 380 support. This reduces the portions of the boot code where
381 breakpoints and single stepping do not work. The value of this 381 breakpoints and single stepping do not work. The value of this
382 symbol should be set to the TLB1 entry to be used for this 382 symbol should be set to the TLB1 entry to be used for this
383 purpose. 383 purpose.
384 384
385 CONFIG_SYS_FSL_ERRATUM_A004510 385 CONFIG_SYS_FSL_ERRATUM_A004510
386 386
387 Enables a workaround for erratum A004510. If set, 387 Enables a workaround for erratum A004510. If set,
388 then CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV and 388 then CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV and
389 CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY must be set. 389 CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY must be set.
390 390
391 CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV 391 CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV
392 CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2 (optional) 392 CONFIG_SYS_FSL_ERRATUM_A004510_SVR_REV2 (optional)
393 393
394 Defines one or two SoC revisions (low 8 bits of SVR) 394 Defines one or two SoC revisions (low 8 bits of SVR)
395 for which the A004510 workaround should be applied. 395 for which the A004510 workaround should be applied.
396 396
397 The rest of SVR is either not relevant to the decision 397 The rest of SVR is either not relevant to the decision
398 of whether the erratum is present (e.g. p2040 versus 398 of whether the erratum is present (e.g. p2040 versus
399 p2041) or is implied by the build target, which controls 399 p2041) or is implied by the build target, which controls
400 whether CONFIG_SYS_FSL_ERRATUM_A004510 is set. 400 whether CONFIG_SYS_FSL_ERRATUM_A004510 is set.
401 401
402 See Freescale App Note 4493 for more information about 402 See Freescale App Note 4493 for more information about
403 this erratum. 403 this erratum.
404 404
405 CONFIG_A003399_NOR_WORKAROUND 405 CONFIG_A003399_NOR_WORKAROUND
406 Enables a workaround for IFC erratum A003399. It is only 406 Enables a workaround for IFC erratum A003399. It is only
407 requred during NOR boot. 407 requred during NOR boot.
408 408
409 CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY 409 CONFIG_SYS_FSL_CORENET_SNOOPVEC_COREONLY
410 410
411 This is the value to write into CCSR offset 0x18600 411 This is the value to write into CCSR offset 0x18600
412 according to the A004510 workaround. 412 according to the A004510 workaround.
413 413
414 CONFIG_SYS_FSL_DSP_DDR_ADDR 414 CONFIG_SYS_FSL_DSP_DDR_ADDR
415 This value denotes start offset of DDR memory which is 415 This value denotes start offset of DDR memory which is
416 connected exclusively to the DSP cores. 416 connected exclusively to the DSP cores.
417 417
418 CONFIG_SYS_FSL_DSP_M2_RAM_ADDR 418 CONFIG_SYS_FSL_DSP_M2_RAM_ADDR
419 This value denotes start offset of M2 memory 419 This value denotes start offset of M2 memory
420 which is directly connected to the DSP core. 420 which is directly connected to the DSP core.
421 421
422 CONFIG_SYS_FSL_DSP_M3_RAM_ADDR 422 CONFIG_SYS_FSL_DSP_M3_RAM_ADDR
423 This value denotes start offset of M3 memory which is directly 423 This value denotes start offset of M3 memory which is directly
424 connected to the DSP core. 424 connected to the DSP core.
425 425
426 CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT 426 CONFIG_SYS_FSL_DSP_CCSRBAR_DEFAULT
427 This value denotes start offset of DSP CCSR space. 427 This value denotes start offset of DSP CCSR space.
428 428
429 CONFIG_SYS_FSL_SINGLE_SOURCE_CLK 429 CONFIG_SYS_FSL_SINGLE_SOURCE_CLK
430 Single Source Clock is clocking mode present in some of FSL SoC's. 430 Single Source Clock is clocking mode present in some of FSL SoC's.
431 In this mode, a single differential clock is used to supply 431 In this mode, a single differential clock is used to supply
432 clocks to the sysclock, ddrclock and usbclock. 432 clocks to the sysclock, ddrclock and usbclock.
433 433
434 CONFIG_SYS_CPC_REINIT_F 434 CONFIG_SYS_CPC_REINIT_F
435 This CONFIG is defined when the CPC is configured as SRAM at the 435 This CONFIG is defined when the CPC is configured as SRAM at the
436 time of U-boot entry and is required to be re-initialized. 436 time of U-boot entry and is required to be re-initialized.
437 437
438 CONFIG_DEEP_SLEEP 438 CONFIG_DEEP_SLEEP
439 Inidcates this SoC supports deep sleep feature. If deep sleep is 439 Inidcates this SoC supports deep sleep feature. If deep sleep is
440 supported, core will start to execute uboot when wakes up. 440 supported, core will start to execute uboot when wakes up.
441 441
442 - Generic CPU options: 442 - Generic CPU options:
443 CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN 443 CONFIG_SYS_BIG_ENDIAN, CONFIG_SYS_LITTLE_ENDIAN
444 444
445 Defines the endianess of the CPU. Implementation of those 445 Defines the endianess of the CPU. Implementation of those
446 values is arch specific. 446 values is arch specific.
447 447
448 CONFIG_SYS_FSL_DDR 448 CONFIG_SYS_FSL_DDR
449 Freescale DDR driver in use. This type of DDR controller is 449 Freescale DDR driver in use. This type of DDR controller is
450 found in mpc83xx, mpc85xx, mpc86xx as well as some ARM core 450 found in mpc83xx, mpc85xx, mpc86xx as well as some ARM core
451 SoCs. 451 SoCs.
452 452
453 CONFIG_SYS_FSL_DDR_ADDR 453 CONFIG_SYS_FSL_DDR_ADDR
454 Freescale DDR memory-mapped register base. 454 Freescale DDR memory-mapped register base.
455 455
456 CONFIG_SYS_FSL_DDR_EMU 456 CONFIG_SYS_FSL_DDR_EMU
457 Specify emulator support for DDR. Some DDR features such as 457 Specify emulator support for DDR. Some DDR features such as
458 deskew training are not available. 458 deskew training are not available.
459 459
460 CONFIG_SYS_FSL_DDRC_GEN1 460 CONFIG_SYS_FSL_DDRC_GEN1
461 Freescale DDR1 controller. 461 Freescale DDR1 controller.
462 462
463 CONFIG_SYS_FSL_DDRC_GEN2 463 CONFIG_SYS_FSL_DDRC_GEN2
464 Freescale DDR2 controller. 464 Freescale DDR2 controller.
465 465
466 CONFIG_SYS_FSL_DDRC_GEN3 466 CONFIG_SYS_FSL_DDRC_GEN3
467 Freescale DDR3 controller. 467 Freescale DDR3 controller.
468 468
469 CONFIG_SYS_FSL_DDRC_GEN4 469 CONFIG_SYS_FSL_DDRC_GEN4
470 Freescale DDR4 controller. 470 Freescale DDR4 controller.
471 471
472 CONFIG_SYS_FSL_DDRC_ARM_GEN3 472 CONFIG_SYS_FSL_DDRC_ARM_GEN3
473 Freescale DDR3 controller for ARM-based SoCs. 473 Freescale DDR3 controller for ARM-based SoCs.
474 474
475 CONFIG_SYS_FSL_DDR1 475 CONFIG_SYS_FSL_DDR1
476 Board config to use DDR1. It can be enabled for SoCs with 476 Board config to use DDR1. It can be enabled for SoCs with
477 Freescale DDR1 or DDR2 controllers, depending on the board 477 Freescale DDR1 or DDR2 controllers, depending on the board
478 implemetation. 478 implemetation.
479 479
480 CONFIG_SYS_FSL_DDR2 480 CONFIG_SYS_FSL_DDR2
481 Board config to use DDR2. It can be eanbeld for SoCs with 481 Board config to use DDR2. It can be eanbeld for SoCs with
482 Freescale DDR2 or DDR3 controllers, depending on the board 482 Freescale DDR2 or DDR3 controllers, depending on the board
483 implementation. 483 implementation.
484 484
485 CONFIG_SYS_FSL_DDR3 485 CONFIG_SYS_FSL_DDR3
486 Board config to use DDR3. It can be enabled for SoCs with 486 Board config to use DDR3. It can be enabled for SoCs with
487 Freescale DDR3 or DDR3L controllers. 487 Freescale DDR3 or DDR3L controllers.
488 488
489 CONFIG_SYS_FSL_DDR3L 489 CONFIG_SYS_FSL_DDR3L
490 Board config to use DDR3L. It can be enabled for SoCs with 490 Board config to use DDR3L. It can be enabled for SoCs with
491 DDR3L controllers. 491 DDR3L controllers.
492 492
493 CONFIG_SYS_FSL_DDR4 493 CONFIG_SYS_FSL_DDR4
494 Board config to use DDR4. It can be enabled for SoCs with 494 Board config to use DDR4. It can be enabled for SoCs with
495 DDR4 controllers. 495 DDR4 controllers.
496 496
497 CONFIG_SYS_FSL_IFC_BE 497 CONFIG_SYS_FSL_IFC_BE
498 Defines the IFC controller register space as Big Endian 498 Defines the IFC controller register space as Big Endian
499 499
500 CONFIG_SYS_FSL_IFC_LE 500 CONFIG_SYS_FSL_IFC_LE
501 Defines the IFC controller register space as Little Endian 501 Defines the IFC controller register space as Little Endian
502 502
503 CONFIG_SYS_FSL_PBL_PBI 503 CONFIG_SYS_FSL_PBL_PBI
504 It enables addition of RCW (Power on reset configuration) in built image. 504 It enables addition of RCW (Power on reset configuration) in built image.
505 Please refer doc/README.pblimage for more details 505 Please refer doc/README.pblimage for more details
506 506
507 CONFIG_SYS_FSL_PBL_RCW 507 CONFIG_SYS_FSL_PBL_RCW
508 It adds PBI(pre-boot instructions) commands in u-boot build image. 508 It adds PBI(pre-boot instructions) commands in u-boot build image.
509 PBI commands can be used to configure SoC before it starts the execution. 509 PBI commands can be used to configure SoC before it starts the execution.
510 Please refer doc/README.pblimage for more details 510 Please refer doc/README.pblimage for more details
511 511
512 CONFIG_SPL_FSL_PBL 512 CONFIG_SPL_FSL_PBL
513 It adds a target to create boot binary having SPL binary in PBI format 513 It adds a target to create boot binary having SPL binary in PBI format
514 concatenated with u-boot binary. 514 concatenated with u-boot binary.
515 515
516 CONFIG_SYS_FSL_DDR_BE 516 CONFIG_SYS_FSL_DDR_BE
517 Defines the DDR controller register space as Big Endian 517 Defines the DDR controller register space as Big Endian
518 518
519 CONFIG_SYS_FSL_DDR_LE 519 CONFIG_SYS_FSL_DDR_LE
520 Defines the DDR controller register space as Little Endian 520 Defines the DDR controller register space as Little Endian
521 521
522 CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY 522 CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY
523 Physical address from the view of DDR controllers. It is the 523 Physical address from the view of DDR controllers. It is the
524 same as CONFIG_SYS_DDR_SDRAM_BASE for all Power SoCs. But 524 same as CONFIG_SYS_DDR_SDRAM_BASE for all Power SoCs. But
525 it could be different for ARM SoCs. 525 it could be different for ARM SoCs.
526 526
527 CONFIG_SYS_FSL_DDR_INTLV_256B 527 CONFIG_SYS_FSL_DDR_INTLV_256B
528 DDR controller interleaving on 256-byte. This is a special 528 DDR controller interleaving on 256-byte. This is a special
529 interleaving mode, handled by Dickens for Freescale layerscape 529 interleaving mode, handled by Dickens for Freescale layerscape
530 SoCs with ARM core. 530 SoCs with ARM core.
531 531
532 - Intel Monahans options: 532 - Intel Monahans options:
533 CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO 533 CONFIG_SYS_MONAHANS_RUN_MODE_OSC_RATIO
534 534
535 Defines the Monahans run mode to oscillator 535 Defines the Monahans run mode to oscillator
536 ratio. Valid values are 8, 16, 24, 31. The core 536 ratio. Valid values are 8, 16, 24, 31. The core
537 frequency is this value multiplied by 13 MHz. 537 frequency is this value multiplied by 13 MHz.
538 538
539 CONFIG_SYS_MONAHANS_TURBO_RUN_MODE_RATIO 539 CONFIG_SYS_MONAHANS_TURBO_RUN_MODE_RATIO
540 540
541 Defines the Monahans turbo mode to oscillator 541 Defines the Monahans turbo mode to oscillator
542 ratio. Valid values are 1 (default if undefined) and 542 ratio. Valid values are 1 (default if undefined) and
543 2. The core frequency as calculated above is multiplied 543 2. The core frequency as calculated above is multiplied
544 by this value. 544 by this value.
545 545
546 - MIPS CPU options: 546 - MIPS CPU options:
547 CONFIG_SYS_INIT_SP_OFFSET 547 CONFIG_SYS_INIT_SP_OFFSET
548 548
549 Offset relative to CONFIG_SYS_SDRAM_BASE for initial stack 549 Offset relative to CONFIG_SYS_SDRAM_BASE for initial stack
550 pointer. This is needed for the temporary stack before 550 pointer. This is needed for the temporary stack before
551 relocation. 551 relocation.
552 552
553 CONFIG_SYS_MIPS_CACHE_MODE 553 CONFIG_SYS_MIPS_CACHE_MODE
554 554
555 Cache operation mode for the MIPS CPU. 555 Cache operation mode for the MIPS CPU.
556 See also arch/mips/include/asm/mipsregs.h. 556 See also arch/mips/include/asm/mipsregs.h.
557 Possible values are: 557 Possible values are:
558 CONF_CM_CACHABLE_NO_WA 558 CONF_CM_CACHABLE_NO_WA
559 CONF_CM_CACHABLE_WA 559 CONF_CM_CACHABLE_WA
560 CONF_CM_UNCACHED 560 CONF_CM_UNCACHED
561 CONF_CM_CACHABLE_NONCOHERENT 561 CONF_CM_CACHABLE_NONCOHERENT
562 CONF_CM_CACHABLE_CE 562 CONF_CM_CACHABLE_CE
563 CONF_CM_CACHABLE_COW 563 CONF_CM_CACHABLE_COW
564 CONF_CM_CACHABLE_CUW 564 CONF_CM_CACHABLE_CUW
565 CONF_CM_CACHABLE_ACCELERATED 565 CONF_CM_CACHABLE_ACCELERATED
566 566
567 CONFIG_SYS_XWAY_EBU_BOOTCFG 567 CONFIG_SYS_XWAY_EBU_BOOTCFG
568 568
569 Special option for Lantiq XWAY SoCs for booting from NOR flash. 569 Special option for Lantiq XWAY SoCs for booting from NOR flash.
570 See also arch/mips/cpu/mips32/start.S. 570 See also arch/mips/cpu/mips32/start.S.
571 571
572 CONFIG_XWAY_SWAP_BYTES 572 CONFIG_XWAY_SWAP_BYTES
573 573
574 Enable compilation of tools/xway-swap-bytes needed for Lantiq 574 Enable compilation of tools/xway-swap-bytes needed for Lantiq
575 XWAY SoCs for booting from NOR flash. The U-Boot image needs to 575 XWAY SoCs for booting from NOR flash. The U-Boot image needs to
576 be swapped if a flash programmer is used. 576 be swapped if a flash programmer is used.
577 577
578 - ARM options: 578 - ARM options:
579 CONFIG_SYS_EXCEPTION_VECTORS_HIGH 579 CONFIG_SYS_EXCEPTION_VECTORS_HIGH
580 580
581 Select high exception vectors of the ARM core, e.g., do not 581 Select high exception vectors of the ARM core, e.g., do not
582 clear the V bit of the c1 register of CP15. 582 clear the V bit of the c1 register of CP15.
583 583
584 CONFIG_SYS_THUMB_BUILD 584 CONFIG_SYS_THUMB_BUILD
585 585
586 Use this flag to build U-Boot using the Thumb instruction 586 Use this flag to build U-Boot using the Thumb instruction
587 set for ARM architectures. Thumb instruction set provides 587 set for ARM architectures. Thumb instruction set provides
588 better code density. For ARM architectures that support 588 better code density. For ARM architectures that support
589 Thumb2 this flag will result in Thumb2 code generated by 589 Thumb2 this flag will result in Thumb2 code generated by
590 GCC. 590 GCC.
591 591
592 CONFIG_ARM_ERRATA_716044 592 CONFIG_ARM_ERRATA_716044
593 CONFIG_ARM_ERRATA_742230 593 CONFIG_ARM_ERRATA_742230
594 CONFIG_ARM_ERRATA_743622 594 CONFIG_ARM_ERRATA_743622
595 CONFIG_ARM_ERRATA_751472 595 CONFIG_ARM_ERRATA_751472
596 CONFIG_ARM_ERRATA_794072 596 CONFIG_ARM_ERRATA_794072
597 CONFIG_ARM_ERRATA_761320 597 CONFIG_ARM_ERRATA_761320
598 598
599 If set, the workarounds for these ARM errata are applied early 599 If set, the workarounds for these ARM errata are applied early
600 during U-Boot startup. Note that these options force the 600 during U-Boot startup. Note that these options force the
601 workarounds to be applied; no CPU-type/version detection 601 workarounds to be applied; no CPU-type/version detection
602 exists, unlike the similar options in the Linux kernel. Do not 602 exists, unlike the similar options in the Linux kernel. Do not
603 set these options unless they apply! 603 set these options unless they apply!
604 604
605 - CPU timer options: 605 - CPU timer options:
606 CONFIG_SYS_HZ 606 CONFIG_SYS_HZ
607 607
608 The frequency of the timer returned by get_timer(). 608 The frequency of the timer returned by get_timer().
609 get_timer() must operate in milliseconds and this CONFIG 609 get_timer() must operate in milliseconds and this CONFIG
610 option must be set to 1000. 610 option must be set to 1000.
611 611
612 - Linux Kernel Interface: 612 - Linux Kernel Interface:
613 CONFIG_CLOCKS_IN_MHZ 613 CONFIG_CLOCKS_IN_MHZ
614 614
615 U-Boot stores all clock information in Hz 615 U-Boot stores all clock information in Hz
616 internally. For binary compatibility with older Linux 616 internally. For binary compatibility with older Linux
617 kernels (which expect the clocks passed in the 617 kernels (which expect the clocks passed in the
618 bd_info data to be in MHz) the environment variable 618 bd_info data to be in MHz) the environment variable
619 "clocks_in_mhz" can be defined so that U-Boot 619 "clocks_in_mhz" can be defined so that U-Boot
620 converts clock data to MHZ before passing it to the 620 converts clock data to MHZ before passing it to the
621 Linux kernel. 621 Linux kernel.
622 When CONFIG_CLOCKS_IN_MHZ is defined, a definition of 622 When CONFIG_CLOCKS_IN_MHZ is defined, a definition of
623 "clocks_in_mhz=1" is automatically included in the 623 "clocks_in_mhz=1" is automatically included in the
624 default environment. 624 default environment.
625 625
626 CONFIG_MEMSIZE_IN_BYTES [relevant for MIPS only] 626 CONFIG_MEMSIZE_IN_BYTES [relevant for MIPS only]
627 627
628 When transferring memsize parameter to linux, some versions 628 When transferring memsize parameter to linux, some versions
629 expect it to be in bytes, others in MB. 629 expect it to be in bytes, others in MB.
630 Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes. 630 Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
631 631
632 CONFIG_OF_LIBFDT 632 CONFIG_OF_LIBFDT
633 633
634 New kernel versions are expecting firmware settings to be 634 New kernel versions are expecting firmware settings to be
635 passed using flattened device trees (based on open firmware 635 passed using flattened device trees (based on open firmware
636 concepts). 636 concepts).
637 637
638 CONFIG_OF_LIBFDT 638 CONFIG_OF_LIBFDT
639 * New libfdt-based support 639 * New libfdt-based support
640 * Adds the "fdt" command 640 * Adds the "fdt" command
641 * The bootm command automatically updates the fdt 641 * The bootm command automatically updates the fdt
642 642
643 OF_CPU - The proper name of the cpus node (only required for 643 OF_CPU - The proper name of the cpus node (only required for
644 MPC512X and MPC5xxx based boards). 644 MPC512X and MPC5xxx based boards).
645 OF_SOC - The proper name of the soc node (only required for 645 OF_SOC - The proper name of the soc node (only required for
646 MPC512X and MPC5xxx based boards). 646 MPC512X and MPC5xxx based boards).
647 OF_TBCLK - The timebase frequency. 647 OF_TBCLK - The timebase frequency.
648 OF_STDOUT_PATH - The path to the console device 648 OF_STDOUT_PATH - The path to the console device
649 649
650 boards with QUICC Engines require OF_QE to set UCC MAC 650 boards with QUICC Engines require OF_QE to set UCC MAC
651 addresses 651 addresses
652 652
653 CONFIG_OF_BOARD_SETUP 653 CONFIG_OF_BOARD_SETUP
654 654
655 Board code has addition modification that it wants to make 655 Board code has addition modification that it wants to make
656 to the flat device tree before handing it off to the kernel 656 to the flat device tree before handing it off to the kernel
657 657
658 CONFIG_OF_BOOT_CPU 658 CONFIG_OF_BOOT_CPU
659 659
660 This define fills in the correct boot CPU in the boot 660 This define fills in the correct boot CPU in the boot
661 param header, the default value is zero if undefined. 661 param header, the default value is zero if undefined.
662 662
663 CONFIG_OF_IDE_FIXUP 663 CONFIG_OF_IDE_FIXUP
664 664
665 U-Boot can detect if an IDE device is present or not. 665 U-Boot can detect if an IDE device is present or not.
666 If not, and this new config option is activated, U-Boot 666 If not, and this new config option is activated, U-Boot
667 removes the ATA node from the DTS before booting Linux, 667 removes the ATA node from the DTS before booting Linux,
668 so the Linux IDE driver does not probe the device and 668 so the Linux IDE driver does not probe the device and
669 crash. This is needed for buggy hardware (uc101) where 669 crash. This is needed for buggy hardware (uc101) where
670 no pull down resistor is connected to the signal IDE5V_DD7. 670 no pull down resistor is connected to the signal IDE5V_DD7.
671 671
672 CONFIG_MACH_TYPE [relevant for ARM only][mandatory] 672 CONFIG_MACH_TYPE [relevant for ARM only][mandatory]
673 673
674 This setting is mandatory for all boards that have only one 674 This setting is mandatory for all boards that have only one
675 machine type and must be used to specify the machine type 675 machine type and must be used to specify the machine type
676 number as it appears in the ARM machine registry 676 number as it appears in the ARM machine registry
677 (see http://www.arm.linux.org.uk/developer/machines/). 677 (see http://www.arm.linux.org.uk/developer/machines/).
678 Only boards that have multiple machine types supported 678 Only boards that have multiple machine types supported
679 in a single configuration file and the machine type is 679 in a single configuration file and the machine type is
680 runtime discoverable, do not have to use this setting. 680 runtime discoverable, do not have to use this setting.
681 681
682 - vxWorks boot parameters: 682 - vxWorks boot parameters:
683 683
684 bootvx constructs a valid bootline using the following 684 bootvx constructs a valid bootline using the following
685 environments variables: bootfile, ipaddr, serverip, hostname. 685 environments variables: bootfile, ipaddr, serverip, hostname.
686 It loads the vxWorks image pointed bootfile. 686 It loads the vxWorks image pointed bootfile.
687 687
688 CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name 688 CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name
689 CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address 689 CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address
690 CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server 690 CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server
691 CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters 691 CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters
692 692
693 CONFIG_SYS_VXWORKS_ADD_PARAMS 693 CONFIG_SYS_VXWORKS_ADD_PARAMS
694 694
695 Add it at the end of the bootline. E.g "u=username pw=secret" 695 Add it at the end of the bootline. E.g "u=username pw=secret"
696 696
697 Note: If a "bootargs" environment is defined, it will overwride 697 Note: If a "bootargs" environment is defined, it will overwride
698 the defaults discussed just above. 698 the defaults discussed just above.
699 699
700 - Cache Configuration: 700 - Cache Configuration:
701 CONFIG_SYS_ICACHE_OFF - Do not enable instruction cache in U-Boot 701 CONFIG_SYS_ICACHE_OFF - Do not enable instruction cache in U-Boot
702 CONFIG_SYS_DCACHE_OFF - Do not enable data cache in U-Boot 702 CONFIG_SYS_DCACHE_OFF - Do not enable data cache in U-Boot
703 CONFIG_SYS_L2CACHE_OFF- Do not enable L2 cache in U-Boot 703 CONFIG_SYS_L2CACHE_OFF- Do not enable L2 cache in U-Boot
704 704
705 - Cache Configuration for ARM: 705 - Cache Configuration for ARM:
706 CONFIG_SYS_L2_PL310 - Enable support for ARM PL310 L2 cache 706 CONFIG_SYS_L2_PL310 - Enable support for ARM PL310 L2 cache
707 controller 707 controller
708 CONFIG_SYS_PL310_BASE - Physical base address of PL310 708 CONFIG_SYS_PL310_BASE - Physical base address of PL310
709 controller register space 709 controller register space
710 710
711 - Serial Ports: 711 - Serial Ports:
712 CONFIG_PL010_SERIAL 712 CONFIG_PL010_SERIAL
713 713
714 Define this if you want support for Amba PrimeCell PL010 UARTs. 714 Define this if you want support for Amba PrimeCell PL010 UARTs.
715 715
716 CONFIG_PL011_SERIAL 716 CONFIG_PL011_SERIAL
717 717
718 Define this if you want support for Amba PrimeCell PL011 UARTs. 718 Define this if you want support for Amba PrimeCell PL011 UARTs.
719 719
720 CONFIG_PL011_CLOCK 720 CONFIG_PL011_CLOCK
721 721
722 If you have Amba PrimeCell PL011 UARTs, set this variable to 722 If you have Amba PrimeCell PL011 UARTs, set this variable to
723 the clock speed of the UARTs. 723 the clock speed of the UARTs.
724 724
725 CONFIG_PL01x_PORTS 725 CONFIG_PL01x_PORTS
726 726
727 If you have Amba PrimeCell PL010 or PL011 UARTs on your board, 727 If you have Amba PrimeCell PL010 or PL011 UARTs on your board,
728 define this to a list of base addresses for each (supported) 728 define this to a list of base addresses for each (supported)
729 port. See e.g. include/configs/versatile.h 729 port. See e.g. include/configs/versatile.h
730 730
731 CONFIG_PL011_SERIAL_RLCR 731 CONFIG_PL011_SERIAL_RLCR
732 732
733 Some vendor versions of PL011 serial ports (e.g. ST-Ericsson U8500) 733 Some vendor versions of PL011 serial ports (e.g. ST-Ericsson U8500)
734 have separate receive and transmit line control registers. Set 734 have separate receive and transmit line control registers. Set
735 this variable to initialize the extra register. 735 this variable to initialize the extra register.
736 736
737 CONFIG_PL011_SERIAL_FLUSH_ON_INIT 737 CONFIG_PL011_SERIAL_FLUSH_ON_INIT
738 738
739 On some platforms (e.g. U8500) U-Boot is loaded by a second stage 739 On some platforms (e.g. U8500) U-Boot is loaded by a second stage
740 boot loader that has already initialized the UART. Define this 740 boot loader that has already initialized the UART. Define this
741 variable to flush the UART at init time. 741 variable to flush the UART at init time.
742 742
743 743
744 - Console Interface: 744 - Console Interface:
745 Depending on board, define exactly one serial port 745 Depending on board, define exactly one serial port
746 (like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2, 746 (like CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2,
747 CONFIG_8xx_CONS_SCC1, ...), or switch off the serial 747 CONFIG_8xx_CONS_SCC1, ...), or switch off the serial
748 console by defining CONFIG_8xx_CONS_NONE 748 console by defining CONFIG_8xx_CONS_NONE
749 749
750 Note: if CONFIG_8xx_CONS_NONE is defined, the serial 750 Note: if CONFIG_8xx_CONS_NONE is defined, the serial
751 port routines must be defined elsewhere 751 port routines must be defined elsewhere
752 (i.e. serial_init(), serial_getc(), ...) 752 (i.e. serial_init(), serial_getc(), ...)
753 753
754 CONFIG_CFB_CONSOLE 754 CONFIG_CFB_CONSOLE
755 Enables console device for a color framebuffer. Needs following 755 Enables console device for a color framebuffer. Needs following
756 defines (cf. smiLynxEM, i8042) 756 defines (cf. smiLynxEM, i8042)
757 VIDEO_FB_LITTLE_ENDIAN graphic memory organisation 757 VIDEO_FB_LITTLE_ENDIAN graphic memory organisation
758 (default big endian) 758 (default big endian)
759 VIDEO_HW_RECTFILL graphic chip supports 759 VIDEO_HW_RECTFILL graphic chip supports
760 rectangle fill 760 rectangle fill
761 (cf. smiLynxEM) 761 (cf. smiLynxEM)
762 VIDEO_HW_BITBLT graphic chip supports 762 VIDEO_HW_BITBLT graphic chip supports
763 bit-blit (cf. smiLynxEM) 763 bit-blit (cf. smiLynxEM)
764 VIDEO_VISIBLE_COLS visible pixel columns 764 VIDEO_VISIBLE_COLS visible pixel columns
765 (cols=pitch) 765 (cols=pitch)
766 VIDEO_VISIBLE_ROWS visible pixel rows 766 VIDEO_VISIBLE_ROWS visible pixel rows
767 VIDEO_PIXEL_SIZE bytes per pixel 767 VIDEO_PIXEL_SIZE bytes per pixel
768 VIDEO_DATA_FORMAT graphic data format 768 VIDEO_DATA_FORMAT graphic data format
769 (0-5, cf. cfb_console.c) 769 (0-5, cf. cfb_console.c)
770 VIDEO_FB_ADRS framebuffer address 770 VIDEO_FB_ADRS framebuffer address
771 VIDEO_KBD_INIT_FCT keyboard int fct 771 VIDEO_KBD_INIT_FCT keyboard int fct
772 (i.e. i8042_kbd_init()) 772 (i.e. i8042_kbd_init())
773 VIDEO_TSTC_FCT test char fct 773 VIDEO_TSTC_FCT test char fct
774 (i.e. i8042_tstc) 774 (i.e. i8042_tstc)
775 VIDEO_GETC_FCT get char fct 775 VIDEO_GETC_FCT get char fct
776 (i.e. i8042_getc) 776 (i.e. i8042_getc)
777 CONFIG_CONSOLE_CURSOR cursor drawing on/off 777 CONFIG_CONSOLE_CURSOR cursor drawing on/off
778 (requires blink timer 778 (requires blink timer
779 cf. i8042.c) 779 cf. i8042.c)
780 CONFIG_SYS_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c) 780 CONFIG_SYS_CONSOLE_BLINK_COUNT blink interval (cf. i8042.c)
781 CONFIG_CONSOLE_TIME display time/date info in 781 CONFIG_CONSOLE_TIME display time/date info in
782 upper right corner 782 upper right corner
783 (requires CONFIG_CMD_DATE) 783 (requires CONFIG_CMD_DATE)
784 CONFIG_VIDEO_LOGO display Linux logo in 784 CONFIG_VIDEO_LOGO display Linux logo in
785 upper left corner 785 upper left corner
786 CONFIG_VIDEO_BMP_LOGO use bmp_logo.h instead of 786 CONFIG_VIDEO_BMP_LOGO use bmp_logo.h instead of
787 linux_logo.h for logo. 787 linux_logo.h for logo.
788 Requires CONFIG_VIDEO_LOGO 788 Requires CONFIG_VIDEO_LOGO
789 CONFIG_CONSOLE_EXTRA_INFO 789 CONFIG_CONSOLE_EXTRA_INFO
790 additional board info beside 790 additional board info beside
791 the logo 791 the logo
792 792
793 When CONFIG_CFB_CONSOLE_ANSI is defined, console will support 793 When CONFIG_CFB_CONSOLE_ANSI is defined, console will support
794 a limited number of ANSI escape sequences (cursor control, 794 a limited number of ANSI escape sequences (cursor control,
795 erase functions and limited graphics rendition control). 795 erase functions and limited graphics rendition control).
796 796
797 When CONFIG_CFB_CONSOLE is defined, video console is 797 When CONFIG_CFB_CONSOLE is defined, video console is
798 default i/o. Serial console can be forced with 798 default i/o. Serial console can be forced with
799 environment 'console=serial'. 799 environment 'console=serial'.
800 800
801 When CONFIG_SILENT_CONSOLE is defined, all console 801 When CONFIG_SILENT_CONSOLE is defined, all console
802 messages (by U-Boot and Linux!) can be silenced with 802 messages (by U-Boot and Linux!) can be silenced with
803 the "silent" environment variable. See 803 the "silent" environment variable. See
804 doc/README.silent for more information. 804 doc/README.silent for more information.
805 805
806 CONFIG_SYS_CONSOLE_BG_COL: define the backgroundcolor, default 806 CONFIG_SYS_CONSOLE_BG_COL: define the backgroundcolor, default
807 is 0x00. 807 is 0x00.
808 CONFIG_SYS_CONSOLE_FG_COL: define the foregroundcolor, default 808 CONFIG_SYS_CONSOLE_FG_COL: define the foregroundcolor, default
809 is 0xa0. 809 is 0xa0.
810 810
811 - Console Baudrate: 811 - Console Baudrate:
812 CONFIG_BAUDRATE - in bps 812 CONFIG_BAUDRATE - in bps
813 Select one of the baudrates listed in 813 Select one of the baudrates listed in
814 CONFIG_SYS_BAUDRATE_TABLE, see below. 814 CONFIG_SYS_BAUDRATE_TABLE, see below.
815 CONFIG_SYS_BRGCLK_PRESCALE, baudrate prescale 815 CONFIG_SYS_BRGCLK_PRESCALE, baudrate prescale
816 816
817 - Console Rx buffer length 817 - Console Rx buffer length
818 With CONFIG_SYS_SMC_RXBUFLEN it is possible to define 818 With CONFIG_SYS_SMC_RXBUFLEN it is possible to define
819 the maximum receive buffer length for the SMC. 819 the maximum receive buffer length for the SMC.
820 This option is actual only for 82xx and 8xx possible. 820 This option is actual only for 82xx and 8xx possible.
821 If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE 821 If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE
822 must be defined, to setup the maximum idle timeout for 822 must be defined, to setup the maximum idle timeout for
823 the SMC. 823 the SMC.
824 824
825 - Pre-Console Buffer: 825 - Pre-Console Buffer:
826 Prior to the console being initialised (i.e. serial UART 826 Prior to the console being initialised (i.e. serial UART
827 initialised etc) all console output is silently discarded. 827 initialised etc) all console output is silently discarded.
828 Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to 828 Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to
829 buffer any console messages prior to the console being 829 buffer any console messages prior to the console being
830 initialised to a buffer of size CONFIG_PRE_CON_BUF_SZ 830 initialised to a buffer of size CONFIG_PRE_CON_BUF_SZ
831 bytes located at CONFIG_PRE_CON_BUF_ADDR. The buffer is 831 bytes located at CONFIG_PRE_CON_BUF_ADDR. The buffer is
832 a circular buffer, so if more than CONFIG_PRE_CON_BUF_SZ 832 a circular buffer, so if more than CONFIG_PRE_CON_BUF_SZ
833 bytes are output before the console is initialised, the 833 bytes are output before the console is initialised, the
834 earlier bytes are discarded. 834 earlier bytes are discarded.
835 835
836 'Sane' compilers will generate smaller code if 836 'Sane' compilers will generate smaller code if
837 CONFIG_PRE_CON_BUF_SZ is a power of 2 837 CONFIG_PRE_CON_BUF_SZ is a power of 2
838 838
839 - Safe printf() functions 839 - Safe printf() functions
840 Define CONFIG_SYS_VSNPRINTF to compile in safe versions of 840 Define CONFIG_SYS_VSNPRINTF to compile in safe versions of
841 the printf() functions. These are defined in 841 the printf() functions. These are defined in
842 include/vsprintf.h and include snprintf(), vsnprintf() and 842 include/vsprintf.h and include snprintf(), vsnprintf() and
843 so on. Code size increase is approximately 300-500 bytes. 843 so on. Code size increase is approximately 300-500 bytes.
844 If this option is not given then these functions will 844 If this option is not given then these functions will
845 silently discard their buffer size argument - this means 845 silently discard their buffer size argument - this means
846 you are not getting any overflow checking in this case. 846 you are not getting any overflow checking in this case.
847 847
848 - Boot Delay: CONFIG_BOOTDELAY - in seconds 848 - Boot Delay: CONFIG_BOOTDELAY - in seconds
849 Delay before automatically booting the default image; 849 Delay before automatically booting the default image;
850 set to -1 to disable autoboot. 850 set to -1 to disable autoboot.
851 set to -2 to autoboot with no delay and not check for abort 851 set to -2 to autoboot with no delay and not check for abort
852 (even when CONFIG_ZERO_BOOTDELAY_CHECK is defined). 852 (even when CONFIG_ZERO_BOOTDELAY_CHECK is defined).
853 853
854 See doc/README.autoboot for these options that 854 See doc/README.autoboot for these options that
855 work with CONFIG_BOOTDELAY. None are required. 855 work with CONFIG_BOOTDELAY. None are required.
856 CONFIG_BOOT_RETRY_TIME 856 CONFIG_BOOT_RETRY_TIME
857 CONFIG_BOOT_RETRY_MIN 857 CONFIG_BOOT_RETRY_MIN
858 CONFIG_AUTOBOOT_KEYED 858 CONFIG_AUTOBOOT_KEYED
859 CONFIG_AUTOBOOT_PROMPT 859 CONFIG_AUTOBOOT_PROMPT
860 CONFIG_AUTOBOOT_DELAY_STR 860 CONFIG_AUTOBOOT_DELAY_STR
861 CONFIG_AUTOBOOT_STOP_STR 861 CONFIG_AUTOBOOT_STOP_STR
862 CONFIG_AUTOBOOT_DELAY_STR2 862 CONFIG_AUTOBOOT_DELAY_STR2
863 CONFIG_AUTOBOOT_STOP_STR2 863 CONFIG_AUTOBOOT_STOP_STR2
864 CONFIG_ZERO_BOOTDELAY_CHECK 864 CONFIG_ZERO_BOOTDELAY_CHECK
865 CONFIG_RESET_TO_RETRY 865 CONFIG_RESET_TO_RETRY
866 866
867 - Autoboot Command: 867 - Autoboot Command:
868 CONFIG_BOOTCOMMAND 868 CONFIG_BOOTCOMMAND
869 Only needed when CONFIG_BOOTDELAY is enabled; 869 Only needed when CONFIG_BOOTDELAY is enabled;
870 define a command string that is automatically executed 870 define a command string that is automatically executed
871 when no character is read on the console interface 871 when no character is read on the console interface
872 within "Boot Delay" after reset. 872 within "Boot Delay" after reset.
873 873
874 CONFIG_BOOTARGS 874 CONFIG_BOOTARGS
875 This can be used to pass arguments to the bootm 875 This can be used to pass arguments to the bootm
876 command. The value of CONFIG_BOOTARGS goes into the 876 command. The value of CONFIG_BOOTARGS goes into the
877 environment value "bootargs". 877 environment value "bootargs".
878 878
879 CONFIG_RAMBOOT and CONFIG_NFSBOOT 879 CONFIG_RAMBOOT and CONFIG_NFSBOOT
880 The value of these goes into the environment as 880 The value of these goes into the environment as
881 "ramboot" and "nfsboot" respectively, and can be used 881 "ramboot" and "nfsboot" respectively, and can be used
882 as a convenience, when switching between booting from 882 as a convenience, when switching between booting from
883 RAM and NFS. 883 RAM and NFS.
884 884
885 - Bootcount: 885 - Bootcount:
886 CONFIG_BOOTCOUNT_LIMIT 886 CONFIG_BOOTCOUNT_LIMIT
887 Implements a mechanism for detecting a repeating reboot 887 Implements a mechanism for detecting a repeating reboot
888 cycle, see: 888 cycle, see:
889 http://www.denx.de/wiki/view/DULG/UBootBootCountLimit 889 http://www.denx.de/wiki/view/DULG/UBootBootCountLimit
890 890
891 CONFIG_BOOTCOUNT_ENV 891 CONFIG_BOOTCOUNT_ENV
892 If no softreset save registers are found on the hardware 892 If no softreset save registers are found on the hardware
893 "bootcount" is stored in the environment. To prevent a 893 "bootcount" is stored in the environment. To prevent a
894 saveenv on all reboots, the environment variable 894 saveenv on all reboots, the environment variable
895 "upgrade_available" is used. If "upgrade_available" is 895 "upgrade_available" is used. If "upgrade_available" is
896 0, "bootcount" is always 0, if "upgrade_available" is 896 0, "bootcount" is always 0, if "upgrade_available" is
897 1 "bootcount" is incremented in the environment. 897 1 "bootcount" is incremented in the environment.
898 So the Userspace Applikation must set the "upgrade_available" 898 So the Userspace Applikation must set the "upgrade_available"
899 and "bootcount" variable to 0, if a boot was successfully. 899 and "bootcount" variable to 0, if a boot was successfully.
900 900
901 - Pre-Boot Commands: 901 - Pre-Boot Commands:
902 CONFIG_PREBOOT 902 CONFIG_PREBOOT
903 903
904 When this option is #defined, the existence of the 904 When this option is #defined, the existence of the
905 environment variable "preboot" will be checked 905 environment variable "preboot" will be checked
906 immediately before starting the CONFIG_BOOTDELAY 906 immediately before starting the CONFIG_BOOTDELAY
907 countdown and/or running the auto-boot command resp. 907 countdown and/or running the auto-boot command resp.
908 entering interactive mode. 908 entering interactive mode.
909 909
910 This feature is especially useful when "preboot" is 910 This feature is especially useful when "preboot" is
911 automatically generated or modified. For an example 911 automatically generated or modified. For an example
912 see the LWMON board specific code: here "preboot" is 912 see the LWMON board specific code: here "preboot" is
913 modified when the user holds down a certain 913 modified when the user holds down a certain
914 combination of keys on the (special) keyboard when 914 combination of keys on the (special) keyboard when
915 booting the systems 915 booting the systems
916 916
917 - Serial Download Echo Mode: 917 - Serial Download Echo Mode:
918 CONFIG_LOADS_ECHO 918 CONFIG_LOADS_ECHO
919 If defined to 1, all characters received during a 919 If defined to 1, all characters received during a
920 serial download (using the "loads" command) are 920 serial download (using the "loads" command) are
921 echoed back. This might be needed by some terminal 921 echoed back. This might be needed by some terminal
922 emulations (like "cu"), but may as well just take 922 emulations (like "cu"), but may as well just take
923 time on others. This setting #define's the initial 923 time on others. This setting #define's the initial
924 value of the "loads_echo" environment variable. 924 value of the "loads_echo" environment variable.
925 925
926 - Kgdb Serial Baudrate: (if CONFIG_CMD_KGDB is defined) 926 - Kgdb Serial Baudrate: (if CONFIG_CMD_KGDB is defined)
927 CONFIG_KGDB_BAUDRATE 927 CONFIG_KGDB_BAUDRATE
928 Select one of the baudrates listed in 928 Select one of the baudrates listed in
929 CONFIG_SYS_BAUDRATE_TABLE, see below. 929 CONFIG_SYS_BAUDRATE_TABLE, see below.
930 930
931 - Monitor Functions: 931 - Monitor Functions:
932 Monitor commands can be included or excluded 932 Monitor commands can be included or excluded
933 from the build by using the #include files 933 from the build by using the #include files
934 <config_cmd_all.h> and #undef'ing unwanted 934 <config_cmd_all.h> and #undef'ing unwanted
935 commands, or using <config_cmd_default.h> 935 commands, or using <config_cmd_default.h>
936 and augmenting with additional #define's 936 and augmenting with additional #define's
937 for wanted commands. 937 for wanted commands.
938 938
939 The default command configuration includes all commands 939 The default command configuration includes all commands
940 except those marked below with a "*". 940 except those marked below with a "*".
941 941
942 CONFIG_CMD_AES AES 128 CBC encrypt/decrypt 942 CONFIG_CMD_AES AES 128 CBC encrypt/decrypt
943 CONFIG_CMD_ASKENV * ask for env variable 943 CONFIG_CMD_ASKENV * ask for env variable
944 CONFIG_CMD_BDI bdinfo 944 CONFIG_CMD_BDI bdinfo
945 CONFIG_CMD_BEDBUG * Include BedBug Debugger 945 CONFIG_CMD_BEDBUG * Include BedBug Debugger
946 CONFIG_CMD_BMP * BMP support 946 CONFIG_CMD_BMP * BMP support
947 CONFIG_CMD_BSP * Board specific commands 947 CONFIG_CMD_BSP * Board specific commands
948 CONFIG_CMD_BOOTD bootd 948 CONFIG_CMD_BOOTD bootd
949 CONFIG_CMD_CACHE * icache, dcache 949 CONFIG_CMD_CACHE * icache, dcache
950 CONFIG_CMD_CLK * clock command support 950 CONFIG_CMD_CLK * clock command support
951 CONFIG_CMD_CONSOLE coninfo 951 CONFIG_CMD_CONSOLE coninfo
952 CONFIG_CMD_CRC32 * crc32 952 CONFIG_CMD_CRC32 * crc32
953 CONFIG_CMD_DATE * support for RTC, date/time... 953 CONFIG_CMD_DATE * support for RTC, date/time...
954 CONFIG_CMD_DHCP * DHCP support 954 CONFIG_CMD_DHCP * DHCP support
955 CONFIG_CMD_DIAG * Diagnostics 955 CONFIG_CMD_DIAG * Diagnostics
956 CONFIG_CMD_DS4510 * ds4510 I2C gpio commands 956 CONFIG_CMD_DS4510 * ds4510 I2C gpio commands
957 CONFIG_CMD_DS4510_INFO * ds4510 I2C info command 957 CONFIG_CMD_DS4510_INFO * ds4510 I2C info command
958 CONFIG_CMD_DS4510_MEM * ds4510 I2C eeprom/sram commansd 958 CONFIG_CMD_DS4510_MEM * ds4510 I2C eeprom/sram commansd
959 CONFIG_CMD_DS4510_RST * ds4510 I2C rst command 959 CONFIG_CMD_DS4510_RST * ds4510 I2C rst command
960 CONFIG_CMD_DTT * Digital Therm and Thermostat 960 CONFIG_CMD_DTT * Digital Therm and Thermostat
961 CONFIG_CMD_ECHO echo arguments 961 CONFIG_CMD_ECHO echo arguments
962 CONFIG_CMD_EDITENV edit env variable 962 CONFIG_CMD_EDITENV edit env variable
963 CONFIG_CMD_EEPROM * EEPROM read/write support 963 CONFIG_CMD_EEPROM * EEPROM read/write support
964 CONFIG_CMD_ELF * bootelf, bootvx 964 CONFIG_CMD_ELF * bootelf, bootvx
965 CONFIG_CMD_ENV_CALLBACK * display details about env callbacks 965 CONFIG_CMD_ENV_CALLBACK * display details about env callbacks
966 CONFIG_CMD_ENV_FLAGS * display details about env flags 966 CONFIG_CMD_ENV_FLAGS * display details about env flags
967 CONFIG_CMD_ENV_EXISTS * check existence of env variable 967 CONFIG_CMD_ENV_EXISTS * check existence of env variable
968 CONFIG_CMD_EXPORTENV * export the environment 968 CONFIG_CMD_EXPORTENV * export the environment
969 CONFIG_CMD_EXT2 * ext2 command support 969 CONFIG_CMD_EXT2 * ext2 command support
970 CONFIG_CMD_EXT4 * ext4 command support 970 CONFIG_CMD_EXT4 * ext4 command support
971 CONFIG_CMD_FS_GENERIC * filesystem commands (e.g. load, ls) 971 CONFIG_CMD_FS_GENERIC * filesystem commands (e.g. load, ls)
972 that work for multiple fs types 972 that work for multiple fs types
973 CONFIG_CMD_SAVEENV saveenv 973 CONFIG_CMD_SAVEENV saveenv
974 CONFIG_CMD_FDC * Floppy Disk Support 974 CONFIG_CMD_FDC * Floppy Disk Support
975 CONFIG_CMD_FAT * FAT command support 975 CONFIG_CMD_FAT * FAT command support
976 CONFIG_CMD_FLASH flinfo, erase, protect 976 CONFIG_CMD_FLASH flinfo, erase, protect
977 CONFIG_CMD_FPGA FPGA device initialization support 977 CONFIG_CMD_FPGA FPGA device initialization support
978 CONFIG_CMD_FUSE * Device fuse support 978 CONFIG_CMD_FUSE * Device fuse support
979 CONFIG_CMD_GETTIME * Get time since boot 979 CONFIG_CMD_GETTIME * Get time since boot
980 CONFIG_CMD_GO * the 'go' command (exec code) 980 CONFIG_CMD_GO * the 'go' command (exec code)
981 CONFIG_CMD_GREPENV * search environment 981 CONFIG_CMD_GREPENV * search environment
982 CONFIG_CMD_HASH * calculate hash / digest 982 CONFIG_CMD_HASH * calculate hash / digest
983 CONFIG_CMD_HWFLOW * RTS/CTS hw flow control 983 CONFIG_CMD_HWFLOW * RTS/CTS hw flow control
984 CONFIG_CMD_I2C * I2C serial bus support 984 CONFIG_CMD_I2C * I2C serial bus support
985 CONFIG_CMD_IDE * IDE harddisk support 985 CONFIG_CMD_IDE * IDE harddisk support
986 CONFIG_CMD_IMI iminfo 986 CONFIG_CMD_IMI iminfo
987 CONFIG_CMD_IMLS List all images found in NOR flash 987 CONFIG_CMD_IMLS List all images found in NOR flash
988 CONFIG_CMD_IMLS_NAND * List all images found in NAND flash 988 CONFIG_CMD_IMLS_NAND * List all images found in NAND flash
989 CONFIG_CMD_IMMAP * IMMR dump support 989 CONFIG_CMD_IMMAP * IMMR dump support
990 CONFIG_CMD_IMPORTENV * import an environment 990 CONFIG_CMD_IMPORTENV * import an environment
991 CONFIG_CMD_INI * import data from an ini file into the env 991 CONFIG_CMD_INI * import data from an ini file into the env
992 CONFIG_CMD_IRQ * irqinfo 992 CONFIG_CMD_IRQ * irqinfo
993 CONFIG_CMD_ITEST Integer/string test of 2 values 993 CONFIG_CMD_ITEST Integer/string test of 2 values
994 CONFIG_CMD_JFFS2 * JFFS2 Support 994 CONFIG_CMD_JFFS2 * JFFS2 Support
995 CONFIG_CMD_KGDB * kgdb 995 CONFIG_CMD_KGDB * kgdb
996 CONFIG_CMD_LDRINFO * ldrinfo (display Blackfin loader) 996 CONFIG_CMD_LDRINFO * ldrinfo (display Blackfin loader)
997 CONFIG_CMD_LINK_LOCAL * link-local IP address auto-configuration 997 CONFIG_CMD_LINK_LOCAL * link-local IP address auto-configuration
998 (169.254.*.*) 998 (169.254.*.*)
999 CONFIG_CMD_LOADB loadb 999 CONFIG_CMD_LOADB loadb
1000 CONFIG_CMD_LOADS loads 1000 CONFIG_CMD_LOADS loads
1001 CONFIG_CMD_MD5SUM * print md5 message digest 1001 CONFIG_CMD_MD5SUM * print md5 message digest
1002 (requires CONFIG_CMD_MEMORY and CONFIG_MD5) 1002 (requires CONFIG_CMD_MEMORY and CONFIG_MD5)
1003 CONFIG_CMD_MEMINFO * Display detailed memory information 1003 CONFIG_CMD_MEMINFO * Display detailed memory information
1004 CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base, 1004 CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base,
1005 loop, loopw 1005 loop, loopw
1006 CONFIG_CMD_MEMTEST * mtest 1006 CONFIG_CMD_MEMTEST * mtest
1007 CONFIG_CMD_MISC Misc functions like sleep etc 1007 CONFIG_CMD_MISC Misc functions like sleep etc
1008 CONFIG_CMD_MMC * MMC memory mapped support 1008 CONFIG_CMD_MMC * MMC memory mapped support
1009 CONFIG_CMD_MII * MII utility commands 1009 CONFIG_CMD_MII * MII utility commands
1010 CONFIG_CMD_MTDPARTS * MTD partition support 1010 CONFIG_CMD_MTDPARTS * MTD partition support
1011 CONFIG_CMD_NAND * NAND support 1011 CONFIG_CMD_NAND * NAND support
1012 CONFIG_CMD_NET bootp, tftpboot, rarpboot 1012 CONFIG_CMD_NET bootp, tftpboot, rarpboot
1013 CONFIG_CMD_NFS NFS support 1013 CONFIG_CMD_NFS NFS support
1014 CONFIG_CMD_PCA953X * PCA953x I2C gpio commands 1014 CONFIG_CMD_PCA953X * PCA953x I2C gpio commands
1015 CONFIG_CMD_PCA953X_INFO * PCA953x I2C gpio info command 1015 CONFIG_CMD_PCA953X_INFO * PCA953x I2C gpio info command
1016 CONFIG_CMD_PCI * pciinfo 1016 CONFIG_CMD_PCI * pciinfo
1017 CONFIG_CMD_PCMCIA * PCMCIA support 1017 CONFIG_CMD_PCMCIA * PCMCIA support
1018 CONFIG_CMD_PING * send ICMP ECHO_REQUEST to network 1018 CONFIG_CMD_PING * send ICMP ECHO_REQUEST to network
1019 host 1019 host
1020 CONFIG_CMD_PORTIO * Port I/O 1020 CONFIG_CMD_PORTIO * Port I/O
1021 CONFIG_CMD_READ * Read raw data from partition 1021 CONFIG_CMD_READ * Read raw data from partition
1022 CONFIG_CMD_REGINFO * Register dump 1022 CONFIG_CMD_REGINFO * Register dump
1023 CONFIG_CMD_RUN run command in env variable 1023 CONFIG_CMD_RUN run command in env variable
1024 CONFIG_CMD_SANDBOX * sb command to access sandbox features 1024 CONFIG_CMD_SANDBOX * sb command to access sandbox features
1025 CONFIG_CMD_SAVES * save S record dump 1025 CONFIG_CMD_SAVES * save S record dump
1026 CONFIG_CMD_SCSI * SCSI Support 1026 CONFIG_CMD_SCSI * SCSI Support
1027 CONFIG_CMD_SDRAM * print SDRAM configuration information 1027 CONFIG_CMD_SDRAM * print SDRAM configuration information
1028 (requires CONFIG_CMD_I2C) 1028 (requires CONFIG_CMD_I2C)
1029 CONFIG_CMD_SETGETDCR Support for DCR Register access 1029 CONFIG_CMD_SETGETDCR Support for DCR Register access
1030 (4xx only) 1030 (4xx only)
1031 CONFIG_CMD_SF * Read/write/erase SPI NOR flash 1031 CONFIG_CMD_SF * Read/write/erase SPI NOR flash
1032 CONFIG_CMD_SHA1SUM * print sha1 memory digest 1032 CONFIG_CMD_SHA1SUM * print sha1 memory digest
1033 (requires CONFIG_CMD_MEMORY) 1033 (requires CONFIG_CMD_MEMORY)
1034 CONFIG_CMD_SOFTSWITCH * Soft switch setting command for BF60x 1034 CONFIG_CMD_SOFTSWITCH * Soft switch setting command for BF60x
1035 CONFIG_CMD_SOURCE "source" command Support 1035 CONFIG_CMD_SOURCE "source" command Support
1036 CONFIG_CMD_SPI * SPI serial bus support 1036 CONFIG_CMD_SPI * SPI serial bus support
1037 CONFIG_CMD_TFTPSRV * TFTP transfer in server mode 1037 CONFIG_CMD_TFTPSRV * TFTP transfer in server mode
1038 CONFIG_CMD_TFTPPUT * TFTP put command (upload) 1038 CONFIG_CMD_TFTPPUT * TFTP put command (upload)
1039 CONFIG_CMD_TIME * run command and report execution time (ARM specific) 1039 CONFIG_CMD_TIME * run command and report execution time (ARM specific)
1040 CONFIG_CMD_TIMER * access to the system tick timer 1040 CONFIG_CMD_TIMER * access to the system tick timer
1041 CONFIG_CMD_USB * USB support 1041 CONFIG_CMD_USB * USB support
1042 CONFIG_CMD_CDP * Cisco Discover Protocol support 1042 CONFIG_CMD_CDP * Cisco Discover Protocol support
1043 CONFIG_CMD_MFSL * Microblaze FSL support 1043 CONFIG_CMD_MFSL * Microblaze FSL support
1044 CONFIG_CMD_XIMG Load part of Multi Image 1044 CONFIG_CMD_XIMG Load part of Multi Image
1045 CONFIG_CMD_UUID * Generate random UUID or GUID string 1045 CONFIG_CMD_UUID * Generate random UUID or GUID string
1046 1046
1047 EXAMPLE: If you want all functions except of network 1047 EXAMPLE: If you want all functions except of network
1048 support you can write: 1048 support you can write:
1049 1049
1050 #include "config_cmd_all.h" 1050 #include "config_cmd_all.h"
1051 #undef CONFIG_CMD_NET 1051 #undef CONFIG_CMD_NET
1052 1052
1053 Other Commands: 1053 Other Commands:
1054 fdt (flattened device tree) command: CONFIG_OF_LIBFDT 1054 fdt (flattened device tree) command: CONFIG_OF_LIBFDT
1055 1055
1056 Note: Don't enable the "icache" and "dcache" commands 1056 Note: Don't enable the "icache" and "dcache" commands
1057 (configuration option CONFIG_CMD_CACHE) unless you know 1057 (configuration option CONFIG_CMD_CACHE) unless you know
1058 what you (and your U-Boot users) are doing. Data 1058 what you (and your U-Boot users) are doing. Data
1059 cache cannot be enabled on systems like the 8xx or 1059 cache cannot be enabled on systems like the 8xx or
1060 8260 (where accesses to the IMMR region must be 1060 8260 (where accesses to the IMMR region must be
1061 uncached), and it cannot be disabled on all other 1061 uncached), and it cannot be disabled on all other
1062 systems where we (mis-) use the data cache to hold an 1062 systems where we (mis-) use the data cache to hold an
1063 initial stack and some data. 1063 initial stack and some data.
1064 1064
1065 1065
1066 XXX - this list needs to get updated! 1066 XXX - this list needs to get updated!
1067 1067
1068 - Regular expression support: 1068 - Regular expression support:
1069 CONFIG_REGEX 1069 CONFIG_REGEX
1070 If this variable is defined, U-Boot is linked against 1070 If this variable is defined, U-Boot is linked against
1071 the SLRE (Super Light Regular Expression) library, 1071 the SLRE (Super Light Regular Expression) library,
1072 which adds regex support to some commands, as for 1072 which adds regex support to some commands, as for
1073 example "env grep" and "setexpr". 1073 example "env grep" and "setexpr".
1074 1074
1075 - Device tree: 1075 - Device tree:
1076 CONFIG_OF_CONTROL 1076 CONFIG_OF_CONTROL
1077 If this variable is defined, U-Boot will use a device tree 1077 If this variable is defined, U-Boot will use a device tree
1078 to configure its devices, instead of relying on statically 1078 to configure its devices, instead of relying on statically
1079 compiled #defines in the board file. This option is 1079 compiled #defines in the board file. This option is
1080 experimental and only available on a few boards. The device 1080 experimental and only available on a few boards. The device
1081 tree is available in the global data as gd->fdt_blob. 1081 tree is available in the global data as gd->fdt_blob.
1082 1082
1083 U-Boot needs to get its device tree from somewhere. This can 1083 U-Boot needs to get its device tree from somewhere. This can
1084 be done using one of the two options below: 1084 be done using one of the two options below:
1085 1085
1086 CONFIG_OF_EMBED 1086 CONFIG_OF_EMBED
1087 If this variable is defined, U-Boot will embed a device tree 1087 If this variable is defined, U-Boot will embed a device tree
1088 binary in its image. This device tree file should be in the 1088 binary in its image. This device tree file should be in the
1089 board directory and called <soc>-<board>.dts. The binary file 1089 board directory and called <soc>-<board>.dts. The binary file
1090 is then picked up in board_init_f() and made available through 1090 is then picked up in board_init_f() and made available through
1091 the global data structure as gd->blob. 1091 the global data structure as gd->blob.
1092 1092
1093 CONFIG_OF_SEPARATE 1093 CONFIG_OF_SEPARATE
1094 If this variable is defined, U-Boot will build a device tree 1094 If this variable is defined, U-Boot will build a device tree
1095 binary. It will be called u-boot.dtb. Architecture-specific 1095 binary. It will be called u-boot.dtb. Architecture-specific
1096 code will locate it at run-time. Generally this works by: 1096 code will locate it at run-time. Generally this works by:
1097 1097
1098 cat u-boot.bin u-boot.dtb >image.bin 1098 cat u-boot.bin u-boot.dtb >image.bin
1099 1099
1100 and in fact, U-Boot does this for you, creating a file called 1100 and in fact, U-Boot does this for you, creating a file called
1101 u-boot-dtb.bin which is useful in the common case. You can 1101 u-boot-dtb.bin which is useful in the common case. You can
1102 still use the individual files if you need something more 1102 still use the individual files if you need something more
1103 exotic. 1103 exotic.
1104 1104
1105 - Watchdog: 1105 - Watchdog:
1106 CONFIG_WATCHDOG 1106 CONFIG_WATCHDOG
1107 If this variable is defined, it enables watchdog 1107 If this variable is defined, it enables watchdog
1108 support for the SoC. There must be support in the SoC 1108 support for the SoC. There must be support in the SoC
1109 specific code for a watchdog. For the 8xx and 8260 1109 specific code for a watchdog. For the 8xx and 8260
1110 CPUs, the SIU Watchdog feature is enabled in the SYPCR 1110 CPUs, the SIU Watchdog feature is enabled in the SYPCR
1111 register. When supported for a specific SoC is 1111 register. When supported for a specific SoC is
1112 available, then no further board specific code should 1112 available, then no further board specific code should
1113 be needed to use it. 1113 be needed to use it.
1114 1114
1115 CONFIG_HW_WATCHDOG 1115 CONFIG_HW_WATCHDOG
1116 When using a watchdog circuitry external to the used 1116 When using a watchdog circuitry external to the used
1117 SoC, then define this variable and provide board 1117 SoC, then define this variable and provide board
1118 specific code for the "hw_watchdog_reset" function. 1118 specific code for the "hw_watchdog_reset" function.
1119 1119
1120 - U-Boot Version: 1120 - U-Boot Version:
1121 CONFIG_VERSION_VARIABLE 1121 CONFIG_VERSION_VARIABLE
1122 If this variable is defined, an environment variable 1122 If this variable is defined, an environment variable
1123 named "ver" is created by U-Boot showing the U-Boot 1123 named "ver" is created by U-Boot showing the U-Boot
1124 version as printed by the "version" command. 1124 version as printed by the "version" command.
1125 Any change to this variable will be reverted at the 1125 Any change to this variable will be reverted at the
1126 next reset. 1126 next reset.
1127 1127
1128 - Real-Time Clock: 1128 - Real-Time Clock:
1129 1129
1130 When CONFIG_CMD_DATE is selected, the type of the RTC 1130 When CONFIG_CMD_DATE is selected, the type of the RTC
1131 has to be selected, too. Define exactly one of the 1131 has to be selected, too. Define exactly one of the
1132 following options: 1132 following options:
1133 1133
1134 CONFIG_RTC_MPC8xx - use internal RTC of MPC8xx 1134 CONFIG_RTC_MPC8xx - use internal RTC of MPC8xx
1135 CONFIG_RTC_PCF8563 - use Philips PCF8563 RTC 1135 CONFIG_RTC_PCF8563 - use Philips PCF8563 RTC
1136 CONFIG_RTC_MC13XXX - use MC13783 or MC13892 RTC 1136 CONFIG_RTC_MC13XXX - use MC13783 or MC13892 RTC
1137 CONFIG_RTC_MC146818 - use MC146818 RTC 1137 CONFIG_RTC_MC146818 - use MC146818 RTC
1138 CONFIG_RTC_DS1307 - use Maxim, Inc. DS1307 RTC 1138 CONFIG_RTC_DS1307 - use Maxim, Inc. DS1307 RTC
1139 CONFIG_RTC_DS1337 - use Maxim, Inc. DS1337 RTC 1139 CONFIG_RTC_DS1337 - use Maxim, Inc. DS1337 RTC
1140 CONFIG_RTC_DS1338 - use Maxim, Inc. DS1338 RTC 1140 CONFIG_RTC_DS1338 - use Maxim, Inc. DS1338 RTC
1141 CONFIG_RTC_DS164x - use Dallas DS164x RTC 1141 CONFIG_RTC_DS164x - use Dallas DS164x RTC
1142 CONFIG_RTC_ISL1208 - use Intersil ISL1208 RTC 1142 CONFIG_RTC_ISL1208 - use Intersil ISL1208 RTC
1143 CONFIG_RTC_MAX6900 - use Maxim, Inc. MAX6900 RTC 1143 CONFIG_RTC_MAX6900 - use Maxim, Inc. MAX6900 RTC
1144 CONFIG_SYS_RTC_DS1337_NOOSC - Turn off the OSC output for DS1337 1144 CONFIG_SYS_RTC_DS1337_NOOSC - Turn off the OSC output for DS1337
1145 CONFIG_SYS_RV3029_TCR - enable trickle charger on 1145 CONFIG_SYS_RV3029_TCR - enable trickle charger on
1146 RV3029 RTC. 1146 RV3029 RTC.
1147 1147
1148 Note that if the RTC uses I2C, then the I2C interface 1148 Note that if the RTC uses I2C, then the I2C interface
1149 must also be configured. See I2C Support, below. 1149 must also be configured. See I2C Support, below.
1150 1150
1151 - GPIO Support: 1151 - GPIO Support:
1152 CONFIG_PCA953X - use NXP's PCA953X series I2C GPIO 1152 CONFIG_PCA953X - use NXP's PCA953X series I2C GPIO
1153 1153
1154 The CONFIG_SYS_I2C_PCA953X_WIDTH option specifies a list of 1154 The CONFIG_SYS_I2C_PCA953X_WIDTH option specifies a list of
1155 chip-ngpio pairs that tell the PCA953X driver the number of 1155 chip-ngpio pairs that tell the PCA953X driver the number of
1156 pins supported by a particular chip. 1156 pins supported by a particular chip.
1157 1157
1158 Note that if the GPIO device uses I2C, then the I2C interface 1158 Note that if the GPIO device uses I2C, then the I2C interface
1159 must also be configured. See I2C Support, below. 1159 must also be configured. See I2C Support, below.
1160 1160
1161 - Timestamp Support: 1161 - Timestamp Support:
1162 1162
1163 When CONFIG_TIMESTAMP is selected, the timestamp 1163 When CONFIG_TIMESTAMP is selected, the timestamp
1164 (date and time) of an image is printed by image 1164 (date and time) of an image is printed by image
1165 commands like bootm or iminfo. This option is 1165 commands like bootm or iminfo. This option is
1166 automatically enabled when you select CONFIG_CMD_DATE . 1166 automatically enabled when you select CONFIG_CMD_DATE .
1167 1167
1168 - Partition Labels (disklabels) Supported: 1168 - Partition Labels (disklabels) Supported:
1169 Zero or more of the following: 1169 Zero or more of the following:
1170 CONFIG_MAC_PARTITION Apple's MacOS partition table. 1170 CONFIG_MAC_PARTITION Apple's MacOS partition table.
1171 CONFIG_DOS_PARTITION MS Dos partition table, traditional on the 1171 CONFIG_DOS_PARTITION MS Dos partition table, traditional on the
1172 Intel architecture, USB sticks, etc. 1172 Intel architecture, USB sticks, etc.
1173 CONFIG_ISO_PARTITION ISO partition table, used on CDROM etc. 1173 CONFIG_ISO_PARTITION ISO partition table, used on CDROM etc.
1174 CONFIG_EFI_PARTITION GPT partition table, common when EFI is the 1174 CONFIG_EFI_PARTITION GPT partition table, common when EFI is the
1175 bootloader. Note 2TB partition limit; see 1175 bootloader. Note 2TB partition limit; see
1176 disk/part_efi.c 1176 disk/part_efi.c
1177 CONFIG_MTD_PARTITIONS Memory Technology Device partition table. 1177 CONFIG_MTD_PARTITIONS Memory Technology Device partition table.
1178 1178
1179 If IDE or SCSI support is enabled (CONFIG_CMD_IDE or 1179 If IDE or SCSI support is enabled (CONFIG_CMD_IDE or
1180 CONFIG_CMD_SCSI) you must configure support for at 1180 CONFIG_CMD_SCSI) you must configure support for at
1181 least one non-MTD partition type as well. 1181 least one non-MTD partition type as well.
1182 1182
1183 - IDE Reset method: 1183 - IDE Reset method:
1184 CONFIG_IDE_RESET_ROUTINE - this is defined in several 1184 CONFIG_IDE_RESET_ROUTINE - this is defined in several
1185 board configurations files but used nowhere! 1185 board configurations files but used nowhere!
1186 1186
1187 CONFIG_IDE_RESET - is this is defined, IDE Reset will 1187 CONFIG_IDE_RESET - is this is defined, IDE Reset will
1188 be performed by calling the function 1188 be performed by calling the function
1189 ide_set_reset(int reset) 1189 ide_set_reset(int reset)
1190 which has to be defined in a board specific file 1190 which has to be defined in a board specific file
1191 1191
1192 - ATAPI Support: 1192 - ATAPI Support:
1193 CONFIG_ATAPI 1193 CONFIG_ATAPI
1194 1194
1195 Set this to enable ATAPI support. 1195 Set this to enable ATAPI support.
1196 1196
1197 - LBA48 Support 1197 - LBA48 Support
1198 CONFIG_LBA48 1198 CONFIG_LBA48
1199 1199
1200 Set this to enable support for disks larger than 137GB 1200 Set this to enable support for disks larger than 137GB
1201 Also look at CONFIG_SYS_64BIT_LBA. 1201 Also look at CONFIG_SYS_64BIT_LBA.
1202 Whithout these , LBA48 support uses 32bit variables and will 'only' 1202 Whithout these , LBA48 support uses 32bit variables and will 'only'
1203 support disks up to 2.1TB. 1203 support disks up to 2.1TB.
1204 1204
1205 CONFIG_SYS_64BIT_LBA: 1205 CONFIG_SYS_64BIT_LBA:
1206 When enabled, makes the IDE subsystem use 64bit sector addresses. 1206 When enabled, makes the IDE subsystem use 64bit sector addresses.
1207 Default is 32bit. 1207 Default is 32bit.
1208 1208
1209 - SCSI Support: 1209 - SCSI Support:
1210 At the moment only there is only support for the 1210 At the moment only there is only support for the
1211 SYM53C8XX SCSI controller; define 1211 SYM53C8XX SCSI controller; define
1212 CONFIG_SCSI_SYM53C8XX to enable it. 1212 CONFIG_SCSI_SYM53C8XX to enable it.
1213 1213
1214 CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and 1214 CONFIG_SYS_SCSI_MAX_LUN [8], CONFIG_SYS_SCSI_MAX_SCSI_ID [7] and
1215 CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID * 1215 CONFIG_SYS_SCSI_MAX_DEVICE [CONFIG_SYS_SCSI_MAX_SCSI_ID *
1216 CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the 1216 CONFIG_SYS_SCSI_MAX_LUN] can be adjusted to define the
1217 maximum numbers of LUNs, SCSI ID's and target 1217 maximum numbers of LUNs, SCSI ID's and target
1218 devices. 1218 devices.
1219 CONFIG_SYS_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz) 1219 CONFIG_SYS_SCSI_SYM53C8XX_CCF to fix clock timing (80Mhz)
1220 1220
1221 The environment variable 'scsidevs' is set to the number of 1221 The environment variable 'scsidevs' is set to the number of
1222 SCSI devices found during the last scan. 1222 SCSI devices found during the last scan.
1223 1223
1224 - NETWORK Support (PCI): 1224 - NETWORK Support (PCI):
1225 CONFIG_E1000 1225 CONFIG_E1000
1226 Support for Intel 8254x/8257x gigabit chips. 1226 Support for Intel 8254x/8257x gigabit chips.
1227 1227
1228 CONFIG_E1000_SPI 1228 CONFIG_E1000_SPI
1229 Utility code for direct access to the SPI bus on Intel 8257x. 1229 Utility code for direct access to the SPI bus on Intel 8257x.
1230 This does not do anything useful unless you set at least one 1230 This does not do anything useful unless you set at least one
1231 of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC. 1231 of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC.
1232 1232
1233 CONFIG_E1000_SPI_GENERIC 1233 CONFIG_E1000_SPI_GENERIC
1234 Allow generic access to the SPI bus on the Intel 8257x, for 1234 Allow generic access to the SPI bus on the Intel 8257x, for
1235 example with the "sspi" command. 1235 example with the "sspi" command.
1236 1236
1237 CONFIG_CMD_E1000 1237 CONFIG_CMD_E1000
1238 Management command for E1000 devices. When used on devices 1238 Management command for E1000 devices. When used on devices
1239 with SPI support you can reprogram the EEPROM from U-Boot. 1239 with SPI support you can reprogram the EEPROM from U-Boot.
1240 1240
1241 CONFIG_E1000_FALLBACK_MAC 1241 CONFIG_E1000_FALLBACK_MAC
1242 default MAC for empty EEPROM after production. 1242 default MAC for empty EEPROM after production.
1243 1243
1244 CONFIG_EEPRO100 1244 CONFIG_EEPRO100
1245 Support for Intel 82557/82559/82559ER chips. 1245 Support for Intel 82557/82559/82559ER chips.
1246 Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM 1246 Optional CONFIG_EEPRO100_SROM_WRITE enables EEPROM
1247 write routine for first time initialisation. 1247 write routine for first time initialisation.
1248 1248
1249 CONFIG_TULIP 1249 CONFIG_TULIP
1250 Support for Digital 2114x chips. 1250 Support for Digital 2114x chips.
1251 Optional CONFIG_TULIP_SELECT_MEDIA for board specific 1251 Optional CONFIG_TULIP_SELECT_MEDIA for board specific
1252 modem chip initialisation (KS8761/QS6611). 1252 modem chip initialisation (KS8761/QS6611).
1253 1253
1254 CONFIG_NATSEMI 1254 CONFIG_NATSEMI
1255 Support for National dp83815 chips. 1255 Support for National dp83815 chips.
1256 1256
1257 CONFIG_NS8382X 1257 CONFIG_NS8382X
1258 Support for National dp8382[01] gigabit chips. 1258 Support for National dp8382[01] gigabit chips.
1259 1259
1260 - NETWORK Support (other): 1260 - NETWORK Support (other):
1261 1261
1262 CONFIG_DRIVER_AT91EMAC 1262 CONFIG_DRIVER_AT91EMAC
1263 Support for AT91RM9200 EMAC. 1263 Support for AT91RM9200 EMAC.
1264 1264
1265 CONFIG_RMII 1265 CONFIG_RMII
1266 Define this to use reduced MII inteface 1266 Define this to use reduced MII inteface
1267 1267
1268 CONFIG_DRIVER_AT91EMAC_QUIET 1268 CONFIG_DRIVER_AT91EMAC_QUIET
1269 If this defined, the driver is quiet. 1269 If this defined, the driver is quiet.
1270 The driver doen't show link status messages. 1270 The driver doen't show link status messages.
1271 1271
1272 CONFIG_CALXEDA_XGMAC 1272 CONFIG_CALXEDA_XGMAC
1273 Support for the Calxeda XGMAC device 1273 Support for the Calxeda XGMAC device
1274 1274
1275 CONFIG_LAN91C96 1275 CONFIG_LAN91C96
1276 Support for SMSC's LAN91C96 chips. 1276 Support for SMSC's LAN91C96 chips.
1277 1277
1278 CONFIG_LAN91C96_BASE 1278 CONFIG_LAN91C96_BASE
1279 Define this to hold the physical address 1279 Define this to hold the physical address
1280 of the LAN91C96's I/O space 1280 of the LAN91C96's I/O space
1281 1281
1282 CONFIG_LAN91C96_USE_32_BIT 1282 CONFIG_LAN91C96_USE_32_BIT
1283 Define this to enable 32 bit addressing 1283 Define this to enable 32 bit addressing
1284 1284
1285 CONFIG_SMC91111 1285 CONFIG_SMC91111
1286 Support for SMSC's LAN91C111 chip 1286 Support for SMSC's LAN91C111 chip
1287 1287
1288 CONFIG_SMC91111_BASE 1288 CONFIG_SMC91111_BASE
1289 Define this to hold the physical address 1289 Define this to hold the physical address
1290 of the device (I/O space) 1290 of the device (I/O space)
1291 1291
1292 CONFIG_SMC_USE_32_BIT 1292 CONFIG_SMC_USE_32_BIT
1293 Define this if data bus is 32 bits 1293 Define this if data bus is 32 bits
1294 1294
1295 CONFIG_SMC_USE_IOFUNCS 1295 CONFIG_SMC_USE_IOFUNCS
1296 Define this to use i/o functions instead of macros 1296 Define this to use i/o functions instead of macros
1297 (some hardware wont work with macros) 1297 (some hardware wont work with macros)
1298 1298
1299 CONFIG_DRIVER_TI_EMAC 1299 CONFIG_DRIVER_TI_EMAC
1300 Support for davinci emac 1300 Support for davinci emac
1301 1301
1302 CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT 1302 CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT
1303 Define this if you have more then 3 PHYs. 1303 Define this if you have more then 3 PHYs.
1304 1304
1305 CONFIG_FTGMAC100 1305 CONFIG_FTGMAC100
1306 Support for Faraday's FTGMAC100 Gigabit SoC Ethernet 1306 Support for Faraday's FTGMAC100 Gigabit SoC Ethernet
1307 1307
1308 CONFIG_FTGMAC100_EGIGA 1308 CONFIG_FTGMAC100_EGIGA
1309 Define this to use GE link update with gigabit PHY. 1309 Define this to use GE link update with gigabit PHY.
1310 Define this if FTGMAC100 is connected to gigabit PHY. 1310 Define this if FTGMAC100 is connected to gigabit PHY.
1311 If your system has 10/100 PHY only, it might not occur 1311 If your system has 10/100 PHY only, it might not occur
1312 wrong behavior. Because PHY usually return timeout or 1312 wrong behavior. Because PHY usually return timeout or
1313 useless data when polling gigabit status and gigabit 1313 useless data when polling gigabit status and gigabit
1314 control registers. This behavior won't affect the 1314 control registers. This behavior won't affect the
1315 correctnessof 10/100 link speed update. 1315 correctnessof 10/100 link speed update.
1316 1316
1317 CONFIG_SMC911X 1317 CONFIG_SMC911X
1318 Support for SMSC's LAN911x and LAN921x chips 1318 Support for SMSC's LAN911x and LAN921x chips
1319 1319
1320 CONFIG_SMC911X_BASE 1320 CONFIG_SMC911X_BASE
1321 Define this to hold the physical address 1321 Define this to hold the physical address
1322 of the device (I/O space) 1322 of the device (I/O space)
1323 1323
1324 CONFIG_SMC911X_32_BIT 1324 CONFIG_SMC911X_32_BIT
1325 Define this if data bus is 32 bits 1325 Define this if data bus is 32 bits
1326 1326
1327 CONFIG_SMC911X_16_BIT 1327 CONFIG_SMC911X_16_BIT
1328 Define this if data bus is 16 bits. If your processor 1328 Define this if data bus is 16 bits. If your processor
1329 automatically converts one 32 bit word to two 16 bit 1329 automatically converts one 32 bit word to two 16 bit
1330 words you may also try CONFIG_SMC911X_32_BIT. 1330 words you may also try CONFIG_SMC911X_32_BIT.
1331 1331
1332 CONFIG_SH_ETHER 1332 CONFIG_SH_ETHER
1333 Support for Renesas on-chip Ethernet controller 1333 Support for Renesas on-chip Ethernet controller
1334 1334
1335 CONFIG_SH_ETHER_USE_PORT 1335 CONFIG_SH_ETHER_USE_PORT
1336 Define the number of ports to be used 1336 Define the number of ports to be used
1337 1337
1338 CONFIG_SH_ETHER_PHY_ADDR 1338 CONFIG_SH_ETHER_PHY_ADDR
1339 Define the ETH PHY's address 1339 Define the ETH PHY's address
1340 1340
1341 CONFIG_SH_ETHER_CACHE_WRITEBACK 1341 CONFIG_SH_ETHER_CACHE_WRITEBACK
1342 If this option is set, the driver enables cache flush. 1342 If this option is set, the driver enables cache flush.
1343 1343
1344 - TPM Support: 1344 - TPM Support:
1345 CONFIG_TPM 1345 CONFIG_TPM
1346 Support TPM devices. 1346 Support TPM devices.
1347 1347
1348 CONFIG_TPM_TIS_I2C 1348 CONFIG_TPM_TIS_I2C
1349 Support for i2c bus TPM devices. Only one device 1349 Support for i2c bus TPM devices. Only one device
1350 per system is supported at this time. 1350 per system is supported at this time.
1351 1351
1352 CONFIG_TPM_TIS_I2C_BUS_NUMBER 1352 CONFIG_TPM_TIS_I2C_BUS_NUMBER
1353 Define the the i2c bus number for the TPM device 1353 Define the the i2c bus number for the TPM device
1354 1354
1355 CONFIG_TPM_TIS_I2C_SLAVE_ADDRESS 1355 CONFIG_TPM_TIS_I2C_SLAVE_ADDRESS
1356 Define the TPM's address on the i2c bus 1356 Define the TPM's address on the i2c bus
1357 1357
1358 CONFIG_TPM_TIS_I2C_BURST_LIMITATION 1358 CONFIG_TPM_TIS_I2C_BURST_LIMITATION
1359 Define the burst count bytes upper limit 1359 Define the burst count bytes upper limit
1360 1360
1361 CONFIG_TPM_ATMEL_TWI 1361 CONFIG_TPM_ATMEL_TWI
1362 Support for Atmel TWI TPM device. Requires I2C support. 1362 Support for Atmel TWI TPM device. Requires I2C support.
1363 1363
1364 CONFIG_TPM_TIS_LPC 1364 CONFIG_TPM_TIS_LPC
1365 Support for generic parallel port TPM devices. Only one device 1365 Support for generic parallel port TPM devices. Only one device
1366 per system is supported at this time. 1366 per system is supported at this time.
1367 1367
1368 CONFIG_TPM_TIS_BASE_ADDRESS 1368 CONFIG_TPM_TIS_BASE_ADDRESS
1369 Base address where the generic TPM device is mapped 1369 Base address where the generic TPM device is mapped
1370 to. Contemporary x86 systems usually map it at 1370 to. Contemporary x86 systems usually map it at
1371 0xfed40000. 1371 0xfed40000.
1372 1372
1373 CONFIG_CMD_TPM 1373 CONFIG_CMD_TPM
1374 Add tpm monitor functions. 1374 Add tpm monitor functions.
1375 Requires CONFIG_TPM. If CONFIG_TPM_AUTH_SESSIONS is set, also 1375 Requires CONFIG_TPM. If CONFIG_TPM_AUTH_SESSIONS is set, also
1376 provides monitor access to authorized functions. 1376 provides monitor access to authorized functions.
1377 1377
1378 CONFIG_TPM 1378 CONFIG_TPM
1379 Define this to enable the TPM support library which provides 1379 Define this to enable the TPM support library which provides
1380 functional interfaces to some TPM commands. 1380 functional interfaces to some TPM commands.
1381 Requires support for a TPM device. 1381 Requires support for a TPM device.
1382 1382
1383 CONFIG_TPM_AUTH_SESSIONS 1383 CONFIG_TPM_AUTH_SESSIONS
1384 Define this to enable authorized functions in the TPM library. 1384 Define this to enable authorized functions in the TPM library.
1385 Requires CONFIG_TPM and CONFIG_SHA1. 1385 Requires CONFIG_TPM and CONFIG_SHA1.
1386 1386
1387 - USB Support: 1387 - USB Support:
1388 At the moment only the UHCI host controller is 1388 At the moment only the UHCI host controller is
1389 supported (PIP405, MIP405, MPC5200); define 1389 supported (PIP405, MIP405, MPC5200); define
1390 CONFIG_USB_UHCI to enable it. 1390 CONFIG_USB_UHCI to enable it.
1391 define CONFIG_USB_KEYBOARD to enable the USB Keyboard 1391 define CONFIG_USB_KEYBOARD to enable the USB Keyboard
1392 and define CONFIG_USB_STORAGE to enable the USB 1392 and define CONFIG_USB_STORAGE to enable the USB
1393 storage devices. 1393 storage devices.
1394 Note: 1394 Note:
1395 Supported are USB Keyboards and USB Floppy drives 1395 Supported are USB Keyboards and USB Floppy drives
1396 (TEAC FD-05PUB). 1396 (TEAC FD-05PUB).
1397 MPC5200 USB requires additional defines: 1397 MPC5200 USB requires additional defines:
1398 CONFIG_USB_CLOCK 1398 CONFIG_USB_CLOCK
1399 for 528 MHz Clock: 0x0001bbbb 1399 for 528 MHz Clock: 0x0001bbbb
1400 CONFIG_PSC3_USB 1400 CONFIG_PSC3_USB
1401 for USB on PSC3 1401 for USB on PSC3
1402 CONFIG_USB_CONFIG 1402 CONFIG_USB_CONFIG
1403 for differential drivers: 0x00001000 1403 for differential drivers: 0x00001000
1404 for single ended drivers: 0x00005000 1404 for single ended drivers: 0x00005000
1405 for differential drivers on PSC3: 0x00000100 1405 for differential drivers on PSC3: 0x00000100
1406 for single ended drivers on PSC3: 0x00004100 1406 for single ended drivers on PSC3: 0x00004100
1407 CONFIG_SYS_USB_EVENT_POLL 1407 CONFIG_SYS_USB_EVENT_POLL
1408 May be defined to allow interrupt polling 1408 May be defined to allow interrupt polling
1409 instead of using asynchronous interrupts 1409 instead of using asynchronous interrupts
1410 1410
1411 CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the 1411 CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
1412 txfilltuning field in the EHCI controller on reset. 1412 txfilltuning field in the EHCI controller on reset.
1413 1413
1414 CONFIG_USB_HUB_MIN_POWER_ON_DELAY defines the minimum 1414 CONFIG_USB_HUB_MIN_POWER_ON_DELAY defines the minimum
1415 interval for usb hub power-on delay.(minimum 100msec) 1415 interval for usb hub power-on delay.(minimum 100msec)
1416 1416
1417 - USB Device: 1417 - USB Device:
1418 Define the below if you wish to use the USB console. 1418 Define the below if you wish to use the USB console.
1419 Once firmware is rebuilt from a serial console issue the 1419 Once firmware is rebuilt from a serial console issue the
1420 command "setenv stdin usbtty; setenv stdout usbtty" and 1420 command "setenv stdin usbtty; setenv stdout usbtty" and
1421 attach your USB cable. The Unix command "dmesg" should print 1421 attach your USB cable. The Unix command "dmesg" should print
1422 it has found a new device. The environment variable usbtty 1422 it has found a new device. The environment variable usbtty
1423 can be set to gserial or cdc_acm to enable your device to 1423 can be set to gserial or cdc_acm to enable your device to
1424 appear to a USB host as a Linux gserial device or a 1424 appear to a USB host as a Linux gserial device or a
1425 Common Device Class Abstract Control Model serial device. 1425 Common Device Class Abstract Control Model serial device.
1426 If you select usbtty = gserial you should be able to enumerate 1426 If you select usbtty = gserial you should be able to enumerate
1427 a Linux host by 1427 a Linux host by
1428 # modprobe usbserial vendor=0xVendorID product=0xProductID 1428 # modprobe usbserial vendor=0xVendorID product=0xProductID
1429 else if using cdc_acm, simply setting the environment 1429 else if using cdc_acm, simply setting the environment
1430 variable usbtty to be cdc_acm should suffice. The following 1430 variable usbtty to be cdc_acm should suffice. The following
1431 might be defined in YourBoardName.h 1431 might be defined in YourBoardName.h
1432 1432
1433 CONFIG_USB_DEVICE 1433 CONFIG_USB_DEVICE
1434 Define this to build a UDC device 1434 Define this to build a UDC device
1435 1435
1436 CONFIG_USB_TTY 1436 CONFIG_USB_TTY
1437 Define this to have a tty type of device available to 1437 Define this to have a tty type of device available to
1438 talk to the UDC device 1438 talk to the UDC device
1439 1439
1440 CONFIG_USBD_HS 1440 CONFIG_USBD_HS
1441 Define this to enable the high speed support for usb 1441 Define this to enable the high speed support for usb
1442 device and usbtty. If this feature is enabled, a routine 1442 device and usbtty. If this feature is enabled, a routine
1443 int is_usbd_high_speed(void) 1443 int is_usbd_high_speed(void)
1444 also needs to be defined by the driver to dynamically poll 1444 also needs to be defined by the driver to dynamically poll
1445 whether the enumeration has succeded at high speed or full 1445 whether the enumeration has succeded at high speed or full
1446 speed. 1446 speed.
1447 1447
1448 CONFIG_SYS_CONSOLE_IS_IN_ENV 1448 CONFIG_SYS_CONSOLE_IS_IN_ENV
1449 Define this if you want stdin, stdout &/or stderr to 1449 Define this if you want stdin, stdout &/or stderr to
1450 be set to usbtty. 1450 be set to usbtty.
1451 1451
1452 mpc8xx: 1452 mpc8xx:
1453 CONFIG_SYS_USB_EXTC_CLK 0xBLAH 1453 CONFIG_SYS_USB_EXTC_CLK 0xBLAH
1454 Derive USB clock from external clock "blah" 1454 Derive USB clock from external clock "blah"
1455 - CONFIG_SYS_USB_EXTC_CLK 0x02 1455 - CONFIG_SYS_USB_EXTC_CLK 0x02
1456 1456
1457 CONFIG_SYS_USB_BRG_CLK 0xBLAH 1457 CONFIG_SYS_USB_BRG_CLK 0xBLAH
1458 Derive USB clock from brgclk 1458 Derive USB clock from brgclk
1459 - CONFIG_SYS_USB_BRG_CLK 0x04 1459 - CONFIG_SYS_USB_BRG_CLK 0x04
1460 1460
1461 If you have a USB-IF assigned VendorID then you may wish to 1461 If you have a USB-IF assigned VendorID then you may wish to
1462 define your own vendor specific values either in BoardName.h 1462 define your own vendor specific values either in BoardName.h
1463 or directly in usbd_vendor_info.h. If you don't define 1463 or directly in usbd_vendor_info.h. If you don't define
1464 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME, 1464 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME,
1465 CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Boot 1465 CONFIG_USBD_VENDORID and CONFIG_USBD_PRODUCTID, then U-Boot
1466 should pretend to be a Linux device to it's target host. 1466 should pretend to be a Linux device to it's target host.
1467 1467
1468 CONFIG_USBD_MANUFACTURER 1468 CONFIG_USBD_MANUFACTURER
1469 Define this string as the name of your company for 1469 Define this string as the name of your company for
1470 - CONFIG_USBD_MANUFACTURER "my company" 1470 - CONFIG_USBD_MANUFACTURER "my company"
1471 1471
1472 CONFIG_USBD_PRODUCT_NAME 1472 CONFIG_USBD_PRODUCT_NAME
1473 Define this string as the name of your product 1473 Define this string as the name of your product
1474 - CONFIG_USBD_PRODUCT_NAME "acme usb device" 1474 - CONFIG_USBD_PRODUCT_NAME "acme usb device"
1475 1475
1476 CONFIG_USBD_VENDORID 1476 CONFIG_USBD_VENDORID
1477 Define this as your assigned Vendor ID from the USB 1477 Define this as your assigned Vendor ID from the USB
1478 Implementors Forum. This *must* be a genuine Vendor ID 1478 Implementors Forum. This *must* be a genuine Vendor ID
1479 to avoid polluting the USB namespace. 1479 to avoid polluting the USB namespace.
1480 - CONFIG_USBD_VENDORID 0xFFFF 1480 - CONFIG_USBD_VENDORID 0xFFFF
1481 1481
1482 CONFIG_USBD_PRODUCTID 1482 CONFIG_USBD_PRODUCTID
1483 Define this as the unique Product ID 1483 Define this as the unique Product ID
1484 for your device 1484 for your device
1485 - CONFIG_USBD_PRODUCTID 0xFFFF 1485 - CONFIG_USBD_PRODUCTID 0xFFFF
1486 1486
1487 Some USB device drivers may need to check USB cable attachment.
1488 In this case you can enable following config in BoardName.h:
1489 CONFIG_USB_CABLE_CHECK
1490 This enables function definition:
1491 - usb_cable_connected() in include/usb.h
1492 Implementation of this function is board-specific.
1493
1494 - ULPI Layer Support: 1487 - ULPI Layer Support:
1495 The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via 1488 The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via
1496 the generic ULPI layer. The generic layer accesses the ULPI PHY 1489 the generic ULPI layer. The generic layer accesses the ULPI PHY
1497 via the platform viewport, so you need both the genric layer and 1490 via the platform viewport, so you need both the genric layer and
1498 the viewport enabled. Currently only Chipidea/ARC based 1491 the viewport enabled. Currently only Chipidea/ARC based
1499 viewport is supported. 1492 viewport is supported.
1500 To enable the ULPI layer support, define CONFIG_USB_ULPI and 1493 To enable the ULPI layer support, define CONFIG_USB_ULPI and
1501 CONFIG_USB_ULPI_VIEWPORT in your board configuration file. 1494 CONFIG_USB_ULPI_VIEWPORT in your board configuration file.
1502 If your ULPI phy needs a different reference clock than the 1495 If your ULPI phy needs a different reference clock than the
1503 standard 24 MHz then you have to define CONFIG_ULPI_REF_CLK to 1496 standard 24 MHz then you have to define CONFIG_ULPI_REF_CLK to
1504 the appropriate value in Hz. 1497 the appropriate value in Hz.
1505 1498
1506 - MMC Support: 1499 - MMC Support:
1507 The MMC controller on the Intel PXA is supported. To 1500 The MMC controller on the Intel PXA is supported. To
1508 enable this define CONFIG_MMC. The MMC can be 1501 enable this define CONFIG_MMC. The MMC can be
1509 accessed from the boot prompt by mapping the device 1502 accessed from the boot prompt by mapping the device
1510 to physical memory similar to flash. Command line is 1503 to physical memory similar to flash. Command line is
1511 enabled with CONFIG_CMD_MMC. The MMC driver also works with 1504 enabled with CONFIG_CMD_MMC. The MMC driver also works with
1512 the FAT fs. This is enabled with CONFIG_CMD_FAT. 1505 the FAT fs. This is enabled with CONFIG_CMD_FAT.
1513 1506
1514 CONFIG_SH_MMCIF 1507 CONFIG_SH_MMCIF
1515 Support for Renesas on-chip MMCIF controller 1508 Support for Renesas on-chip MMCIF controller
1516 1509
1517 CONFIG_SH_MMCIF_ADDR 1510 CONFIG_SH_MMCIF_ADDR
1518 Define the base address of MMCIF registers 1511 Define the base address of MMCIF registers
1519 1512
1520 CONFIG_SH_MMCIF_CLK 1513 CONFIG_SH_MMCIF_CLK
1521 Define the clock frequency for MMCIF 1514 Define the clock frequency for MMCIF
1522 1515
1523 - USB Device Firmware Update (DFU) class support: 1516 - USB Device Firmware Update (DFU) class support:
1524 CONFIG_DFU_FUNCTION 1517 CONFIG_DFU_FUNCTION
1525 This enables the USB portion of the DFU USB class 1518 This enables the USB portion of the DFU USB class
1526 1519
1527 CONFIG_CMD_DFU 1520 CONFIG_CMD_DFU
1528 This enables the command "dfu" which is used to have 1521 This enables the command "dfu" which is used to have
1529 U-Boot create a DFU class device via USB. This command 1522 U-Boot create a DFU class device via USB. This command
1530 requires that the "dfu_alt_info" environment variable be 1523 requires that the "dfu_alt_info" environment variable be
1531 set and define the alt settings to expose to the host. 1524 set and define the alt settings to expose to the host.
1532 1525
1533 CONFIG_DFU_MMC 1526 CONFIG_DFU_MMC
1534 This enables support for exposing (e)MMC devices via DFU. 1527 This enables support for exposing (e)MMC devices via DFU.
1535 1528
1536 CONFIG_DFU_NAND 1529 CONFIG_DFU_NAND
1537 This enables support for exposing NAND devices via DFU. 1530 This enables support for exposing NAND devices via DFU.
1538 1531
1539 CONFIG_DFU_RAM 1532 CONFIG_DFU_RAM
1540 This enables support for exposing RAM via DFU. 1533 This enables support for exposing RAM via DFU.
1541 Note: DFU spec refer to non-volatile memory usage, but 1534 Note: DFU spec refer to non-volatile memory usage, but
1542 allow usages beyond the scope of spec - here RAM usage, 1535 allow usages beyond the scope of spec - here RAM usage,
1543 one that would help mostly the developer. 1536 one that would help mostly the developer.
1544 1537
1545 CONFIG_SYS_DFU_DATA_BUF_SIZE 1538 CONFIG_SYS_DFU_DATA_BUF_SIZE
1546 Dfu transfer uses a buffer before writing data to the 1539 Dfu transfer uses a buffer before writing data to the
1547 raw storage device. Make the size (in bytes) of this buffer 1540 raw storage device. Make the size (in bytes) of this buffer
1548 configurable. The size of this buffer is also configurable 1541 configurable. The size of this buffer is also configurable
1549 through the "dfu_bufsiz" environment variable. 1542 through the "dfu_bufsiz" environment variable.
1550 1543
1551 CONFIG_SYS_DFU_MAX_FILE_SIZE 1544 CONFIG_SYS_DFU_MAX_FILE_SIZE
1552 When updating files rather than the raw storage device, 1545 When updating files rather than the raw storage device,
1553 we use a static buffer to copy the file into and then write 1546 we use a static buffer to copy the file into and then write
1554 the buffer once we've been given the whole file. Define 1547 the buffer once we've been given the whole file. Define
1555 this to the maximum filesize (in bytes) for the buffer. 1548 this to the maximum filesize (in bytes) for the buffer.
1556 Default is 4 MiB if undefined. 1549 Default is 4 MiB if undefined.
1557 1550
1558 DFU_DEFAULT_POLL_TIMEOUT 1551 DFU_DEFAULT_POLL_TIMEOUT
1559 Poll timeout [ms], is the timeout a device can send to the 1552 Poll timeout [ms], is the timeout a device can send to the
1560 host. The host must wait for this timeout before sending 1553 host. The host must wait for this timeout before sending
1561 a subsequent DFU_GET_STATUS request to the device. 1554 a subsequent DFU_GET_STATUS request to the device.
1562 1555
1563 DFU_MANIFEST_POLL_TIMEOUT 1556 DFU_MANIFEST_POLL_TIMEOUT
1564 Poll timeout [ms], which the device sends to the host when 1557 Poll timeout [ms], which the device sends to the host when
1565 entering dfuMANIFEST state. Host waits this timeout, before 1558 entering dfuMANIFEST state. Host waits this timeout, before
1566 sending again an USB request to the device. 1559 sending again an USB request to the device.
1567 1560
1568 - Journaling Flash filesystem support: 1561 - Journaling Flash filesystem support:
1569 CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE, 1562 CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
1570 CONFIG_JFFS2_NAND_DEV 1563 CONFIG_JFFS2_NAND_DEV
1571 Define these for a default partition on a NAND device 1564 Define these for a default partition on a NAND device
1572 1565
1573 CONFIG_SYS_JFFS2_FIRST_SECTOR, 1566 CONFIG_SYS_JFFS2_FIRST_SECTOR,
1574 CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS 1567 CONFIG_SYS_JFFS2_FIRST_BANK, CONFIG_SYS_JFFS2_NUM_BANKS
1575 Define these for a default partition on a NOR device 1568 Define these for a default partition on a NOR device
1576 1569
1577 CONFIG_SYS_JFFS_CUSTOM_PART 1570 CONFIG_SYS_JFFS_CUSTOM_PART
1578 Define this to create an own partition. You have to provide a 1571 Define this to create an own partition. You have to provide a
1579 function struct part_info* jffs2_part_info(int part_num) 1572 function struct part_info* jffs2_part_info(int part_num)
1580 1573
1581 If you define only one JFFS2 partition you may also want to 1574 If you define only one JFFS2 partition you may also want to
1582 #define CONFIG_SYS_JFFS_SINGLE_PART 1 1575 #define CONFIG_SYS_JFFS_SINGLE_PART 1
1583 to disable the command chpart. This is the default when you 1576 to disable the command chpart. This is the default when you
1584 have not defined a custom partition 1577 have not defined a custom partition
1585 1578
1586 - FAT(File Allocation Table) filesystem write function support: 1579 - FAT(File Allocation Table) filesystem write function support:
1587 CONFIG_FAT_WRITE 1580 CONFIG_FAT_WRITE
1588 1581
1589 Define this to enable support for saving memory data as a 1582 Define this to enable support for saving memory data as a
1590 file in FAT formatted partition. 1583 file in FAT formatted partition.
1591 1584
1592 This will also enable the command "fatwrite" enabling the 1585 This will also enable the command "fatwrite" enabling the
1593 user to write files to FAT. 1586 user to write files to FAT.
1594 1587
1595 CBFS (Coreboot Filesystem) support 1588 CBFS (Coreboot Filesystem) support
1596 CONFIG_CMD_CBFS 1589 CONFIG_CMD_CBFS
1597 1590
1598 Define this to enable support for reading from a Coreboot 1591 Define this to enable support for reading from a Coreboot
1599 filesystem. Available commands are cbfsinit, cbfsinfo, cbfsls 1592 filesystem. Available commands are cbfsinit, cbfsinfo, cbfsls
1600 and cbfsload. 1593 and cbfsload.
1601 1594
1602 - Keyboard Support: 1595 - Keyboard Support:
1603 CONFIG_ISA_KEYBOARD 1596 CONFIG_ISA_KEYBOARD
1604 1597
1605 Define this to enable standard (PC-Style) keyboard 1598 Define this to enable standard (PC-Style) keyboard
1606 support 1599 support
1607 1600
1608 CONFIG_I8042_KBD 1601 CONFIG_I8042_KBD
1609 Standard PC keyboard driver with US (is default) and 1602 Standard PC keyboard driver with US (is default) and
1610 GERMAN key layout (switch via environment 'keymap=de') support. 1603 GERMAN key layout (switch via environment 'keymap=de') support.
1611 Export function i8042_kbd_init, i8042_tstc and i8042_getc 1604 Export function i8042_kbd_init, i8042_tstc and i8042_getc
1612 for cfb_console. Supports cursor blinking. 1605 for cfb_console. Supports cursor blinking.
1613 1606
1614 CONFIG_CROS_EC_KEYB 1607 CONFIG_CROS_EC_KEYB
1615 Enables a Chrome OS keyboard using the CROS_EC interface. 1608 Enables a Chrome OS keyboard using the CROS_EC interface.
1616 This uses CROS_EC to communicate with a second microcontroller 1609 This uses CROS_EC to communicate with a second microcontroller
1617 which provides key scans on request. 1610 which provides key scans on request.
1618 1611
1619 - Video support: 1612 - Video support:
1620 CONFIG_VIDEO 1613 CONFIG_VIDEO
1621 1614
1622 Define this to enable video support (for output to 1615 Define this to enable video support (for output to
1623 video). 1616 video).
1624 1617
1625 CONFIG_VIDEO_CT69000 1618 CONFIG_VIDEO_CT69000
1626 1619
1627 Enable Chips & Technologies 69000 Video chip 1620 Enable Chips & Technologies 69000 Video chip
1628 1621
1629 CONFIG_VIDEO_SMI_LYNXEM 1622 CONFIG_VIDEO_SMI_LYNXEM
1630 Enable Silicon Motion SMI 712/710/810 Video chip. The 1623 Enable Silicon Motion SMI 712/710/810 Video chip. The
1631 video output is selected via environment 'videoout' 1624 video output is selected via environment 'videoout'
1632 (1 = LCD and 2 = CRT). If videoout is undefined, CRT is 1625 (1 = LCD and 2 = CRT). If videoout is undefined, CRT is
1633 assumed. 1626 assumed.
1634 1627
1635 For the CT69000 and SMI_LYNXEM drivers, videomode is 1628 For the CT69000 and SMI_LYNXEM drivers, videomode is
1636 selected via environment 'videomode'. Two different ways 1629 selected via environment 'videomode'. Two different ways
1637 are possible: 1630 are possible:
1638 - "videomode=num" 'num' is a standard LiLo mode numbers. 1631 - "videomode=num" 'num' is a standard LiLo mode numbers.
1639 Following standard modes are supported (* is default): 1632 Following standard modes are supported (* is default):
1640 1633
1641 Colors 640x480 800x600 1024x768 1152x864 1280x1024 1634 Colors 640x480 800x600 1024x768 1152x864 1280x1024
1642 -------------+--------------------------------------------- 1635 -------------+---------------------------------------------
1643 8 bits | 0x301* 0x303 0x305 0x161 0x307 1636 8 bits | 0x301* 0x303 0x305 0x161 0x307
1644 15 bits | 0x310 0x313 0x316 0x162 0x319 1637 15 bits | 0x310 0x313 0x316 0x162 0x319
1645 16 bits | 0x311 0x314 0x317 0x163 0x31A 1638 16 bits | 0x311 0x314 0x317 0x163 0x31A
1646 24 bits | 0x312 0x315 0x318 ? 0x31B 1639 24 bits | 0x312 0x315 0x318 ? 0x31B
1647 -------------+--------------------------------------------- 1640 -------------+---------------------------------------------
1648 (i.e. setenv videomode 317; saveenv; reset;) 1641 (i.e. setenv videomode 317; saveenv; reset;)
1649 1642
1650 - "videomode=bootargs" all the video parameters are parsed 1643 - "videomode=bootargs" all the video parameters are parsed
1651 from the bootargs. (See drivers/video/videomodes.c) 1644 from the bootargs. (See drivers/video/videomodes.c)
1652 1645
1653 1646
1654 CONFIG_VIDEO_SED13806 1647 CONFIG_VIDEO_SED13806
1655 Enable Epson SED13806 driver. This driver supports 8bpp 1648 Enable Epson SED13806 driver. This driver supports 8bpp
1656 and 16bpp modes defined by CONFIG_VIDEO_SED13806_8BPP 1649 and 16bpp modes defined by CONFIG_VIDEO_SED13806_8BPP
1657 or CONFIG_VIDEO_SED13806_16BPP 1650 or CONFIG_VIDEO_SED13806_16BPP
1658 1651
1659 CONFIG_FSL_DIU_FB 1652 CONFIG_FSL_DIU_FB
1660 Enable the Freescale DIU video driver. Reference boards for 1653 Enable the Freescale DIU video driver. Reference boards for
1661 SOCs that have a DIU should define this macro to enable DIU 1654 SOCs that have a DIU should define this macro to enable DIU
1662 support, and should also define these other macros: 1655 support, and should also define these other macros:
1663 1656
1664 CONFIG_SYS_DIU_ADDR 1657 CONFIG_SYS_DIU_ADDR
1665 CONFIG_VIDEO 1658 CONFIG_VIDEO
1666 CONFIG_CMD_BMP 1659 CONFIG_CMD_BMP
1667 CONFIG_CFB_CONSOLE 1660 CONFIG_CFB_CONSOLE
1668 CONFIG_VIDEO_SW_CURSOR 1661 CONFIG_VIDEO_SW_CURSOR
1669 CONFIG_VGA_AS_SINGLE_DEVICE 1662 CONFIG_VGA_AS_SINGLE_DEVICE
1670 CONFIG_VIDEO_LOGO 1663 CONFIG_VIDEO_LOGO
1671 CONFIG_VIDEO_BMP_LOGO 1664 CONFIG_VIDEO_BMP_LOGO
1672 1665
1673 The DIU driver will look for the 'video-mode' environment 1666 The DIU driver will look for the 'video-mode' environment
1674 variable, and if defined, enable the DIU as a console during 1667 variable, and if defined, enable the DIU as a console during
1675 boot. See the documentation file README.video for a 1668 boot. See the documentation file README.video for a
1676 description of this variable. 1669 description of this variable.
1677 1670
1678 CONFIG_VIDEO_VGA 1671 CONFIG_VIDEO_VGA
1679 1672
1680 Enable the VGA video / BIOS for x86. The alternative if you 1673 Enable the VGA video / BIOS for x86. The alternative if you
1681 are using coreboot is to use the coreboot frame buffer 1674 are using coreboot is to use the coreboot frame buffer
1682 driver. 1675 driver.
1683 1676
1684 1677
1685 - Keyboard Support: 1678 - Keyboard Support:
1686 CONFIG_KEYBOARD 1679 CONFIG_KEYBOARD
1687 1680
1688 Define this to enable a custom keyboard support. 1681 Define this to enable a custom keyboard support.
1689 This simply calls drv_keyboard_init() which must be 1682 This simply calls drv_keyboard_init() which must be
1690 defined in your board-specific files. 1683 defined in your board-specific files.
1691 The only board using this so far is RBC823. 1684 The only board using this so far is RBC823.
1692 1685
1693 - LCD Support: CONFIG_LCD 1686 - LCD Support: CONFIG_LCD
1694 1687
1695 Define this to enable LCD support (for output to LCD 1688 Define this to enable LCD support (for output to LCD
1696 display); also select one of the supported displays 1689 display); also select one of the supported displays
1697 by defining one of these: 1690 by defining one of these:
1698 1691
1699 CONFIG_ATMEL_LCD: 1692 CONFIG_ATMEL_LCD:
1700 1693
1701 HITACHI TX09D70VM1CCA, 3.5", 240x320. 1694 HITACHI TX09D70VM1CCA, 3.5", 240x320.
1702 1695
1703 CONFIG_NEC_NL6448AC33: 1696 CONFIG_NEC_NL6448AC33:
1704 1697
1705 NEC NL6448AC33-18. Active, color, single scan. 1698 NEC NL6448AC33-18. Active, color, single scan.
1706 1699
1707 CONFIG_NEC_NL6448BC20 1700 CONFIG_NEC_NL6448BC20
1708 1701
1709 NEC NL6448BC20-08. 6.5", 640x480. 1702 NEC NL6448BC20-08. 6.5", 640x480.
1710 Active, color, single scan. 1703 Active, color, single scan.
1711 1704
1712 CONFIG_NEC_NL6448BC33_54 1705 CONFIG_NEC_NL6448BC33_54
1713 1706
1714 NEC NL6448BC33-54. 10.4", 640x480. 1707 NEC NL6448BC33-54. 10.4", 640x480.
1715 Active, color, single scan. 1708 Active, color, single scan.
1716 1709
1717 CONFIG_SHARP_16x9 1710 CONFIG_SHARP_16x9
1718 1711
1719 Sharp 320x240. Active, color, single scan. 1712 Sharp 320x240. Active, color, single scan.
1720 It isn't 16x9, and I am not sure what it is. 1713 It isn't 16x9, and I am not sure what it is.
1721 1714
1722 CONFIG_SHARP_LQ64D341 1715 CONFIG_SHARP_LQ64D341
1723 1716
1724 Sharp LQ64D341 display, 640x480. 1717 Sharp LQ64D341 display, 640x480.
1725 Active, color, single scan. 1718 Active, color, single scan.
1726 1719
1727 CONFIG_HLD1045 1720 CONFIG_HLD1045
1728 1721
1729 HLD1045 display, 640x480. 1722 HLD1045 display, 640x480.
1730 Active, color, single scan. 1723 Active, color, single scan.
1731 1724
1732 CONFIG_OPTREX_BW 1725 CONFIG_OPTREX_BW
1733 1726
1734 Optrex CBL50840-2 NF-FW 99 22 M5 1727 Optrex CBL50840-2 NF-FW 99 22 M5
1735 or 1728 or
1736 Hitachi LMG6912RPFC-00T 1729 Hitachi LMG6912RPFC-00T
1737 or 1730 or
1738 Hitachi SP14Q002 1731 Hitachi SP14Q002
1739 1732
1740 320x240. Black & white. 1733 320x240. Black & white.
1741 1734
1742 Normally display is black on white background; define 1735 Normally display is black on white background; define
1743 CONFIG_SYS_WHITE_ON_BLACK to get it inverted. 1736 CONFIG_SYS_WHITE_ON_BLACK to get it inverted.
1744 1737
1745 CONFIG_LCD_ALIGNMENT 1738 CONFIG_LCD_ALIGNMENT
1746 1739
1747 Normally the LCD is page-aligned (tyically 4KB). If this is 1740 Normally the LCD is page-aligned (tyically 4KB). If this is
1748 defined then the LCD will be aligned to this value instead. 1741 defined then the LCD will be aligned to this value instead.
1749 For ARM it is sometimes useful to use MMU_SECTION_SIZE 1742 For ARM it is sometimes useful to use MMU_SECTION_SIZE
1750 here, since it is cheaper to change data cache settings on 1743 here, since it is cheaper to change data cache settings on
1751 a per-section basis. 1744 a per-section basis.
1752 1745
1753 CONFIG_CONSOLE_SCROLL_LINES 1746 CONFIG_CONSOLE_SCROLL_LINES
1754 1747
1755 When the console need to be scrolled, this is the number of 1748 When the console need to be scrolled, this is the number of
1756 lines to scroll by. It defaults to 1. Increasing this makes 1749 lines to scroll by. It defaults to 1. Increasing this makes
1757 the console jump but can help speed up operation when scrolling 1750 the console jump but can help speed up operation when scrolling
1758 is slow. 1751 is slow.
1759 1752
1760 CONFIG_LCD_BMP_RLE8 1753 CONFIG_LCD_BMP_RLE8
1761 1754
1762 Support drawing of RLE8-compressed bitmaps on the LCD. 1755 Support drawing of RLE8-compressed bitmaps on the LCD.
1763 1756
1764 CONFIG_I2C_EDID 1757 CONFIG_I2C_EDID
1765 1758
1766 Enables an 'i2c edid' command which can read EDID 1759 Enables an 'i2c edid' command which can read EDID
1767 information over I2C from an attached LCD display. 1760 information over I2C from an attached LCD display.
1768 1761
1769 - Splash Screen Support: CONFIG_SPLASH_SCREEN 1762 - Splash Screen Support: CONFIG_SPLASH_SCREEN
1770 1763
1771 If this option is set, the environment is checked for 1764 If this option is set, the environment is checked for
1772 a variable "splashimage". If found, the usual display 1765 a variable "splashimage". If found, the usual display
1773 of logo, copyright and system information on the LCD 1766 of logo, copyright and system information on the LCD
1774 is suppressed and the BMP image at the address 1767 is suppressed and the BMP image at the address
1775 specified in "splashimage" is loaded instead. The 1768 specified in "splashimage" is loaded instead. The
1776 console is redirected to the "nulldev", too. This 1769 console is redirected to the "nulldev", too. This
1777 allows for a "silent" boot where a splash screen is 1770 allows for a "silent" boot where a splash screen is
1778 loaded very quickly after power-on. 1771 loaded very quickly after power-on.
1779 1772
1780 CONFIG_SPLASHIMAGE_GUARD 1773 CONFIG_SPLASHIMAGE_GUARD
1781 1774
1782 If this option is set, then U-Boot will prevent the environment 1775 If this option is set, then U-Boot will prevent the environment
1783 variable "splashimage" from being set to a problematic address 1776 variable "splashimage" from being set to a problematic address
1784 (see README.displaying-bmps). 1777 (see README.displaying-bmps).
1785 This option is useful for targets where, due to alignment 1778 This option is useful for targets where, due to alignment
1786 restrictions, an improperly aligned BMP image will cause a data 1779 restrictions, an improperly aligned BMP image will cause a data
1787 abort. If you think you will not have problems with unaligned 1780 abort. If you think you will not have problems with unaligned
1788 accesses (for example because your toolchain prevents them) 1781 accesses (for example because your toolchain prevents them)
1789 there is no need to set this option. 1782 there is no need to set this option.
1790 1783
1791 CONFIG_SPLASH_SCREEN_ALIGN 1784 CONFIG_SPLASH_SCREEN_ALIGN
1792 1785
1793 If this option is set the splash image can be freely positioned 1786 If this option is set the splash image can be freely positioned
1794 on the screen. Environment variable "splashpos" specifies the 1787 on the screen. Environment variable "splashpos" specifies the
1795 position as "x,y". If a positive number is given it is used as 1788 position as "x,y". If a positive number is given it is used as
1796 number of pixel from left/top. If a negative number is given it 1789 number of pixel from left/top. If a negative number is given it
1797 is used as number of pixel from right/bottom. You can also 1790 is used as number of pixel from right/bottom. You can also
1798 specify 'm' for centering the image. 1791 specify 'm' for centering the image.
1799 1792
1800 Example: 1793 Example:
1801 setenv splashpos m,m 1794 setenv splashpos m,m
1802 => image at center of screen 1795 => image at center of screen
1803 1796
1804 setenv splashpos 30,20 1797 setenv splashpos 30,20
1805 => image at x = 30 and y = 20 1798 => image at x = 30 and y = 20
1806 1799
1807 setenv splashpos -10,m 1800 setenv splashpos -10,m
1808 => vertically centered image 1801 => vertically centered image
1809 at x = dspWidth - bmpWidth - 9 1802 at x = dspWidth - bmpWidth - 9
1810 1803
1811 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP 1804 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
1812 1805
1813 If this option is set, additionally to standard BMP 1806 If this option is set, additionally to standard BMP
1814 images, gzipped BMP images can be displayed via the 1807 images, gzipped BMP images can be displayed via the
1815 splashscreen support or the bmp command. 1808 splashscreen support or the bmp command.
1816 1809
1817 - Run length encoded BMP image (RLE8) support: CONFIG_VIDEO_BMP_RLE8 1810 - Run length encoded BMP image (RLE8) support: CONFIG_VIDEO_BMP_RLE8
1818 1811
1819 If this option is set, 8-bit RLE compressed BMP images 1812 If this option is set, 8-bit RLE compressed BMP images
1820 can be displayed via the splashscreen support or the 1813 can be displayed via the splashscreen support or the
1821 bmp command. 1814 bmp command.
1822 1815
1823 - Do compresssing for memory range: 1816 - Do compresssing for memory range:
1824 CONFIG_CMD_ZIP 1817 CONFIG_CMD_ZIP
1825 1818
1826 If this option is set, it would use zlib deflate method 1819 If this option is set, it would use zlib deflate method
1827 to compress the specified memory at its best effort. 1820 to compress the specified memory at its best effort.
1828 1821
1829 - Compression support: 1822 - Compression support:
1830 CONFIG_GZIP 1823 CONFIG_GZIP
1831 1824
1832 Enabled by default to support gzip compressed images. 1825 Enabled by default to support gzip compressed images.
1833 1826
1834 CONFIG_BZIP2 1827 CONFIG_BZIP2
1835 1828
1836 If this option is set, support for bzip2 compressed 1829 If this option is set, support for bzip2 compressed
1837 images is included. If not, only uncompressed and gzip 1830 images is included. If not, only uncompressed and gzip
1838 compressed images are supported. 1831 compressed images are supported.
1839 1832
1840 NOTE: the bzip2 algorithm requires a lot of RAM, so 1833 NOTE: the bzip2 algorithm requires a lot of RAM, so
1841 the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should 1834 the malloc area (as defined by CONFIG_SYS_MALLOC_LEN) should
1842 be at least 4MB. 1835 be at least 4MB.
1843 1836
1844 CONFIG_LZMA 1837 CONFIG_LZMA
1845 1838
1846 If this option is set, support for lzma compressed 1839 If this option is set, support for lzma compressed
1847 images is included. 1840 images is included.
1848 1841
1849 Note: The LZMA algorithm adds between 2 and 4KB of code and it 1842 Note: The LZMA algorithm adds between 2 and 4KB of code and it
1850 requires an amount of dynamic memory that is given by the 1843 requires an amount of dynamic memory that is given by the
1851 formula: 1844 formula:
1852 1845
1853 (1846 + 768 << (lc + lp)) * sizeof(uint16) 1846 (1846 + 768 << (lc + lp)) * sizeof(uint16)
1854 1847
1855 Where lc and lp stand for, respectively, Literal context bits 1848 Where lc and lp stand for, respectively, Literal context bits
1856 and Literal pos bits. 1849 and Literal pos bits.
1857 1850
1858 This value is upper-bounded by 14MB in the worst case. Anyway, 1851 This value is upper-bounded by 14MB in the worst case. Anyway,
1859 for a ~4MB large kernel image, we have lc=3 and lp=0 for a 1852 for a ~4MB large kernel image, we have lc=3 and lp=0 for a
1860 total amount of (1846 + 768 << (3 + 0)) * 2 = ~41KB... that is 1853 total amount of (1846 + 768 << (3 + 0)) * 2 = ~41KB... that is
1861 a very small buffer. 1854 a very small buffer.
1862 1855
1863 Use the lzmainfo tool to determinate the lc and lp values and 1856 Use the lzmainfo tool to determinate the lc and lp values and
1864 then calculate the amount of needed dynamic memory (ensuring 1857 then calculate the amount of needed dynamic memory (ensuring
1865 the appropriate CONFIG_SYS_MALLOC_LEN value). 1858 the appropriate CONFIG_SYS_MALLOC_LEN value).
1866 1859
1867 CONFIG_LZO 1860 CONFIG_LZO
1868 1861
1869 If this option is set, support for LZO compressed images 1862 If this option is set, support for LZO compressed images
1870 is included. 1863 is included.
1871 1864
1872 - MII/PHY support: 1865 - MII/PHY support:
1873 CONFIG_PHY_ADDR 1866 CONFIG_PHY_ADDR
1874 1867
1875 The address of PHY on MII bus. 1868 The address of PHY on MII bus.
1876 1869
1877 CONFIG_PHY_CLOCK_FREQ (ppc4xx) 1870 CONFIG_PHY_CLOCK_FREQ (ppc4xx)
1878 1871
1879 The clock frequency of the MII bus 1872 The clock frequency of the MII bus
1880 1873
1881 CONFIG_PHY_GIGE 1874 CONFIG_PHY_GIGE
1882 1875
1883 If this option is set, support for speed/duplex 1876 If this option is set, support for speed/duplex
1884 detection of gigabit PHY is included. 1877 detection of gigabit PHY is included.
1885 1878
1886 CONFIG_PHY_RESET_DELAY 1879 CONFIG_PHY_RESET_DELAY
1887 1880
1888 Some PHY like Intel LXT971A need extra delay after 1881 Some PHY like Intel LXT971A need extra delay after
1889 reset before any MII register access is possible. 1882 reset before any MII register access is possible.
1890 For such PHY, set this option to the usec delay 1883 For such PHY, set this option to the usec delay
1891 required. (minimum 300usec for LXT971A) 1884 required. (minimum 300usec for LXT971A)
1892 1885
1893 CONFIG_PHY_CMD_DELAY (ppc4xx) 1886 CONFIG_PHY_CMD_DELAY (ppc4xx)
1894 1887
1895 Some PHY like Intel LXT971A need extra delay after 1888 Some PHY like Intel LXT971A need extra delay after
1896 command issued before MII status register can be read 1889 command issued before MII status register can be read
1897 1890
1898 - Ethernet address: 1891 - Ethernet address:
1899 CONFIG_ETHADDR 1892 CONFIG_ETHADDR
1900 CONFIG_ETH1ADDR 1893 CONFIG_ETH1ADDR
1901 CONFIG_ETH2ADDR 1894 CONFIG_ETH2ADDR
1902 CONFIG_ETH3ADDR 1895 CONFIG_ETH3ADDR
1903 CONFIG_ETH4ADDR 1896 CONFIG_ETH4ADDR
1904 CONFIG_ETH5ADDR 1897 CONFIG_ETH5ADDR
1905 1898
1906 Define a default value for Ethernet address to use 1899 Define a default value for Ethernet address to use
1907 for the respective Ethernet interface, in case this 1900 for the respective Ethernet interface, in case this
1908 is not determined automatically. 1901 is not determined automatically.
1909 1902
1910 - IP address: 1903 - IP address:
1911 CONFIG_IPADDR 1904 CONFIG_IPADDR
1912 1905
1913 Define a default value for the IP address to use for 1906 Define a default value for the IP address to use for
1914 the default Ethernet interface, in case this is not 1907 the default Ethernet interface, in case this is not
1915 determined through e.g. bootp. 1908 determined through e.g. bootp.
1916 (Environment variable "ipaddr") 1909 (Environment variable "ipaddr")
1917 1910
1918 - Server IP address: 1911 - Server IP address:
1919 CONFIG_SERVERIP 1912 CONFIG_SERVERIP
1920 1913
1921 Defines a default value for the IP address of a TFTP 1914 Defines a default value for the IP address of a TFTP
1922 server to contact when using the "tftboot" command. 1915 server to contact when using the "tftboot" command.
1923 (Environment variable "serverip") 1916 (Environment variable "serverip")
1924 1917
1925 CONFIG_KEEP_SERVERADDR 1918 CONFIG_KEEP_SERVERADDR
1926 1919
1927 Keeps the server's MAC address, in the env 'serveraddr' 1920 Keeps the server's MAC address, in the env 'serveraddr'
1928 for passing to bootargs (like Linux's netconsole option) 1921 for passing to bootargs (like Linux's netconsole option)
1929 1922
1930 - Gateway IP address: 1923 - Gateway IP address:
1931 CONFIG_GATEWAYIP 1924 CONFIG_GATEWAYIP
1932 1925
1933 Defines a default value for the IP address of the 1926 Defines a default value for the IP address of the
1934 default router where packets to other networks are 1927 default router where packets to other networks are
1935 sent to. 1928 sent to.
1936 (Environment variable "gatewayip") 1929 (Environment variable "gatewayip")
1937 1930
1938 - Subnet mask: 1931 - Subnet mask:
1939 CONFIG_NETMASK 1932 CONFIG_NETMASK
1940 1933
1941 Defines a default value for the subnet mask (or 1934 Defines a default value for the subnet mask (or
1942 routing prefix) which is used to determine if an IP 1935 routing prefix) which is used to determine if an IP
1943 address belongs to the local subnet or needs to be 1936 address belongs to the local subnet or needs to be
1944 forwarded through a router. 1937 forwarded through a router.
1945 (Environment variable "netmask") 1938 (Environment variable "netmask")
1946 1939
1947 - Multicast TFTP Mode: 1940 - Multicast TFTP Mode:
1948 CONFIG_MCAST_TFTP 1941 CONFIG_MCAST_TFTP
1949 1942
1950 Defines whether you want to support multicast TFTP as per 1943 Defines whether you want to support multicast TFTP as per
1951 rfc-2090; for example to work with atftp. Lets lots of targets 1944 rfc-2090; for example to work with atftp. Lets lots of targets
1952 tftp down the same boot image concurrently. Note: the Ethernet 1945 tftp down the same boot image concurrently. Note: the Ethernet
1953 driver in use must provide a function: mcast() to join/leave a 1946 driver in use must provide a function: mcast() to join/leave a
1954 multicast group. 1947 multicast group.
1955 1948
1956 - BOOTP Recovery Mode: 1949 - BOOTP Recovery Mode:
1957 CONFIG_BOOTP_RANDOM_DELAY 1950 CONFIG_BOOTP_RANDOM_DELAY
1958 1951
1959 If you have many targets in a network that try to 1952 If you have many targets in a network that try to
1960 boot using BOOTP, you may want to avoid that all 1953 boot using BOOTP, you may want to avoid that all
1961 systems send out BOOTP requests at precisely the same 1954 systems send out BOOTP requests at precisely the same
1962 moment (which would happen for instance at recovery 1955 moment (which would happen for instance at recovery
1963 from a power failure, when all systems will try to 1956 from a power failure, when all systems will try to
1964 boot, thus flooding the BOOTP server. Defining 1957 boot, thus flooding the BOOTP server. Defining
1965 CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be 1958 CONFIG_BOOTP_RANDOM_DELAY causes a random delay to be
1966 inserted before sending out BOOTP requests. The 1959 inserted before sending out BOOTP requests. The
1967 following delays are inserted then: 1960 following delays are inserted then:
1968 1961
1969 1st BOOTP request: delay 0 ... 1 sec 1962 1st BOOTP request: delay 0 ... 1 sec
1970 2nd BOOTP request: delay 0 ... 2 sec 1963 2nd BOOTP request: delay 0 ... 2 sec
1971 3rd BOOTP request: delay 0 ... 4 sec 1964 3rd BOOTP request: delay 0 ... 4 sec
1972 4th and following 1965 4th and following
1973 BOOTP requests: delay 0 ... 8 sec 1966 BOOTP requests: delay 0 ... 8 sec
1974 1967
1975 - DHCP Advanced Options: 1968 - DHCP Advanced Options:
1976 You can fine tune the DHCP functionality by defining 1969 You can fine tune the DHCP functionality by defining
1977 CONFIG_BOOTP_* symbols: 1970 CONFIG_BOOTP_* symbols:
1978 1971
1979 CONFIG_BOOTP_SUBNETMASK 1972 CONFIG_BOOTP_SUBNETMASK
1980 CONFIG_BOOTP_GATEWAY 1973 CONFIG_BOOTP_GATEWAY
1981 CONFIG_BOOTP_HOSTNAME 1974 CONFIG_BOOTP_HOSTNAME
1982 CONFIG_BOOTP_NISDOMAIN 1975 CONFIG_BOOTP_NISDOMAIN
1983 CONFIG_BOOTP_BOOTPATH 1976 CONFIG_BOOTP_BOOTPATH
1984 CONFIG_BOOTP_BOOTFILESIZE 1977 CONFIG_BOOTP_BOOTFILESIZE
1985 CONFIG_BOOTP_DNS 1978 CONFIG_BOOTP_DNS
1986 CONFIG_BOOTP_DNS2 1979 CONFIG_BOOTP_DNS2
1987 CONFIG_BOOTP_SEND_HOSTNAME 1980 CONFIG_BOOTP_SEND_HOSTNAME
1988 CONFIG_BOOTP_NTPSERVER 1981 CONFIG_BOOTP_NTPSERVER
1989 CONFIG_BOOTP_TIMEOFFSET 1982 CONFIG_BOOTP_TIMEOFFSET
1990 CONFIG_BOOTP_VENDOREX 1983 CONFIG_BOOTP_VENDOREX
1991 CONFIG_BOOTP_MAY_FAIL 1984 CONFIG_BOOTP_MAY_FAIL
1992 1985
1993 CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip 1986 CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip
1994 environment variable, not the BOOTP server. 1987 environment variable, not the BOOTP server.
1995 1988
1996 CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found 1989 CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found
1997 after the configured retry count, the call will fail 1990 after the configured retry count, the call will fail
1998 instead of starting over. This can be used to fail over 1991 instead of starting over. This can be used to fail over
1999 to Link-local IP address configuration if the DHCP server 1992 to Link-local IP address configuration if the DHCP server
2000 is not available. 1993 is not available.
2001 1994
2002 CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS 1995 CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS
2003 serverip from a DHCP server, it is possible that more 1996 serverip from a DHCP server, it is possible that more
2004 than one DNS serverip is offered to the client. 1997 than one DNS serverip is offered to the client.
2005 If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS 1998 If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS
2006 serverip will be stored in the additional environment 1999 serverip will be stored in the additional environment
2007 variable "dnsip2". The first DNS serverip is always 2000 variable "dnsip2". The first DNS serverip is always
2008 stored in the variable "dnsip", when CONFIG_BOOTP_DNS 2001 stored in the variable "dnsip", when CONFIG_BOOTP_DNS
2009 is defined. 2002 is defined.
2010 2003
2011 CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable 2004 CONFIG_BOOTP_SEND_HOSTNAME - Some DHCP servers are capable
2012 to do a dynamic update of a DNS server. To do this, they 2005 to do a dynamic update of a DNS server. To do this, they
2013 need the hostname of the DHCP requester. 2006 need the hostname of the DHCP requester.
2014 If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content 2007 If CONFIG_BOOTP_SEND_HOSTNAME is defined, the content
2015 of the "hostname" environment variable is passed as 2008 of the "hostname" environment variable is passed as
2016 option 12 to the DHCP server. 2009 option 12 to the DHCP server.
2017 2010
2018 CONFIG_BOOTP_DHCP_REQUEST_DELAY 2011 CONFIG_BOOTP_DHCP_REQUEST_DELAY
2019 2012
2020 A 32bit value in microseconds for a delay between 2013 A 32bit value in microseconds for a delay between
2021 receiving a "DHCP Offer" and sending the "DHCP Request". 2014 receiving a "DHCP Offer" and sending the "DHCP Request".
2022 This fixes a problem with certain DHCP servers that don't 2015 This fixes a problem with certain DHCP servers that don't
2023 respond 100% of the time to a "DHCP request". E.g. On an 2016 respond 100% of the time to a "DHCP request". E.g. On an
2024 AT91RM9200 processor running at 180MHz, this delay needed 2017 AT91RM9200 processor running at 180MHz, this delay needed
2025 to be *at least* 15,000 usec before a Windows Server 2003 2018 to be *at least* 15,000 usec before a Windows Server 2003
2026 DHCP server would reply 100% of the time. I recommend at 2019 DHCP server would reply 100% of the time. I recommend at
2027 least 50,000 usec to be safe. The alternative is to hope 2020 least 50,000 usec to be safe. The alternative is to hope
2028 that one of the retries will be successful but note that 2021 that one of the retries will be successful but note that
2029 the DHCP timeout and retry process takes a longer than 2022 the DHCP timeout and retry process takes a longer than
2030 this delay. 2023 this delay.
2031 2024
2032 - Link-local IP address negotiation: 2025 - Link-local IP address negotiation:
2033 Negotiate with other link-local clients on the local network 2026 Negotiate with other link-local clients on the local network
2034 for an address that doesn't require explicit configuration. 2027 for an address that doesn't require explicit configuration.
2035 This is especially useful if a DHCP server cannot be guaranteed 2028 This is especially useful if a DHCP server cannot be guaranteed
2036 to exist in all environments that the device must operate. 2029 to exist in all environments that the device must operate.
2037 2030
2038 See doc/README.link-local for more information. 2031 See doc/README.link-local for more information.
2039 2032
2040 - CDP Options: 2033 - CDP Options:
2041 CONFIG_CDP_DEVICE_ID 2034 CONFIG_CDP_DEVICE_ID
2042 2035
2043 The device id used in CDP trigger frames. 2036 The device id used in CDP trigger frames.
2044 2037
2045 CONFIG_CDP_DEVICE_ID_PREFIX 2038 CONFIG_CDP_DEVICE_ID_PREFIX
2046 2039
2047 A two character string which is prefixed to the MAC address 2040 A two character string which is prefixed to the MAC address
2048 of the device. 2041 of the device.
2049 2042
2050 CONFIG_CDP_PORT_ID 2043 CONFIG_CDP_PORT_ID
2051 2044
2052 A printf format string which contains the ascii name of 2045 A printf format string which contains the ascii name of
2053 the port. Normally is set to "eth%d" which sets 2046 the port. Normally is set to "eth%d" which sets
2054 eth0 for the first Ethernet, eth1 for the second etc. 2047 eth0 for the first Ethernet, eth1 for the second etc.
2055 2048
2056 CONFIG_CDP_CAPABILITIES 2049 CONFIG_CDP_CAPABILITIES
2057 2050
2058 A 32bit integer which indicates the device capabilities; 2051 A 32bit integer which indicates the device capabilities;
2059 0x00000010 for a normal host which does not forwards. 2052 0x00000010 for a normal host which does not forwards.
2060 2053
2061 CONFIG_CDP_VERSION 2054 CONFIG_CDP_VERSION
2062 2055
2063 An ascii string containing the version of the software. 2056 An ascii string containing the version of the software.
2064 2057
2065 CONFIG_CDP_PLATFORM 2058 CONFIG_CDP_PLATFORM
2066 2059
2067 An ascii string containing the name of the platform. 2060 An ascii string containing the name of the platform.
2068 2061
2069 CONFIG_CDP_TRIGGER 2062 CONFIG_CDP_TRIGGER
2070 2063
2071 A 32bit integer sent on the trigger. 2064 A 32bit integer sent on the trigger.
2072 2065
2073 CONFIG_CDP_POWER_CONSUMPTION 2066 CONFIG_CDP_POWER_CONSUMPTION
2074 2067
2075 A 16bit integer containing the power consumption of the 2068 A 16bit integer containing the power consumption of the
2076 device in .1 of milliwatts. 2069 device in .1 of milliwatts.
2077 2070
2078 CONFIG_CDP_APPLIANCE_VLAN_TYPE 2071 CONFIG_CDP_APPLIANCE_VLAN_TYPE
2079 2072
2080 A byte containing the id of the VLAN. 2073 A byte containing the id of the VLAN.
2081 2074
2082 - Status LED: CONFIG_STATUS_LED 2075 - Status LED: CONFIG_STATUS_LED
2083 2076
2084 Several configurations allow to display the current 2077 Several configurations allow to display the current
2085 status using a LED. For instance, the LED will blink 2078 status using a LED. For instance, the LED will blink
2086 fast while running U-Boot code, stop blinking as 2079 fast while running U-Boot code, stop blinking as
2087 soon as a reply to a BOOTP request was received, and 2080 soon as a reply to a BOOTP request was received, and
2088 start blinking slow once the Linux kernel is running 2081 start blinking slow once the Linux kernel is running
2089 (supported by a status LED driver in the Linux 2082 (supported by a status LED driver in the Linux
2090 kernel). Defining CONFIG_STATUS_LED enables this 2083 kernel). Defining CONFIG_STATUS_LED enables this
2091 feature in U-Boot. 2084 feature in U-Boot.
2092 2085
2093 Additional options: 2086 Additional options:
2094 2087
2095 CONFIG_GPIO_LED 2088 CONFIG_GPIO_LED
2096 The status LED can be connected to a GPIO pin. 2089 The status LED can be connected to a GPIO pin.
2097 In such cases, the gpio_led driver can be used as a 2090 In such cases, the gpio_led driver can be used as a
2098 status LED backend implementation. Define CONFIG_GPIO_LED 2091 status LED backend implementation. Define CONFIG_GPIO_LED
2099 to include the gpio_led driver in the U-Boot binary. 2092 to include the gpio_led driver in the U-Boot binary.
2100 2093
2101 CONFIG_GPIO_LED_INVERTED_TABLE 2094 CONFIG_GPIO_LED_INVERTED_TABLE
2102 Some GPIO connected LEDs may have inverted polarity in which 2095 Some GPIO connected LEDs may have inverted polarity in which
2103 case the GPIO high value corresponds to LED off state and 2096 case the GPIO high value corresponds to LED off state and
2104 GPIO low value corresponds to LED on state. 2097 GPIO low value corresponds to LED on state.
2105 In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined 2098 In such cases CONFIG_GPIO_LED_INVERTED_TABLE may be defined
2106 with a list of GPIO LEDs that have inverted polarity. 2099 with a list of GPIO LEDs that have inverted polarity.
2107 2100
2108 - CAN Support: CONFIG_CAN_DRIVER 2101 - CAN Support: CONFIG_CAN_DRIVER
2109 2102
2110 Defining CONFIG_CAN_DRIVER enables CAN driver support 2103 Defining CONFIG_CAN_DRIVER enables CAN driver support
2111 on those systems that support this (optional) 2104 on those systems that support this (optional)
2112 feature, like the TQM8xxL modules. 2105 feature, like the TQM8xxL modules.
2113 2106
2114 - I2C Support: CONFIG_SYS_I2C 2107 - I2C Support: CONFIG_SYS_I2C
2115 2108
2116 This enable the NEW i2c subsystem, and will allow you to use 2109 This enable the NEW i2c subsystem, and will allow you to use
2117 i2c commands at the u-boot command line (as long as you set 2110 i2c commands at the u-boot command line (as long as you set
2118 CONFIG_CMD_I2C in CONFIG_COMMANDS) and communicate with i2c 2111 CONFIG_CMD_I2C in CONFIG_COMMANDS) and communicate with i2c
2119 based realtime clock chips or other i2c devices. See 2112 based realtime clock chips or other i2c devices. See
2120 common/cmd_i2c.c for a description of the command line 2113 common/cmd_i2c.c for a description of the command line
2121 interface. 2114 interface.
2122 2115
2123 ported i2c driver to the new framework: 2116 ported i2c driver to the new framework:
2124 - drivers/i2c/soft_i2c.c: 2117 - drivers/i2c/soft_i2c.c:
2125 - activate first bus with CONFIG_SYS_I2C_SOFT define 2118 - activate first bus with CONFIG_SYS_I2C_SOFT define
2126 CONFIG_SYS_I2C_SOFT_SPEED and CONFIG_SYS_I2C_SOFT_SLAVE 2119 CONFIG_SYS_I2C_SOFT_SPEED and CONFIG_SYS_I2C_SOFT_SLAVE
2127 for defining speed and slave address 2120 for defining speed and slave address
2128 - activate second bus with I2C_SOFT_DECLARATIONS2 define 2121 - activate second bus with I2C_SOFT_DECLARATIONS2 define
2129 CONFIG_SYS_I2C_SOFT_SPEED_2 and CONFIG_SYS_I2C_SOFT_SLAVE_2 2122 CONFIG_SYS_I2C_SOFT_SPEED_2 and CONFIG_SYS_I2C_SOFT_SLAVE_2
2130 for defining speed and slave address 2123 for defining speed and slave address
2131 - activate third bus with I2C_SOFT_DECLARATIONS3 define 2124 - activate third bus with I2C_SOFT_DECLARATIONS3 define
2132 CONFIG_SYS_I2C_SOFT_SPEED_3 and CONFIG_SYS_I2C_SOFT_SLAVE_3 2125 CONFIG_SYS_I2C_SOFT_SPEED_3 and CONFIG_SYS_I2C_SOFT_SLAVE_3
2133 for defining speed and slave address 2126 for defining speed and slave address
2134 - activate fourth bus with I2C_SOFT_DECLARATIONS4 define 2127 - activate fourth bus with I2C_SOFT_DECLARATIONS4 define
2135 CONFIG_SYS_I2C_SOFT_SPEED_4 and CONFIG_SYS_I2C_SOFT_SLAVE_4 2128 CONFIG_SYS_I2C_SOFT_SPEED_4 and CONFIG_SYS_I2C_SOFT_SLAVE_4
2136 for defining speed and slave address 2129 for defining speed and slave address
2137 2130
2138 - drivers/i2c/fsl_i2c.c: 2131 - drivers/i2c/fsl_i2c.c:
2139 - activate i2c driver with CONFIG_SYS_I2C_FSL 2132 - activate i2c driver with CONFIG_SYS_I2C_FSL
2140 define CONFIG_SYS_FSL_I2C_OFFSET for setting the register 2133 define CONFIG_SYS_FSL_I2C_OFFSET for setting the register
2141 offset CONFIG_SYS_FSL_I2C_SPEED for the i2c speed and 2134 offset CONFIG_SYS_FSL_I2C_SPEED for the i2c speed and
2142 CONFIG_SYS_FSL_I2C_SLAVE for the slave addr of the first 2135 CONFIG_SYS_FSL_I2C_SLAVE for the slave addr of the first
2143 bus. 2136 bus.
2144 - If your board supports a second fsl i2c bus, define 2137 - If your board supports a second fsl i2c bus, define
2145 CONFIG_SYS_FSL_I2C2_OFFSET for the register offset 2138 CONFIG_SYS_FSL_I2C2_OFFSET for the register offset
2146 CONFIG_SYS_FSL_I2C2_SPEED for the speed and 2139 CONFIG_SYS_FSL_I2C2_SPEED for the speed and
2147 CONFIG_SYS_FSL_I2C2_SLAVE for the slave address of the 2140 CONFIG_SYS_FSL_I2C2_SLAVE for the slave address of the
2148 second bus. 2141 second bus.
2149 2142
2150 - drivers/i2c/tegra_i2c.c: 2143 - drivers/i2c/tegra_i2c.c:
2151 - activate this driver with CONFIG_SYS_I2C_TEGRA 2144 - activate this driver with CONFIG_SYS_I2C_TEGRA
2152 - This driver adds 4 i2c buses with a fix speed from 2145 - This driver adds 4 i2c buses with a fix speed from
2153 100000 and the slave addr 0! 2146 100000 and the slave addr 0!
2154 2147
2155 - drivers/i2c/ppc4xx_i2c.c 2148 - drivers/i2c/ppc4xx_i2c.c
2156 - activate this driver with CONFIG_SYS_I2C_PPC4XX 2149 - activate this driver with CONFIG_SYS_I2C_PPC4XX
2157 - CONFIG_SYS_I2C_PPC4XX_CH0 activate hardware channel 0 2150 - CONFIG_SYS_I2C_PPC4XX_CH0 activate hardware channel 0
2158 - CONFIG_SYS_I2C_PPC4XX_CH1 activate hardware channel 1 2151 - CONFIG_SYS_I2C_PPC4XX_CH1 activate hardware channel 1
2159 2152
2160 - drivers/i2c/i2c_mxc.c 2153 - drivers/i2c/i2c_mxc.c
2161 - activate this driver with CONFIG_SYS_I2C_MXC 2154 - activate this driver with CONFIG_SYS_I2C_MXC
2162 - define speed for bus 1 with CONFIG_SYS_MXC_I2C1_SPEED 2155 - define speed for bus 1 with CONFIG_SYS_MXC_I2C1_SPEED
2163 - define slave for bus 1 with CONFIG_SYS_MXC_I2C1_SLAVE 2156 - define slave for bus 1 with CONFIG_SYS_MXC_I2C1_SLAVE
2164 - define speed for bus 2 with CONFIG_SYS_MXC_I2C2_SPEED 2157 - define speed for bus 2 with CONFIG_SYS_MXC_I2C2_SPEED
2165 - define slave for bus 2 with CONFIG_SYS_MXC_I2C2_SLAVE 2158 - define slave for bus 2 with CONFIG_SYS_MXC_I2C2_SLAVE
2166 - define speed for bus 3 with CONFIG_SYS_MXC_I2C3_SPEED 2159 - define speed for bus 3 with CONFIG_SYS_MXC_I2C3_SPEED
2167 - define slave for bus 3 with CONFIG_SYS_MXC_I2C3_SLAVE 2160 - define slave for bus 3 with CONFIG_SYS_MXC_I2C3_SLAVE
2168 If thoses defines are not set, default value is 100000 2161 If thoses defines are not set, default value is 100000
2169 for speed, and 0 for slave. 2162 for speed, and 0 for slave.
2170 2163
2171 - drivers/i2c/rcar_i2c.c: 2164 - drivers/i2c/rcar_i2c.c:
2172 - activate this driver with CONFIG_SYS_I2C_RCAR 2165 - activate this driver with CONFIG_SYS_I2C_RCAR
2173 - This driver adds 4 i2c buses 2166 - This driver adds 4 i2c buses
2174 2167
2175 - CONFIG_SYS_RCAR_I2C0_BASE for setting the register channel 0 2168 - CONFIG_SYS_RCAR_I2C0_BASE for setting the register channel 0
2176 - CONFIG_SYS_RCAR_I2C0_SPEED for for the speed channel 0 2169 - CONFIG_SYS_RCAR_I2C0_SPEED for for the speed channel 0
2177 - CONFIG_SYS_RCAR_I2C1_BASE for setting the register channel 1 2170 - CONFIG_SYS_RCAR_I2C1_BASE for setting the register channel 1
2178 - CONFIG_SYS_RCAR_I2C1_SPEED for for the speed channel 1 2171 - CONFIG_SYS_RCAR_I2C1_SPEED for for the speed channel 1
2179 - CONFIG_SYS_RCAR_I2C2_BASE for setting the register channel 2 2172 - CONFIG_SYS_RCAR_I2C2_BASE for setting the register channel 2
2180 - CONFIG_SYS_RCAR_I2C2_SPEED for for the speed channel 2 2173 - CONFIG_SYS_RCAR_I2C2_SPEED for for the speed channel 2
2181 - CONFIG_SYS_RCAR_I2C3_BASE for setting the register channel 3 2174 - CONFIG_SYS_RCAR_I2C3_BASE for setting the register channel 3
2182 - CONFIG_SYS_RCAR_I2C3_SPEED for for the speed channel 3 2175 - CONFIG_SYS_RCAR_I2C3_SPEED for for the speed channel 3
2183 - CONFIF_SYS_RCAR_I2C_NUM_CONTROLLERS for number of i2c buses 2176 - CONFIF_SYS_RCAR_I2C_NUM_CONTROLLERS for number of i2c buses
2184 2177
2185 - drivers/i2c/sh_i2c.c: 2178 - drivers/i2c/sh_i2c.c:
2186 - activate this driver with CONFIG_SYS_I2C_SH 2179 - activate this driver with CONFIG_SYS_I2C_SH
2187 - This driver adds from 2 to 5 i2c buses 2180 - This driver adds from 2 to 5 i2c buses
2188 2181
2189 - CONFIG_SYS_I2C_SH_BASE0 for setting the register channel 0 2182 - CONFIG_SYS_I2C_SH_BASE0 for setting the register channel 0
2190 - CONFIG_SYS_I2C_SH_SPEED0 for for the speed channel 0 2183 - CONFIG_SYS_I2C_SH_SPEED0 for for the speed channel 0
2191 - CONFIG_SYS_I2C_SH_BASE1 for setting the register channel 1 2184 - CONFIG_SYS_I2C_SH_BASE1 for setting the register channel 1
2192 - CONFIG_SYS_I2C_SH_SPEED1 for for the speed channel 1 2185 - CONFIG_SYS_I2C_SH_SPEED1 for for the speed channel 1
2193 - CONFIG_SYS_I2C_SH_BASE2 for setting the register channel 2 2186 - CONFIG_SYS_I2C_SH_BASE2 for setting the register channel 2
2194 - CONFIG_SYS_I2C_SH_SPEED2 for for the speed channel 2 2187 - CONFIG_SYS_I2C_SH_SPEED2 for for the speed channel 2
2195 - CONFIG_SYS_I2C_SH_BASE3 for setting the register channel 3 2188 - CONFIG_SYS_I2C_SH_BASE3 for setting the register channel 3
2196 - CONFIG_SYS_I2C_SH_SPEED3 for for the speed channel 3 2189 - CONFIG_SYS_I2C_SH_SPEED3 for for the speed channel 3
2197 - CONFIG_SYS_I2C_SH_BASE4 for setting the register channel 4 2190 - CONFIG_SYS_I2C_SH_BASE4 for setting the register channel 4
2198 - CONFIG_SYS_I2C_SH_SPEED4 for for the speed channel 4 2191 - CONFIG_SYS_I2C_SH_SPEED4 for for the speed channel 4
2199 - CONFIG_SYS_I2C_SH_BASE5 for setting the register channel 5 2192 - CONFIG_SYS_I2C_SH_BASE5 for setting the register channel 5
2200 - CONFIG_SYS_I2C_SH_SPEED5 for for the speed channel 5 2193 - CONFIG_SYS_I2C_SH_SPEED5 for for the speed channel 5
2201 - CONFIF_SYS_I2C_SH_NUM_CONTROLLERS for nummber of i2c buses 2194 - CONFIF_SYS_I2C_SH_NUM_CONTROLLERS for nummber of i2c buses
2202 2195
2203 - drivers/i2c/omap24xx_i2c.c 2196 - drivers/i2c/omap24xx_i2c.c
2204 - activate this driver with CONFIG_SYS_I2C_OMAP24XX 2197 - activate this driver with CONFIG_SYS_I2C_OMAP24XX
2205 - CONFIG_SYS_OMAP24_I2C_SPEED speed channel 0 2198 - CONFIG_SYS_OMAP24_I2C_SPEED speed channel 0
2206 - CONFIG_SYS_OMAP24_I2C_SLAVE slave addr channel 0 2199 - CONFIG_SYS_OMAP24_I2C_SLAVE slave addr channel 0
2207 - CONFIG_SYS_OMAP24_I2C_SPEED1 speed channel 1 2200 - CONFIG_SYS_OMAP24_I2C_SPEED1 speed channel 1
2208 - CONFIG_SYS_OMAP24_I2C_SLAVE1 slave addr channel 1 2201 - CONFIG_SYS_OMAP24_I2C_SLAVE1 slave addr channel 1
2209 - CONFIG_SYS_OMAP24_I2C_SPEED2 speed channel 2 2202 - CONFIG_SYS_OMAP24_I2C_SPEED2 speed channel 2
2210 - CONFIG_SYS_OMAP24_I2C_SLAVE2 slave addr channel 2 2203 - CONFIG_SYS_OMAP24_I2C_SLAVE2 slave addr channel 2
2211 - CONFIG_SYS_OMAP24_I2C_SPEED3 speed channel 3 2204 - CONFIG_SYS_OMAP24_I2C_SPEED3 speed channel 3
2212 - CONFIG_SYS_OMAP24_I2C_SLAVE3 slave addr channel 3 2205 - CONFIG_SYS_OMAP24_I2C_SLAVE3 slave addr channel 3
2213 - CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4 2206 - CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4
2214 - CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4 2207 - CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4
2215 2208
2216 - drivers/i2c/zynq_i2c.c 2209 - drivers/i2c/zynq_i2c.c
2217 - activate this driver with CONFIG_SYS_I2C_ZYNQ 2210 - activate this driver with CONFIG_SYS_I2C_ZYNQ
2218 - set CONFIG_SYS_I2C_ZYNQ_SPEED for speed setting 2211 - set CONFIG_SYS_I2C_ZYNQ_SPEED for speed setting
2219 - set CONFIG_SYS_I2C_ZYNQ_SLAVE for slave addr 2212 - set CONFIG_SYS_I2C_ZYNQ_SLAVE for slave addr
2220 2213
2221 - drivers/i2c/s3c24x0_i2c.c: 2214 - drivers/i2c/s3c24x0_i2c.c:
2222 - activate this driver with CONFIG_SYS_I2C_S3C24X0 2215 - activate this driver with CONFIG_SYS_I2C_S3C24X0
2223 - This driver adds i2c buses (11 for Exynos5250, Exynos5420 2216 - This driver adds i2c buses (11 for Exynos5250, Exynos5420
2224 9 i2c buses for Exynos4 and 1 for S3C24X0 SoCs from Samsung) 2217 9 i2c buses for Exynos4 and 1 for S3C24X0 SoCs from Samsung)
2225 with a fix speed from 100000 and the slave addr 0! 2218 with a fix speed from 100000 and the slave addr 0!
2226 2219
2227 additional defines: 2220 additional defines:
2228 2221
2229 CONFIG_SYS_NUM_I2C_BUSES 2222 CONFIG_SYS_NUM_I2C_BUSES
2230 Hold the number of i2c busses you want to use. If you 2223 Hold the number of i2c busses you want to use. If you
2231 don't use/have i2c muxes on your i2c bus, this 2224 don't use/have i2c muxes on your i2c bus, this
2232 is equal to CONFIG_SYS_NUM_I2C_ADAPTERS, and you can 2225 is equal to CONFIG_SYS_NUM_I2C_ADAPTERS, and you can
2233 omit this define. 2226 omit this define.
2234 2227
2235 CONFIG_SYS_I2C_DIRECT_BUS 2228 CONFIG_SYS_I2C_DIRECT_BUS
2236 define this, if you don't use i2c muxes on your hardware. 2229 define this, if you don't use i2c muxes on your hardware.
2237 if CONFIG_SYS_I2C_MAX_HOPS is not defined or == 0 you can 2230 if CONFIG_SYS_I2C_MAX_HOPS is not defined or == 0 you can
2238 omit this define. 2231 omit this define.
2239 2232
2240 CONFIG_SYS_I2C_MAX_HOPS 2233 CONFIG_SYS_I2C_MAX_HOPS
2241 define how many muxes are maximal consecutively connected 2234 define how many muxes are maximal consecutively connected
2242 on one i2c bus. If you not use i2c muxes, omit this 2235 on one i2c bus. If you not use i2c muxes, omit this
2243 define. 2236 define.
2244 2237
2245 CONFIG_SYS_I2C_BUSES 2238 CONFIG_SYS_I2C_BUSES
2246 hold a list of busses you want to use, only used if 2239 hold a list of busses you want to use, only used if
2247 CONFIG_SYS_I2C_DIRECT_BUS is not defined, for example 2240 CONFIG_SYS_I2C_DIRECT_BUS is not defined, for example
2248 a board with CONFIG_SYS_I2C_MAX_HOPS = 1 and 2241 a board with CONFIG_SYS_I2C_MAX_HOPS = 1 and
2249 CONFIG_SYS_NUM_I2C_BUSES = 9: 2242 CONFIG_SYS_NUM_I2C_BUSES = 9:
2250 2243
2251 CONFIG_SYS_I2C_BUSES {{0, {I2C_NULL_HOP}}, \ 2244 CONFIG_SYS_I2C_BUSES {{0, {I2C_NULL_HOP}}, \
2252 {0, {{I2C_MUX_PCA9547, 0x70, 1}}}, \ 2245 {0, {{I2C_MUX_PCA9547, 0x70, 1}}}, \
2253 {0, {{I2C_MUX_PCA9547, 0x70, 2}}}, \ 2246 {0, {{I2C_MUX_PCA9547, 0x70, 2}}}, \
2254 {0, {{I2C_MUX_PCA9547, 0x70, 3}}}, \ 2247 {0, {{I2C_MUX_PCA9547, 0x70, 3}}}, \
2255 {0, {{I2C_MUX_PCA9547, 0x70, 4}}}, \ 2248 {0, {{I2C_MUX_PCA9547, 0x70, 4}}}, \
2256 {0, {{I2C_MUX_PCA9547, 0x70, 5}}}, \ 2249 {0, {{I2C_MUX_PCA9547, 0x70, 5}}}, \
2257 {1, {I2C_NULL_HOP}}, \ 2250 {1, {I2C_NULL_HOP}}, \
2258 {1, {{I2C_MUX_PCA9544, 0x72, 1}}}, \ 2251 {1, {{I2C_MUX_PCA9544, 0x72, 1}}}, \
2259 {1, {{I2C_MUX_PCA9544, 0x72, 2}}}, \ 2252 {1, {{I2C_MUX_PCA9544, 0x72, 2}}}, \
2260 } 2253 }
2261 2254
2262 which defines 2255 which defines
2263 bus 0 on adapter 0 without a mux 2256 bus 0 on adapter 0 without a mux
2264 bus 1 on adapter 0 with a PCA9547 on address 0x70 port 1 2257 bus 1 on adapter 0 with a PCA9547 on address 0x70 port 1
2265 bus 2 on adapter 0 with a PCA9547 on address 0x70 port 2 2258 bus 2 on adapter 0 with a PCA9547 on address 0x70 port 2
2266 bus 3 on adapter 0 with a PCA9547 on address 0x70 port 3 2259 bus 3 on adapter 0 with a PCA9547 on address 0x70 port 3
2267 bus 4 on adapter 0 with a PCA9547 on address 0x70 port 4 2260 bus 4 on adapter 0 with a PCA9547 on address 0x70 port 4
2268 bus 5 on adapter 0 with a PCA9547 on address 0x70 port 5 2261 bus 5 on adapter 0 with a PCA9547 on address 0x70 port 5
2269 bus 6 on adapter 1 without a mux 2262 bus 6 on adapter 1 without a mux
2270 bus 7 on adapter 1 with a PCA9544 on address 0x72 port 1 2263 bus 7 on adapter 1 with a PCA9544 on address 0x72 port 1
2271 bus 8 on adapter 1 with a PCA9544 on address 0x72 port 2 2264 bus 8 on adapter 1 with a PCA9544 on address 0x72 port 2
2272 2265
2273 If you do not have i2c muxes on your board, omit this define. 2266 If you do not have i2c muxes on your board, omit this define.
2274 2267
2275 - Legacy I2C Support: CONFIG_HARD_I2C 2268 - Legacy I2C Support: CONFIG_HARD_I2C
2276 2269
2277 NOTE: It is intended to move drivers to CONFIG_SYS_I2C which 2270 NOTE: It is intended to move drivers to CONFIG_SYS_I2C which
2278 provides the following compelling advantages: 2271 provides the following compelling advantages:
2279 2272
2280 - more than one i2c adapter is usable 2273 - more than one i2c adapter is usable
2281 - approved multibus support 2274 - approved multibus support
2282 - better i2c mux support 2275 - better i2c mux support
2283 2276
2284 ** Please consider updating your I2C driver now. ** 2277 ** Please consider updating your I2C driver now. **
2285 2278
2286 These enable legacy I2C serial bus commands. Defining 2279 These enable legacy I2C serial bus commands. Defining
2287 CONFIG_HARD_I2C will include the appropriate I2C driver 2280 CONFIG_HARD_I2C will include the appropriate I2C driver
2288 for the selected CPU. 2281 for the selected CPU.
2289 2282
2290 This will allow you to use i2c commands at the u-boot 2283 This will allow you to use i2c commands at the u-boot
2291 command line (as long as you set CONFIG_CMD_I2C in 2284 command line (as long as you set CONFIG_CMD_I2C in
2292 CONFIG_COMMANDS) and communicate with i2c based realtime 2285 CONFIG_COMMANDS) and communicate with i2c based realtime
2293 clock chips. See common/cmd_i2c.c for a description of the 2286 clock chips. See common/cmd_i2c.c for a description of the
2294 command line interface. 2287 command line interface.
2295 2288
2296 CONFIG_HARD_I2C selects a hardware I2C controller. 2289 CONFIG_HARD_I2C selects a hardware I2C controller.
2297 2290
2298 There are several other quantities that must also be 2291 There are several other quantities that must also be
2299 defined when you define CONFIG_HARD_I2C. 2292 defined when you define CONFIG_HARD_I2C.
2300 2293
2301 In both cases you will need to define CONFIG_SYS_I2C_SPEED 2294 In both cases you will need to define CONFIG_SYS_I2C_SPEED
2302 to be the frequency (in Hz) at which you wish your i2c bus 2295 to be the frequency (in Hz) at which you wish your i2c bus
2303 to run and CONFIG_SYS_I2C_SLAVE to be the address of this node (ie 2296 to run and CONFIG_SYS_I2C_SLAVE to be the address of this node (ie
2304 the CPU's i2c node address). 2297 the CPU's i2c node address).
2305 2298
2306 Now, the u-boot i2c code for the mpc8xx 2299 Now, the u-boot i2c code for the mpc8xx
2307 (arch/powerpc/cpu/mpc8xx/i2c.c) sets the CPU up as a master node 2300 (arch/powerpc/cpu/mpc8xx/i2c.c) sets the CPU up as a master node
2308 and so its address should therefore be cleared to 0 (See, 2301 and so its address should therefore be cleared to 0 (See,
2309 eg, MPC823e User's Manual p.16-473). So, set 2302 eg, MPC823e User's Manual p.16-473). So, set
2310 CONFIG_SYS_I2C_SLAVE to 0. 2303 CONFIG_SYS_I2C_SLAVE to 0.
2311 2304
2312 CONFIG_SYS_I2C_INIT_MPC5XXX 2305 CONFIG_SYS_I2C_INIT_MPC5XXX
2313 2306
2314 When a board is reset during an i2c bus transfer 2307 When a board is reset during an i2c bus transfer
2315 chips might think that the current transfer is still 2308 chips might think that the current transfer is still
2316 in progress. Reset the slave devices by sending start 2309 in progress. Reset the slave devices by sending start
2317 commands until the slave device responds. 2310 commands until the slave device responds.
2318 2311
2319 That's all that's required for CONFIG_HARD_I2C. 2312 That's all that's required for CONFIG_HARD_I2C.
2320 2313
2321 If you use the software i2c interface (CONFIG_SYS_I2C_SOFT) 2314 If you use the software i2c interface (CONFIG_SYS_I2C_SOFT)
2322 then the following macros need to be defined (examples are 2315 then the following macros need to be defined (examples are
2323 from include/configs/lwmon.h): 2316 from include/configs/lwmon.h):
2324 2317
2325 I2C_INIT 2318 I2C_INIT
2326 2319
2327 (Optional). Any commands necessary to enable the I2C 2320 (Optional). Any commands necessary to enable the I2C
2328 controller or configure ports. 2321 controller or configure ports.
2329 2322
2330 eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) 2323 eg: #define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL)
2331 2324
2332 I2C_PORT 2325 I2C_PORT
2333 2326
2334 (Only for MPC8260 CPU). The I/O port to use (the code 2327 (Only for MPC8260 CPU). The I/O port to use (the code
2335 assumes both bits are on the same port). Valid values 2328 assumes both bits are on the same port). Valid values
2336 are 0..3 for ports A..D. 2329 are 0..3 for ports A..D.
2337 2330
2338 I2C_ACTIVE 2331 I2C_ACTIVE
2339 2332
2340 The code necessary to make the I2C data line active 2333 The code necessary to make the I2C data line active
2341 (driven). If the data line is open collector, this 2334 (driven). If the data line is open collector, this
2342 define can be null. 2335 define can be null.
2343 2336
2344 eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) 2337 eg: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA)
2345 2338
2346 I2C_TRISTATE 2339 I2C_TRISTATE
2347 2340
2348 The code necessary to make the I2C data line tri-stated 2341 The code necessary to make the I2C data line tri-stated
2349 (inactive). If the data line is open collector, this 2342 (inactive). If the data line is open collector, this
2350 define can be null. 2343 define can be null.
2351 2344
2352 eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) 2345 eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
2353 2346
2354 I2C_READ 2347 I2C_READ
2355 2348
2356 Code that returns true if the I2C data line is high, 2349 Code that returns true if the I2C data line is high,
2357 false if it is low. 2350 false if it is low.
2358 2351
2359 eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) 2352 eg: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
2360 2353
2361 I2C_SDA(bit) 2354 I2C_SDA(bit)
2362 2355
2363 If <bit> is true, sets the I2C data line high. If it 2356 If <bit> is true, sets the I2C data line high. If it
2364 is false, it clears it (low). 2357 is false, it clears it (low).
2365 2358
2366 eg: #define I2C_SDA(bit) \ 2359 eg: #define I2C_SDA(bit) \
2367 if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ 2360 if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \
2368 else immr->im_cpm.cp_pbdat &= ~PB_SDA 2361 else immr->im_cpm.cp_pbdat &= ~PB_SDA
2369 2362
2370 I2C_SCL(bit) 2363 I2C_SCL(bit)
2371 2364
2372 If <bit> is true, sets the I2C clock line high. If it 2365 If <bit> is true, sets the I2C clock line high. If it
2373 is false, it clears it (low). 2366 is false, it clears it (low).
2374 2367
2375 eg: #define I2C_SCL(bit) \ 2368 eg: #define I2C_SCL(bit) \
2376 if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ 2369 if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \
2377 else immr->im_cpm.cp_pbdat &= ~PB_SCL 2370 else immr->im_cpm.cp_pbdat &= ~PB_SCL
2378 2371
2379 I2C_DELAY 2372 I2C_DELAY
2380 2373
2381 This delay is invoked four times per clock cycle so this 2374 This delay is invoked four times per clock cycle so this
2382 controls the rate of data transfer. The data rate thus 2375 controls the rate of data transfer. The data rate thus
2383 is 1 / (I2C_DELAY * 4). Often defined to be something 2376 is 1 / (I2C_DELAY * 4). Often defined to be something
2384 like: 2377 like:
2385 2378
2386 #define I2C_DELAY udelay(2) 2379 #define I2C_DELAY udelay(2)
2387 2380
2388 CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA 2381 CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA
2389 2382
2390 If your arch supports the generic GPIO framework (asm/gpio.h), 2383 If your arch supports the generic GPIO framework (asm/gpio.h),
2391 then you may alternatively define the two GPIOs that are to be 2384 then you may alternatively define the two GPIOs that are to be
2392 used as SCL / SDA. Any of the previous I2C_xxx macros will 2385 used as SCL / SDA. Any of the previous I2C_xxx macros will
2393 have GPIO-based defaults assigned to them as appropriate. 2386 have GPIO-based defaults assigned to them as appropriate.
2394 2387
2395 You should define these to the GPIO value as given directly to 2388 You should define these to the GPIO value as given directly to
2396 the generic GPIO functions. 2389 the generic GPIO functions.
2397 2390
2398 CONFIG_SYS_I2C_INIT_BOARD 2391 CONFIG_SYS_I2C_INIT_BOARD
2399 2392
2400 When a board is reset during an i2c bus transfer 2393 When a board is reset during an i2c bus transfer
2401 chips might think that the current transfer is still 2394 chips might think that the current transfer is still
2402 in progress. On some boards it is possible to access 2395 in progress. On some boards it is possible to access
2403 the i2c SCLK line directly, either by using the 2396 the i2c SCLK line directly, either by using the
2404 processor pin as a GPIO or by having a second pin 2397 processor pin as a GPIO or by having a second pin
2405 connected to the bus. If this option is defined a 2398 connected to the bus. If this option is defined a
2406 custom i2c_init_board() routine in boards/xxx/board.c 2399 custom i2c_init_board() routine in boards/xxx/board.c
2407 is run early in the boot sequence. 2400 is run early in the boot sequence.
2408 2401
2409 CONFIG_SYS_I2C_BOARD_LATE_INIT 2402 CONFIG_SYS_I2C_BOARD_LATE_INIT
2410 2403
2411 An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is 2404 An alternative to CONFIG_SYS_I2C_INIT_BOARD. If this option is
2412 defined a custom i2c_board_late_init() routine in 2405 defined a custom i2c_board_late_init() routine in
2413 boards/xxx/board.c is run AFTER the operations in i2c_init() 2406 boards/xxx/board.c is run AFTER the operations in i2c_init()
2414 is completed. This callpoint can be used to unreset i2c bus 2407 is completed. This callpoint can be used to unreset i2c bus
2415 using CPU i2c controller register accesses for CPUs whose i2c 2408 using CPU i2c controller register accesses for CPUs whose i2c
2416 controller provide such a method. It is called at the end of 2409 controller provide such a method. It is called at the end of
2417 i2c_init() to allow i2c_init operations to setup the i2c bus 2410 i2c_init() to allow i2c_init operations to setup the i2c bus
2418 controller on the CPU (e.g. setting bus speed & slave address). 2411 controller on the CPU (e.g. setting bus speed & slave address).
2419 2412
2420 CONFIG_I2CFAST (PPC405GP|PPC405EP only) 2413 CONFIG_I2CFAST (PPC405GP|PPC405EP only)
2421 2414
2422 This option enables configuration of bi_iic_fast[] flags 2415 This option enables configuration of bi_iic_fast[] flags
2423 in u-boot bd_info structure based on u-boot environment 2416 in u-boot bd_info structure based on u-boot environment
2424 variable "i2cfast". (see also i2cfast) 2417 variable "i2cfast". (see also i2cfast)
2425 2418
2426 CONFIG_I2C_MULTI_BUS 2419 CONFIG_I2C_MULTI_BUS
2427 2420
2428 This option allows the use of multiple I2C buses, each of which 2421 This option allows the use of multiple I2C buses, each of which
2429 must have a controller. At any point in time, only one bus is 2422 must have a controller. At any point in time, only one bus is
2430 active. To switch to a different bus, use the 'i2c dev' command. 2423 active. To switch to a different bus, use the 'i2c dev' command.
2431 Note that bus numbering is zero-based. 2424 Note that bus numbering is zero-based.
2432 2425
2433 CONFIG_SYS_I2C_NOPROBES 2426 CONFIG_SYS_I2C_NOPROBES
2434 2427
2435 This option specifies a list of I2C devices that will be skipped 2428 This option specifies a list of I2C devices that will be skipped
2436 when the 'i2c probe' command is issued. If CONFIG_I2C_MULTI_BUS 2429 when the 'i2c probe' command is issued. If CONFIG_I2C_MULTI_BUS
2437 is set, specify a list of bus-device pairs. Otherwise, specify 2430 is set, specify a list of bus-device pairs. Otherwise, specify
2438 a 1D array of device addresses 2431 a 1D array of device addresses
2439 2432
2440 e.g. 2433 e.g.
2441 #undef CONFIG_I2C_MULTI_BUS 2434 #undef CONFIG_I2C_MULTI_BUS
2442 #define CONFIG_SYS_I2C_NOPROBES {0x50,0x68} 2435 #define CONFIG_SYS_I2C_NOPROBES {0x50,0x68}
2443 2436
2444 will skip addresses 0x50 and 0x68 on a board with one I2C bus 2437 will skip addresses 0x50 and 0x68 on a board with one I2C bus
2445 2438
2446 #define CONFIG_I2C_MULTI_BUS 2439 #define CONFIG_I2C_MULTI_BUS
2447 #define CONFIG_SYS_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}} 2440 #define CONFIG_SYS_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}}
2448 2441
2449 will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1 2442 will skip addresses 0x50 and 0x68 on bus 0 and address 0x54 on bus 1
2450 2443
2451 CONFIG_SYS_SPD_BUS_NUM 2444 CONFIG_SYS_SPD_BUS_NUM
2452 2445
2453 If defined, then this indicates the I2C bus number for DDR SPD. 2446 If defined, then this indicates the I2C bus number for DDR SPD.
2454 If not defined, then U-Boot assumes that SPD is on I2C bus 0. 2447 If not defined, then U-Boot assumes that SPD is on I2C bus 0.
2455 2448
2456 CONFIG_SYS_RTC_BUS_NUM 2449 CONFIG_SYS_RTC_BUS_NUM
2457 2450
2458 If defined, then this indicates the I2C bus number for the RTC. 2451 If defined, then this indicates the I2C bus number for the RTC.
2459 If not defined, then U-Boot assumes that RTC is on I2C bus 0. 2452 If not defined, then U-Boot assumes that RTC is on I2C bus 0.
2460 2453
2461 CONFIG_SYS_DTT_BUS_NUM 2454 CONFIG_SYS_DTT_BUS_NUM
2462 2455
2463 If defined, then this indicates the I2C bus number for the DTT. 2456 If defined, then this indicates the I2C bus number for the DTT.
2464 If not defined, then U-Boot assumes that DTT is on I2C bus 0. 2457 If not defined, then U-Boot assumes that DTT is on I2C bus 0.
2465 2458
2466 CONFIG_SYS_I2C_DTT_ADDR: 2459 CONFIG_SYS_I2C_DTT_ADDR:
2467 2460
2468 If defined, specifies the I2C address of the DTT device. 2461 If defined, specifies the I2C address of the DTT device.
2469 If not defined, then U-Boot uses predefined value for 2462 If not defined, then U-Boot uses predefined value for
2470 specified DTT device. 2463 specified DTT device.
2471 2464
2472 CONFIG_SOFT_I2C_READ_REPEATED_START 2465 CONFIG_SOFT_I2C_READ_REPEATED_START
2473 2466
2474 defining this will force the i2c_read() function in 2467 defining this will force the i2c_read() function in
2475 the soft_i2c driver to perform an I2C repeated start 2468 the soft_i2c driver to perform an I2C repeated start
2476 between writing the address pointer and reading the 2469 between writing the address pointer and reading the
2477 data. If this define is omitted the default behaviour 2470 data. If this define is omitted the default behaviour
2478 of doing a stop-start sequence will be used. Most I2C 2471 of doing a stop-start sequence will be used. Most I2C
2479 devices can use either method, but some require one or 2472 devices can use either method, but some require one or
2480 the other. 2473 the other.
2481 2474
2482 - SPI Support: CONFIG_SPI 2475 - SPI Support: CONFIG_SPI
2483 2476
2484 Enables SPI driver (so far only tested with 2477 Enables SPI driver (so far only tested with
2485 SPI EEPROM, also an instance works with Crystal A/D and 2478 SPI EEPROM, also an instance works with Crystal A/D and
2486 D/As on the SACSng board) 2479 D/As on the SACSng board)
2487 2480
2488 CONFIG_SH_SPI 2481 CONFIG_SH_SPI
2489 2482
2490 Enables the driver for SPI controller on SuperH. Currently 2483 Enables the driver for SPI controller on SuperH. Currently
2491 only SH7757 is supported. 2484 only SH7757 is supported.
2492 2485
2493 CONFIG_SPI_X 2486 CONFIG_SPI_X
2494 2487
2495 Enables extended (16-bit) SPI EEPROM addressing. 2488 Enables extended (16-bit) SPI EEPROM addressing.
2496 (symmetrical to CONFIG_I2C_X) 2489 (symmetrical to CONFIG_I2C_X)
2497 2490
2498 CONFIG_SOFT_SPI 2491 CONFIG_SOFT_SPI
2499 2492
2500 Enables a software (bit-bang) SPI driver rather than 2493 Enables a software (bit-bang) SPI driver rather than
2501 using hardware support. This is a general purpose 2494 using hardware support. This is a general purpose
2502 driver that only requires three general I/O port pins 2495 driver that only requires three general I/O port pins
2503 (two outputs, one input) to function. If this is 2496 (two outputs, one input) to function. If this is
2504 defined, the board configuration must define several 2497 defined, the board configuration must define several
2505 SPI configuration items (port pins to use, etc). For 2498 SPI configuration items (port pins to use, etc). For
2506 an example, see include/configs/sacsng.h. 2499 an example, see include/configs/sacsng.h.
2507 2500
2508 CONFIG_HARD_SPI 2501 CONFIG_HARD_SPI
2509 2502
2510 Enables a hardware SPI driver for general-purpose reads 2503 Enables a hardware SPI driver for general-purpose reads
2511 and writes. As with CONFIG_SOFT_SPI, the board configuration 2504 and writes. As with CONFIG_SOFT_SPI, the board configuration
2512 must define a list of chip-select function pointers. 2505 must define a list of chip-select function pointers.
2513 Currently supported on some MPC8xxx processors. For an 2506 Currently supported on some MPC8xxx processors. For an
2514 example, see include/configs/mpc8349emds.h. 2507 example, see include/configs/mpc8349emds.h.
2515 2508
2516 CONFIG_MXC_SPI 2509 CONFIG_MXC_SPI
2517 2510
2518 Enables the driver for the SPI controllers on i.MX and MXC 2511 Enables the driver for the SPI controllers on i.MX and MXC
2519 SoCs. Currently i.MX31/35/51 are supported. 2512 SoCs. Currently i.MX31/35/51 are supported.
2520 2513
2521 - FPGA Support: CONFIG_FPGA 2514 - FPGA Support: CONFIG_FPGA
2522 2515
2523 Enables FPGA subsystem. 2516 Enables FPGA subsystem.
2524 2517
2525 CONFIG_FPGA_<vendor> 2518 CONFIG_FPGA_<vendor>
2526 2519
2527 Enables support for specific chip vendors. 2520 Enables support for specific chip vendors.
2528 (ALTERA, XILINX) 2521 (ALTERA, XILINX)
2529 2522
2530 CONFIG_FPGA_<family> 2523 CONFIG_FPGA_<family>
2531 2524
2532 Enables support for FPGA family. 2525 Enables support for FPGA family.
2533 (SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX) 2526 (SPARTAN2, SPARTAN3, VIRTEX2, CYCLONE2, ACEX1K, ACEX)
2534 2527
2535 CONFIG_FPGA_COUNT 2528 CONFIG_FPGA_COUNT
2536 2529
2537 Specify the number of FPGA devices to support. 2530 Specify the number of FPGA devices to support.
2538 2531
2539 CONFIG_SYS_FPGA_PROG_FEEDBACK 2532 CONFIG_SYS_FPGA_PROG_FEEDBACK
2540 2533
2541 Enable printing of hash marks during FPGA configuration. 2534 Enable printing of hash marks during FPGA configuration.
2542 2535
2543 CONFIG_SYS_FPGA_CHECK_BUSY 2536 CONFIG_SYS_FPGA_CHECK_BUSY
2544 2537
2545 Enable checks on FPGA configuration interface busy 2538 Enable checks on FPGA configuration interface busy
2546 status by the configuration function. This option 2539 status by the configuration function. This option
2547 will require a board or device specific function to 2540 will require a board or device specific function to
2548 be written. 2541 be written.
2549 2542
2550 CONFIG_FPGA_DELAY 2543 CONFIG_FPGA_DELAY
2551 2544
2552 If defined, a function that provides delays in the FPGA 2545 If defined, a function that provides delays in the FPGA
2553 configuration driver. 2546 configuration driver.
2554 2547
2555 CONFIG_SYS_FPGA_CHECK_CTRLC 2548 CONFIG_SYS_FPGA_CHECK_CTRLC
2556 Allow Control-C to interrupt FPGA configuration 2549 Allow Control-C to interrupt FPGA configuration
2557 2550
2558 CONFIG_SYS_FPGA_CHECK_ERROR 2551 CONFIG_SYS_FPGA_CHECK_ERROR
2559 2552
2560 Check for configuration errors during FPGA bitfile 2553 Check for configuration errors during FPGA bitfile
2561 loading. For example, abort during Virtex II 2554 loading. For example, abort during Virtex II
2562 configuration if the INIT_B line goes low (which 2555 configuration if the INIT_B line goes low (which
2563 indicated a CRC error). 2556 indicated a CRC error).
2564 2557
2565 CONFIG_SYS_FPGA_WAIT_INIT 2558 CONFIG_SYS_FPGA_WAIT_INIT
2566 2559
2567 Maximum time to wait for the INIT_B line to deassert 2560 Maximum time to wait for the INIT_B line to deassert
2568 after PROB_B has been deasserted during a Virtex II 2561 after PROB_B has been deasserted during a Virtex II
2569 FPGA configuration sequence. The default time is 500 2562 FPGA configuration sequence. The default time is 500
2570 ms. 2563 ms.
2571 2564
2572 CONFIG_SYS_FPGA_WAIT_BUSY 2565 CONFIG_SYS_FPGA_WAIT_BUSY
2573 2566
2574 Maximum time to wait for BUSY to deassert during 2567 Maximum time to wait for BUSY to deassert during
2575 Virtex II FPGA configuration. The default is 5 ms. 2568 Virtex II FPGA configuration. The default is 5 ms.
2576 2569
2577 CONFIG_SYS_FPGA_WAIT_CONFIG 2570 CONFIG_SYS_FPGA_WAIT_CONFIG
2578 2571
2579 Time to wait after FPGA configuration. The default is 2572 Time to wait after FPGA configuration. The default is
2580 200 ms. 2573 200 ms.
2581 2574
2582 - Configuration Management: 2575 - Configuration Management:
2583 CONFIG_IDENT_STRING 2576 CONFIG_IDENT_STRING
2584 2577
2585 If defined, this string will be added to the U-Boot 2578 If defined, this string will be added to the U-Boot
2586 version information (U_BOOT_VERSION) 2579 version information (U_BOOT_VERSION)
2587 2580
2588 - Vendor Parameter Protection: 2581 - Vendor Parameter Protection:
2589 2582
2590 U-Boot considers the values of the environment 2583 U-Boot considers the values of the environment
2591 variables "serial#" (Board Serial Number) and 2584 variables "serial#" (Board Serial Number) and
2592 "ethaddr" (Ethernet Address) to be parameters that 2585 "ethaddr" (Ethernet Address) to be parameters that
2593 are set once by the board vendor / manufacturer, and 2586 are set once by the board vendor / manufacturer, and
2594 protects these variables from casual modification by 2587 protects these variables from casual modification by
2595 the user. Once set, these variables are read-only, 2588 the user. Once set, these variables are read-only,
2596 and write or delete attempts are rejected. You can 2589 and write or delete attempts are rejected. You can
2597 change this behaviour: 2590 change this behaviour:
2598 2591
2599 If CONFIG_ENV_OVERWRITE is #defined in your config 2592 If CONFIG_ENV_OVERWRITE is #defined in your config
2600 file, the write protection for vendor parameters is 2593 file, the write protection for vendor parameters is
2601 completely disabled. Anybody can change or delete 2594 completely disabled. Anybody can change or delete
2602 these parameters. 2595 these parameters.
2603 2596
2604 Alternatively, if you #define _both_ CONFIG_ETHADDR 2597 Alternatively, if you #define _both_ CONFIG_ETHADDR
2605 _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default 2598 _and_ CONFIG_OVERWRITE_ETHADDR_ONCE, a default
2606 Ethernet address is installed in the environment, 2599 Ethernet address is installed in the environment,
2607 which can be changed exactly ONCE by the user. [The 2600 which can be changed exactly ONCE by the user. [The
2608 serial# is unaffected by this, i. e. it remains 2601 serial# is unaffected by this, i. e. it remains
2609 read-only.] 2602 read-only.]
2610 2603
2611 The same can be accomplished in a more flexible way 2604 The same can be accomplished in a more flexible way
2612 for any variable by configuring the type of access 2605 for any variable by configuring the type of access
2613 to allow for those variables in the ".flags" variable 2606 to allow for those variables in the ".flags" variable
2614 or define CONFIG_ENV_FLAGS_LIST_STATIC. 2607 or define CONFIG_ENV_FLAGS_LIST_STATIC.
2615 2608
2616 - Protected RAM: 2609 - Protected RAM:
2617 CONFIG_PRAM 2610 CONFIG_PRAM
2618 2611
2619 Define this variable to enable the reservation of 2612 Define this variable to enable the reservation of
2620 "protected RAM", i. e. RAM which is not overwritten 2613 "protected RAM", i. e. RAM which is not overwritten
2621 by U-Boot. Define CONFIG_PRAM to hold the number of 2614 by U-Boot. Define CONFIG_PRAM to hold the number of
2622 kB you want to reserve for pRAM. You can overwrite 2615 kB you want to reserve for pRAM. You can overwrite
2623 this default value by defining an environment 2616 this default value by defining an environment
2624 variable "pram" to the number of kB you want to 2617 variable "pram" to the number of kB you want to
2625 reserve. Note that the board info structure will 2618 reserve. Note that the board info structure will
2626 still show the full amount of RAM. If pRAM is 2619 still show the full amount of RAM. If pRAM is
2627 reserved, a new environment variable "mem" will 2620 reserved, a new environment variable "mem" will
2628 automatically be defined to hold the amount of 2621 automatically be defined to hold the amount of
2629 remaining RAM in a form that can be passed as boot 2622 remaining RAM in a form that can be passed as boot
2630 argument to Linux, for instance like that: 2623 argument to Linux, for instance like that:
2631 2624
2632 setenv bootargs ... mem=\${mem} 2625 setenv bootargs ... mem=\${mem}
2633 saveenv 2626 saveenv
2634 2627
2635 This way you can tell Linux not to use this memory, 2628 This way you can tell Linux not to use this memory,
2636 either, which results in a memory region that will 2629 either, which results in a memory region that will
2637 not be affected by reboots. 2630 not be affected by reboots.
2638 2631
2639 *WARNING* If your board configuration uses automatic 2632 *WARNING* If your board configuration uses automatic
2640 detection of the RAM size, you must make sure that 2633 detection of the RAM size, you must make sure that
2641 this memory test is non-destructive. So far, the 2634 this memory test is non-destructive. So far, the
2642 following board configurations are known to be 2635 following board configurations are known to be
2643 "pRAM-clean": 2636 "pRAM-clean":
2644 2637
2645 IVMS8, IVML24, SPD8xx, TQM8xxL, 2638 IVMS8, IVML24, SPD8xx, TQM8xxL,
2646 HERMES, IP860, RPXlite, LWMON, 2639 HERMES, IP860, RPXlite, LWMON,
2647 FLAGADM, TQM8260 2640 FLAGADM, TQM8260
2648 2641
2649 - Access to physical memory region (> 4GB) 2642 - Access to physical memory region (> 4GB)
2650 Some basic support is provided for operations on memory not 2643 Some basic support is provided for operations on memory not
2651 normally accessible to U-Boot - e.g. some architectures 2644 normally accessible to U-Boot - e.g. some architectures
2652 support access to more than 4GB of memory on 32-bit 2645 support access to more than 4GB of memory on 32-bit
2653 machines using physical address extension or similar. 2646 machines using physical address extension or similar.
2654 Define CONFIG_PHYSMEM to access this basic support, which 2647 Define CONFIG_PHYSMEM to access this basic support, which
2655 currently only supports clearing the memory. 2648 currently only supports clearing the memory.
2656 2649
2657 - Error Recovery: 2650 - Error Recovery:
2658 CONFIG_PANIC_HANG 2651 CONFIG_PANIC_HANG
2659 2652
2660 Define this variable to stop the system in case of a 2653 Define this variable to stop the system in case of a
2661 fatal error, so that you have to reset it manually. 2654 fatal error, so that you have to reset it manually.
2662 This is probably NOT a good idea for an embedded 2655 This is probably NOT a good idea for an embedded
2663 system where you want the system to reboot 2656 system where you want the system to reboot
2664 automatically as fast as possible, but it may be 2657 automatically as fast as possible, but it may be
2665 useful during development since you can try to debug 2658 useful during development since you can try to debug
2666 the conditions that lead to the situation. 2659 the conditions that lead to the situation.
2667 2660
2668 CONFIG_NET_RETRY_COUNT 2661 CONFIG_NET_RETRY_COUNT
2669 2662
2670 This variable defines the number of retries for 2663 This variable defines the number of retries for
2671 network operations like ARP, RARP, TFTP, or BOOTP 2664 network operations like ARP, RARP, TFTP, or BOOTP
2672 before giving up the operation. If not defined, a 2665 before giving up the operation. If not defined, a
2673 default value of 5 is used. 2666 default value of 5 is used.
2674 2667
2675 CONFIG_ARP_TIMEOUT 2668 CONFIG_ARP_TIMEOUT
2676 2669
2677 Timeout waiting for an ARP reply in milliseconds. 2670 Timeout waiting for an ARP reply in milliseconds.
2678 2671
2679 CONFIG_NFS_TIMEOUT 2672 CONFIG_NFS_TIMEOUT
2680 2673
2681 Timeout in milliseconds used in NFS protocol. 2674 Timeout in milliseconds used in NFS protocol.
2682 If you encounter "ERROR: Cannot umount" in nfs command, 2675 If you encounter "ERROR: Cannot umount" in nfs command,
2683 try longer timeout such as 2676 try longer timeout such as
2684 #define CONFIG_NFS_TIMEOUT 10000UL 2677 #define CONFIG_NFS_TIMEOUT 10000UL
2685 2678
2686 - Command Interpreter: 2679 - Command Interpreter:
2687 CONFIG_AUTO_COMPLETE 2680 CONFIG_AUTO_COMPLETE
2688 2681
2689 Enable auto completion of commands using TAB. 2682 Enable auto completion of commands using TAB.
2690 2683
2691 Note that this feature has NOT been implemented yet 2684 Note that this feature has NOT been implemented yet
2692 for the "hush" shell. 2685 for the "hush" shell.
2693 2686
2694 2687
2695 CONFIG_SYS_HUSH_PARSER 2688 CONFIG_SYS_HUSH_PARSER
2696 2689
2697 Define this variable to enable the "hush" shell (from 2690 Define this variable to enable the "hush" shell (from
2698 Busybox) as command line interpreter, thus enabling 2691 Busybox) as command line interpreter, thus enabling
2699 powerful command line syntax like 2692 powerful command line syntax like
2700 if...then...else...fi conditionals or `&&' and '||' 2693 if...then...else...fi conditionals or `&&' and '||'
2701 constructs ("shell scripts"). 2694 constructs ("shell scripts").
2702 2695
2703 If undefined, you get the old, much simpler behaviour 2696 If undefined, you get the old, much simpler behaviour
2704 with a somewhat smaller memory footprint. 2697 with a somewhat smaller memory footprint.
2705 2698
2706 2699
2707 CONFIG_SYS_PROMPT_HUSH_PS2 2700 CONFIG_SYS_PROMPT_HUSH_PS2
2708 2701
2709 This defines the secondary prompt string, which is 2702 This defines the secondary prompt string, which is
2710 printed when the command interpreter needs more input 2703 printed when the command interpreter needs more input
2711 to complete a command. Usually "> ". 2704 to complete a command. Usually "> ".
2712 2705
2713 Note: 2706 Note:
2714 2707
2715 In the current implementation, the local variables 2708 In the current implementation, the local variables
2716 space and global environment variables space are 2709 space and global environment variables space are
2717 separated. Local variables are those you define by 2710 separated. Local variables are those you define by
2718 simply typing `name=value'. To access a local 2711 simply typing `name=value'. To access a local
2719 variable later on, you have write `$name' or 2712 variable later on, you have write `$name' or
2720 `${name}'; to execute the contents of a variable 2713 `${name}'; to execute the contents of a variable
2721 directly type `$name' at the command prompt. 2714 directly type `$name' at the command prompt.
2722 2715
2723 Global environment variables are those you use 2716 Global environment variables are those you use
2724 setenv/printenv to work with. To run a command stored 2717 setenv/printenv to work with. To run a command stored
2725 in such a variable, you need to use the run command, 2718 in such a variable, you need to use the run command,
2726 and you must not use the '$' sign to access them. 2719 and you must not use the '$' sign to access them.
2727 2720
2728 To store commands and special characters in a 2721 To store commands and special characters in a
2729 variable, please use double quotation marks 2722 variable, please use double quotation marks
2730 surrounding the whole text of the variable, instead 2723 surrounding the whole text of the variable, instead
2731 of the backslashes before semicolons and special 2724 of the backslashes before semicolons and special
2732 symbols. 2725 symbols.
2733 2726
2734 - Commandline Editing and History: 2727 - Commandline Editing and History:
2735 CONFIG_CMDLINE_EDITING 2728 CONFIG_CMDLINE_EDITING
2736 2729
2737 Enable editing and History functions for interactive 2730 Enable editing and History functions for interactive
2738 commandline input operations 2731 commandline input operations
2739 2732
2740 - Default Environment: 2733 - Default Environment:
2741 CONFIG_EXTRA_ENV_SETTINGS 2734 CONFIG_EXTRA_ENV_SETTINGS
2742 2735
2743 Define this to contain any number of null terminated 2736 Define this to contain any number of null terminated
2744 strings (variable = value pairs) that will be part of 2737 strings (variable = value pairs) that will be part of
2745 the default environment compiled into the boot image. 2738 the default environment compiled into the boot image.
2746 2739
2747 For example, place something like this in your 2740 For example, place something like this in your
2748 board's config file: 2741 board's config file:
2749 2742
2750 #define CONFIG_EXTRA_ENV_SETTINGS \ 2743 #define CONFIG_EXTRA_ENV_SETTINGS \
2751 "myvar1=value1\0" \ 2744 "myvar1=value1\0" \
2752 "myvar2=value2\0" 2745 "myvar2=value2\0"
2753 2746
2754 Warning: This method is based on knowledge about the 2747 Warning: This method is based on knowledge about the
2755 internal format how the environment is stored by the 2748 internal format how the environment is stored by the
2756 U-Boot code. This is NOT an official, exported 2749 U-Boot code. This is NOT an official, exported
2757 interface! Although it is unlikely that this format 2750 interface! Although it is unlikely that this format
2758 will change soon, there is no guarantee either. 2751 will change soon, there is no guarantee either.
2759 You better know what you are doing here. 2752 You better know what you are doing here.
2760 2753
2761 Note: overly (ab)use of the default environment is 2754 Note: overly (ab)use of the default environment is
2762 discouraged. Make sure to check other ways to preset 2755 discouraged. Make sure to check other ways to preset
2763 the environment like the "source" command or the 2756 the environment like the "source" command or the
2764 boot command first. 2757 boot command first.
2765 2758
2766 CONFIG_ENV_VARS_UBOOT_CONFIG 2759 CONFIG_ENV_VARS_UBOOT_CONFIG
2767 2760
2768 Define this in order to add variables describing the 2761 Define this in order to add variables describing the
2769 U-Boot build configuration to the default environment. 2762 U-Boot build configuration to the default environment.
2770 These will be named arch, cpu, board, vendor, and soc. 2763 These will be named arch, cpu, board, vendor, and soc.
2771 2764
2772 Enabling this option will cause the following to be defined: 2765 Enabling this option will cause the following to be defined:
2773 2766
2774 - CONFIG_SYS_ARCH 2767 - CONFIG_SYS_ARCH
2775 - CONFIG_SYS_CPU 2768 - CONFIG_SYS_CPU
2776 - CONFIG_SYS_BOARD 2769 - CONFIG_SYS_BOARD
2777 - CONFIG_SYS_VENDOR 2770 - CONFIG_SYS_VENDOR
2778 - CONFIG_SYS_SOC 2771 - CONFIG_SYS_SOC
2779 2772
2780 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 2773 CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
2781 2774
2782 Define this in order to add variables describing certain 2775 Define this in order to add variables describing certain
2783 run-time determined information about the hardware to the 2776 run-time determined information about the hardware to the
2784 environment. These will be named board_name, board_rev. 2777 environment. These will be named board_name, board_rev.
2785 2778
2786 CONFIG_DELAY_ENVIRONMENT 2779 CONFIG_DELAY_ENVIRONMENT
2787 2780
2788 Normally the environment is loaded when the board is 2781 Normally the environment is loaded when the board is
2789 intialised so that it is available to U-Boot. This inhibits 2782 intialised so that it is available to U-Boot. This inhibits
2790 that so that the environment is not available until 2783 that so that the environment is not available until
2791 explicitly loaded later by U-Boot code. With CONFIG_OF_CONTROL 2784 explicitly loaded later by U-Boot code. With CONFIG_OF_CONTROL
2792 this is instead controlled by the value of 2785 this is instead controlled by the value of
2793 /config/load-environment. 2786 /config/load-environment.
2794 2787
2795 - DataFlash Support: 2788 - DataFlash Support:
2796 CONFIG_HAS_DATAFLASH 2789 CONFIG_HAS_DATAFLASH
2797 2790
2798 Defining this option enables DataFlash features and 2791 Defining this option enables DataFlash features and
2799 allows to read/write in Dataflash via the standard 2792 allows to read/write in Dataflash via the standard
2800 commands cp, md... 2793 commands cp, md...
2801 2794
2802 - Serial Flash support 2795 - Serial Flash support
2803 CONFIG_CMD_SF 2796 CONFIG_CMD_SF
2804 2797
2805 Defining this option enables SPI flash commands 2798 Defining this option enables SPI flash commands
2806 'sf probe/read/write/erase/update'. 2799 'sf probe/read/write/erase/update'.
2807 2800
2808 Usage requires an initial 'probe' to define the serial 2801 Usage requires an initial 'probe' to define the serial
2809 flash parameters, followed by read/write/erase/update 2802 flash parameters, followed by read/write/erase/update
2810 commands. 2803 commands.
2811 2804
2812 The following defaults may be provided by the platform 2805 The following defaults may be provided by the platform
2813 to handle the common case when only a single serial 2806 to handle the common case when only a single serial
2814 flash is present on the system. 2807 flash is present on the system.
2815 2808
2816 CONFIG_SF_DEFAULT_BUS Bus identifier 2809 CONFIG_SF_DEFAULT_BUS Bus identifier
2817 CONFIG_SF_DEFAULT_CS Chip-select 2810 CONFIG_SF_DEFAULT_CS Chip-select
2818 CONFIG_SF_DEFAULT_MODE (see include/spi.h) 2811 CONFIG_SF_DEFAULT_MODE (see include/spi.h)
2819 CONFIG_SF_DEFAULT_SPEED in Hz 2812 CONFIG_SF_DEFAULT_SPEED in Hz
2820 2813
2821 CONFIG_CMD_SF_TEST 2814 CONFIG_CMD_SF_TEST
2822 2815
2823 Define this option to include a destructive SPI flash 2816 Define this option to include a destructive SPI flash
2824 test ('sf test'). 2817 test ('sf test').
2825 2818
2826 CONFIG_SPI_FLASH_BAR Ban/Extended Addr Reg 2819 CONFIG_SPI_FLASH_BAR Ban/Extended Addr Reg
2827 2820
2828 Define this option to use the Bank addr/Extended addr 2821 Define this option to use the Bank addr/Extended addr
2829 support on SPI flashes which has size > 16Mbytes. 2822 support on SPI flashes which has size > 16Mbytes.
2830 2823
2831 CONFIG_SF_DUAL_FLASH Dual flash memories 2824 CONFIG_SF_DUAL_FLASH Dual flash memories
2832 2825
2833 Define this option to use dual flash support where two flash 2826 Define this option to use dual flash support where two flash
2834 memories can be connected with a given cs line. 2827 memories can be connected with a given cs line.
2835 currently Xilinx Zynq qspi support these type of connections. 2828 currently Xilinx Zynq qspi support these type of connections.
2836 2829
2837 - SystemACE Support: 2830 - SystemACE Support:
2838 CONFIG_SYSTEMACE 2831 CONFIG_SYSTEMACE
2839 2832
2840 Adding this option adds support for Xilinx SystemACE 2833 Adding this option adds support for Xilinx SystemACE
2841 chips attached via some sort of local bus. The address 2834 chips attached via some sort of local bus. The address
2842 of the chip must also be defined in the 2835 of the chip must also be defined in the
2843 CONFIG_SYS_SYSTEMACE_BASE macro. For example: 2836 CONFIG_SYS_SYSTEMACE_BASE macro. For example:
2844 2837
2845 #define CONFIG_SYSTEMACE 2838 #define CONFIG_SYSTEMACE
2846 #define CONFIG_SYS_SYSTEMACE_BASE 0xf0000000 2839 #define CONFIG_SYS_SYSTEMACE_BASE 0xf0000000
2847 2840
2848 When SystemACE support is added, the "ace" device type 2841 When SystemACE support is added, the "ace" device type
2849 becomes available to the fat commands, i.e. fatls. 2842 becomes available to the fat commands, i.e. fatls.
2850 2843
2851 - TFTP Fixed UDP Port: 2844 - TFTP Fixed UDP Port:
2852 CONFIG_TFTP_PORT 2845 CONFIG_TFTP_PORT
2853 2846
2854 If this is defined, the environment variable tftpsrcp 2847 If this is defined, the environment variable tftpsrcp
2855 is used to supply the TFTP UDP source port value. 2848 is used to supply the TFTP UDP source port value.
2856 If tftpsrcp isn't defined, the normal pseudo-random port 2849 If tftpsrcp isn't defined, the normal pseudo-random port
2857 number generator is used. 2850 number generator is used.
2858 2851
2859 Also, the environment variable tftpdstp is used to supply 2852 Also, the environment variable tftpdstp is used to supply
2860 the TFTP UDP destination port value. If tftpdstp isn't 2853 the TFTP UDP destination port value. If tftpdstp isn't
2861 defined, the normal port 69 is used. 2854 defined, the normal port 69 is used.
2862 2855
2863 The purpose for tftpsrcp is to allow a TFTP server to 2856 The purpose for tftpsrcp is to allow a TFTP server to
2864 blindly start the TFTP transfer using the pre-configured 2857 blindly start the TFTP transfer using the pre-configured
2865 target IP address and UDP port. This has the effect of 2858 target IP address and UDP port. This has the effect of
2866 "punching through" the (Windows XP) firewall, allowing 2859 "punching through" the (Windows XP) firewall, allowing
2867 the remainder of the TFTP transfer to proceed normally. 2860 the remainder of the TFTP transfer to proceed normally.
2868 A better solution is to properly configure the firewall, 2861 A better solution is to properly configure the firewall,
2869 but sometimes that is not allowed. 2862 but sometimes that is not allowed.
2870 2863
2871 - Hashing support: 2864 - Hashing support:
2872 CONFIG_CMD_HASH 2865 CONFIG_CMD_HASH
2873 2866
2874 This enables a generic 'hash' command which can produce 2867 This enables a generic 'hash' command which can produce
2875 hashes / digests from a few algorithms (e.g. SHA1, SHA256). 2868 hashes / digests from a few algorithms (e.g. SHA1, SHA256).
2876 2869
2877 CONFIG_HASH_VERIFY 2870 CONFIG_HASH_VERIFY
2878 2871
2879 Enable the hash verify command (hash -v). This adds to code 2872 Enable the hash verify command (hash -v). This adds to code
2880 size a little. 2873 size a little.
2881 2874
2882 CONFIG_SHA1 - support SHA1 hashing 2875 CONFIG_SHA1 - support SHA1 hashing
2883 CONFIG_SHA256 - support SHA256 hashing 2876 CONFIG_SHA256 - support SHA256 hashing
2884 2877
2885 Note: There is also a sha1sum command, which should perhaps 2878 Note: There is also a sha1sum command, which should perhaps
2886 be deprecated in favour of 'hash sha1'. 2879 be deprecated in favour of 'hash sha1'.
2887 2880
2888 - Freescale i.MX specific commands: 2881 - Freescale i.MX specific commands:
2889 CONFIG_CMD_HDMIDETECT 2882 CONFIG_CMD_HDMIDETECT
2890 This enables 'hdmidet' command which returns true if an 2883 This enables 'hdmidet' command which returns true if an
2891 HDMI monitor is detected. This command is i.MX 6 specific. 2884 HDMI monitor is detected. This command is i.MX 6 specific.
2892 2885
2893 CONFIG_CMD_BMODE 2886 CONFIG_CMD_BMODE
2894 This enables the 'bmode' (bootmode) command for forcing 2887 This enables the 'bmode' (bootmode) command for forcing
2895 a boot from specific media. 2888 a boot from specific media.
2896 2889
2897 This is useful for forcing the ROM's usb downloader to 2890 This is useful for forcing the ROM's usb downloader to
2898 activate upon a watchdog reset which is nice when iterating 2891 activate upon a watchdog reset which is nice when iterating
2899 on U-Boot. Using the reset button or running bmode normal 2892 on U-Boot. Using the reset button or running bmode normal
2900 will set it back to normal. This command currently 2893 will set it back to normal. This command currently
2901 supports i.MX53 and i.MX6. 2894 supports i.MX53 and i.MX6.
2902 2895
2903 - Signing support: 2896 - Signing support:
2904 CONFIG_RSA 2897 CONFIG_RSA
2905 2898
2906 This enables the RSA algorithm used for FIT image verification 2899 This enables the RSA algorithm used for FIT image verification
2907 in U-Boot. See doc/uImage.FIT/signature.txt for more information. 2900 in U-Boot. See doc/uImage.FIT/signature.txt for more information.
2908 2901
2909 The signing part is build into mkimage regardless of this 2902 The signing part is build into mkimage regardless of this
2910 option. 2903 option.
2911 2904
2912 - bootcount support: 2905 - bootcount support:
2913 CONFIG_BOOTCOUNT_LIMIT 2906 CONFIG_BOOTCOUNT_LIMIT
2914 2907
2915 This enables the bootcounter support, see: 2908 This enables the bootcounter support, see:
2916 http://www.denx.de/wiki/DULG/UBootBootCountLimit 2909 http://www.denx.de/wiki/DULG/UBootBootCountLimit
2917 2910
2918 CONFIG_AT91SAM9XE 2911 CONFIG_AT91SAM9XE
2919 enable special bootcounter support on at91sam9xe based boards. 2912 enable special bootcounter support on at91sam9xe based boards.
2920 CONFIG_BLACKFIN 2913 CONFIG_BLACKFIN
2921 enable special bootcounter support on blackfin based boards. 2914 enable special bootcounter support on blackfin based boards.
2922 CONFIG_SOC_DA8XX 2915 CONFIG_SOC_DA8XX
2923 enable special bootcounter support on da850 based boards. 2916 enable special bootcounter support on da850 based boards.
2924 CONFIG_BOOTCOUNT_RAM 2917 CONFIG_BOOTCOUNT_RAM
2925 enable support for the bootcounter in RAM 2918 enable support for the bootcounter in RAM
2926 CONFIG_BOOTCOUNT_I2C 2919 CONFIG_BOOTCOUNT_I2C
2927 enable support for the bootcounter on an i2c (like RTC) device. 2920 enable support for the bootcounter on an i2c (like RTC) device.
2928 CONFIG_SYS_I2C_RTC_ADDR = i2c chip address 2921 CONFIG_SYS_I2C_RTC_ADDR = i2c chip address
2929 CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for 2922 CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for
2930 the bootcounter. 2923 the bootcounter.
2931 CONFIG_BOOTCOUNT_ALEN = address len 2924 CONFIG_BOOTCOUNT_ALEN = address len
2932 2925
2933 - Show boot progress: 2926 - Show boot progress:
2934 CONFIG_SHOW_BOOT_PROGRESS 2927 CONFIG_SHOW_BOOT_PROGRESS
2935 2928
2936 Defining this option allows to add some board- 2929 Defining this option allows to add some board-
2937 specific code (calling a user-provided function 2930 specific code (calling a user-provided function
2938 "show_boot_progress(int)") that enables you to show 2931 "show_boot_progress(int)") that enables you to show
2939 the system's boot progress on some display (for 2932 the system's boot progress on some display (for
2940 example, some LED's) on your board. At the moment, 2933 example, some LED's) on your board. At the moment,
2941 the following checkpoints are implemented: 2934 the following checkpoints are implemented:
2942 2935
2943 - Detailed boot stage timing 2936 - Detailed boot stage timing
2944 CONFIG_BOOTSTAGE 2937 CONFIG_BOOTSTAGE
2945 Define this option to get detailed timing of each stage 2938 Define this option to get detailed timing of each stage
2946 of the boot process. 2939 of the boot process.
2947 2940
2948 CONFIG_BOOTSTAGE_USER_COUNT 2941 CONFIG_BOOTSTAGE_USER_COUNT
2949 This is the number of available user bootstage records. 2942 This is the number of available user bootstage records.
2950 Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...) 2943 Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
2951 a new ID will be allocated from this stash. If you exceed 2944 a new ID will be allocated from this stash. If you exceed
2952 the limit, recording will stop. 2945 the limit, recording will stop.
2953 2946
2954 CONFIG_BOOTSTAGE_REPORT 2947 CONFIG_BOOTSTAGE_REPORT
2955 Define this to print a report before boot, similar to this: 2948 Define this to print a report before boot, similar to this:
2956 2949
2957 Timer summary in microseconds: 2950 Timer summary in microseconds:
2958 Mark Elapsed Stage 2951 Mark Elapsed Stage
2959 0 0 reset 2952 0 0 reset
2960 3,575,678 3,575,678 board_init_f start 2953 3,575,678 3,575,678 board_init_f start
2961 3,575,695 17 arch_cpu_init A9 2954 3,575,695 17 arch_cpu_init A9
2962 3,575,777 82 arch_cpu_init done 2955 3,575,777 82 arch_cpu_init done
2963 3,659,598 83,821 board_init_r start 2956 3,659,598 83,821 board_init_r start
2964 3,910,375 250,777 main_loop 2957 3,910,375 250,777 main_loop
2965 29,916,167 26,005,792 bootm_start 2958 29,916,167 26,005,792 bootm_start
2966 30,361,327 445,160 start_kernel 2959 30,361,327 445,160 start_kernel
2967 2960
2968 CONFIG_CMD_BOOTSTAGE 2961 CONFIG_CMD_BOOTSTAGE
2969 Add a 'bootstage' command which supports printing a report 2962 Add a 'bootstage' command which supports printing a report
2970 and un/stashing of bootstage data. 2963 and un/stashing of bootstage data.
2971 2964
2972 CONFIG_BOOTSTAGE_FDT 2965 CONFIG_BOOTSTAGE_FDT
2973 Stash the bootstage information in the FDT. A root 'bootstage' 2966 Stash the bootstage information in the FDT. A root 'bootstage'
2974 node is created with each bootstage id as a child. Each child 2967 node is created with each bootstage id as a child. Each child
2975 has a 'name' property and either 'mark' containing the 2968 has a 'name' property and either 'mark' containing the
2976 mark time in microsecond, or 'accum' containing the 2969 mark time in microsecond, or 'accum' containing the
2977 accumulated time for that bootstage id in microseconds. 2970 accumulated time for that bootstage id in microseconds.
2978 For example: 2971 For example:
2979 2972
2980 bootstage { 2973 bootstage {
2981 154 { 2974 154 {
2982 name = "board_init_f"; 2975 name = "board_init_f";
2983 mark = <3575678>; 2976 mark = <3575678>;
2984 }; 2977 };
2985 170 { 2978 170 {
2986 name = "lcd"; 2979 name = "lcd";
2987 accum = <33482>; 2980 accum = <33482>;
2988 }; 2981 };
2989 }; 2982 };
2990 2983
2991 Code in the Linux kernel can find this in /proc/devicetree. 2984 Code in the Linux kernel can find this in /proc/devicetree.
2992 2985
2993 Legacy uImage format: 2986 Legacy uImage format:
2994 2987
2995 Arg Where When 2988 Arg Where When
2996 1 common/cmd_bootm.c before attempting to boot an image 2989 1 common/cmd_bootm.c before attempting to boot an image
2997 -1 common/cmd_bootm.c Image header has bad magic number 2990 -1 common/cmd_bootm.c Image header has bad magic number
2998 2 common/cmd_bootm.c Image header has correct magic number 2991 2 common/cmd_bootm.c Image header has correct magic number
2999 -2 common/cmd_bootm.c Image header has bad checksum 2992 -2 common/cmd_bootm.c Image header has bad checksum
3000 3 common/cmd_bootm.c Image header has correct checksum 2993 3 common/cmd_bootm.c Image header has correct checksum
3001 -3 common/cmd_bootm.c Image data has bad checksum 2994 -3 common/cmd_bootm.c Image data has bad checksum
3002 4 common/cmd_bootm.c Image data has correct checksum 2995 4 common/cmd_bootm.c Image data has correct checksum
3003 -4 common/cmd_bootm.c Image is for unsupported architecture 2996 -4 common/cmd_bootm.c Image is for unsupported architecture
3004 5 common/cmd_bootm.c Architecture check OK 2997 5 common/cmd_bootm.c Architecture check OK
3005 -5 common/cmd_bootm.c Wrong Image Type (not kernel, multi) 2998 -5 common/cmd_bootm.c Wrong Image Type (not kernel, multi)
3006 6 common/cmd_bootm.c Image Type check OK 2999 6 common/cmd_bootm.c Image Type check OK
3007 -6 common/cmd_bootm.c gunzip uncompression error 3000 -6 common/cmd_bootm.c gunzip uncompression error
3008 -7 common/cmd_bootm.c Unimplemented compression type 3001 -7 common/cmd_bootm.c Unimplemented compression type
3009 7 common/cmd_bootm.c Uncompression OK 3002 7 common/cmd_bootm.c Uncompression OK
3010 8 common/cmd_bootm.c No uncompress/copy overwrite error 3003 8 common/cmd_bootm.c No uncompress/copy overwrite error
3011 -9 common/cmd_bootm.c Unsupported OS (not Linux, BSD, VxWorks, QNX) 3004 -9 common/cmd_bootm.c Unsupported OS (not Linux, BSD, VxWorks, QNX)
3012 3005
3013 9 common/image.c Start initial ramdisk verification 3006 9 common/image.c Start initial ramdisk verification
3014 -10 common/image.c Ramdisk header has bad magic number 3007 -10 common/image.c Ramdisk header has bad magic number
3015 -11 common/image.c Ramdisk header has bad checksum 3008 -11 common/image.c Ramdisk header has bad checksum
3016 10 common/image.c Ramdisk header is OK 3009 10 common/image.c Ramdisk header is OK
3017 -12 common/image.c Ramdisk data has bad checksum 3010 -12 common/image.c Ramdisk data has bad checksum
3018 11 common/image.c Ramdisk data has correct checksum 3011 11 common/image.c Ramdisk data has correct checksum
3019 12 common/image.c Ramdisk verification complete, start loading 3012 12 common/image.c Ramdisk verification complete, start loading
3020 -13 common/image.c Wrong Image Type (not PPC Linux ramdisk) 3013 -13 common/image.c Wrong Image Type (not PPC Linux ramdisk)
3021 13 common/image.c Start multifile image verification 3014 13 common/image.c Start multifile image verification
3022 14 common/image.c No initial ramdisk, no multifile, continue. 3015 14 common/image.c No initial ramdisk, no multifile, continue.
3023 3016
3024 15 arch/<arch>/lib/bootm.c All preparation done, transferring control to OS 3017 15 arch/<arch>/lib/bootm.c All preparation done, transferring control to OS
3025 3018
3026 -30 arch/powerpc/lib/board.c Fatal error, hang the system 3019 -30 arch/powerpc/lib/board.c Fatal error, hang the system
3027 -31 post/post.c POST test failed, detected by post_output_backlog() 3020 -31 post/post.c POST test failed, detected by post_output_backlog()
3028 -32 post/post.c POST test failed, detected by post_run_single() 3021 -32 post/post.c POST test failed, detected by post_run_single()
3029 3022
3030 34 common/cmd_doc.c before loading a Image from a DOC device 3023 34 common/cmd_doc.c before loading a Image from a DOC device
3031 -35 common/cmd_doc.c Bad usage of "doc" command 3024 -35 common/cmd_doc.c Bad usage of "doc" command
3032 35 common/cmd_doc.c correct usage of "doc" command 3025 35 common/cmd_doc.c correct usage of "doc" command
3033 -36 common/cmd_doc.c No boot device 3026 -36 common/cmd_doc.c No boot device
3034 36 common/cmd_doc.c correct boot device 3027 36 common/cmd_doc.c correct boot device
3035 -37 common/cmd_doc.c Unknown Chip ID on boot device 3028 -37 common/cmd_doc.c Unknown Chip ID on boot device
3036 37 common/cmd_doc.c correct chip ID found, device available 3029 37 common/cmd_doc.c correct chip ID found, device available
3037 -38 common/cmd_doc.c Read Error on boot device 3030 -38 common/cmd_doc.c Read Error on boot device
3038 38 common/cmd_doc.c reading Image header from DOC device OK 3031 38 common/cmd_doc.c reading Image header from DOC device OK
3039 -39 common/cmd_doc.c Image header has bad magic number 3032 -39 common/cmd_doc.c Image header has bad magic number
3040 39 common/cmd_doc.c Image header has correct magic number 3033 39 common/cmd_doc.c Image header has correct magic number
3041 -40 common/cmd_doc.c Error reading Image from DOC device 3034 -40 common/cmd_doc.c Error reading Image from DOC device
3042 40 common/cmd_doc.c Image header has correct magic number 3035 40 common/cmd_doc.c Image header has correct magic number
3043 41 common/cmd_ide.c before loading a Image from a IDE device 3036 41 common/cmd_ide.c before loading a Image from a IDE device
3044 -42 common/cmd_ide.c Bad usage of "ide" command 3037 -42 common/cmd_ide.c Bad usage of "ide" command
3045 42 common/cmd_ide.c correct usage of "ide" command 3038 42 common/cmd_ide.c correct usage of "ide" command
3046 -43 common/cmd_ide.c No boot device 3039 -43 common/cmd_ide.c No boot device
3047 43 common/cmd_ide.c boot device found 3040 43 common/cmd_ide.c boot device found
3048 -44 common/cmd_ide.c Device not available 3041 -44 common/cmd_ide.c Device not available
3049 44 common/cmd_ide.c Device available 3042 44 common/cmd_ide.c Device available
3050 -45 common/cmd_ide.c wrong partition selected 3043 -45 common/cmd_ide.c wrong partition selected
3051 45 common/cmd_ide.c partition selected 3044 45 common/cmd_ide.c partition selected
3052 -46 common/cmd_ide.c Unknown partition table 3045 -46 common/cmd_ide.c Unknown partition table
3053 46 common/cmd_ide.c valid partition table found 3046 46 common/cmd_ide.c valid partition table found
3054 -47 common/cmd_ide.c Invalid partition type 3047 -47 common/cmd_ide.c Invalid partition type
3055 47 common/cmd_ide.c correct partition type 3048 47 common/cmd_ide.c correct partition type
3056 -48 common/cmd_ide.c Error reading Image Header on boot device 3049 -48 common/cmd_ide.c Error reading Image Header on boot device
3057 48 common/cmd_ide.c reading Image Header from IDE device OK 3050 48 common/cmd_ide.c reading Image Header from IDE device OK
3058 -49 common/cmd_ide.c Image header has bad magic number 3051 -49 common/cmd_ide.c Image header has bad magic number
3059 49 common/cmd_ide.c Image header has correct magic number 3052 49 common/cmd_ide.c Image header has correct magic number
3060 -50 common/cmd_ide.c Image header has bad checksum 3053 -50 common/cmd_ide.c Image header has bad checksum
3061 50 common/cmd_ide.c Image header has correct checksum 3054 50 common/cmd_ide.c Image header has correct checksum
3062 -51 common/cmd_ide.c Error reading Image from IDE device 3055 -51 common/cmd_ide.c Error reading Image from IDE device
3063 51 common/cmd_ide.c reading Image from IDE device OK 3056 51 common/cmd_ide.c reading Image from IDE device OK
3064 52 common/cmd_nand.c before loading a Image from a NAND device 3057 52 common/cmd_nand.c before loading a Image from a NAND device
3065 -53 common/cmd_nand.c Bad usage of "nand" command 3058 -53 common/cmd_nand.c Bad usage of "nand" command
3066 53 common/cmd_nand.c correct usage of "nand" command 3059 53 common/cmd_nand.c correct usage of "nand" command
3067 -54 common/cmd_nand.c No boot device 3060 -54 common/cmd_nand.c No boot device
3068 54 common/cmd_nand.c boot device found 3061 54 common/cmd_nand.c boot device found
3069 -55 common/cmd_nand.c Unknown Chip ID on boot device 3062 -55 common/cmd_nand.c Unknown Chip ID on boot device
3070 55 common/cmd_nand.c correct chip ID found, device available 3063 55 common/cmd_nand.c correct chip ID found, device available
3071 -56 common/cmd_nand.c Error reading Image Header on boot device 3064 -56 common/cmd_nand.c Error reading Image Header on boot device
3072 56 common/cmd_nand.c reading Image Header from NAND device OK 3065 56 common/cmd_nand.c reading Image Header from NAND device OK
3073 -57 common/cmd_nand.c Image header has bad magic number 3066 -57 common/cmd_nand.c Image header has bad magic number
3074 57 common/cmd_nand.c Image header has correct magic number 3067 57 common/cmd_nand.c Image header has correct magic number
3075 -58 common/cmd_nand.c Error reading Image from NAND device 3068 -58 common/cmd_nand.c Error reading Image from NAND device
3076 58 common/cmd_nand.c reading Image from NAND device OK 3069 58 common/cmd_nand.c reading Image from NAND device OK
3077 3070
3078 -60 common/env_common.c Environment has a bad CRC, using default 3071 -60 common/env_common.c Environment has a bad CRC, using default
3079 3072
3080 64 net/eth.c starting with Ethernet configuration. 3073 64 net/eth.c starting with Ethernet configuration.
3081 -64 net/eth.c no Ethernet found. 3074 -64 net/eth.c no Ethernet found.
3082 65 net/eth.c Ethernet found. 3075 65 net/eth.c Ethernet found.
3083 3076
3084 -80 common/cmd_net.c usage wrong 3077 -80 common/cmd_net.c usage wrong
3085 80 common/cmd_net.c before calling NetLoop() 3078 80 common/cmd_net.c before calling NetLoop()
3086 -81 common/cmd_net.c some error in NetLoop() occurred 3079 -81 common/cmd_net.c some error in NetLoop() occurred
3087 81 common/cmd_net.c NetLoop() back without error 3080 81 common/cmd_net.c NetLoop() back without error
3088 -82 common/cmd_net.c size == 0 (File with size 0 loaded) 3081 -82 common/cmd_net.c size == 0 (File with size 0 loaded)
3089 82 common/cmd_net.c trying automatic boot 3082 82 common/cmd_net.c trying automatic boot
3090 83 common/cmd_net.c running "source" command 3083 83 common/cmd_net.c running "source" command
3091 -83 common/cmd_net.c some error in automatic boot or "source" command 3084 -83 common/cmd_net.c some error in automatic boot or "source" command
3092 84 common/cmd_net.c end without errors 3085 84 common/cmd_net.c end without errors
3093 3086
3094 FIT uImage format: 3087 FIT uImage format:
3095 3088
3096 Arg Where When 3089 Arg Where When
3097 100 common/cmd_bootm.c Kernel FIT Image has correct format 3090 100 common/cmd_bootm.c Kernel FIT Image has correct format
3098 -100 common/cmd_bootm.c Kernel FIT Image has incorrect format 3091 -100 common/cmd_bootm.c Kernel FIT Image has incorrect format
3099 101 common/cmd_bootm.c No Kernel subimage unit name, using configuration 3092 101 common/cmd_bootm.c No Kernel subimage unit name, using configuration
3100 -101 common/cmd_bootm.c Can't get configuration for kernel subimage 3093 -101 common/cmd_bootm.c Can't get configuration for kernel subimage
3101 102 common/cmd_bootm.c Kernel unit name specified 3094 102 common/cmd_bootm.c Kernel unit name specified
3102 -103 common/cmd_bootm.c Can't get kernel subimage node offset 3095 -103 common/cmd_bootm.c Can't get kernel subimage node offset
3103 103 common/cmd_bootm.c Found configuration node 3096 103 common/cmd_bootm.c Found configuration node
3104 104 common/cmd_bootm.c Got kernel subimage node offset 3097 104 common/cmd_bootm.c Got kernel subimage node offset
3105 -104 common/cmd_bootm.c Kernel subimage hash verification failed 3098 -104 common/cmd_bootm.c Kernel subimage hash verification failed
3106 105 common/cmd_bootm.c Kernel subimage hash verification OK 3099 105 common/cmd_bootm.c Kernel subimage hash verification OK
3107 -105 common/cmd_bootm.c Kernel subimage is for unsupported architecture 3100 -105 common/cmd_bootm.c Kernel subimage is for unsupported architecture
3108 106 common/cmd_bootm.c Architecture check OK 3101 106 common/cmd_bootm.c Architecture check OK
3109 -106 common/cmd_bootm.c Kernel subimage has wrong type 3102 -106 common/cmd_bootm.c Kernel subimage has wrong type
3110 107 common/cmd_bootm.c Kernel subimage type OK 3103 107 common/cmd_bootm.c Kernel subimage type OK
3111 -107 common/cmd_bootm.c Can't get kernel subimage data/size 3104 -107 common/cmd_bootm.c Can't get kernel subimage data/size
3112 108 common/cmd_bootm.c Got kernel subimage data/size 3105 108 common/cmd_bootm.c Got kernel subimage data/size
3113 -108 common/cmd_bootm.c Wrong image type (not legacy, FIT) 3106 -108 common/cmd_bootm.c Wrong image type (not legacy, FIT)
3114 -109 common/cmd_bootm.c Can't get kernel subimage type 3107 -109 common/cmd_bootm.c Can't get kernel subimage type
3115 -110 common/cmd_bootm.c Can't get kernel subimage comp 3108 -110 common/cmd_bootm.c Can't get kernel subimage comp
3116 -111 common/cmd_bootm.c Can't get kernel subimage os 3109 -111 common/cmd_bootm.c Can't get kernel subimage os
3117 -112 common/cmd_bootm.c Can't get kernel subimage load address 3110 -112 common/cmd_bootm.c Can't get kernel subimage load address
3118 -113 common/cmd_bootm.c Image uncompress/copy overwrite error 3111 -113 common/cmd_bootm.c Image uncompress/copy overwrite error
3119 3112
3120 120 common/image.c Start initial ramdisk verification 3113 120 common/image.c Start initial ramdisk verification
3121 -120 common/image.c Ramdisk FIT image has incorrect format 3114 -120 common/image.c Ramdisk FIT image has incorrect format
3122 121 common/image.c Ramdisk FIT image has correct format 3115 121 common/image.c Ramdisk FIT image has correct format
3123 122 common/image.c No ramdisk subimage unit name, using configuration 3116 122 common/image.c No ramdisk subimage unit name, using configuration
3124 -122 common/image.c Can't get configuration for ramdisk subimage 3117 -122 common/image.c Can't get configuration for ramdisk subimage
3125 123 common/image.c Ramdisk unit name specified 3118 123 common/image.c Ramdisk unit name specified
3126 -124 common/image.c Can't get ramdisk subimage node offset 3119 -124 common/image.c Can't get ramdisk subimage node offset
3127 125 common/image.c Got ramdisk subimage node offset 3120 125 common/image.c Got ramdisk subimage node offset
3128 -125 common/image.c Ramdisk subimage hash verification failed 3121 -125 common/image.c Ramdisk subimage hash verification failed
3129 126 common/image.c Ramdisk subimage hash verification OK 3122 126 common/image.c Ramdisk subimage hash verification OK
3130 -126 common/image.c Ramdisk subimage for unsupported architecture 3123 -126 common/image.c Ramdisk subimage for unsupported architecture
3131 127 common/image.c Architecture check OK 3124 127 common/image.c Architecture check OK
3132 -127 common/image.c Can't get ramdisk subimage data/size 3125 -127 common/image.c Can't get ramdisk subimage data/size
3133 128 common/image.c Got ramdisk subimage data/size 3126 128 common/image.c Got ramdisk subimage data/size
3134 129 common/image.c Can't get ramdisk load address 3127 129 common/image.c Can't get ramdisk load address
3135 -129 common/image.c Got ramdisk load address 3128 -129 common/image.c Got ramdisk load address
3136 3129
3137 -130 common/cmd_doc.c Incorrect FIT image format 3130 -130 common/cmd_doc.c Incorrect FIT image format
3138 131 common/cmd_doc.c FIT image format OK 3131 131 common/cmd_doc.c FIT image format OK
3139 3132
3140 -140 common/cmd_ide.c Incorrect FIT image format 3133 -140 common/cmd_ide.c Incorrect FIT image format
3141 141 common/cmd_ide.c FIT image format OK 3134 141 common/cmd_ide.c FIT image format OK
3142 3135
3143 -150 common/cmd_nand.c Incorrect FIT image format 3136 -150 common/cmd_nand.c Incorrect FIT image format
3144 151 common/cmd_nand.c FIT image format OK 3137 151 common/cmd_nand.c FIT image format OK
3145 3138
3146 - FIT image support: 3139 - FIT image support:
3147 CONFIG_FIT 3140 CONFIG_FIT
3148 Enable support for the FIT uImage format. 3141 Enable support for the FIT uImage format.
3149 3142
3150 CONFIG_FIT_BEST_MATCH 3143 CONFIG_FIT_BEST_MATCH
3151 When no configuration is explicitly selected, default to the 3144 When no configuration is explicitly selected, default to the
3152 one whose fdt's compatibility field best matches that of 3145 one whose fdt's compatibility field best matches that of
3153 U-Boot itself. A match is considered "best" if it matches the 3146 U-Boot itself. A match is considered "best" if it matches the
3154 most specific compatibility entry of U-Boot's fdt's root node. 3147 most specific compatibility entry of U-Boot's fdt's root node.
3155 The order of entries in the configuration's fdt is ignored. 3148 The order of entries in the configuration's fdt is ignored.
3156 3149
3157 CONFIG_FIT_SIGNATURE 3150 CONFIG_FIT_SIGNATURE
3158 This option enables signature verification of FIT uImages, 3151 This option enables signature verification of FIT uImages,
3159 using a hash signed and verified using RSA. See 3152 using a hash signed and verified using RSA. See
3160 doc/uImage.FIT/signature.txt for more details. 3153 doc/uImage.FIT/signature.txt for more details.
3161 3154
3162 - Standalone program support: 3155 - Standalone program support:
3163 CONFIG_STANDALONE_LOAD_ADDR 3156 CONFIG_STANDALONE_LOAD_ADDR
3164 3157
3165 This option defines a board specific value for the 3158 This option defines a board specific value for the
3166 address where standalone program gets loaded, thus 3159 address where standalone program gets loaded, thus
3167 overwriting the architecture dependent default 3160 overwriting the architecture dependent default
3168 settings. 3161 settings.
3169 3162
3170 - Frame Buffer Address: 3163 - Frame Buffer Address:
3171 CONFIG_FB_ADDR 3164 CONFIG_FB_ADDR
3172 3165
3173 Define CONFIG_FB_ADDR if you want to use specific 3166 Define CONFIG_FB_ADDR if you want to use specific
3174 address for frame buffer. This is typically the case 3167 address for frame buffer. This is typically the case
3175 when using a graphics controller has separate video 3168 when using a graphics controller has separate video
3176 memory. U-Boot will then place the frame buffer at 3169 memory. U-Boot will then place the frame buffer at
3177 the given address instead of dynamically reserving it 3170 the given address instead of dynamically reserving it
3178 in system RAM by calling lcd_setmem(), which grabs 3171 in system RAM by calling lcd_setmem(), which grabs
3179 the memory for the frame buffer depending on the 3172 the memory for the frame buffer depending on the
3180 configured panel size. 3173 configured panel size.
3181 3174
3182 Please see board_init_f function. 3175 Please see board_init_f function.
3183 3176
3184 - Automatic software updates via TFTP server 3177 - Automatic software updates via TFTP server
3185 CONFIG_UPDATE_TFTP 3178 CONFIG_UPDATE_TFTP
3186 CONFIG_UPDATE_TFTP_CNT_MAX 3179 CONFIG_UPDATE_TFTP_CNT_MAX
3187 CONFIG_UPDATE_TFTP_MSEC_MAX 3180 CONFIG_UPDATE_TFTP_MSEC_MAX
3188 3181
3189 These options enable and control the auto-update feature; 3182 These options enable and control the auto-update feature;
3190 for a more detailed description refer to doc/README.update. 3183 for a more detailed description refer to doc/README.update.
3191 3184
3192 - MTD Support (mtdparts command, UBI support) 3185 - MTD Support (mtdparts command, UBI support)
3193 CONFIG_MTD_DEVICE 3186 CONFIG_MTD_DEVICE
3194 3187
3195 Adds the MTD device infrastructure from the Linux kernel. 3188 Adds the MTD device infrastructure from the Linux kernel.
3196 Needed for mtdparts command support. 3189 Needed for mtdparts command support.
3197 3190
3198 CONFIG_MTD_PARTITIONS 3191 CONFIG_MTD_PARTITIONS
3199 3192
3200 Adds the MTD partitioning infrastructure from the Linux 3193 Adds the MTD partitioning infrastructure from the Linux
3201 kernel. Needed for UBI support. 3194 kernel. Needed for UBI support.
3202 3195
3203 - UBI support 3196 - UBI support
3204 CONFIG_CMD_UBI 3197 CONFIG_CMD_UBI
3205 3198
3206 Adds commands for interacting with MTD partitions formatted 3199 Adds commands for interacting with MTD partitions formatted
3207 with the UBI flash translation layer 3200 with the UBI flash translation layer
3208 3201
3209 Requires also defining CONFIG_RBTREE 3202 Requires also defining CONFIG_RBTREE
3210 3203
3211 CONFIG_UBI_SILENCE_MSG 3204 CONFIG_UBI_SILENCE_MSG
3212 3205
3213 Make the verbose messages from UBI stop printing. This leaves 3206 Make the verbose messages from UBI stop printing. This leaves
3214 warnings and errors enabled. 3207 warnings and errors enabled.
3215 3208
3216 - UBIFS support 3209 - UBIFS support
3217 CONFIG_CMD_UBIFS 3210 CONFIG_CMD_UBIFS
3218 3211
3219 Adds commands for interacting with UBI volumes formatted as 3212 Adds commands for interacting with UBI volumes formatted as
3220 UBIFS. UBIFS is read-only in u-boot. 3213 UBIFS. UBIFS is read-only in u-boot.
3221 3214
3222 Requires UBI support as well as CONFIG_LZO 3215 Requires UBI support as well as CONFIG_LZO
3223 3216
3224 CONFIG_UBIFS_SILENCE_MSG 3217 CONFIG_UBIFS_SILENCE_MSG
3225 3218
3226 Make the verbose messages from UBIFS stop printing. This leaves 3219 Make the verbose messages from UBIFS stop printing. This leaves
3227 warnings and errors enabled. 3220 warnings and errors enabled.
3228 3221
3229 - SPL framework 3222 - SPL framework
3230 CONFIG_SPL 3223 CONFIG_SPL
3231 Enable building of SPL globally. 3224 Enable building of SPL globally.
3232 3225
3233 CONFIG_SPL_LDSCRIPT 3226 CONFIG_SPL_LDSCRIPT
3234 LDSCRIPT for linking the SPL binary. 3227 LDSCRIPT for linking the SPL binary.
3235 3228
3236 CONFIG_SPL_MAX_FOOTPRINT 3229 CONFIG_SPL_MAX_FOOTPRINT
3237 Maximum size in memory allocated to the SPL, BSS included. 3230 Maximum size in memory allocated to the SPL, BSS included.
3238 When defined, the linker checks that the actual memory 3231 When defined, the linker checks that the actual memory
3239 used by SPL from _start to __bss_end does not exceed it. 3232 used by SPL from _start to __bss_end does not exceed it.
3240 CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE 3233 CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE
3241 must not be both defined at the same time. 3234 must not be both defined at the same time.
3242 3235
3243 CONFIG_SPL_MAX_SIZE 3236 CONFIG_SPL_MAX_SIZE
3244 Maximum size of the SPL image (text, data, rodata, and 3237 Maximum size of the SPL image (text, data, rodata, and
3245 linker lists sections), BSS excluded. 3238 linker lists sections), BSS excluded.
3246 When defined, the linker checks that the actual size does 3239 When defined, the linker checks that the actual size does
3247 not exceed it. 3240 not exceed it.
3248 3241
3249 CONFIG_SPL_TEXT_BASE 3242 CONFIG_SPL_TEXT_BASE
3250 TEXT_BASE for linking the SPL binary. 3243 TEXT_BASE for linking the SPL binary.
3251 3244
3252 CONFIG_SPL_RELOC_TEXT_BASE 3245 CONFIG_SPL_RELOC_TEXT_BASE
3253 Address to relocate to. If unspecified, this is equal to 3246 Address to relocate to. If unspecified, this is equal to
3254 CONFIG_SPL_TEXT_BASE (i.e. no relocation is done). 3247 CONFIG_SPL_TEXT_BASE (i.e. no relocation is done).
3255 3248
3256 CONFIG_SPL_BSS_START_ADDR 3249 CONFIG_SPL_BSS_START_ADDR
3257 Link address for the BSS within the SPL binary. 3250 Link address for the BSS within the SPL binary.
3258 3251
3259 CONFIG_SPL_BSS_MAX_SIZE 3252 CONFIG_SPL_BSS_MAX_SIZE
3260 Maximum size in memory allocated to the SPL BSS. 3253 Maximum size in memory allocated to the SPL BSS.
3261 When defined, the linker checks that the actual memory used 3254 When defined, the linker checks that the actual memory used
3262 by SPL from __bss_start to __bss_end does not exceed it. 3255 by SPL from __bss_start to __bss_end does not exceed it.
3263 CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE 3256 CONFIG_SPL_MAX_FOOTPRINT and CONFIG_SPL_BSS_MAX_SIZE
3264 must not be both defined at the same time. 3257 must not be both defined at the same time.
3265 3258
3266 CONFIG_SPL_STACK 3259 CONFIG_SPL_STACK
3267 Adress of the start of the stack SPL will use 3260 Adress of the start of the stack SPL will use
3268 3261
3269 CONFIG_SPL_RELOC_STACK 3262 CONFIG_SPL_RELOC_STACK
3270 Adress of the start of the stack SPL will use after 3263 Adress of the start of the stack SPL will use after
3271 relocation. If unspecified, this is equal to 3264 relocation. If unspecified, this is equal to
3272 CONFIG_SPL_STACK. 3265 CONFIG_SPL_STACK.
3273 3266
3274 CONFIG_SYS_SPL_MALLOC_START 3267 CONFIG_SYS_SPL_MALLOC_START
3275 Starting address of the malloc pool used in SPL. 3268 Starting address of the malloc pool used in SPL.
3276 3269
3277 CONFIG_SYS_SPL_MALLOC_SIZE 3270 CONFIG_SYS_SPL_MALLOC_SIZE
3278 The size of the malloc pool used in SPL. 3271 The size of the malloc pool used in SPL.
3279 3272
3280 CONFIG_SPL_FRAMEWORK 3273 CONFIG_SPL_FRAMEWORK
3281 Enable the SPL framework under common/. This framework 3274 Enable the SPL framework under common/. This framework
3282 supports MMC, NAND and YMODEM loading of U-Boot and NAND 3275 supports MMC, NAND and YMODEM loading of U-Boot and NAND
3283 NAND loading of the Linux Kernel. 3276 NAND loading of the Linux Kernel.
3284 3277
3285 CONFIG_SPL_DISPLAY_PRINT 3278 CONFIG_SPL_DISPLAY_PRINT
3286 For ARM, enable an optional function to print more information 3279 For ARM, enable an optional function to print more information
3287 about the running system. 3280 about the running system.
3288 3281
3289 CONFIG_SPL_INIT_MINIMAL 3282 CONFIG_SPL_INIT_MINIMAL
3290 Arch init code should be built for a very small image 3283 Arch init code should be built for a very small image
3291 3284
3292 CONFIG_SPL_LIBCOMMON_SUPPORT 3285 CONFIG_SPL_LIBCOMMON_SUPPORT
3293 Support for common/libcommon.o in SPL binary 3286 Support for common/libcommon.o in SPL binary
3294 3287
3295 CONFIG_SPL_LIBDISK_SUPPORT 3288 CONFIG_SPL_LIBDISK_SUPPORT
3296 Support for disk/libdisk.o in SPL binary 3289 Support for disk/libdisk.o in SPL binary
3297 3290
3298 CONFIG_SPL_I2C_SUPPORT 3291 CONFIG_SPL_I2C_SUPPORT
3299 Support for drivers/i2c/libi2c.o in SPL binary 3292 Support for drivers/i2c/libi2c.o in SPL binary
3300 3293
3301 CONFIG_SPL_GPIO_SUPPORT 3294 CONFIG_SPL_GPIO_SUPPORT
3302 Support for drivers/gpio/libgpio.o in SPL binary 3295 Support for drivers/gpio/libgpio.o in SPL binary
3303 3296
3304 CONFIG_SPL_MMC_SUPPORT 3297 CONFIG_SPL_MMC_SUPPORT
3305 Support for drivers/mmc/libmmc.o in SPL binary 3298 Support for drivers/mmc/libmmc.o in SPL binary
3306 3299
3307 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR, 3300 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR,
3308 CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS, 3301 CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS,
3309 CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION 3302 CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION
3310 Address, size and partition on the MMC to load U-Boot from 3303 Address, size and partition on the MMC to load U-Boot from
3311 when the MMC is being used in raw mode. 3304 when the MMC is being used in raw mode.
3312 3305
3313 CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 3306 CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
3314 Sector to load kernel uImage from when MMC is being 3307 Sector to load kernel uImage from when MMC is being
3315 used in raw mode (for Falcon mode) 3308 used in raw mode (for Falcon mode)
3316 3309
3317 CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR, 3310 CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,
3318 CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 3311 CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS
3319 Sector and number of sectors to load kernel argument 3312 Sector and number of sectors to load kernel argument
3320 parameters from when MMC is being used in raw mode 3313 parameters from when MMC is being used in raw mode
3321 (for falcon mode) 3314 (for falcon mode)
3322 3315
3323 CONFIG_SPL_FAT_SUPPORT 3316 CONFIG_SPL_FAT_SUPPORT
3324 Support for fs/fat/libfat.o in SPL binary 3317 Support for fs/fat/libfat.o in SPL binary
3325 3318
3326 CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME 3319 CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME
3327 Filename to read to load U-Boot when reading from FAT 3320 Filename to read to load U-Boot when reading from FAT
3328 3321
3329 CONFIG_SPL_FAT_LOAD_KERNEL_NAME 3322 CONFIG_SPL_FAT_LOAD_KERNEL_NAME
3330 Filename to read to load kernel uImage when reading 3323 Filename to read to load kernel uImage when reading
3331 from FAT (for Falcon mode) 3324 from FAT (for Falcon mode)
3332 3325
3333 CONFIG_SPL_FAT_LOAD_ARGS_NAME 3326 CONFIG_SPL_FAT_LOAD_ARGS_NAME
3334 Filename to read to load kernel argument parameters 3327 Filename to read to load kernel argument parameters
3335 when reading from FAT (for Falcon mode) 3328 when reading from FAT (for Falcon mode)
3336 3329
3337 CONFIG_SPL_MPC83XX_WAIT_FOR_NAND 3330 CONFIG_SPL_MPC83XX_WAIT_FOR_NAND
3338 Set this for NAND SPL on PPC mpc83xx targets, so that 3331 Set this for NAND SPL on PPC mpc83xx targets, so that
3339 start.S waits for the rest of the SPL to load before 3332 start.S waits for the rest of the SPL to load before
3340 continuing (the hardware starts execution after just 3333 continuing (the hardware starts execution after just
3341 loading the first page rather than the full 4K). 3334 loading the first page rather than the full 4K).
3342 3335
3343 CONFIG_SPL_SKIP_RELOCATE 3336 CONFIG_SPL_SKIP_RELOCATE
3344 Avoid SPL relocation 3337 Avoid SPL relocation
3345 3338
3346 CONFIG_SPL_NAND_BASE 3339 CONFIG_SPL_NAND_BASE
3347 Include nand_base.c in the SPL. Requires 3340 Include nand_base.c in the SPL. Requires
3348 CONFIG_SPL_NAND_DRIVERS. 3341 CONFIG_SPL_NAND_DRIVERS.
3349 3342
3350 CONFIG_SPL_NAND_DRIVERS 3343 CONFIG_SPL_NAND_DRIVERS
3351 SPL uses normal NAND drivers, not minimal drivers. 3344 SPL uses normal NAND drivers, not minimal drivers.
3352 3345
3353 CONFIG_SPL_NAND_ECC 3346 CONFIG_SPL_NAND_ECC
3354 Include standard software ECC in the SPL 3347 Include standard software ECC in the SPL
3355 3348
3356 CONFIG_SPL_NAND_SIMPLE 3349 CONFIG_SPL_NAND_SIMPLE
3357 Support for NAND boot using simple NAND drivers that 3350 Support for NAND boot using simple NAND drivers that
3358 expose the cmd_ctrl() interface. 3351 expose the cmd_ctrl() interface.
3359 3352
3360 CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT 3353 CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
3361 Set for the SPL on PPC mpc8xxx targets, support for 3354 Set for the SPL on PPC mpc8xxx targets, support for
3362 drivers/ddr/fsl/libddr.o in SPL binary. 3355 drivers/ddr/fsl/libddr.o in SPL binary.
3363 3356
3364 CONFIG_SPL_COMMON_INIT_DDR 3357 CONFIG_SPL_COMMON_INIT_DDR
3365 Set for common ddr init with serial presence detect in 3358 Set for common ddr init with serial presence detect in
3366 SPL binary. 3359 SPL binary.
3367 3360
3368 CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT, 3361 CONFIG_SYS_NAND_5_ADDR_CYCLE, CONFIG_SYS_NAND_PAGE_COUNT,
3369 CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE, 3362 CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE,
3370 CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS, 3363 CONFIG_SYS_NAND_BLOCK_SIZE, CONFIG_SYS_NAND_BAD_BLOCK_POS,
3371 CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE, 3364 CONFIG_SYS_NAND_ECCPOS, CONFIG_SYS_NAND_ECCSIZE,
3372 CONFIG_SYS_NAND_ECCBYTES 3365 CONFIG_SYS_NAND_ECCBYTES
3373 Defines the size and behavior of the NAND that SPL uses 3366 Defines the size and behavior of the NAND that SPL uses
3374 to read U-Boot 3367 to read U-Boot
3375 3368
3376 CONFIG_SPL_NAND_BOOT 3369 CONFIG_SPL_NAND_BOOT
3377 Add support NAND boot 3370 Add support NAND boot
3378 3371
3379 CONFIG_SYS_NAND_U_BOOT_OFFS 3372 CONFIG_SYS_NAND_U_BOOT_OFFS
3380 Location in NAND to read U-Boot from 3373 Location in NAND to read U-Boot from
3381 3374
3382 CONFIG_SYS_NAND_U_BOOT_DST 3375 CONFIG_SYS_NAND_U_BOOT_DST
3383 Location in memory to load U-Boot to 3376 Location in memory to load U-Boot to
3384 3377
3385 CONFIG_SYS_NAND_U_BOOT_SIZE 3378 CONFIG_SYS_NAND_U_BOOT_SIZE
3386 Size of image to load 3379 Size of image to load
3387 3380
3388 CONFIG_SYS_NAND_U_BOOT_START 3381 CONFIG_SYS_NAND_U_BOOT_START
3389 Entry point in loaded image to jump to 3382 Entry point in loaded image to jump to
3390 3383
3391 CONFIG_SYS_NAND_HW_ECC_OOBFIRST 3384 CONFIG_SYS_NAND_HW_ECC_OOBFIRST
3392 Define this if you need to first read the OOB and then the 3385 Define this if you need to first read the OOB and then the
3393 data. This is used for example on davinci plattforms. 3386 data. This is used for example on davinci plattforms.
3394 3387
3395 CONFIG_SPL_OMAP3_ID_NAND 3388 CONFIG_SPL_OMAP3_ID_NAND
3396 Support for an OMAP3-specific set of functions to return the 3389 Support for an OMAP3-specific set of functions to return the
3397 ID and MFR of the first attached NAND chip, if present. 3390 ID and MFR of the first attached NAND chip, if present.
3398 3391
3399 CONFIG_SPL_SERIAL_SUPPORT 3392 CONFIG_SPL_SERIAL_SUPPORT
3400 Support for drivers/serial/libserial.o in SPL binary 3393 Support for drivers/serial/libserial.o in SPL binary
3401 3394
3402 CONFIG_SPL_SPI_FLASH_SUPPORT 3395 CONFIG_SPL_SPI_FLASH_SUPPORT
3403 Support for drivers/mtd/spi/libspi_flash.o in SPL binary 3396 Support for drivers/mtd/spi/libspi_flash.o in SPL binary
3404 3397
3405 CONFIG_SPL_SPI_SUPPORT 3398 CONFIG_SPL_SPI_SUPPORT
3406 Support for drivers/spi/libspi.o in SPL binary 3399 Support for drivers/spi/libspi.o in SPL binary
3407 3400
3408 CONFIG_SPL_RAM_DEVICE 3401 CONFIG_SPL_RAM_DEVICE
3409 Support for running image already present in ram, in SPL binary 3402 Support for running image already present in ram, in SPL binary
3410 3403
3411 CONFIG_SPL_LIBGENERIC_SUPPORT 3404 CONFIG_SPL_LIBGENERIC_SUPPORT
3412 Support for lib/libgeneric.o in SPL binary 3405 Support for lib/libgeneric.o in SPL binary
3413 3406
3414 CONFIG_SPL_ENV_SUPPORT 3407 CONFIG_SPL_ENV_SUPPORT
3415 Support for the environment operating in SPL binary 3408 Support for the environment operating in SPL binary
3416 3409
3417 CONFIG_SPL_NET_SUPPORT 3410 CONFIG_SPL_NET_SUPPORT
3418 Support for the net/libnet.o in SPL binary. 3411 Support for the net/libnet.o in SPL binary.
3419 It conflicts with SPL env from storage medium specified by 3412 It conflicts with SPL env from storage medium specified by
3420 CONFIG_ENV_IS_xxx but CONFIG_ENV_IS_NOWHERE 3413 CONFIG_ENV_IS_xxx but CONFIG_ENV_IS_NOWHERE
3421 3414
3422 CONFIG_SPL_PAD_TO 3415 CONFIG_SPL_PAD_TO
3423 Image offset to which the SPL should be padded before appending 3416 Image offset to which the SPL should be padded before appending
3424 the SPL payload. By default, this is defined as 3417 the SPL payload. By default, this is defined as
3425 CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined. 3418 CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined.
3426 CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL 3419 CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
3427 payload without any padding, or >= CONFIG_SPL_MAX_SIZE. 3420 payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
3428 3421
3429 CONFIG_SPL_TARGET 3422 CONFIG_SPL_TARGET
3430 Final target image containing SPL and payload. Some SPLs 3423 Final target image containing SPL and payload. Some SPLs
3431 use an arch-specific makefile fragment instead, for 3424 use an arch-specific makefile fragment instead, for
3432 example if more than one image needs to be produced. 3425 example if more than one image needs to be produced.
3433 3426
3434 CONFIG_FIT_SPL_PRINT 3427 CONFIG_FIT_SPL_PRINT
3435 Printing information about a FIT image adds quite a bit of 3428 Printing information about a FIT image adds quite a bit of
3436 code to SPL. So this is normally disabled in SPL. Use this 3429 code to SPL. So this is normally disabled in SPL. Use this
3437 option to re-enable it. This will affect the output of the 3430 option to re-enable it. This will affect the output of the
3438 bootm command when booting a FIT image. 3431 bootm command when booting a FIT image.
3439 3432
3440 - TPL framework 3433 - TPL framework
3441 CONFIG_TPL 3434 CONFIG_TPL
3442 Enable building of TPL globally. 3435 Enable building of TPL globally.
3443 3436
3444 CONFIG_TPL_PAD_TO 3437 CONFIG_TPL_PAD_TO
3445 Image offset to which the TPL should be padded before appending 3438 Image offset to which the TPL should be padded before appending
3446 the TPL payload. By default, this is defined as 3439 the TPL payload. By default, this is defined as
3447 CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined. 3440 CONFIG_SPL_MAX_SIZE, or 0 if CONFIG_SPL_MAX_SIZE is undefined.
3448 CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL 3441 CONFIG_SPL_PAD_TO must be either 0, meaning to append the SPL
3449 payload without any padding, or >= CONFIG_SPL_MAX_SIZE. 3442 payload without any padding, or >= CONFIG_SPL_MAX_SIZE.
3450 3443
3451 Modem Support: 3444 Modem Support:
3452 -------------- 3445 --------------
3453 3446
3454 [so far only for SMDK2400 boards] 3447 [so far only for SMDK2400 boards]
3455 3448
3456 - Modem support enable: 3449 - Modem support enable:
3457 CONFIG_MODEM_SUPPORT 3450 CONFIG_MODEM_SUPPORT
3458 3451
3459 - RTS/CTS Flow control enable: 3452 - RTS/CTS Flow control enable:
3460 CONFIG_HWFLOW 3453 CONFIG_HWFLOW
3461 3454
3462 - Modem debug support: 3455 - Modem debug support:
3463 CONFIG_MODEM_SUPPORT_DEBUG 3456 CONFIG_MODEM_SUPPORT_DEBUG
3464 3457
3465 Enables debugging stuff (char screen[1024], dbg()) 3458 Enables debugging stuff (char screen[1024], dbg())
3466 for modem support. Useful only with BDI2000. 3459 for modem support. Useful only with BDI2000.
3467 3460
3468 - Interrupt support (PPC): 3461 - Interrupt support (PPC):
3469 3462
3470 There are common interrupt_init() and timer_interrupt() 3463 There are common interrupt_init() and timer_interrupt()
3471 for all PPC archs. interrupt_init() calls interrupt_init_cpu() 3464 for all PPC archs. interrupt_init() calls interrupt_init_cpu()
3472 for CPU specific initialization. interrupt_init_cpu() 3465 for CPU specific initialization. interrupt_init_cpu()
3473 should set decrementer_count to appropriate value. If 3466 should set decrementer_count to appropriate value. If
3474 CPU resets decrementer automatically after interrupt 3467 CPU resets decrementer automatically after interrupt
3475 (ppc4xx) it should set decrementer_count to zero. 3468 (ppc4xx) it should set decrementer_count to zero.
3476 timer_interrupt() calls timer_interrupt_cpu() for CPU 3469 timer_interrupt() calls timer_interrupt_cpu() for CPU
3477 specific handling. If board has watchdog / status_led 3470 specific handling. If board has watchdog / status_led
3478 / other_activity_monitor it works automatically from 3471 / other_activity_monitor it works automatically from
3479 general timer_interrupt(). 3472 general timer_interrupt().
3480 3473
3481 - General: 3474 - General:
3482 3475
3483 In the target system modem support is enabled when a 3476 In the target system modem support is enabled when a
3484 specific key (key combination) is pressed during 3477 specific key (key combination) is pressed during
3485 power-on. Otherwise U-Boot will boot normally 3478 power-on. Otherwise U-Boot will boot normally
3486 (autoboot). The key_pressed() function is called from 3479 (autoboot). The key_pressed() function is called from
3487 board_init(). Currently key_pressed() is a dummy 3480 board_init(). Currently key_pressed() is a dummy
3488 function, returning 1 and thus enabling modem 3481 function, returning 1 and thus enabling modem
3489 initialization. 3482 initialization.
3490 3483
3491 If there are no modem init strings in the 3484 If there are no modem init strings in the
3492 environment, U-Boot proceed to autoboot; the 3485 environment, U-Boot proceed to autoboot; the
3493 previous output (banner, info printfs) will be 3486 previous output (banner, info printfs) will be
3494 suppressed, though. 3487 suppressed, though.
3495 3488
3496 See also: doc/README.Modem 3489 See also: doc/README.Modem
3497 3490
3498 Board initialization settings: 3491 Board initialization settings:
3499 ------------------------------ 3492 ------------------------------
3500 3493
3501 During Initialization u-boot calls a number of board specific functions 3494 During Initialization u-boot calls a number of board specific functions
3502 to allow the preparation of board specific prerequisites, e.g. pin setup 3495 to allow the preparation of board specific prerequisites, e.g. pin setup
3503 before drivers are initialized. To enable these callbacks the 3496 before drivers are initialized. To enable these callbacks the
3504 following configuration macros have to be defined. Currently this is 3497 following configuration macros have to be defined. Currently this is
3505 architecture specific, so please check arch/your_architecture/lib/board.c 3498 architecture specific, so please check arch/your_architecture/lib/board.c
3506 typically in board_init_f() and board_init_r(). 3499 typically in board_init_f() and board_init_r().
3507 3500
3508 - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f() 3501 - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f()
3509 - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r() 3502 - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r()
3510 - CONFIG_BOARD_LATE_INIT: Call board_late_init() 3503 - CONFIG_BOARD_LATE_INIT: Call board_late_init()
3511 - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init() 3504 - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init()
3512 3505
3513 Configuration Settings: 3506 Configuration Settings:
3514 ----------------------- 3507 -----------------------
3515 3508
3516 - CONFIG_SYS_SUPPORT_64BIT_DATA: Defined automatically if compiled as 64-bit. 3509 - CONFIG_SYS_SUPPORT_64BIT_DATA: Defined automatically if compiled as 64-bit.
3517 Optionally it can be defined to support 64-bit memory commands. 3510 Optionally it can be defined to support 64-bit memory commands.
3518 3511
3519 - CONFIG_SYS_LONGHELP: Defined when you want long help messages included; 3512 - CONFIG_SYS_LONGHELP: Defined when you want long help messages included;
3520 undefine this when you're short of memory. 3513 undefine this when you're short of memory.
3521 3514
3522 - CONFIG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default 3515 - CONFIG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default
3523 width of the commands listed in the 'help' command output. 3516 width of the commands listed in the 'help' command output.
3524 3517
3525 - CONFIG_SYS_PROMPT: This is what U-Boot prints on the console to 3518 - CONFIG_SYS_PROMPT: This is what U-Boot prints on the console to
3526 prompt for user input. 3519 prompt for user input.
3527 3520
3528 - CONFIG_SYS_CBSIZE: Buffer size for input from the Console 3521 - CONFIG_SYS_CBSIZE: Buffer size for input from the Console
3529 3522
3530 - CONFIG_SYS_PBSIZE: Buffer size for Console output 3523 - CONFIG_SYS_PBSIZE: Buffer size for Console output
3531 3524
3532 - CONFIG_SYS_MAXARGS: max. Number of arguments accepted for monitor commands 3525 - CONFIG_SYS_MAXARGS: max. Number of arguments accepted for monitor commands
3533 3526
3534 - CONFIG_SYS_BARGSIZE: Buffer size for Boot Arguments which are passed to 3527 - CONFIG_SYS_BARGSIZE: Buffer size for Boot Arguments which are passed to
3535 the application (usually a Linux kernel) when it is 3528 the application (usually a Linux kernel) when it is
3536 booted 3529 booted
3537 3530
3538 - CONFIG_SYS_BAUDRATE_TABLE: 3531 - CONFIG_SYS_BAUDRATE_TABLE:
3539 List of legal baudrate settings for this board. 3532 List of legal baudrate settings for this board.
3540 3533
3541 - CONFIG_SYS_CONSOLE_INFO_QUIET 3534 - CONFIG_SYS_CONSOLE_INFO_QUIET
3542 Suppress display of console information at boot. 3535 Suppress display of console information at boot.
3543 3536
3544 - CONFIG_SYS_CONSOLE_IS_IN_ENV 3537 - CONFIG_SYS_CONSOLE_IS_IN_ENV
3545 If the board specific function 3538 If the board specific function
3546 extern int overwrite_console (void); 3539 extern int overwrite_console (void);
3547 returns 1, the stdin, stderr and stdout are switched to the 3540 returns 1, the stdin, stderr and stdout are switched to the
3548 serial port, else the settings in the environment are used. 3541 serial port, else the settings in the environment are used.
3549 3542
3550 - CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE 3543 - CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
3551 Enable the call to overwrite_console(). 3544 Enable the call to overwrite_console().
3552 3545
3553 - CONFIG_SYS_CONSOLE_ENV_OVERWRITE 3546 - CONFIG_SYS_CONSOLE_ENV_OVERWRITE
3554 Enable overwrite of previous console environment settings. 3547 Enable overwrite of previous console environment settings.
3555 3548
3556 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END: 3549 - CONFIG_SYS_MEMTEST_START, CONFIG_SYS_MEMTEST_END:
3557 Begin and End addresses of the area used by the 3550 Begin and End addresses of the area used by the
3558 simple memory test. 3551 simple memory test.
3559 3552
3560 - CONFIG_SYS_ALT_MEMTEST: 3553 - CONFIG_SYS_ALT_MEMTEST:
3561 Enable an alternate, more extensive memory test. 3554 Enable an alternate, more extensive memory test.
3562 3555
3563 - CONFIG_SYS_MEMTEST_SCRATCH: 3556 - CONFIG_SYS_MEMTEST_SCRATCH:
3564 Scratch address used by the alternate memory test 3557 Scratch address used by the alternate memory test
3565 You only need to set this if address zero isn't writeable 3558 You only need to set this if address zero isn't writeable
3566 3559
3567 - CONFIG_SYS_MEM_TOP_HIDE (PPC only): 3560 - CONFIG_SYS_MEM_TOP_HIDE (PPC only):
3568 If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header, 3561 If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
3569 this specified memory area will get subtracted from the top 3562 this specified memory area will get subtracted from the top
3570 (end) of RAM and won't get "touched" at all by U-Boot. By 3563 (end) of RAM and won't get "touched" at all by U-Boot. By
3571 fixing up gd->ram_size the Linux kernel should gets passed 3564 fixing up gd->ram_size the Linux kernel should gets passed
3572 the now "corrected" memory size and won't touch it either. 3565 the now "corrected" memory size and won't touch it either.
3573 This should work for arch/ppc and arch/powerpc. Only Linux 3566 This should work for arch/ppc and arch/powerpc. Only Linux
3574 board ports in arch/powerpc with bootwrapper support that 3567 board ports in arch/powerpc with bootwrapper support that
3575 recalculate the memory size from the SDRAM controller setup 3568 recalculate the memory size from the SDRAM controller setup
3576 will have to get fixed in Linux additionally. 3569 will have to get fixed in Linux additionally.
3577 3570
3578 This option can be used as a workaround for the 440EPx/GRx 3571 This option can be used as a workaround for the 440EPx/GRx
3579 CHIP 11 errata where the last 256 bytes in SDRAM shouldn't 3572 CHIP 11 errata where the last 256 bytes in SDRAM shouldn't
3580 be touched. 3573 be touched.
3581 3574
3582 WARNING: Please make sure that this value is a multiple of 3575 WARNING: Please make sure that this value is a multiple of
3583 the Linux page size (normally 4k). If this is not the case, 3576 the Linux page size (normally 4k). If this is not the case,
3584 then the end address of the Linux memory will be located at a 3577 then the end address of the Linux memory will be located at a
3585 non page size aligned address and this could cause major 3578 non page size aligned address and this could cause major
3586 problems. 3579 problems.
3587 3580
3588 - CONFIG_SYS_LOADS_BAUD_CHANGE: 3581 - CONFIG_SYS_LOADS_BAUD_CHANGE:
3589 Enable temporary baudrate change while serial download 3582 Enable temporary baudrate change while serial download
3590 3583
3591 - CONFIG_SYS_SDRAM_BASE: 3584 - CONFIG_SYS_SDRAM_BASE:
3592 Physical start address of SDRAM. _Must_ be 0 here. 3585 Physical start address of SDRAM. _Must_ be 0 here.
3593 3586
3594 - CONFIG_SYS_MBIO_BASE: 3587 - CONFIG_SYS_MBIO_BASE:
3595 Physical start address of Motherboard I/O (if using a 3588 Physical start address of Motherboard I/O (if using a
3596 Cogent motherboard) 3589 Cogent motherboard)
3597 3590
3598 - CONFIG_SYS_FLASH_BASE: 3591 - CONFIG_SYS_FLASH_BASE:
3599 Physical start address of Flash memory. 3592 Physical start address of Flash memory.
3600 3593
3601 - CONFIG_SYS_MONITOR_BASE: 3594 - CONFIG_SYS_MONITOR_BASE:
3602 Physical start address of boot monitor code (set by 3595 Physical start address of boot monitor code (set by
3603 make config files to be same as the text base address 3596 make config files to be same as the text base address
3604 (CONFIG_SYS_TEXT_BASE) used when linking) - same as 3597 (CONFIG_SYS_TEXT_BASE) used when linking) - same as
3605 CONFIG_SYS_FLASH_BASE when booting from flash. 3598 CONFIG_SYS_FLASH_BASE when booting from flash.
3606 3599
3607 - CONFIG_SYS_MONITOR_LEN: 3600 - CONFIG_SYS_MONITOR_LEN:
3608 Size of memory reserved for monitor code, used to 3601 Size of memory reserved for monitor code, used to
3609 determine _at_compile_time_ (!) if the environment is 3602 determine _at_compile_time_ (!) if the environment is
3610 embedded within the U-Boot image, or in a separate 3603 embedded within the U-Boot image, or in a separate
3611 flash sector. 3604 flash sector.
3612 3605
3613 - CONFIG_SYS_MALLOC_LEN: 3606 - CONFIG_SYS_MALLOC_LEN:
3614 Size of DRAM reserved for malloc() use. 3607 Size of DRAM reserved for malloc() use.
3615 3608
3616 - CONFIG_SYS_BOOTM_LEN: 3609 - CONFIG_SYS_BOOTM_LEN:
3617 Normally compressed uImages are limited to an 3610 Normally compressed uImages are limited to an
3618 uncompressed size of 8 MBytes. If this is not enough, 3611 uncompressed size of 8 MBytes. If this is not enough,
3619 you can define CONFIG_SYS_BOOTM_LEN in your board config file 3612 you can define CONFIG_SYS_BOOTM_LEN in your board config file
3620 to adjust this setting to your needs. 3613 to adjust this setting to your needs.
3621 3614
3622 - CONFIG_SYS_BOOTMAPSZ: 3615 - CONFIG_SYS_BOOTMAPSZ:
3623 Maximum size of memory mapped by the startup code of 3616 Maximum size of memory mapped by the startup code of
3624 the Linux kernel; all data that must be processed by 3617 the Linux kernel; all data that must be processed by
3625 the Linux kernel (bd_info, boot arguments, FDT blob if 3618 the Linux kernel (bd_info, boot arguments, FDT blob if
3626 used) must be put below this limit, unless "bootm_low" 3619 used) must be put below this limit, unless "bootm_low"
3627 environment variable is defined and non-zero. In such case 3620 environment variable is defined and non-zero. In such case
3628 all data for the Linux kernel must be between "bootm_low" 3621 all data for the Linux kernel must be between "bootm_low"
3629 and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. The environment 3622 and "bootm_low" + CONFIG_SYS_BOOTMAPSZ. The environment
3630 variable "bootm_mapsize" will override the value of 3623 variable "bootm_mapsize" will override the value of
3631 CONFIG_SYS_BOOTMAPSZ. If CONFIG_SYS_BOOTMAPSZ is undefined, 3624 CONFIG_SYS_BOOTMAPSZ. If CONFIG_SYS_BOOTMAPSZ is undefined,
3632 then the value in "bootm_size" will be used instead. 3625 then the value in "bootm_size" will be used instead.
3633 3626
3634 - CONFIG_SYS_BOOT_RAMDISK_HIGH: 3627 - CONFIG_SYS_BOOT_RAMDISK_HIGH:
3635 Enable initrd_high functionality. If defined then the 3628 Enable initrd_high functionality. If defined then the
3636 initrd_high feature is enabled and the bootm ramdisk subcommand 3629 initrd_high feature is enabled and the bootm ramdisk subcommand
3637 is enabled. 3630 is enabled.
3638 3631
3639 - CONFIG_SYS_BOOT_GET_CMDLINE: 3632 - CONFIG_SYS_BOOT_GET_CMDLINE:
3640 Enables allocating and saving kernel cmdline in space between 3633 Enables allocating and saving kernel cmdline in space between
3641 "bootm_low" and "bootm_low" + BOOTMAPSZ. 3634 "bootm_low" and "bootm_low" + BOOTMAPSZ.
3642 3635
3643 - CONFIG_SYS_BOOT_GET_KBD: 3636 - CONFIG_SYS_BOOT_GET_KBD:
3644 Enables allocating and saving a kernel copy of the bd_info in 3637 Enables allocating and saving a kernel copy of the bd_info in
3645 space between "bootm_low" and "bootm_low" + BOOTMAPSZ. 3638 space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
3646 3639
3647 - CONFIG_SYS_MAX_FLASH_BANKS: 3640 - CONFIG_SYS_MAX_FLASH_BANKS:
3648 Max number of Flash memory banks 3641 Max number of Flash memory banks
3649 3642
3650 - CONFIG_SYS_MAX_FLASH_SECT: 3643 - CONFIG_SYS_MAX_FLASH_SECT:
3651 Max number of sectors on a Flash chip 3644 Max number of sectors on a Flash chip
3652 3645
3653 - CONFIG_SYS_FLASH_ERASE_TOUT: 3646 - CONFIG_SYS_FLASH_ERASE_TOUT:
3654 Timeout for Flash erase operations (in ms) 3647 Timeout for Flash erase operations (in ms)
3655 3648
3656 - CONFIG_SYS_FLASH_WRITE_TOUT: 3649 - CONFIG_SYS_FLASH_WRITE_TOUT:
3657 Timeout for Flash write operations (in ms) 3650 Timeout for Flash write operations (in ms)
3658 3651
3659 - CONFIG_SYS_FLASH_LOCK_TOUT 3652 - CONFIG_SYS_FLASH_LOCK_TOUT
3660 Timeout for Flash set sector lock bit operation (in ms) 3653 Timeout for Flash set sector lock bit operation (in ms)
3661 3654
3662 - CONFIG_SYS_FLASH_UNLOCK_TOUT 3655 - CONFIG_SYS_FLASH_UNLOCK_TOUT
3663 Timeout for Flash clear lock bits operation (in ms) 3656 Timeout for Flash clear lock bits operation (in ms)
3664 3657
3665 - CONFIG_SYS_FLASH_PROTECTION 3658 - CONFIG_SYS_FLASH_PROTECTION
3666 If defined, hardware flash sectors protection is used 3659 If defined, hardware flash sectors protection is used
3667 instead of U-Boot software protection. 3660 instead of U-Boot software protection.
3668 3661
3669 - CONFIG_SYS_DIRECT_FLASH_TFTP: 3662 - CONFIG_SYS_DIRECT_FLASH_TFTP:
3670 3663
3671 Enable TFTP transfers directly to flash memory; 3664 Enable TFTP transfers directly to flash memory;
3672 without this option such a download has to be 3665 without this option such a download has to be
3673 performed in two steps: (1) download to RAM, and (2) 3666 performed in two steps: (1) download to RAM, and (2)
3674 copy from RAM to flash. 3667 copy from RAM to flash.
3675 3668
3676 The two-step approach is usually more reliable, since 3669 The two-step approach is usually more reliable, since
3677 you can check if the download worked before you erase 3670 you can check if the download worked before you erase
3678 the flash, but in some situations (when system RAM is 3671 the flash, but in some situations (when system RAM is
3679 too limited to allow for a temporary copy of the 3672 too limited to allow for a temporary copy of the
3680 downloaded image) this option may be very useful. 3673 downloaded image) this option may be very useful.
3681 3674
3682 - CONFIG_SYS_FLASH_CFI: 3675 - CONFIG_SYS_FLASH_CFI:
3683 Define if the flash driver uses extra elements in the 3676 Define if the flash driver uses extra elements in the
3684 common flash structure for storing flash geometry. 3677 common flash structure for storing flash geometry.
3685 3678
3686 - CONFIG_FLASH_CFI_DRIVER 3679 - CONFIG_FLASH_CFI_DRIVER
3687 This option also enables the building of the cfi_flash driver 3680 This option also enables the building of the cfi_flash driver
3688 in the drivers directory 3681 in the drivers directory
3689 3682
3690 - CONFIG_FLASH_CFI_MTD 3683 - CONFIG_FLASH_CFI_MTD
3691 This option enables the building of the cfi_mtd driver 3684 This option enables the building of the cfi_mtd driver
3692 in the drivers directory. The driver exports CFI flash 3685 in the drivers directory. The driver exports CFI flash
3693 to the MTD layer. 3686 to the MTD layer.
3694 3687
3695 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE 3688 - CONFIG_SYS_FLASH_USE_BUFFER_WRITE
3696 Use buffered writes to flash. 3689 Use buffered writes to flash.
3697 3690
3698 - CONFIG_FLASH_SPANSION_S29WS_N 3691 - CONFIG_FLASH_SPANSION_S29WS_N
3699 s29ws-n MirrorBit flash has non-standard addresses for buffered 3692 s29ws-n MirrorBit flash has non-standard addresses for buffered
3700 write commands. 3693 write commands.
3701 3694
3702 - CONFIG_SYS_FLASH_QUIET_TEST 3695 - CONFIG_SYS_FLASH_QUIET_TEST
3703 If this option is defined, the common CFI flash doesn't 3696 If this option is defined, the common CFI flash doesn't
3704 print it's warning upon not recognized FLASH banks. This 3697 print it's warning upon not recognized FLASH banks. This
3705 is useful, if some of the configured banks are only 3698 is useful, if some of the configured banks are only
3706 optionally available. 3699 optionally available.
3707 3700
3708 - CONFIG_FLASH_SHOW_PROGRESS 3701 - CONFIG_FLASH_SHOW_PROGRESS
3709 If defined (must be an integer), print out countdown 3702 If defined (must be an integer), print out countdown
3710 digits and dots. Recommended value: 45 (9..1) for 80 3703 digits and dots. Recommended value: 45 (9..1) for 80
3711 column displays, 15 (3..1) for 40 column displays. 3704 column displays, 15 (3..1) for 40 column displays.
3712 3705
3713 - CONFIG_FLASH_VERIFY 3706 - CONFIG_FLASH_VERIFY
3714 If defined, the content of the flash (destination) is compared 3707 If defined, the content of the flash (destination) is compared
3715 against the source after the write operation. An error message 3708 against the source after the write operation. An error message
3716 will be printed when the contents are not identical. 3709 will be printed when the contents are not identical.
3717 Please note that this option is useless in nearly all cases, 3710 Please note that this option is useless in nearly all cases,
3718 since such flash programming errors usually are detected earlier 3711 since such flash programming errors usually are detected earlier
3719 while unprotecting/erasing/programming. Please only enable 3712 while unprotecting/erasing/programming. Please only enable
3720 this option if you really know what you are doing. 3713 this option if you really know what you are doing.
3721 3714
3722 - CONFIG_SYS_RX_ETH_BUFFER: 3715 - CONFIG_SYS_RX_ETH_BUFFER:
3723 Defines the number of Ethernet receive buffers. On some 3716 Defines the number of Ethernet receive buffers. On some
3724 Ethernet controllers it is recommended to set this value 3717 Ethernet controllers it is recommended to set this value
3725 to 8 or even higher (EEPRO100 or 405 EMAC), since all 3718 to 8 or even higher (EEPRO100 or 405 EMAC), since all
3726 buffers can be full shortly after enabling the interface 3719 buffers can be full shortly after enabling the interface
3727 on high Ethernet traffic. 3720 on high Ethernet traffic.
3728 Defaults to 4 if not defined. 3721 Defaults to 4 if not defined.
3729 3722
3730 - CONFIG_ENV_MAX_ENTRIES 3723 - CONFIG_ENV_MAX_ENTRIES
3731 3724
3732 Maximum number of entries in the hash table that is used 3725 Maximum number of entries in the hash table that is used
3733 internally to store the environment settings. The default 3726 internally to store the environment settings. The default
3734 setting is supposed to be generous and should work in most 3727 setting is supposed to be generous and should work in most
3735 cases. This setting can be used to tune behaviour; see 3728 cases. This setting can be used to tune behaviour; see
3736 lib/hashtable.c for details. 3729 lib/hashtable.c for details.
3737 3730
3738 - CONFIG_ENV_FLAGS_LIST_DEFAULT 3731 - CONFIG_ENV_FLAGS_LIST_DEFAULT
3739 - CONFIG_ENV_FLAGS_LIST_STATIC 3732 - CONFIG_ENV_FLAGS_LIST_STATIC
3740 Enable validation of the values given to environment variables when 3733 Enable validation of the values given to environment variables when
3741 calling env set. Variables can be restricted to only decimal, 3734 calling env set. Variables can be restricted to only decimal,
3742 hexadecimal, or boolean. If CONFIG_CMD_NET is also defined, 3735 hexadecimal, or boolean. If CONFIG_CMD_NET is also defined,
3743 the variables can also be restricted to IP address or MAC address. 3736 the variables can also be restricted to IP address or MAC address.
3744 3737
3745 The format of the list is: 3738 The format of the list is:
3746 type_attribute = [s|d|x|b|i|m] 3739 type_attribute = [s|d|x|b|i|m]
3747 access_atribute = [a|r|o|c] 3740 access_atribute = [a|r|o|c]
3748 attributes = type_attribute[access_atribute] 3741 attributes = type_attribute[access_atribute]
3749 entry = variable_name[:attributes] 3742 entry = variable_name[:attributes]
3750 list = entry[,list] 3743 list = entry[,list]
3751 3744
3752 The type attributes are: 3745 The type attributes are:
3753 s - String (default) 3746 s - String (default)
3754 d - Decimal 3747 d - Decimal
3755 x - Hexadecimal 3748 x - Hexadecimal
3756 b - Boolean ([1yYtT|0nNfF]) 3749 b - Boolean ([1yYtT|0nNfF])
3757 i - IP address 3750 i - IP address
3758 m - MAC address 3751 m - MAC address
3759 3752
3760 The access attributes are: 3753 The access attributes are:
3761 a - Any (default) 3754 a - Any (default)
3762 r - Read-only 3755 r - Read-only
3763 o - Write-once 3756 o - Write-once
3764 c - Change-default 3757 c - Change-default
3765 3758
3766 - CONFIG_ENV_FLAGS_LIST_DEFAULT 3759 - CONFIG_ENV_FLAGS_LIST_DEFAULT
3767 Define this to a list (string) to define the ".flags" 3760 Define this to a list (string) to define the ".flags"
3768 envirnoment variable in the default or embedded environment. 3761 envirnoment variable in the default or embedded environment.
3769 3762
3770 - CONFIG_ENV_FLAGS_LIST_STATIC 3763 - CONFIG_ENV_FLAGS_LIST_STATIC
3771 Define this to a list (string) to define validation that 3764 Define this to a list (string) to define validation that
3772 should be done if an entry is not found in the ".flags" 3765 should be done if an entry is not found in the ".flags"
3773 environment variable. To override a setting in the static 3766 environment variable. To override a setting in the static
3774 list, simply add an entry for the same variable name to the 3767 list, simply add an entry for the same variable name to the
3775 ".flags" variable. 3768 ".flags" variable.
3776 3769
3777 - CONFIG_ENV_ACCESS_IGNORE_FORCE 3770 - CONFIG_ENV_ACCESS_IGNORE_FORCE
3778 If defined, don't allow the -f switch to env set override variable 3771 If defined, don't allow the -f switch to env set override variable
3779 access flags. 3772 access flags.
3780 3773
3781 - CONFIG_SYS_GENERIC_BOARD 3774 - CONFIG_SYS_GENERIC_BOARD
3782 This selects the architecture-generic board system instead of the 3775 This selects the architecture-generic board system instead of the
3783 architecture-specific board files. It is intended to move boards 3776 architecture-specific board files. It is intended to move boards
3784 to this new framework over time. Defining this will disable the 3777 to this new framework over time. Defining this will disable the
3785 arch/foo/lib/board.c file and use common/board_f.c and 3778 arch/foo/lib/board.c file and use common/board_f.c and
3786 common/board_r.c instead. To use this option your architecture 3779 common/board_r.c instead. To use this option your architecture
3787 must support it (i.e. must define __HAVE_ARCH_GENERIC_BOARD in 3780 must support it (i.e. must define __HAVE_ARCH_GENERIC_BOARD in
3788 its config.mk file). If you find problems enabling this option on 3781 its config.mk file). If you find problems enabling this option on
3789 your board please report the problem and send patches! 3782 your board please report the problem and send patches!
3790 3783
3791 - CONFIG_OMAP_PLATFORM_RESET_TIME_MAX_USEC (OMAP only) 3784 - CONFIG_OMAP_PLATFORM_RESET_TIME_MAX_USEC (OMAP only)
3792 This is set by OMAP boards for the max time that reset should 3785 This is set by OMAP boards for the max time that reset should
3793 be asserted. See doc/README.omap-reset-time for details on how 3786 be asserted. See doc/README.omap-reset-time for details on how
3794 the value can be calulated on a given board. 3787 the value can be calulated on a given board.
3795 3788
3796 The following definitions that deal with the placement and management 3789 The following definitions that deal with the placement and management
3797 of environment data (variable area); in general, we support the 3790 of environment data (variable area); in general, we support the
3798 following configurations: 3791 following configurations:
3799 3792
3800 - CONFIG_BUILD_ENVCRC: 3793 - CONFIG_BUILD_ENVCRC:
3801 3794
3802 Builds up envcrc with the target environment so that external utils 3795 Builds up envcrc with the target environment so that external utils
3803 may easily extract it and embed it in final U-Boot images. 3796 may easily extract it and embed it in final U-Boot images.
3804 3797
3805 - CONFIG_ENV_IS_IN_FLASH: 3798 - CONFIG_ENV_IS_IN_FLASH:
3806 3799
3807 Define this if the environment is in flash memory. 3800 Define this if the environment is in flash memory.
3808 3801
3809 a) The environment occupies one whole flash sector, which is 3802 a) The environment occupies one whole flash sector, which is
3810 "embedded" in the text segment with the U-Boot code. This 3803 "embedded" in the text segment with the U-Boot code. This
3811 happens usually with "bottom boot sector" or "top boot 3804 happens usually with "bottom boot sector" or "top boot
3812 sector" type flash chips, which have several smaller 3805 sector" type flash chips, which have several smaller
3813 sectors at the start or the end. For instance, such a 3806 sectors at the start or the end. For instance, such a
3814 layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In 3807 layout can have sector sizes of 8, 2x4, 16, Nx32 kB. In
3815 such a case you would place the environment in one of the 3808 such a case you would place the environment in one of the
3816 4 kB sectors - with U-Boot code before and after it. With 3809 4 kB sectors - with U-Boot code before and after it. With
3817 "top boot sector" type flash chips, you would put the 3810 "top boot sector" type flash chips, you would put the
3818 environment in one of the last sectors, leaving a gap 3811 environment in one of the last sectors, leaving a gap
3819 between U-Boot and the environment. 3812 between U-Boot and the environment.
3820 3813
3821 - CONFIG_ENV_OFFSET: 3814 - CONFIG_ENV_OFFSET:
3822 3815
3823 Offset of environment data (variable area) to the 3816 Offset of environment data (variable area) to the
3824 beginning of flash memory; for instance, with bottom boot 3817 beginning of flash memory; for instance, with bottom boot
3825 type flash chips the second sector can be used: the offset 3818 type flash chips the second sector can be used: the offset
3826 for this sector is given here. 3819 for this sector is given here.
3827 3820
3828 CONFIG_ENV_OFFSET is used relative to CONFIG_SYS_FLASH_BASE. 3821 CONFIG_ENV_OFFSET is used relative to CONFIG_SYS_FLASH_BASE.
3829 3822
3830 - CONFIG_ENV_ADDR: 3823 - CONFIG_ENV_ADDR:
3831 3824
3832 This is just another way to specify the start address of 3825 This is just another way to specify the start address of
3833 the flash sector containing the environment (instead of 3826 the flash sector containing the environment (instead of
3834 CONFIG_ENV_OFFSET). 3827 CONFIG_ENV_OFFSET).
3835 3828
3836 - CONFIG_ENV_SECT_SIZE: 3829 - CONFIG_ENV_SECT_SIZE:
3837 3830
3838 Size of the sector containing the environment. 3831 Size of the sector containing the environment.
3839 3832
3840 3833
3841 b) Sometimes flash chips have few, equal sized, BIG sectors. 3834 b) Sometimes flash chips have few, equal sized, BIG sectors.
3842 In such a case you don't want to spend a whole sector for 3835 In such a case you don't want to spend a whole sector for
3843 the environment. 3836 the environment.
3844 3837
3845 - CONFIG_ENV_SIZE: 3838 - CONFIG_ENV_SIZE:
3846 3839
3847 If you use this in combination with CONFIG_ENV_IS_IN_FLASH 3840 If you use this in combination with CONFIG_ENV_IS_IN_FLASH
3848 and CONFIG_ENV_SECT_SIZE, you can specify to use only a part 3841 and CONFIG_ENV_SECT_SIZE, you can specify to use only a part
3849 of this flash sector for the environment. This saves 3842 of this flash sector for the environment. This saves
3850 memory for the RAM copy of the environment. 3843 memory for the RAM copy of the environment.
3851 3844
3852 It may also save flash memory if you decide to use this 3845 It may also save flash memory if you decide to use this
3853 when your environment is "embedded" within U-Boot code, 3846 when your environment is "embedded" within U-Boot code,
3854 since then the remainder of the flash sector could be used 3847 since then the remainder of the flash sector could be used
3855 for U-Boot code. It should be pointed out that this is 3848 for U-Boot code. It should be pointed out that this is
3856 STRONGLY DISCOURAGED from a robustness point of view: 3849 STRONGLY DISCOURAGED from a robustness point of view:
3857 updating the environment in flash makes it always 3850 updating the environment in flash makes it always
3858 necessary to erase the WHOLE sector. If something goes 3851 necessary to erase the WHOLE sector. If something goes
3859 wrong before the contents has been restored from a copy in 3852 wrong before the contents has been restored from a copy in
3860 RAM, your target system will be dead. 3853 RAM, your target system will be dead.
3861 3854
3862 - CONFIG_ENV_ADDR_REDUND 3855 - CONFIG_ENV_ADDR_REDUND
3863 CONFIG_ENV_SIZE_REDUND 3856 CONFIG_ENV_SIZE_REDUND
3864 3857
3865 These settings describe a second storage area used to hold 3858 These settings describe a second storage area used to hold
3866 a redundant copy of the environment data, so that there is 3859 a redundant copy of the environment data, so that there is
3867 a valid backup copy in case there is a power failure during 3860 a valid backup copy in case there is a power failure during
3868 a "saveenv" operation. 3861 a "saveenv" operation.
3869 3862
3870 BE CAREFUL! Any changes to the flash layout, and some changes to the 3863 BE CAREFUL! Any changes to the flash layout, and some changes to the
3871 source code will make it necessary to adapt <board>/u-boot.lds* 3864 source code will make it necessary to adapt <board>/u-boot.lds*
3872 accordingly! 3865 accordingly!
3873 3866
3874 3867
3875 - CONFIG_ENV_IS_IN_NVRAM: 3868 - CONFIG_ENV_IS_IN_NVRAM:
3876 3869
3877 Define this if you have some non-volatile memory device 3870 Define this if you have some non-volatile memory device
3878 (NVRAM, battery buffered SRAM) which you want to use for the 3871 (NVRAM, battery buffered SRAM) which you want to use for the
3879 environment. 3872 environment.
3880 3873
3881 - CONFIG_ENV_ADDR: 3874 - CONFIG_ENV_ADDR:
3882 - CONFIG_ENV_SIZE: 3875 - CONFIG_ENV_SIZE:
3883 3876
3884 These two #defines are used to determine the memory area you 3877 These two #defines are used to determine the memory area you
3885 want to use for environment. It is assumed that this memory 3878 want to use for environment. It is assumed that this memory
3886 can just be read and written to, without any special 3879 can just be read and written to, without any special
3887 provision. 3880 provision.
3888 3881
3889 BE CAREFUL! The first access to the environment happens quite early 3882 BE CAREFUL! The first access to the environment happens quite early
3890 in U-Boot initalization (when we try to get the setting of for the 3883 in U-Boot initalization (when we try to get the setting of for the
3891 console baudrate). You *MUST* have mapped your NVRAM area then, or 3884 console baudrate). You *MUST* have mapped your NVRAM area then, or
3892 U-Boot will hang. 3885 U-Boot will hang.
3893 3886
3894 Please note that even with NVRAM we still use a copy of the 3887 Please note that even with NVRAM we still use a copy of the
3895 environment in RAM: we could work on NVRAM directly, but we want to 3888 environment in RAM: we could work on NVRAM directly, but we want to
3896 keep settings there always unmodified except somebody uses "saveenv" 3889 keep settings there always unmodified except somebody uses "saveenv"
3897 to save the current settings. 3890 to save the current settings.
3898 3891
3899 3892
3900 - CONFIG_ENV_IS_IN_EEPROM: 3893 - CONFIG_ENV_IS_IN_EEPROM:
3901 3894
3902 Use this if you have an EEPROM or similar serial access 3895 Use this if you have an EEPROM or similar serial access
3903 device and a driver for it. 3896 device and a driver for it.
3904 3897
3905 - CONFIG_ENV_OFFSET: 3898 - CONFIG_ENV_OFFSET:
3906 - CONFIG_ENV_SIZE: 3899 - CONFIG_ENV_SIZE:
3907 3900
3908 These two #defines specify the offset and size of the 3901 These two #defines specify the offset and size of the
3909 environment area within the total memory of your EEPROM. 3902 environment area within the total memory of your EEPROM.
3910 3903
3911 - CONFIG_SYS_I2C_EEPROM_ADDR: 3904 - CONFIG_SYS_I2C_EEPROM_ADDR:
3912 If defined, specified the chip address of the EEPROM device. 3905 If defined, specified the chip address of the EEPROM device.
3913 The default address is zero. 3906 The default address is zero.
3914 3907
3915 - CONFIG_SYS_EEPROM_PAGE_WRITE_BITS: 3908 - CONFIG_SYS_EEPROM_PAGE_WRITE_BITS:
3916 If defined, the number of bits used to address bytes in a 3909 If defined, the number of bits used to address bytes in a
3917 single page in the EEPROM device. A 64 byte page, for example 3910 single page in the EEPROM device. A 64 byte page, for example
3918 would require six bits. 3911 would require six bits.
3919 3912
3920 - CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS: 3913 - CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS:
3921 If defined, the number of milliseconds to delay between 3914 If defined, the number of milliseconds to delay between
3922 page writes. The default is zero milliseconds. 3915 page writes. The default is zero milliseconds.
3923 3916
3924 - CONFIG_SYS_I2C_EEPROM_ADDR_LEN: 3917 - CONFIG_SYS_I2C_EEPROM_ADDR_LEN:
3925 The length in bytes of the EEPROM memory array address. Note 3918 The length in bytes of the EEPROM memory array address. Note
3926 that this is NOT the chip address length! 3919 that this is NOT the chip address length!
3927 3920
3928 - CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW: 3921 - CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW:
3929 EEPROM chips that implement "address overflow" are ones 3922 EEPROM chips that implement "address overflow" are ones
3930 like Catalyst 24WC04/08/16 which has 9/10/11 bits of 3923 like Catalyst 24WC04/08/16 which has 9/10/11 bits of
3931 address and the extra bits end up in the "chip address" bit 3924 address and the extra bits end up in the "chip address" bit
3932 slots. This makes a 24WC08 (1Kbyte) chip look like four 256 3925 slots. This makes a 24WC08 (1Kbyte) chip look like four 256
3933 byte chips. 3926 byte chips.
3934 3927
3935 Note that we consider the length of the address field to 3928 Note that we consider the length of the address field to
3936 still be one byte because the extra address bits are hidden 3929 still be one byte because the extra address bits are hidden
3937 in the chip address. 3930 in the chip address.
3938 3931
3939 - CONFIG_SYS_EEPROM_SIZE: 3932 - CONFIG_SYS_EEPROM_SIZE:
3940 The size in bytes of the EEPROM device. 3933 The size in bytes of the EEPROM device.
3941 3934
3942 - CONFIG_ENV_EEPROM_IS_ON_I2C 3935 - CONFIG_ENV_EEPROM_IS_ON_I2C
3943 define this, if you have I2C and SPI activated, and your 3936 define this, if you have I2C and SPI activated, and your
3944 EEPROM, which holds the environment, is on the I2C bus. 3937 EEPROM, which holds the environment, is on the I2C bus.
3945 3938
3946 - CONFIG_I2C_ENV_EEPROM_BUS 3939 - CONFIG_I2C_ENV_EEPROM_BUS
3947 if you have an Environment on an EEPROM reached over 3940 if you have an Environment on an EEPROM reached over
3948 I2C muxes, you can define here, how to reach this 3941 I2C muxes, you can define here, how to reach this
3949 EEPROM. For example: 3942 EEPROM. For example:
3950 3943
3951 #define CONFIG_I2C_ENV_EEPROM_BUS 1 3944 #define CONFIG_I2C_ENV_EEPROM_BUS 1
3952 3945
3953 EEPROM which holds the environment, is reached over 3946 EEPROM which holds the environment, is reached over
3954 a pca9547 i2c mux with address 0x70, channel 3. 3947 a pca9547 i2c mux with address 0x70, channel 3.
3955 3948
3956 - CONFIG_ENV_IS_IN_DATAFLASH: 3949 - CONFIG_ENV_IS_IN_DATAFLASH:
3957 3950
3958 Define this if you have a DataFlash memory device which you 3951 Define this if you have a DataFlash memory device which you
3959 want to use for the environment. 3952 want to use for the environment.
3960 3953
3961 - CONFIG_ENV_OFFSET: 3954 - CONFIG_ENV_OFFSET:
3962 - CONFIG_ENV_ADDR: 3955 - CONFIG_ENV_ADDR:
3963 - CONFIG_ENV_SIZE: 3956 - CONFIG_ENV_SIZE:
3964 3957
3965 These three #defines specify the offset and size of the 3958 These three #defines specify the offset and size of the
3966 environment area within the total memory of your DataFlash placed 3959 environment area within the total memory of your DataFlash placed
3967 at the specified address. 3960 at the specified address.
3968 3961
3969 - CONFIG_ENV_IS_IN_REMOTE: 3962 - CONFIG_ENV_IS_IN_REMOTE:
3970 3963
3971 Define this if you have a remote memory space which you 3964 Define this if you have a remote memory space which you
3972 want to use for the local device's environment. 3965 want to use for the local device's environment.
3973 3966
3974 - CONFIG_ENV_ADDR: 3967 - CONFIG_ENV_ADDR:
3975 - CONFIG_ENV_SIZE: 3968 - CONFIG_ENV_SIZE:
3976 3969
3977 These two #defines specify the address and size of the 3970 These two #defines specify the address and size of the
3978 environment area within the remote memory space. The 3971 environment area within the remote memory space. The
3979 local device can get the environment from remote memory 3972 local device can get the environment from remote memory
3980 space by SRIO or PCIE links. 3973 space by SRIO or PCIE links.
3981 3974
3982 BE CAREFUL! For some special cases, the local device can not use 3975 BE CAREFUL! For some special cases, the local device can not use
3983 "saveenv" command. For example, the local device will get the 3976 "saveenv" command. For example, the local device will get the
3984 environment stored in a remote NOR flash by SRIO or PCIE link, 3977 environment stored in a remote NOR flash by SRIO or PCIE link,
3985 but it can not erase, write this NOR flash by SRIO or PCIE interface. 3978 but it can not erase, write this NOR flash by SRIO or PCIE interface.
3986 3979
3987 - CONFIG_ENV_IS_IN_NAND: 3980 - CONFIG_ENV_IS_IN_NAND:
3988 3981
3989 Define this if you have a NAND device which you want to use 3982 Define this if you have a NAND device which you want to use
3990 for the environment. 3983 for the environment.
3991 3984
3992 - CONFIG_ENV_OFFSET: 3985 - CONFIG_ENV_OFFSET:
3993 - CONFIG_ENV_SIZE: 3986 - CONFIG_ENV_SIZE:
3994 3987
3995 These two #defines specify the offset and size of the environment 3988 These two #defines specify the offset and size of the environment
3996 area within the first NAND device. CONFIG_ENV_OFFSET must be 3989 area within the first NAND device. CONFIG_ENV_OFFSET must be
3997 aligned to an erase block boundary. 3990 aligned to an erase block boundary.
3998 3991
3999 - CONFIG_ENV_OFFSET_REDUND (optional): 3992 - CONFIG_ENV_OFFSET_REDUND (optional):
4000 3993
4001 This setting describes a second storage area of CONFIG_ENV_SIZE 3994 This setting describes a second storage area of CONFIG_ENV_SIZE
4002 size used to hold a redundant copy of the environment data, so 3995 size used to hold a redundant copy of the environment data, so
4003 that there is a valid backup copy in case there is a power failure 3996 that there is a valid backup copy in case there is a power failure
4004 during a "saveenv" operation. CONFIG_ENV_OFFSET_RENDUND must be 3997 during a "saveenv" operation. CONFIG_ENV_OFFSET_RENDUND must be
4005 aligned to an erase block boundary. 3998 aligned to an erase block boundary.
4006 3999
4007 - CONFIG_ENV_RANGE (optional): 4000 - CONFIG_ENV_RANGE (optional):
4008 4001
4009 Specifies the length of the region in which the environment 4002 Specifies the length of the region in which the environment
4010 can be written. This should be a multiple of the NAND device's 4003 can be written. This should be a multiple of the NAND device's
4011 block size. Specifying a range with more erase blocks than 4004 block size. Specifying a range with more erase blocks than
4012 are needed to hold CONFIG_ENV_SIZE allows bad blocks within 4005 are needed to hold CONFIG_ENV_SIZE allows bad blocks within
4013 the range to be avoided. 4006 the range to be avoided.
4014 4007
4015 - CONFIG_ENV_OFFSET_OOB (optional): 4008 - CONFIG_ENV_OFFSET_OOB (optional):
4016 4009
4017 Enables support for dynamically retrieving the offset of the 4010 Enables support for dynamically retrieving the offset of the
4018 environment from block zero's out-of-band data. The 4011 environment from block zero's out-of-band data. The
4019 "nand env.oob" command can be used to record this offset. 4012 "nand env.oob" command can be used to record this offset.
4020 Currently, CONFIG_ENV_OFFSET_REDUND is not supported when 4013 Currently, CONFIG_ENV_OFFSET_REDUND is not supported when
4021 using CONFIG_ENV_OFFSET_OOB. 4014 using CONFIG_ENV_OFFSET_OOB.
4022 4015
4023 - CONFIG_NAND_ENV_DST 4016 - CONFIG_NAND_ENV_DST
4024 4017
4025 Defines address in RAM to which the nand_spl code should copy the 4018 Defines address in RAM to which the nand_spl code should copy the
4026 environment. If redundant environment is used, it will be copied to 4019 environment. If redundant environment is used, it will be copied to
4027 CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE. 4020 CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
4028 4021
4029 - CONFIG_ENV_IS_IN_UBI: 4022 - CONFIG_ENV_IS_IN_UBI:
4030 4023
4031 Define this if you have an UBI volume that you want to use for the 4024 Define this if you have an UBI volume that you want to use for the
4032 environment. This has the benefit of wear-leveling the environment 4025 environment. This has the benefit of wear-leveling the environment
4033 accesses, which is important on NAND. 4026 accesses, which is important on NAND.
4034 4027
4035 - CONFIG_ENV_UBI_PART: 4028 - CONFIG_ENV_UBI_PART:
4036 4029
4037 Define this to a string that is the mtd partition containing the UBI. 4030 Define this to a string that is the mtd partition containing the UBI.
4038 4031
4039 - CONFIG_ENV_UBI_VOLUME: 4032 - CONFIG_ENV_UBI_VOLUME:
4040 4033
4041 Define this to the name of the volume that you want to store the 4034 Define this to the name of the volume that you want to store the
4042 environment in. 4035 environment in.
4043 4036
4044 - CONFIG_ENV_UBI_VOLUME_REDUND: 4037 - CONFIG_ENV_UBI_VOLUME_REDUND:
4045 4038
4046 Define this to the name of another volume to store a second copy of 4039 Define this to the name of another volume to store a second copy of
4047 the environment in. This will enable redundant environments in UBI. 4040 the environment in. This will enable redundant environments in UBI.
4048 It is assumed that both volumes are in the same MTD partition. 4041 It is assumed that both volumes are in the same MTD partition.
4049 4042
4050 - CONFIG_UBI_SILENCE_MSG 4043 - CONFIG_UBI_SILENCE_MSG
4051 - CONFIG_UBIFS_SILENCE_MSG 4044 - CONFIG_UBIFS_SILENCE_MSG
4052 4045
4053 You will probably want to define these to avoid a really noisy system 4046 You will probably want to define these to avoid a really noisy system
4054 when storing the env in UBI. 4047 when storing the env in UBI.
4055 4048
4056 - CONFIG_ENV_IS_IN_MMC: 4049 - CONFIG_ENV_IS_IN_MMC:
4057 4050
4058 Define this if you have an MMC device which you want to use for the 4051 Define this if you have an MMC device which you want to use for the
4059 environment. 4052 environment.
4060 4053
4061 - CONFIG_SYS_MMC_ENV_DEV: 4054 - CONFIG_SYS_MMC_ENV_DEV:
4062 4055
4063 Specifies which MMC device the environment is stored in. 4056 Specifies which MMC device the environment is stored in.
4064 4057
4065 - CONFIG_SYS_MMC_ENV_PART (optional): 4058 - CONFIG_SYS_MMC_ENV_PART (optional):
4066 4059
4067 Specifies which MMC partition the environment is stored in. If not 4060 Specifies which MMC partition the environment is stored in. If not
4068 set, defaults to partition 0, the user area. Common values might be 4061 set, defaults to partition 0, the user area. Common values might be
4069 1 (first MMC boot partition), 2 (second MMC boot partition). 4062 1 (first MMC boot partition), 2 (second MMC boot partition).
4070 4063
4071 - CONFIG_ENV_OFFSET: 4064 - CONFIG_ENV_OFFSET:
4072 - CONFIG_ENV_SIZE: 4065 - CONFIG_ENV_SIZE:
4073 4066
4074 These two #defines specify the offset and size of the environment 4067 These two #defines specify the offset and size of the environment
4075 area within the specified MMC device. 4068 area within the specified MMC device.
4076 4069
4077 If offset is positive (the usual case), it is treated as relative to 4070 If offset is positive (the usual case), it is treated as relative to
4078 the start of the MMC partition. If offset is negative, it is treated 4071 the start of the MMC partition. If offset is negative, it is treated
4079 as relative to the end of the MMC partition. This can be useful if 4072 as relative to the end of the MMC partition. This can be useful if
4080 your board may be fitted with different MMC devices, which have 4073 your board may be fitted with different MMC devices, which have
4081 different sizes for the MMC partitions, and you always want the 4074 different sizes for the MMC partitions, and you always want the
4082 environment placed at the very end of the partition, to leave the 4075 environment placed at the very end of the partition, to leave the
4083 maximum possible space before it, to store other data. 4076 maximum possible space before it, to store other data.
4084 4077
4085 These two values are in units of bytes, but must be aligned to an 4078 These two values are in units of bytes, but must be aligned to an
4086 MMC sector boundary. 4079 MMC sector boundary.
4087 4080
4088 - CONFIG_ENV_OFFSET_REDUND (optional): 4081 - CONFIG_ENV_OFFSET_REDUND (optional):
4089 4082
4090 Specifies a second storage area, of CONFIG_ENV_SIZE size, used to 4083 Specifies a second storage area, of CONFIG_ENV_SIZE size, used to
4091 hold a redundant copy of the environment data. This provides a 4084 hold a redundant copy of the environment data. This provides a
4092 valid backup copy in case the other copy is corrupted, e.g. due 4085 valid backup copy in case the other copy is corrupted, e.g. due
4093 to a power failure during a "saveenv" operation. 4086 to a power failure during a "saveenv" operation.
4094 4087
4095 This value may also be positive or negative; this is handled in the 4088 This value may also be positive or negative; this is handled in the
4096 same way as CONFIG_ENV_OFFSET. 4089 same way as CONFIG_ENV_OFFSET.
4097 4090
4098 This value is also in units of bytes, but must also be aligned to 4091 This value is also in units of bytes, but must also be aligned to
4099 an MMC sector boundary. 4092 an MMC sector boundary.
4100 4093
4101 - CONFIG_ENV_SIZE_REDUND (optional): 4094 - CONFIG_ENV_SIZE_REDUND (optional):
4102 4095
4103 This value need not be set, even when CONFIG_ENV_OFFSET_REDUND is 4096 This value need not be set, even when CONFIG_ENV_OFFSET_REDUND is
4104 set. If this value is set, it must be set to the same value as 4097 set. If this value is set, it must be set to the same value as
4105 CONFIG_ENV_SIZE. 4098 CONFIG_ENV_SIZE.
4106 4099
4107 - CONFIG_SYS_SPI_INIT_OFFSET 4100 - CONFIG_SYS_SPI_INIT_OFFSET
4108 4101
4109 Defines offset to the initial SPI buffer area in DPRAM. The 4102 Defines offset to the initial SPI buffer area in DPRAM. The
4110 area is used at an early stage (ROM part) if the environment 4103 area is used at an early stage (ROM part) if the environment
4111 is configured to reside in the SPI EEPROM: We need a 520 byte 4104 is configured to reside in the SPI EEPROM: We need a 520 byte
4112 scratch DPRAM area. It is used between the two initialization 4105 scratch DPRAM area. It is used between the two initialization
4113 calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems 4106 calls (spi_init_f() and spi_init_r()). A value of 0xB00 seems
4114 to be a good choice since it makes it far enough from the 4107 to be a good choice since it makes it far enough from the
4115 start of the data area as well as from the stack pointer. 4108 start of the data area as well as from the stack pointer.
4116 4109
4117 Please note that the environment is read-only until the monitor 4110 Please note that the environment is read-only until the monitor
4118 has been relocated to RAM and a RAM copy of the environment has been 4111 has been relocated to RAM and a RAM copy of the environment has been
4119 created; also, when using EEPROM you will have to use getenv_f() 4112 created; also, when using EEPROM you will have to use getenv_f()
4120 until then to read environment variables. 4113 until then to read environment variables.
4121 4114
4122 The environment is protected by a CRC32 checksum. Before the monitor 4115 The environment is protected by a CRC32 checksum. Before the monitor
4123 is relocated into RAM, as a result of a bad CRC you will be working 4116 is relocated into RAM, as a result of a bad CRC you will be working
4124 with the compiled-in default environment - *silently*!!! [This is 4117 with the compiled-in default environment - *silently*!!! [This is
4125 necessary, because the first environment variable we need is the 4118 necessary, because the first environment variable we need is the
4126 "baudrate" setting for the console - if we have a bad CRC, we don't 4119 "baudrate" setting for the console - if we have a bad CRC, we don't
4127 have any device yet where we could complain.] 4120 have any device yet where we could complain.]
4128 4121
4129 Note: once the monitor has been relocated, then it will complain if 4122 Note: once the monitor has been relocated, then it will complain if
4130 the default environment is used; a new CRC is computed as soon as you 4123 the default environment is used; a new CRC is computed as soon as you
4131 use the "saveenv" command to store a valid environment. 4124 use the "saveenv" command to store a valid environment.
4132 4125
4133 - CONFIG_SYS_FAULT_ECHO_LINK_DOWN: 4126 - CONFIG_SYS_FAULT_ECHO_LINK_DOWN:
4134 Echo the inverted Ethernet link state to the fault LED. 4127 Echo the inverted Ethernet link state to the fault LED.
4135 4128
4136 Note: If this option is active, then CONFIG_SYS_FAULT_MII_ADDR 4129 Note: If this option is active, then CONFIG_SYS_FAULT_MII_ADDR
4137 also needs to be defined. 4130 also needs to be defined.
4138 4131
4139 - CONFIG_SYS_FAULT_MII_ADDR: 4132 - CONFIG_SYS_FAULT_MII_ADDR:
4140 MII address of the PHY to check for the Ethernet link state. 4133 MII address of the PHY to check for the Ethernet link state.
4141 4134
4142 - CONFIG_NS16550_MIN_FUNCTIONS: 4135 - CONFIG_NS16550_MIN_FUNCTIONS:
4143 Define this if you desire to only have use of the NS16550_init 4136 Define this if you desire to only have use of the NS16550_init
4144 and NS16550_putc functions for the serial driver located at 4137 and NS16550_putc functions for the serial driver located at
4145 drivers/serial/ns16550.c. This option is useful for saving 4138 drivers/serial/ns16550.c. This option is useful for saving
4146 space for already greatly restricted images, including but not 4139 space for already greatly restricted images, including but not
4147 limited to NAND_SPL configurations. 4140 limited to NAND_SPL configurations.
4148 4141
4149 - CONFIG_DISPLAY_BOARDINFO 4142 - CONFIG_DISPLAY_BOARDINFO
4150 Display information about the board that U-Boot is running on 4143 Display information about the board that U-Boot is running on
4151 when U-Boot starts up. The board function checkboard() is called 4144 when U-Boot starts up. The board function checkboard() is called
4152 to do this. 4145 to do this.
4153 4146
4154 - CONFIG_DISPLAY_BOARDINFO_LATE 4147 - CONFIG_DISPLAY_BOARDINFO_LATE
4155 Similar to the previous option, but display this information 4148 Similar to the previous option, but display this information
4156 later, once stdio is running and output goes to the LCD, if 4149 later, once stdio is running and output goes to the LCD, if
4157 present. 4150 present.
4158 4151
4159 Low Level (hardware related) configuration options: 4152 Low Level (hardware related) configuration options:
4160 --------------------------------------------------- 4153 ---------------------------------------------------
4161 4154
4162 - CONFIG_SYS_CACHELINE_SIZE: 4155 - CONFIG_SYS_CACHELINE_SIZE:
4163 Cache Line Size of the CPU. 4156 Cache Line Size of the CPU.
4164 4157
4165 - CONFIG_SYS_DEFAULT_IMMR: 4158 - CONFIG_SYS_DEFAULT_IMMR:
4166 Default address of the IMMR after system reset. 4159 Default address of the IMMR after system reset.
4167 4160
4168 Needed on some 8260 systems (MPC8260ADS, PQ2FADS-ZU, 4161 Needed on some 8260 systems (MPC8260ADS, PQ2FADS-ZU,
4169 and RPXsuper) to be able to adjust the position of 4162 and RPXsuper) to be able to adjust the position of
4170 the IMMR register after a reset. 4163 the IMMR register after a reset.
4171 4164
4172 - CONFIG_SYS_CCSRBAR_DEFAULT: 4165 - CONFIG_SYS_CCSRBAR_DEFAULT:
4173 Default (power-on reset) physical address of CCSR on Freescale 4166 Default (power-on reset) physical address of CCSR on Freescale
4174 PowerPC SOCs. 4167 PowerPC SOCs.
4175 4168
4176 - CONFIG_SYS_CCSRBAR: 4169 - CONFIG_SYS_CCSRBAR:
4177 Virtual address of CCSR. On a 32-bit build, this is typically 4170 Virtual address of CCSR. On a 32-bit build, this is typically
4178 the same value as CONFIG_SYS_CCSRBAR_DEFAULT. 4171 the same value as CONFIG_SYS_CCSRBAR_DEFAULT.
4179 4172
4180 CONFIG_SYS_DEFAULT_IMMR must also be set to this value, 4173 CONFIG_SYS_DEFAULT_IMMR must also be set to this value,
4181 for cross-platform code that uses that macro instead. 4174 for cross-platform code that uses that macro instead.
4182 4175
4183 - CONFIG_SYS_CCSRBAR_PHYS: 4176 - CONFIG_SYS_CCSRBAR_PHYS:
4184 Physical address of CCSR. CCSR can be relocated to a new 4177 Physical address of CCSR. CCSR can be relocated to a new
4185 physical address, if desired. In this case, this macro should 4178 physical address, if desired. In this case, this macro should
4186 be set to that address. Otherwise, it should be set to the 4179 be set to that address. Otherwise, it should be set to the
4187 same value as CONFIG_SYS_CCSRBAR_DEFAULT. For example, CCSR 4180 same value as CONFIG_SYS_CCSRBAR_DEFAULT. For example, CCSR
4188 is typically relocated on 36-bit builds. It is recommended 4181 is typically relocated on 36-bit builds. It is recommended
4189 that this macro be defined via the _HIGH and _LOW macros: 4182 that this macro be defined via the _HIGH and _LOW macros:
4190 4183
4191 #define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH 4184 #define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH
4192 * 1ull) << 32 | CONFIG_SYS_CCSRBAR_PHYS_LOW) 4185 * 1ull) << 32 | CONFIG_SYS_CCSRBAR_PHYS_LOW)
4193 4186
4194 - CONFIG_SYS_CCSRBAR_PHYS_HIGH: 4187 - CONFIG_SYS_CCSRBAR_PHYS_HIGH:
4195 Bits 33-36 of CONFIG_SYS_CCSRBAR_PHYS. This value is typically 4188 Bits 33-36 of CONFIG_SYS_CCSRBAR_PHYS. This value is typically
4196 either 0 (32-bit build) or 0xF (36-bit build). This macro is 4189 either 0 (32-bit build) or 0xF (36-bit build). This macro is
4197 used in assembly code, so it must not contain typecasts or 4190 used in assembly code, so it must not contain typecasts or
4198 integer size suffixes (e.g. "ULL"). 4191 integer size suffixes (e.g. "ULL").
4199 4192
4200 - CONFIG_SYS_CCSRBAR_PHYS_LOW: 4193 - CONFIG_SYS_CCSRBAR_PHYS_LOW:
4201 Lower 32-bits of CONFIG_SYS_CCSRBAR_PHYS. This macro is 4194 Lower 32-bits of CONFIG_SYS_CCSRBAR_PHYS. This macro is
4202 used in assembly code, so it must not contain typecasts or 4195 used in assembly code, so it must not contain typecasts or
4203 integer size suffixes (e.g. "ULL"). 4196 integer size suffixes (e.g. "ULL").
4204 4197
4205 - CONFIG_SYS_CCSR_DO_NOT_RELOCATE: 4198 - CONFIG_SYS_CCSR_DO_NOT_RELOCATE:
4206 If this macro is defined, then CONFIG_SYS_CCSRBAR_PHYS will be 4199 If this macro is defined, then CONFIG_SYS_CCSRBAR_PHYS will be
4207 forced to a value that ensures that CCSR is not relocated. 4200 forced to a value that ensures that CCSR is not relocated.
4208 4201
4209 - Floppy Disk Support: 4202 - Floppy Disk Support:
4210 CONFIG_SYS_FDC_DRIVE_NUMBER 4203 CONFIG_SYS_FDC_DRIVE_NUMBER
4211 4204
4212 the default drive number (default value 0) 4205 the default drive number (default value 0)
4213 4206
4214 CONFIG_SYS_ISA_IO_STRIDE 4207 CONFIG_SYS_ISA_IO_STRIDE
4215 4208
4216 defines the spacing between FDC chipset registers 4209 defines the spacing between FDC chipset registers
4217 (default value 1) 4210 (default value 1)
4218 4211
4219 CONFIG_SYS_ISA_IO_OFFSET 4212 CONFIG_SYS_ISA_IO_OFFSET
4220 4213
4221 defines the offset of register from address. It 4214 defines the offset of register from address. It
4222 depends on which part of the data bus is connected to 4215 depends on which part of the data bus is connected to
4223 the FDC chipset. (default value 0) 4216 the FDC chipset. (default value 0)
4224 4217
4225 If CONFIG_SYS_ISA_IO_STRIDE CONFIG_SYS_ISA_IO_OFFSET and 4218 If CONFIG_SYS_ISA_IO_STRIDE CONFIG_SYS_ISA_IO_OFFSET and
4226 CONFIG_SYS_FDC_DRIVE_NUMBER are undefined, they take their 4219 CONFIG_SYS_FDC_DRIVE_NUMBER are undefined, they take their
4227 default value. 4220 default value.
4228 4221
4229 if CONFIG_SYS_FDC_HW_INIT is defined, then the function 4222 if CONFIG_SYS_FDC_HW_INIT is defined, then the function
4230 fdc_hw_init() is called at the beginning of the FDC 4223 fdc_hw_init() is called at the beginning of the FDC
4231 setup. fdc_hw_init() must be provided by the board 4224 setup. fdc_hw_init() must be provided by the board
4232 source code. It is used to make hardware dependant 4225 source code. It is used to make hardware dependant
4233 initializations. 4226 initializations.
4234 4227
4235 - CONFIG_IDE_AHB: 4228 - CONFIG_IDE_AHB:
4236 Most IDE controllers were designed to be connected with PCI 4229 Most IDE controllers were designed to be connected with PCI
4237 interface. Only few of them were designed for AHB interface. 4230 interface. Only few of them were designed for AHB interface.
4238 When software is doing ATA command and data transfer to 4231 When software is doing ATA command and data transfer to
4239 IDE devices through IDE-AHB controller, some additional 4232 IDE devices through IDE-AHB controller, some additional
4240 registers accessing to these kind of IDE-AHB controller 4233 registers accessing to these kind of IDE-AHB controller
4241 is requierd. 4234 is requierd.
4242 4235
4243 - CONFIG_SYS_IMMR: Physical address of the Internal Memory. 4236 - CONFIG_SYS_IMMR: Physical address of the Internal Memory.
4244 DO NOT CHANGE unless you know exactly what you're 4237 DO NOT CHANGE unless you know exactly what you're
4245 doing! (11-4) [MPC8xx/82xx systems only] 4238 doing! (11-4) [MPC8xx/82xx systems only]
4246 4239
4247 - CONFIG_SYS_INIT_RAM_ADDR: 4240 - CONFIG_SYS_INIT_RAM_ADDR:
4248 4241
4249 Start address of memory area that can be used for 4242 Start address of memory area that can be used for
4250 initial data and stack; please note that this must be 4243 initial data and stack; please note that this must be
4251 writable memory that is working WITHOUT special 4244 writable memory that is working WITHOUT special
4252 initialization, i. e. you CANNOT use normal RAM which 4245 initialization, i. e. you CANNOT use normal RAM which
4253 will become available only after programming the 4246 will become available only after programming the
4254 memory controller and running certain initialization 4247 memory controller and running certain initialization
4255 sequences. 4248 sequences.
4256 4249
4257 U-Boot uses the following memory types: 4250 U-Boot uses the following memory types:
4258 - MPC8xx and MPC8260: IMMR (internal memory of the CPU) 4251 - MPC8xx and MPC8260: IMMR (internal memory of the CPU)
4259 - MPC824X: data cache 4252 - MPC824X: data cache
4260 - PPC4xx: data cache 4253 - PPC4xx: data cache
4261 4254
4262 - CONFIG_SYS_GBL_DATA_OFFSET: 4255 - CONFIG_SYS_GBL_DATA_OFFSET:
4263 4256
4264 Offset of the initial data structure in the memory 4257 Offset of the initial data structure in the memory
4265 area defined by CONFIG_SYS_INIT_RAM_ADDR. Usually 4258 area defined by CONFIG_SYS_INIT_RAM_ADDR. Usually
4266 CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial 4259 CONFIG_SYS_GBL_DATA_OFFSET is chosen such that the initial
4267 data is located at the end of the available space 4260 data is located at the end of the available space
4268 (sometimes written as (CONFIG_SYS_INIT_RAM_SIZE - 4261 (sometimes written as (CONFIG_SYS_INIT_RAM_SIZE -
4269 CONFIG_SYS_INIT_DATA_SIZE), and the initial stack is just 4262 CONFIG_SYS_INIT_DATA_SIZE), and the initial stack is just
4270 below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR + 4263 below that area (growing from (CONFIG_SYS_INIT_RAM_ADDR +
4271 CONFIG_SYS_GBL_DATA_OFFSET) downward. 4264 CONFIG_SYS_GBL_DATA_OFFSET) downward.
4272 4265
4273 Note: 4266 Note:
4274 On the MPC824X (or other systems that use the data 4267 On the MPC824X (or other systems that use the data
4275 cache for initial memory) the address chosen for 4268 cache for initial memory) the address chosen for
4276 CONFIG_SYS_INIT_RAM_ADDR is basically arbitrary - it must 4269 CONFIG_SYS_INIT_RAM_ADDR is basically arbitrary - it must
4277 point to an otherwise UNUSED address space between 4270 point to an otherwise UNUSED address space between
4278 the top of RAM and the start of the PCI space. 4271 the top of RAM and the start of the PCI space.
4279 4272
4280 - CONFIG_SYS_SIUMCR: SIU Module Configuration (11-6) 4273 - CONFIG_SYS_SIUMCR: SIU Module Configuration (11-6)
4281 4274
4282 - CONFIG_SYS_SYPCR: System Protection Control (11-9) 4275 - CONFIG_SYS_SYPCR: System Protection Control (11-9)
4283 4276
4284 - CONFIG_SYS_TBSCR: Time Base Status and Control (11-26) 4277 - CONFIG_SYS_TBSCR: Time Base Status and Control (11-26)
4285 4278
4286 - CONFIG_SYS_PISCR: Periodic Interrupt Status and Control (11-31) 4279 - CONFIG_SYS_PISCR: Periodic Interrupt Status and Control (11-31)
4287 4280
4288 - CONFIG_SYS_PLPRCR: PLL, Low-Power, and Reset Control Register (15-30) 4281 - CONFIG_SYS_PLPRCR: PLL, Low-Power, and Reset Control Register (15-30)
4289 4282
4290 - CONFIG_SYS_SCCR: System Clock and reset Control Register (15-27) 4283 - CONFIG_SYS_SCCR: System Clock and reset Control Register (15-27)
4291 4284
4292 - CONFIG_SYS_OR_TIMING_SDRAM: 4285 - CONFIG_SYS_OR_TIMING_SDRAM:
4293 SDRAM timing 4286 SDRAM timing
4294 4287
4295 - CONFIG_SYS_MAMR_PTA: 4288 - CONFIG_SYS_MAMR_PTA:
4296 periodic timer for refresh 4289 periodic timer for refresh
4297 4290
4298 - CONFIG_SYS_DER: Debug Event Register (37-47) 4291 - CONFIG_SYS_DER: Debug Event Register (37-47)
4299 4292
4300 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM, 4293 - FLASH_BASE0_PRELIM, FLASH_BASE1_PRELIM, CONFIG_SYS_REMAP_OR_AM,
4301 CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP, 4294 CONFIG_SYS_PRELIM_OR_AM, CONFIG_SYS_OR_TIMING_FLASH, CONFIG_SYS_OR0_REMAP,
4302 CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM, 4295 CONFIG_SYS_OR0_PRELIM, CONFIG_SYS_BR0_PRELIM, CONFIG_SYS_OR1_REMAP, CONFIG_SYS_OR1_PRELIM,
4303 CONFIG_SYS_BR1_PRELIM: 4296 CONFIG_SYS_BR1_PRELIM:
4304 Memory Controller Definitions: BR0/1 and OR0/1 (FLASH) 4297 Memory Controller Definitions: BR0/1 and OR0/1 (FLASH)
4305 4298
4306 - SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE, 4299 - SDRAM_BASE2_PRELIM, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE,
4307 CONFIG_SYS_OR_TIMING_SDRAM, CONFIG_SYS_OR2_PRELIM, CONFIG_SYS_BR2_PRELIM, 4300 CONFIG_SYS_OR_TIMING_SDRAM, CONFIG_SYS_OR2_PRELIM, CONFIG_SYS_BR2_PRELIM,
4308 CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM: 4301 CONFIG_SYS_OR3_PRELIM, CONFIG_SYS_BR3_PRELIM:
4309 Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM) 4302 Memory Controller Definitions: BR2/3 and OR2/3 (SDRAM)
4310 4303
4311 - CONFIG_SYS_MAMR_PTA, CONFIG_SYS_MPTPR_2BK_4K, CONFIG_SYS_MPTPR_1BK_4K, CONFIG_SYS_MPTPR_2BK_8K, 4304 - CONFIG_SYS_MAMR_PTA, CONFIG_SYS_MPTPR_2BK_4K, CONFIG_SYS_MPTPR_1BK_4K, CONFIG_SYS_MPTPR_2BK_8K,
4312 CONFIG_SYS_MPTPR_1BK_8K, CONFIG_SYS_MAMR_8COL, CONFIG_SYS_MAMR_9COL: 4305 CONFIG_SYS_MPTPR_1BK_8K, CONFIG_SYS_MAMR_8COL, CONFIG_SYS_MAMR_9COL:
4313 Machine Mode Register and Memory Periodic Timer 4306 Machine Mode Register and Memory Periodic Timer
4314 Prescaler definitions (SDRAM timing) 4307 Prescaler definitions (SDRAM timing)
4315 4308
4316 - CONFIG_SYS_I2C_UCODE_PATCH, CONFIG_SYS_I2C_DPMEM_OFFSET [0x1FC0]: 4309 - CONFIG_SYS_I2C_UCODE_PATCH, CONFIG_SYS_I2C_DPMEM_OFFSET [0x1FC0]:
4317 enable I2C microcode relocation patch (MPC8xx); 4310 enable I2C microcode relocation patch (MPC8xx);
4318 define relocation offset in DPRAM [DSP2] 4311 define relocation offset in DPRAM [DSP2]
4319 4312
4320 - CONFIG_SYS_SMC_UCODE_PATCH, CONFIG_SYS_SMC_DPMEM_OFFSET [0x1FC0]: 4313 - CONFIG_SYS_SMC_UCODE_PATCH, CONFIG_SYS_SMC_DPMEM_OFFSET [0x1FC0]:
4321 enable SMC microcode relocation patch (MPC8xx); 4314 enable SMC microcode relocation patch (MPC8xx);
4322 define relocation offset in DPRAM [SMC1] 4315 define relocation offset in DPRAM [SMC1]
4323 4316
4324 - CONFIG_SYS_SPI_UCODE_PATCH, CONFIG_SYS_SPI_DPMEM_OFFSET [0x1FC0]: 4317 - CONFIG_SYS_SPI_UCODE_PATCH, CONFIG_SYS_SPI_DPMEM_OFFSET [0x1FC0]:
4325 enable SPI microcode relocation patch (MPC8xx); 4318 enable SPI microcode relocation patch (MPC8xx);
4326 define relocation offset in DPRAM [SCC4] 4319 define relocation offset in DPRAM [SCC4]
4327 4320
4328 - CONFIG_SYS_USE_OSCCLK: 4321 - CONFIG_SYS_USE_OSCCLK:
4329 Use OSCM clock mode on MBX8xx board. Be careful, 4322 Use OSCM clock mode on MBX8xx board. Be careful,
4330 wrong setting might damage your board. Read 4323 wrong setting might damage your board. Read
4331 doc/README.MBX before setting this variable! 4324 doc/README.MBX before setting this variable!
4332 4325
4333 - CONFIG_SYS_CPM_POST_WORD_ADDR: (MPC8xx, MPC8260 only) 4326 - CONFIG_SYS_CPM_POST_WORD_ADDR: (MPC8xx, MPC8260 only)
4334 Offset of the bootmode word in DPRAM used by post 4327 Offset of the bootmode word in DPRAM used by post
4335 (Power On Self Tests). This definition overrides 4328 (Power On Self Tests). This definition overrides
4336 #define'd default value in commproc.h resp. 4329 #define'd default value in commproc.h resp.
4337 cpm_8260.h. 4330 cpm_8260.h.
4338 4331
4339 - CONFIG_SYS_PCI_SLV_MEM_LOCAL, CONFIG_SYS_PCI_SLV_MEM_BUS, CONFIG_SYS_PICMR0_MASK_ATTRIB, 4332 - CONFIG_SYS_PCI_SLV_MEM_LOCAL, CONFIG_SYS_PCI_SLV_MEM_BUS, CONFIG_SYS_PICMR0_MASK_ATTRIB,
4340 CONFIG_SYS_PCI_MSTR0_LOCAL, CONFIG_SYS_PCIMSK0_MASK, CONFIG_SYS_PCI_MSTR1_LOCAL, 4333 CONFIG_SYS_PCI_MSTR0_LOCAL, CONFIG_SYS_PCIMSK0_MASK, CONFIG_SYS_PCI_MSTR1_LOCAL,
4341 CONFIG_SYS_PCIMSK1_MASK, CONFIG_SYS_PCI_MSTR_MEM_LOCAL, CONFIG_SYS_PCI_MSTR_MEM_BUS, 4334 CONFIG_SYS_PCIMSK1_MASK, CONFIG_SYS_PCI_MSTR_MEM_LOCAL, CONFIG_SYS_PCI_MSTR_MEM_BUS,
4342 CONFIG_SYS_CPU_PCI_MEM_START, CONFIG_SYS_PCI_MSTR_MEM_SIZE, CONFIG_SYS_POCMR0_MASK_ATTRIB, 4335 CONFIG_SYS_CPU_PCI_MEM_START, CONFIG_SYS_PCI_MSTR_MEM_SIZE, CONFIG_SYS_POCMR0_MASK_ATTRIB,
4343 CONFIG_SYS_PCI_MSTR_MEMIO_LOCAL, CONFIG_SYS_PCI_MSTR_MEMIO_BUS, CPU_PCI_MEMIO_START, 4336 CONFIG_SYS_PCI_MSTR_MEMIO_LOCAL, CONFIG_SYS_PCI_MSTR_MEMIO_BUS, CPU_PCI_MEMIO_START,
4344 CONFIG_SYS_PCI_MSTR_MEMIO_SIZE, CONFIG_SYS_POCMR1_MASK_ATTRIB, CONFIG_SYS_PCI_MSTR_IO_LOCAL, 4337 CONFIG_SYS_PCI_MSTR_MEMIO_SIZE, CONFIG_SYS_POCMR1_MASK_ATTRIB, CONFIG_SYS_PCI_MSTR_IO_LOCAL,
4345 CONFIG_SYS_PCI_MSTR_IO_BUS, CONFIG_SYS_CPU_PCI_IO_START, CONFIG_SYS_PCI_MSTR_IO_SIZE, 4338 CONFIG_SYS_PCI_MSTR_IO_BUS, CONFIG_SYS_CPU_PCI_IO_START, CONFIG_SYS_PCI_MSTR_IO_SIZE,
4346 CONFIG_SYS_POCMR2_MASK_ATTRIB: (MPC826x only) 4339 CONFIG_SYS_POCMR2_MASK_ATTRIB: (MPC826x only)
4347 Overrides the default PCI memory map in arch/powerpc/cpu/mpc8260/pci.c if set. 4340 Overrides the default PCI memory map in arch/powerpc/cpu/mpc8260/pci.c if set.
4348 4341
4349 - CONFIG_PCI_DISABLE_PCIE: 4342 - CONFIG_PCI_DISABLE_PCIE:
4350 Disable PCI-Express on systems where it is supported but not 4343 Disable PCI-Express on systems where it is supported but not
4351 required. 4344 required.
4352 4345
4353 - CONFIG_PCI_ENUM_ONLY 4346 - CONFIG_PCI_ENUM_ONLY
4354 Only scan through and get the devices on the busses. 4347 Only scan through and get the devices on the busses.
4355 Don't do any setup work, presumably because someone or 4348 Don't do any setup work, presumably because someone or
4356 something has already done it, and we don't need to do it 4349 something has already done it, and we don't need to do it
4357 a second time. Useful for platforms that are pre-booted 4350 a second time. Useful for platforms that are pre-booted
4358 by coreboot or similar. 4351 by coreboot or similar.
4359 4352
4360 - CONFIG_PCI_INDIRECT_BRIDGE: 4353 - CONFIG_PCI_INDIRECT_BRIDGE:
4361 Enable support for indirect PCI bridges. 4354 Enable support for indirect PCI bridges.
4362 4355
4363 - CONFIG_SYS_SRIO: 4356 - CONFIG_SYS_SRIO:
4364 Chip has SRIO or not 4357 Chip has SRIO or not
4365 4358
4366 - CONFIG_SRIO1: 4359 - CONFIG_SRIO1:
4367 Board has SRIO 1 port available 4360 Board has SRIO 1 port available
4368 4361
4369 - CONFIG_SRIO2: 4362 - CONFIG_SRIO2:
4370 Board has SRIO 2 port available 4363 Board has SRIO 2 port available
4371 4364
4372 - CONFIG_SRIO_PCIE_BOOT_MASTER 4365 - CONFIG_SRIO_PCIE_BOOT_MASTER
4373 Board can support master function for Boot from SRIO and PCIE 4366 Board can support master function for Boot from SRIO and PCIE
4374 4367
4375 - CONFIG_SYS_SRIOn_MEM_VIRT: 4368 - CONFIG_SYS_SRIOn_MEM_VIRT:
4376 Virtual Address of SRIO port 'n' memory region 4369 Virtual Address of SRIO port 'n' memory region
4377 4370
4378 - CONFIG_SYS_SRIOn_MEM_PHYS: 4371 - CONFIG_SYS_SRIOn_MEM_PHYS:
4379 Physical Address of SRIO port 'n' memory region 4372 Physical Address of SRIO port 'n' memory region
4380 4373
4381 - CONFIG_SYS_SRIOn_MEM_SIZE: 4374 - CONFIG_SYS_SRIOn_MEM_SIZE:
4382 Size of SRIO port 'n' memory region 4375 Size of SRIO port 'n' memory region
4383 4376
4384 - CONFIG_SYS_NAND_BUSWIDTH_16BIT 4377 - CONFIG_SYS_NAND_BUSWIDTH_16BIT
4385 Defined to tell the NAND controller that the NAND chip is using 4378 Defined to tell the NAND controller that the NAND chip is using
4386 a 16 bit bus. 4379 a 16 bit bus.
4387 Not all NAND drivers use this symbol. 4380 Not all NAND drivers use this symbol.
4388 Example of drivers that use it: 4381 Example of drivers that use it:
4389 - drivers/mtd/nand/ndfc.c 4382 - drivers/mtd/nand/ndfc.c
4390 - drivers/mtd/nand/mxc_nand.c 4383 - drivers/mtd/nand/mxc_nand.c
4391 4384
4392 - CONFIG_SYS_NDFC_EBC0_CFG 4385 - CONFIG_SYS_NDFC_EBC0_CFG
4393 Sets the EBC0_CFG register for the NDFC. If not defined 4386 Sets the EBC0_CFG register for the NDFC. If not defined
4394 a default value will be used. 4387 a default value will be used.
4395 4388
4396 - CONFIG_SPD_EEPROM 4389 - CONFIG_SPD_EEPROM
4397 Get DDR timing information from an I2C EEPROM. Common 4390 Get DDR timing information from an I2C EEPROM. Common
4398 with pluggable memory modules such as SODIMMs 4391 with pluggable memory modules such as SODIMMs
4399 4392
4400 SPD_EEPROM_ADDRESS 4393 SPD_EEPROM_ADDRESS
4401 I2C address of the SPD EEPROM 4394 I2C address of the SPD EEPROM
4402 4395
4403 - CONFIG_SYS_SPD_BUS_NUM 4396 - CONFIG_SYS_SPD_BUS_NUM
4404 If SPD EEPROM is on an I2C bus other than the first 4397 If SPD EEPROM is on an I2C bus other than the first
4405 one, specify here. Note that the value must resolve 4398 one, specify here. Note that the value must resolve
4406 to something your driver can deal with. 4399 to something your driver can deal with.
4407 4400
4408 - CONFIG_SYS_DDR_RAW_TIMING 4401 - CONFIG_SYS_DDR_RAW_TIMING
4409 Get DDR timing information from other than SPD. Common with 4402 Get DDR timing information from other than SPD. Common with
4410 soldered DDR chips onboard without SPD. DDR raw timing 4403 soldered DDR chips onboard without SPD. DDR raw timing
4411 parameters are extracted from datasheet and hard-coded into 4404 parameters are extracted from datasheet and hard-coded into
4412 header files or board specific files. 4405 header files or board specific files.
4413 4406
4414 - CONFIG_FSL_DDR_INTERACTIVE 4407 - CONFIG_FSL_DDR_INTERACTIVE
4415 Enable interactive DDR debugging. See doc/README.fsl-ddr. 4408 Enable interactive DDR debugging. See doc/README.fsl-ddr.
4416 4409
4417 - CONFIG_SYS_83XX_DDR_USES_CS0 4410 - CONFIG_SYS_83XX_DDR_USES_CS0
4418 Only for 83xx systems. If specified, then DDR should 4411 Only for 83xx systems. If specified, then DDR should
4419 be configured using CS0 and CS1 instead of CS2 and CS3. 4412 be configured using CS0 and CS1 instead of CS2 and CS3.
4420 4413
4421 - CONFIG_ETHER_ON_FEC[12] 4414 - CONFIG_ETHER_ON_FEC[12]
4422 Define to enable FEC[12] on a 8xx series processor. 4415 Define to enable FEC[12] on a 8xx series processor.
4423 4416
4424 - CONFIG_FEC[12]_PHY 4417 - CONFIG_FEC[12]_PHY
4425 Define to the hardcoded PHY address which corresponds 4418 Define to the hardcoded PHY address which corresponds
4426 to the given FEC; i. e. 4419 to the given FEC; i. e.
4427 #define CONFIG_FEC1_PHY 4 4420 #define CONFIG_FEC1_PHY 4
4428 means that the PHY with address 4 is connected to FEC1 4421 means that the PHY with address 4 is connected to FEC1
4429 4422
4430 When set to -1, means to probe for first available. 4423 When set to -1, means to probe for first available.
4431 4424
4432 - CONFIG_FEC[12]_PHY_NORXERR 4425 - CONFIG_FEC[12]_PHY_NORXERR
4433 The PHY does not have a RXERR line (RMII only). 4426 The PHY does not have a RXERR line (RMII only).
4434 (so program the FEC to ignore it). 4427 (so program the FEC to ignore it).
4435 4428
4436 - CONFIG_RMII 4429 - CONFIG_RMII
4437 Enable RMII mode for all FECs. 4430 Enable RMII mode for all FECs.
4438 Note that this is a global option, we can't 4431 Note that this is a global option, we can't
4439 have one FEC in standard MII mode and another in RMII mode. 4432 have one FEC in standard MII mode and another in RMII mode.
4440 4433
4441 - CONFIG_CRC32_VERIFY 4434 - CONFIG_CRC32_VERIFY
4442 Add a verify option to the crc32 command. 4435 Add a verify option to the crc32 command.
4443 The syntax is: 4436 The syntax is:
4444 4437
4445 => crc32 -v <address> <count> <crc32> 4438 => crc32 -v <address> <count> <crc32>
4446 4439
4447 Where address/count indicate a memory area 4440 Where address/count indicate a memory area
4448 and crc32 is the correct crc32 which the 4441 and crc32 is the correct crc32 which the
4449 area should have. 4442 area should have.
4450 4443
4451 - CONFIG_LOOPW 4444 - CONFIG_LOOPW
4452 Add the "loopw" memory command. This only takes effect if 4445 Add the "loopw" memory command. This only takes effect if
4453 the memory commands are activated globally (CONFIG_CMD_MEM). 4446 the memory commands are activated globally (CONFIG_CMD_MEM).
4454 4447
4455 - CONFIG_MX_CYCLIC 4448 - CONFIG_MX_CYCLIC
4456 Add the "mdc" and "mwc" memory commands. These are cyclic 4449 Add the "mdc" and "mwc" memory commands. These are cyclic
4457 "md/mw" commands. 4450 "md/mw" commands.
4458 Examples: 4451 Examples:
4459 4452
4460 => mdc.b 10 4 500 4453 => mdc.b 10 4 500
4461 This command will print 4 bytes (10,11,12,13) each 500 ms. 4454 This command will print 4 bytes (10,11,12,13) each 500 ms.
4462 4455
4463 => mwc.l 100 12345678 10 4456 => mwc.l 100 12345678 10
4464 This command will write 12345678 to address 100 all 10 ms. 4457 This command will write 12345678 to address 100 all 10 ms.
4465 4458
4466 This only takes effect if the memory commands are activated 4459 This only takes effect if the memory commands are activated
4467 globally (CONFIG_CMD_MEM). 4460 globally (CONFIG_CMD_MEM).
4468 4461
4469 - CONFIG_SKIP_LOWLEVEL_INIT 4462 - CONFIG_SKIP_LOWLEVEL_INIT
4470 [ARM, NDS32, MIPS only] If this variable is defined, then certain 4463 [ARM, NDS32, MIPS only] If this variable is defined, then certain
4471 low level initializations (like setting up the memory 4464 low level initializations (like setting up the memory
4472 controller) are omitted and/or U-Boot does not 4465 controller) are omitted and/or U-Boot does not
4473 relocate itself into RAM. 4466 relocate itself into RAM.
4474 4467
4475 Normally this variable MUST NOT be defined. The only 4468 Normally this variable MUST NOT be defined. The only
4476 exception is when U-Boot is loaded (to RAM) by some 4469 exception is when U-Boot is loaded (to RAM) by some
4477 other boot loader or by a debugger which performs 4470 other boot loader or by a debugger which performs
4478 these initializations itself. 4471 these initializations itself.
4479 4472
4480 - CONFIG_SPL_BUILD 4473 - CONFIG_SPL_BUILD
4481 Modifies the behaviour of start.S when compiling a loader 4474 Modifies the behaviour of start.S when compiling a loader
4482 that is executed before the actual U-Boot. E.g. when 4475 that is executed before the actual U-Boot. E.g. when
4483 compiling a NAND SPL. 4476 compiling a NAND SPL.
4484 4477
4485 - CONFIG_TPL_BUILD 4478 - CONFIG_TPL_BUILD
4486 Modifies the behaviour of start.S when compiling a loader 4479 Modifies the behaviour of start.S when compiling a loader
4487 that is executed after the SPL and before the actual U-Boot. 4480 that is executed after the SPL and before the actual U-Boot.
4488 It is loaded by the SPL. 4481 It is loaded by the SPL.
4489 4482
4490 - CONFIG_SYS_MPC85XX_NO_RESETVEC 4483 - CONFIG_SYS_MPC85XX_NO_RESETVEC
4491 Only for 85xx systems. If this variable is specified, the section 4484 Only for 85xx systems. If this variable is specified, the section
4492 .resetvec is not kept and the section .bootpg is placed in the 4485 .resetvec is not kept and the section .bootpg is placed in the
4493 previous 4k of the .text section. 4486 previous 4k of the .text section.
4494 4487
4495 - CONFIG_ARCH_MAP_SYSMEM 4488 - CONFIG_ARCH_MAP_SYSMEM
4496 Generally U-Boot (and in particular the md command) uses 4489 Generally U-Boot (and in particular the md command) uses
4497 effective address. It is therefore not necessary to regard 4490 effective address. It is therefore not necessary to regard
4498 U-Boot address as virtual addresses that need to be translated 4491 U-Boot address as virtual addresses that need to be translated
4499 to physical addresses. However, sandbox requires this, since 4492 to physical addresses. However, sandbox requires this, since
4500 it maintains its own little RAM buffer which contains all 4493 it maintains its own little RAM buffer which contains all
4501 addressable memory. This option causes some memory accesses 4494 addressable memory. This option causes some memory accesses
4502 to be mapped through map_sysmem() / unmap_sysmem(). 4495 to be mapped through map_sysmem() / unmap_sysmem().
4503 4496
4504 - CONFIG_USE_ARCH_MEMCPY 4497 - CONFIG_USE_ARCH_MEMCPY
4505 CONFIG_USE_ARCH_MEMSET 4498 CONFIG_USE_ARCH_MEMSET
4506 If these options are used a optimized version of memcpy/memset will 4499 If these options are used a optimized version of memcpy/memset will
4507 be used if available. These functions may be faster under some 4500 be used if available. These functions may be faster under some
4508 conditions but may increase the binary size. 4501 conditions but may increase the binary size.
4509 4502
4510 - CONFIG_X86_RESET_VECTOR 4503 - CONFIG_X86_RESET_VECTOR
4511 If defined, the x86 reset vector code is included. This is not 4504 If defined, the x86 reset vector code is included. This is not
4512 needed when U-Boot is running from Coreboot. 4505 needed when U-Boot is running from Coreboot.
4513 4506
4514 - CONFIG_SYS_MPUCLK 4507 - CONFIG_SYS_MPUCLK
4515 Defines the MPU clock speed (in MHz). 4508 Defines the MPU clock speed (in MHz).
4516 4509
4517 NOTE : currently only supported on AM335x platforms. 4510 NOTE : currently only supported on AM335x platforms.
4518 4511
4519 - CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC: 4512 - CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC:
4520 Enables the RTC32K OSC on AM33xx based plattforms 4513 Enables the RTC32K OSC on AM33xx based plattforms
4521 4514
4522 Freescale QE/FMAN Firmware Support: 4515 Freescale QE/FMAN Firmware Support:
4523 ----------------------------------- 4516 -----------------------------------
4524 4517
4525 The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the 4518 The Freescale QUICCEngine (QE) and Frame Manager (FMAN) both support the
4526 loading of "firmware", which is encoded in the QE firmware binary format. 4519 loading of "firmware", which is encoded in the QE firmware binary format.
4527 This firmware often needs to be loaded during U-Boot booting, so macros 4520 This firmware often needs to be loaded during U-Boot booting, so macros
4528 are used to identify the storage device (NOR flash, SPI, etc) and the address 4521 are used to identify the storage device (NOR flash, SPI, etc) and the address
4529 within that device. 4522 within that device.
4530 4523
4531 - CONFIG_SYS_FMAN_FW_ADDR 4524 - CONFIG_SYS_FMAN_FW_ADDR
4532 The address in the storage device where the FMAN microcode is located. The 4525 The address in the storage device where the FMAN microcode is located. The
4533 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro 4526 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
4534 is also specified. 4527 is also specified.
4535 4528
4536 - CONFIG_SYS_QE_FW_ADDR 4529 - CONFIG_SYS_QE_FW_ADDR
4537 The address in the storage device where the QE microcode is located. The 4530 The address in the storage device where the QE microcode is located. The
4538 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro 4531 meaning of this address depends on which CONFIG_SYS_QE_FW_IN_xxx macro
4539 is also specified. 4532 is also specified.
4540 4533
4541 - CONFIG_SYS_QE_FMAN_FW_LENGTH 4534 - CONFIG_SYS_QE_FMAN_FW_LENGTH
4542 The maximum possible size of the firmware. The firmware binary format 4535 The maximum possible size of the firmware. The firmware binary format
4543 has a field that specifies the actual size of the firmware, but it 4536 has a field that specifies the actual size of the firmware, but it
4544 might not be possible to read any part of the firmware unless some 4537 might not be possible to read any part of the firmware unless some
4545 local storage is allocated to hold the entire firmware first. 4538 local storage is allocated to hold the entire firmware first.
4546 4539
4547 - CONFIG_SYS_QE_FMAN_FW_IN_NOR 4540 - CONFIG_SYS_QE_FMAN_FW_IN_NOR
4548 Specifies that QE/FMAN firmware is located in NOR flash, mapped as 4541 Specifies that QE/FMAN firmware is located in NOR flash, mapped as
4549 normal addressable memory via the LBC. CONFIG_SYS_FMAN_FW_ADDR is the 4542 normal addressable memory via the LBC. CONFIG_SYS_FMAN_FW_ADDR is the
4550 virtual address in NOR flash. 4543 virtual address in NOR flash.
4551 4544
4552 - CONFIG_SYS_QE_FMAN_FW_IN_NAND 4545 - CONFIG_SYS_QE_FMAN_FW_IN_NAND
4553 Specifies that QE/FMAN firmware is located in NAND flash. 4546 Specifies that QE/FMAN firmware is located in NAND flash.
4554 CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash. 4547 CONFIG_SYS_FMAN_FW_ADDR is the offset within NAND flash.
4555 4548
4556 - CONFIG_SYS_QE_FMAN_FW_IN_MMC 4549 - CONFIG_SYS_QE_FMAN_FW_IN_MMC
4557 Specifies that QE/FMAN firmware is located on the primary SD/MMC 4550 Specifies that QE/FMAN firmware is located on the primary SD/MMC
4558 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device. 4551 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
4559 4552
4560 - CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH 4553 - CONFIG_SYS_QE_FMAN_FW_IN_SPIFLASH
4561 Specifies that QE/FMAN firmware is located on the primary SPI 4554 Specifies that QE/FMAN firmware is located on the primary SPI
4562 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device. 4555 device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
4563 4556
4564 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE 4557 - CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
4565 Specifies that QE/FMAN firmware is located in the remote (master) 4558 Specifies that QE/FMAN firmware is located in the remote (master)
4566 memory space. CONFIG_SYS_FMAN_FW_ADDR is a virtual address which 4559 memory space. CONFIG_SYS_FMAN_FW_ADDR is a virtual address which
4567 can be mapped from slave TLB->slave LAW->slave SRIO or PCIE outbound 4560 can be mapped from slave TLB->slave LAW->slave SRIO or PCIE outbound
4568 window->master inbound window->master LAW->the ucode address in 4561 window->master inbound window->master LAW->the ucode address in
4569 master's memory space. 4562 master's memory space.
4570 4563
4571 Building the Software: 4564 Building the Software:
4572 ====================== 4565 ======================
4573 4566
4574 Building U-Boot has been tested in several native build environments 4567 Building U-Boot has been tested in several native build environments
4575 and in many different cross environments. Of course we cannot support 4568 and in many different cross environments. Of course we cannot support
4576 all possibly existing versions of cross development tools in all 4569 all possibly existing versions of cross development tools in all
4577 (potentially obsolete) versions. In case of tool chain problems we 4570 (potentially obsolete) versions. In case of tool chain problems we
4578 recommend to use the ELDK (see http://www.denx.de/wiki/DULG/ELDK) 4571 recommend to use the ELDK (see http://www.denx.de/wiki/DULG/ELDK)
4579 which is extensively used to build and test U-Boot. 4572 which is extensively used to build and test U-Boot.
4580 4573
4581 If you are not using a native environment, it is assumed that you 4574 If you are not using a native environment, it is assumed that you
4582 have GNU cross compiling tools available in your path. In this case, 4575 have GNU cross compiling tools available in your path. In this case,
4583 you must set the environment variable CROSS_COMPILE in your shell. 4576 you must set the environment variable CROSS_COMPILE in your shell.
4584 Note that no changes to the Makefile or any other source files are 4577 Note that no changes to the Makefile or any other source files are
4585 necessary. For example using the ELDK on a 4xx CPU, please enter: 4578 necessary. For example using the ELDK on a 4xx CPU, please enter:
4586 4579
4587 $ CROSS_COMPILE=ppc_4xx- 4580 $ CROSS_COMPILE=ppc_4xx-
4588 $ export CROSS_COMPILE 4581 $ export CROSS_COMPILE
4589 4582
4590 Note: If you wish to generate Windows versions of the utilities in 4583 Note: If you wish to generate Windows versions of the utilities in
4591 the tools directory you can use the MinGW toolchain 4584 the tools directory you can use the MinGW toolchain
4592 (http://www.mingw.org). Set your HOST tools to the MinGW 4585 (http://www.mingw.org). Set your HOST tools to the MinGW
4593 toolchain and execute 'make tools'. For example: 4586 toolchain and execute 'make tools'. For example:
4594 4587
4595 $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools 4588 $ make HOSTCC=i586-mingw32msvc-gcc HOSTSTRIP=i586-mingw32msvc-strip tools
4596 4589
4597 Binaries such as tools/mkimage.exe will be created which can 4590 Binaries such as tools/mkimage.exe will be created which can
4598 be executed on computers running Windows. 4591 be executed on computers running Windows.
4599 4592
4600 U-Boot is intended to be simple to build. After installing the 4593 U-Boot is intended to be simple to build. After installing the
4601 sources you must configure U-Boot for one specific board type. This 4594 sources you must configure U-Boot for one specific board type. This
4602 is done by typing: 4595 is done by typing:
4603 4596
4604 make NAME_config 4597 make NAME_config
4605 4598
4606 where "NAME_config" is the name of one of the existing configu- 4599 where "NAME_config" is the name of one of the existing configu-
4607 rations; see boards.cfg for supported names. 4600 rations; see boards.cfg for supported names.
4608 4601
4609 Note: for some board special configuration names may exist; check if 4602 Note: for some board special configuration names may exist; check if
4610 additional information is available from the board vendor; for 4603 additional information is available from the board vendor; for
4611 instance, the TQM823L systems are available without (standard) 4604 instance, the TQM823L systems are available without (standard)
4612 or with LCD support. You can select such additional "features" 4605 or with LCD support. You can select such additional "features"
4613 when choosing the configuration, i. e. 4606 when choosing the configuration, i. e.
4614 4607
4615 make TQM823L_config 4608 make TQM823L_config
4616 - will configure for a plain TQM823L, i. e. no LCD support 4609 - will configure for a plain TQM823L, i. e. no LCD support
4617 4610
4618 make TQM823L_LCD_config 4611 make TQM823L_LCD_config
4619 - will configure for a TQM823L with U-Boot console on LCD 4612 - will configure for a TQM823L with U-Boot console on LCD
4620 4613
4621 etc. 4614 etc.
4622 4615
4623 4616
4624 Finally, type "make all", and you should get some working U-Boot 4617 Finally, type "make all", and you should get some working U-Boot
4625 images ready for download to / installation on your system: 4618 images ready for download to / installation on your system:
4626 4619
4627 - "u-boot.bin" is a raw binary image 4620 - "u-boot.bin" is a raw binary image
4628 - "u-boot" is an image in ELF binary format 4621 - "u-boot" is an image in ELF binary format
4629 - "u-boot.srec" is in Motorola S-Record format 4622 - "u-boot.srec" is in Motorola S-Record format
4630 4623
4631 By default the build is performed locally and the objects are saved 4624 By default the build is performed locally and the objects are saved
4632 in the source directory. One of the two methods can be used to change 4625 in the source directory. One of the two methods can be used to change
4633 this behavior and build U-Boot to some external directory: 4626 this behavior and build U-Boot to some external directory:
4634 4627
4635 1. Add O= to the make command line invocations: 4628 1. Add O= to the make command line invocations:
4636 4629
4637 make O=/tmp/build distclean 4630 make O=/tmp/build distclean
4638 make O=/tmp/build NAME_config 4631 make O=/tmp/build NAME_config
4639 make O=/tmp/build all 4632 make O=/tmp/build all
4640 4633
4641 2. Set environment variable BUILD_DIR to point to the desired location: 4634 2. Set environment variable BUILD_DIR to point to the desired location:
4642 4635
4643 export BUILD_DIR=/tmp/build 4636 export BUILD_DIR=/tmp/build
4644 make distclean 4637 make distclean
4645 make NAME_config 4638 make NAME_config
4646 make all 4639 make all
4647 4640
4648 Note that the command line "O=" setting overrides the BUILD_DIR environment 4641 Note that the command line "O=" setting overrides the BUILD_DIR environment
4649 variable. 4642 variable.
4650 4643
4651 4644
4652 Please be aware that the Makefiles assume you are using GNU make, so 4645 Please be aware that the Makefiles assume you are using GNU make, so
4653 for instance on NetBSD you might need to use "gmake" instead of 4646 for instance on NetBSD you might need to use "gmake" instead of
4654 native "make". 4647 native "make".
4655 4648
4656 4649
4657 If the system board that you have is not listed, then you will need 4650 If the system board that you have is not listed, then you will need
4658 to port U-Boot to your hardware platform. To do this, follow these 4651 to port U-Boot to your hardware platform. To do this, follow these
4659 steps: 4652 steps:
4660 4653
4661 1. Add a new configuration option for your board to the toplevel 4654 1. Add a new configuration option for your board to the toplevel
4662 "boards.cfg" file, using the existing entries as examples. 4655 "boards.cfg" file, using the existing entries as examples.
4663 Follow the instructions there to keep the boards in order. 4656 Follow the instructions there to keep the boards in order.
4664 2. Create a new directory to hold your board specific code. Add any 4657 2. Create a new directory to hold your board specific code. Add any
4665 files you need. In your board directory, you will need at least 4658 files you need. In your board directory, you will need at least
4666 the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds". 4659 the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds".
4667 3. Create a new configuration file "include/configs/<board>.h" for 4660 3. Create a new configuration file "include/configs/<board>.h" for
4668 your board 4661 your board
4669 3. If you're porting U-Boot to a new CPU, then also create a new 4662 3. If you're porting U-Boot to a new CPU, then also create a new
4670 directory to hold your CPU specific code. Add any files you need. 4663 directory to hold your CPU specific code. Add any files you need.
4671 4. Run "make <board>_config" with your new name. 4664 4. Run "make <board>_config" with your new name.
4672 5. Type "make", and you should get a working "u-boot.srec" file 4665 5. Type "make", and you should get a working "u-boot.srec" file
4673 to be installed on your target system. 4666 to be installed on your target system.
4674 6. Debug and solve any problems that might arise. 4667 6. Debug and solve any problems that might arise.
4675 [Of course, this last step is much harder than it sounds.] 4668 [Of course, this last step is much harder than it sounds.]
4676 4669
4677 4670
4678 Testing of U-Boot Modifications, Ports to New Hardware, etc.: 4671 Testing of U-Boot Modifications, Ports to New Hardware, etc.:
4679 ============================================================== 4672 ==============================================================
4680 4673
4681 If you have modified U-Boot sources (for instance added a new board 4674 If you have modified U-Boot sources (for instance added a new board
4682 or support for new devices, a new CPU, etc.) you are expected to 4675 or support for new devices, a new CPU, etc.) you are expected to
4683 provide feedback to the other developers. The feedback normally takes 4676 provide feedback to the other developers. The feedback normally takes
4684 the form of a "patch", i. e. a context diff against a certain (latest 4677 the form of a "patch", i. e. a context diff against a certain (latest
4685 official or latest in the git repository) version of U-Boot sources. 4678 official or latest in the git repository) version of U-Boot sources.
4686 4679
4687 But before you submit such a patch, please verify that your modifi- 4680 But before you submit such a patch, please verify that your modifi-
4688 cation did not break existing code. At least make sure that *ALL* of 4681 cation did not break existing code. At least make sure that *ALL* of
4689 the supported boards compile WITHOUT ANY compiler warnings. To do so, 4682 the supported boards compile WITHOUT ANY compiler warnings. To do so,
4690 just run the "MAKEALL" script, which will configure and build U-Boot 4683 just run the "MAKEALL" script, which will configure and build U-Boot
4691 for ALL supported system. Be warned, this will take a while. You can 4684 for ALL supported system. Be warned, this will take a while. You can
4692 select which (cross) compiler to use by passing a `CROSS_COMPILE' 4685 select which (cross) compiler to use by passing a `CROSS_COMPILE'
4693 environment variable to the script, i. e. to use the ELDK cross tools 4686 environment variable to the script, i. e. to use the ELDK cross tools
4694 you can type 4687 you can type
4695 4688
4696 CROSS_COMPILE=ppc_8xx- MAKEALL 4689 CROSS_COMPILE=ppc_8xx- MAKEALL
4697 4690
4698 or to build on a native PowerPC system you can type 4691 or to build on a native PowerPC system you can type
4699 4692
4700 CROSS_COMPILE=' ' MAKEALL 4693 CROSS_COMPILE=' ' MAKEALL
4701 4694
4702 When using the MAKEALL script, the default behaviour is to build 4695 When using the MAKEALL script, the default behaviour is to build
4703 U-Boot in the source directory. This location can be changed by 4696 U-Boot in the source directory. This location can be changed by
4704 setting the BUILD_DIR environment variable. Also, for each target 4697 setting the BUILD_DIR environment variable. Also, for each target
4705 built, the MAKEALL script saves two log files (<target>.ERR and 4698 built, the MAKEALL script saves two log files (<target>.ERR and
4706 <target>.MAKEALL) in the <source dir>/LOG directory. This default 4699 <target>.MAKEALL) in the <source dir>/LOG directory. This default
4707 location can be changed by setting the MAKEALL_LOGDIR environment 4700 location can be changed by setting the MAKEALL_LOGDIR environment
4708 variable. For example: 4701 variable. For example:
4709 4702
4710 export BUILD_DIR=/tmp/build 4703 export BUILD_DIR=/tmp/build
4711 export MAKEALL_LOGDIR=/tmp/log 4704 export MAKEALL_LOGDIR=/tmp/log
4712 CROSS_COMPILE=ppc_8xx- MAKEALL 4705 CROSS_COMPILE=ppc_8xx- MAKEALL
4713 4706
4714 With the above settings build objects are saved in the /tmp/build, 4707 With the above settings build objects are saved in the /tmp/build,
4715 log files are saved in the /tmp/log and the source tree remains clean 4708 log files are saved in the /tmp/log and the source tree remains clean
4716 during the whole build process. 4709 during the whole build process.
4717 4710
4718 4711
4719 See also "U-Boot Porting Guide" below. 4712 See also "U-Boot Porting Guide" below.
4720 4713
4721 4714
4722 Monitor Commands - Overview: 4715 Monitor Commands - Overview:
4723 ============================ 4716 ============================
4724 4717
4725 go - start application at address 'addr' 4718 go - start application at address 'addr'
4726 run - run commands in an environment variable 4719 run - run commands in an environment variable
4727 bootm - boot application image from memory 4720 bootm - boot application image from memory
4728 bootp - boot image via network using BootP/TFTP protocol 4721 bootp - boot image via network using BootP/TFTP protocol
4729 bootz - boot zImage from memory 4722 bootz - boot zImage from memory
4730 tftpboot- boot image via network using TFTP protocol 4723 tftpboot- boot image via network using TFTP protocol
4731 and env variables "ipaddr" and "serverip" 4724 and env variables "ipaddr" and "serverip"
4732 (and eventually "gatewayip") 4725 (and eventually "gatewayip")
4733 tftpput - upload a file via network using TFTP protocol 4726 tftpput - upload a file via network using TFTP protocol
4734 rarpboot- boot image via network using RARP/TFTP protocol 4727 rarpboot- boot image via network using RARP/TFTP protocol
4735 diskboot- boot from IDE devicebootd - boot default, i.e., run 'bootcmd' 4728 diskboot- boot from IDE devicebootd - boot default, i.e., run 'bootcmd'
4736 loads - load S-Record file over serial line 4729 loads - load S-Record file over serial line
4737 loadb - load binary file over serial line (kermit mode) 4730 loadb - load binary file over serial line (kermit mode)
4738 md - memory display 4731 md - memory display
4739 mm - memory modify (auto-incrementing) 4732 mm - memory modify (auto-incrementing)
4740 nm - memory modify (constant address) 4733 nm - memory modify (constant address)
4741 mw - memory write (fill) 4734 mw - memory write (fill)
4742 cp - memory copy 4735 cp - memory copy
4743 cmp - memory compare 4736 cmp - memory compare
4744 crc32 - checksum calculation 4737 crc32 - checksum calculation
4745 i2c - I2C sub-system 4738 i2c - I2C sub-system
4746 sspi - SPI utility commands 4739 sspi - SPI utility commands
4747 base - print or set address offset 4740 base - print or set address offset
4748 printenv- print environment variables 4741 printenv- print environment variables
4749 setenv - set environment variables 4742 setenv - set environment variables
4750 saveenv - save environment variables to persistent storage 4743 saveenv - save environment variables to persistent storage
4751 protect - enable or disable FLASH write protection 4744 protect - enable or disable FLASH write protection
4752 erase - erase FLASH memory 4745 erase - erase FLASH memory
4753 flinfo - print FLASH memory information 4746 flinfo - print FLASH memory information
4754 nand - NAND memory operations (see doc/README.nand) 4747 nand - NAND memory operations (see doc/README.nand)
4755 bdinfo - print Board Info structure 4748 bdinfo - print Board Info structure
4756 iminfo - print header information for application image 4749 iminfo - print header information for application image
4757 coninfo - print console devices and informations 4750 coninfo - print console devices and informations
4758 ide - IDE sub-system 4751 ide - IDE sub-system
4759 loop - infinite loop on address range 4752 loop - infinite loop on address range
4760 loopw - infinite write loop on address range 4753 loopw - infinite write loop on address range
4761 mtest - simple RAM test 4754 mtest - simple RAM test
4762 icache - enable or disable instruction cache 4755 icache - enable or disable instruction cache
4763 dcache - enable or disable data cache 4756 dcache - enable or disable data cache
4764 reset - Perform RESET of the CPU 4757 reset - Perform RESET of the CPU
4765 echo - echo args to console 4758 echo - echo args to console
4766 version - print monitor version 4759 version - print monitor version
4767 help - print online help 4760 help - print online help
4768 ? - alias for 'help' 4761 ? - alias for 'help'
4769 4762
4770 4763
4771 Monitor Commands - Detailed Description: 4764 Monitor Commands - Detailed Description:
4772 ======================================== 4765 ========================================
4773 4766
4774 TODO. 4767 TODO.
4775 4768
4776 For now: just type "help <command>". 4769 For now: just type "help <command>".
4777 4770
4778 4771
4779 Environment Variables: 4772 Environment Variables:
4780 ====================== 4773 ======================
4781 4774
4782 U-Boot supports user configuration using Environment Variables which 4775 U-Boot supports user configuration using Environment Variables which
4783 can be made persistent by saving to Flash memory. 4776 can be made persistent by saving to Flash memory.
4784 4777
4785 Environment Variables are set using "setenv", printed using 4778 Environment Variables are set using "setenv", printed using
4786 "printenv", and saved to Flash using "saveenv". Using "setenv" 4779 "printenv", and saved to Flash using "saveenv". Using "setenv"
4787 without a value can be used to delete a variable from the 4780 without a value can be used to delete a variable from the
4788 environment. As long as you don't save the environment you are 4781 environment. As long as you don't save the environment you are
4789 working with an in-memory copy. In case the Flash area containing the 4782 working with an in-memory copy. In case the Flash area containing the
4790 environment is erased by accident, a default environment is provided. 4783 environment is erased by accident, a default environment is provided.
4791 4784
4792 Some configuration options can be set using Environment Variables. 4785 Some configuration options can be set using Environment Variables.
4793 4786
4794 List of environment variables (most likely not complete): 4787 List of environment variables (most likely not complete):
4795 4788
4796 baudrate - see CONFIG_BAUDRATE 4789 baudrate - see CONFIG_BAUDRATE
4797 4790
4798 bootdelay - see CONFIG_BOOTDELAY 4791 bootdelay - see CONFIG_BOOTDELAY
4799 4792
4800 bootcmd - see CONFIG_BOOTCOMMAND 4793 bootcmd - see CONFIG_BOOTCOMMAND
4801 4794
4802 bootargs - Boot arguments when booting an RTOS image 4795 bootargs - Boot arguments when booting an RTOS image
4803 4796
4804 bootfile - Name of the image to load with TFTP 4797 bootfile - Name of the image to load with TFTP
4805 4798
4806 bootm_low - Memory range available for image processing in the bootm 4799 bootm_low - Memory range available for image processing in the bootm
4807 command can be restricted. This variable is given as 4800 command can be restricted. This variable is given as
4808 a hexadecimal number and defines lowest address allowed 4801 a hexadecimal number and defines lowest address allowed
4809 for use by the bootm command. See also "bootm_size" 4802 for use by the bootm command. See also "bootm_size"
4810 environment variable. Address defined by "bootm_low" is 4803 environment variable. Address defined by "bootm_low" is
4811 also the base of the initial memory mapping for the Linux 4804 also the base of the initial memory mapping for the Linux
4812 kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and 4805 kernel -- see the description of CONFIG_SYS_BOOTMAPSZ and
4813 bootm_mapsize. 4806 bootm_mapsize.
4814 4807
4815 bootm_mapsize - Size of the initial memory mapping for the Linux kernel. 4808 bootm_mapsize - Size of the initial memory mapping for the Linux kernel.
4816 This variable is given as a hexadecimal number and it 4809 This variable is given as a hexadecimal number and it
4817 defines the size of the memory region starting at base 4810 defines the size of the memory region starting at base
4818 address bootm_low that is accessible by the Linux kernel 4811 address bootm_low that is accessible by the Linux kernel
4819 during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used 4812 during early boot. If unset, CONFIG_SYS_BOOTMAPSZ is used
4820 as the default value if it is defined, and bootm_size is 4813 as the default value if it is defined, and bootm_size is
4821 used otherwise. 4814 used otherwise.
4822 4815
4823 bootm_size - Memory range available for image processing in the bootm 4816 bootm_size - Memory range available for image processing in the bootm
4824 command can be restricted. This variable is given as 4817 command can be restricted. This variable is given as
4825 a hexadecimal number and defines the size of the region 4818 a hexadecimal number and defines the size of the region
4826 allowed for use by the bootm command. See also "bootm_low" 4819 allowed for use by the bootm command. See also "bootm_low"
4827 environment variable. 4820 environment variable.
4828 4821
4829 updatefile - Location of the software update file on a TFTP server, used 4822 updatefile - Location of the software update file on a TFTP server, used
4830 by the automatic software update feature. Please refer to 4823 by the automatic software update feature. Please refer to
4831 documentation in doc/README.update for more details. 4824 documentation in doc/README.update for more details.
4832 4825
4833 autoload - if set to "no" (any string beginning with 'n'), 4826 autoload - if set to "no" (any string beginning with 'n'),
4834 "bootp" will just load perform a lookup of the 4827 "bootp" will just load perform a lookup of the
4835 configuration from the BOOTP server, but not try to 4828 configuration from the BOOTP server, but not try to
4836 load any image using TFTP 4829 load any image using TFTP
4837 4830
4838 autostart - if set to "yes", an image loaded using the "bootp", 4831 autostart - if set to "yes", an image loaded using the "bootp",
4839 "rarpboot", "tftpboot" or "diskboot" commands will 4832 "rarpboot", "tftpboot" or "diskboot" commands will
4840 be automatically started (by internally calling 4833 be automatically started (by internally calling
4841 "bootm") 4834 "bootm")
4842 4835
4843 If set to "no", a standalone image passed to the 4836 If set to "no", a standalone image passed to the
4844 "bootm" command will be copied to the load address 4837 "bootm" command will be copied to the load address
4845 (and eventually uncompressed), but NOT be started. 4838 (and eventually uncompressed), but NOT be started.
4846 This can be used to load and uncompress arbitrary 4839 This can be used to load and uncompress arbitrary
4847 data. 4840 data.
4848 4841
4849 fdt_high - if set this restricts the maximum address that the 4842 fdt_high - if set this restricts the maximum address that the
4850 flattened device tree will be copied into upon boot. 4843 flattened device tree will be copied into upon boot.
4851 For example, if you have a system with 1 GB memory 4844 For example, if you have a system with 1 GB memory
4852 at physical address 0x10000000, while Linux kernel 4845 at physical address 0x10000000, while Linux kernel
4853 only recognizes the first 704 MB as low memory, you 4846 only recognizes the first 704 MB as low memory, you
4854 may need to set fdt_high as 0x3C000000 to have the 4847 may need to set fdt_high as 0x3C000000 to have the
4855 device tree blob be copied to the maximum address 4848 device tree blob be copied to the maximum address
4856 of the 704 MB low memory, so that Linux kernel can 4849 of the 704 MB low memory, so that Linux kernel can
4857 access it during the boot procedure. 4850 access it during the boot procedure.
4858 4851
4859 If this is set to the special value 0xFFFFFFFF then 4852 If this is set to the special value 0xFFFFFFFF then
4860 the fdt will not be copied at all on boot. For this 4853 the fdt will not be copied at all on boot. For this
4861 to work it must reside in writable memory, have 4854 to work it must reside in writable memory, have
4862 sufficient padding on the end of it for u-boot to 4855 sufficient padding on the end of it for u-boot to
4863 add the information it needs into it, and the memory 4856 add the information it needs into it, and the memory
4864 must be accessible by the kernel. 4857 must be accessible by the kernel.
4865 4858
4866 fdtcontroladdr- if set this is the address of the control flattened 4859 fdtcontroladdr- if set this is the address of the control flattened
4867 device tree used by U-Boot when CONFIG_OF_CONTROL is 4860 device tree used by U-Boot when CONFIG_OF_CONTROL is
4868 defined. 4861 defined.
4869 4862
4870 i2cfast - (PPC405GP|PPC405EP only) 4863 i2cfast - (PPC405GP|PPC405EP only)
4871 if set to 'y' configures Linux I2C driver for fast 4864 if set to 'y' configures Linux I2C driver for fast
4872 mode (400kHZ). This environment variable is used in 4865 mode (400kHZ). This environment variable is used in
4873 initialization code. So, for changes to be effective 4866 initialization code. So, for changes to be effective
4874 it must be saved and board must be reset. 4867 it must be saved and board must be reset.
4875 4868
4876 initrd_high - restrict positioning of initrd images: 4869 initrd_high - restrict positioning of initrd images:
4877 If this variable is not set, initrd images will be 4870 If this variable is not set, initrd images will be
4878 copied to the highest possible address in RAM; this 4871 copied to the highest possible address in RAM; this
4879 is usually what you want since it allows for 4872 is usually what you want since it allows for
4880 maximum initrd size. If for some reason you want to 4873 maximum initrd size. If for some reason you want to
4881 make sure that the initrd image is loaded below the 4874 make sure that the initrd image is loaded below the
4882 CONFIG_SYS_BOOTMAPSZ limit, you can set this environment 4875 CONFIG_SYS_BOOTMAPSZ limit, you can set this environment
4883 variable to a value of "no" or "off" or "0". 4876 variable to a value of "no" or "off" or "0".
4884 Alternatively, you can set it to a maximum upper 4877 Alternatively, you can set it to a maximum upper
4885 address to use (U-Boot will still check that it 4878 address to use (U-Boot will still check that it
4886 does not overwrite the U-Boot stack and data). 4879 does not overwrite the U-Boot stack and data).
4887 4880
4888 For instance, when you have a system with 16 MB 4881 For instance, when you have a system with 16 MB
4889 RAM, and want to reserve 4 MB from use by Linux, 4882 RAM, and want to reserve 4 MB from use by Linux,
4890 you can do this by adding "mem=12M" to the value of 4883 you can do this by adding "mem=12M" to the value of
4891 the "bootargs" variable. However, now you must make 4884 the "bootargs" variable. However, now you must make
4892 sure that the initrd image is placed in the first 4885 sure that the initrd image is placed in the first
4893 12 MB as well - this can be done with 4886 12 MB as well - this can be done with
4894 4887
4895 setenv initrd_high 00c00000 4888 setenv initrd_high 00c00000
4896 4889
4897 If you set initrd_high to 0xFFFFFFFF, this is an 4890 If you set initrd_high to 0xFFFFFFFF, this is an
4898 indication to U-Boot that all addresses are legal 4891 indication to U-Boot that all addresses are legal
4899 for the Linux kernel, including addresses in flash 4892 for the Linux kernel, including addresses in flash
4900 memory. In this case U-Boot will NOT COPY the 4893 memory. In this case U-Boot will NOT COPY the
4901 ramdisk at all. This may be useful to reduce the 4894 ramdisk at all. This may be useful to reduce the
4902 boot time on your system, but requires that this 4895 boot time on your system, but requires that this
4903 feature is supported by your Linux kernel. 4896 feature is supported by your Linux kernel.
4904 4897
4905 ipaddr - IP address; needed for tftpboot command 4898 ipaddr - IP address; needed for tftpboot command
4906 4899
4907 loadaddr - Default load address for commands like "bootp", 4900 loadaddr - Default load address for commands like "bootp",
4908 "rarpboot", "tftpboot", "loadb" or "diskboot" 4901 "rarpboot", "tftpboot", "loadb" or "diskboot"
4909 4902
4910 loads_echo - see CONFIG_LOADS_ECHO 4903 loads_echo - see CONFIG_LOADS_ECHO
4911 4904
4912 serverip - TFTP server IP address; needed for tftpboot command 4905 serverip - TFTP server IP address; needed for tftpboot command
4913 4906
4914 bootretry - see CONFIG_BOOT_RETRY_TIME 4907 bootretry - see CONFIG_BOOT_RETRY_TIME
4915 4908
4916 bootdelaykey - see CONFIG_AUTOBOOT_DELAY_STR 4909 bootdelaykey - see CONFIG_AUTOBOOT_DELAY_STR
4917 4910
4918 bootstopkey - see CONFIG_AUTOBOOT_STOP_STR 4911 bootstopkey - see CONFIG_AUTOBOOT_STOP_STR
4919 4912
4920 ethprime - controls which interface is used first. 4913 ethprime - controls which interface is used first.
4921 4914
4922 ethact - controls which interface is currently active. 4915 ethact - controls which interface is currently active.
4923 For example you can do the following 4916 For example you can do the following
4924 4917
4925 => setenv ethact FEC 4918 => setenv ethact FEC
4926 => ping 192.168.0.1 # traffic sent on FEC 4919 => ping 192.168.0.1 # traffic sent on FEC
4927 => setenv ethact SCC 4920 => setenv ethact SCC
4928 => ping 10.0.0.1 # traffic sent on SCC 4921 => ping 10.0.0.1 # traffic sent on SCC
4929 4922
4930 ethrotate - When set to "no" U-Boot does not go through all 4923 ethrotate - When set to "no" U-Boot does not go through all
4931 available network interfaces. 4924 available network interfaces.
4932 It just stays at the currently selected interface. 4925 It just stays at the currently selected interface.
4933 4926
4934 netretry - When set to "no" each network operation will 4927 netretry - When set to "no" each network operation will
4935 either succeed or fail without retrying. 4928 either succeed or fail without retrying.
4936 When set to "once" the network operation will 4929 When set to "once" the network operation will
4937 fail when all the available network interfaces 4930 fail when all the available network interfaces
4938 are tried once without success. 4931 are tried once without success.
4939 Useful on scripts which control the retry operation 4932 Useful on scripts which control the retry operation
4940 themselves. 4933 themselves.
4941 4934
4942 npe_ucode - set load address for the NPE microcode 4935 npe_ucode - set load address for the NPE microcode
4943 4936
4944 silent_linux - If set then linux will be told to boot silently, by 4937 silent_linux - If set then linux will be told to boot silently, by
4945 changing the console to be empty. If "yes" it will be 4938 changing the console to be empty. If "yes" it will be
4946 made silent. If "no" it will not be made silent. If 4939 made silent. If "no" it will not be made silent. If
4947 unset, then it will be made silent if the U-Boot console 4940 unset, then it will be made silent if the U-Boot console
4948 is silent. 4941 is silent.
4949 4942
4950 tftpsrcport - If this is set, the value is used for TFTP's 4943 tftpsrcport - If this is set, the value is used for TFTP's
4951 UDP source port. 4944 UDP source port.
4952 4945
4953 tftpdstport - If this is set, the value is used for TFTP's UDP 4946 tftpdstport - If this is set, the value is used for TFTP's UDP
4954 destination port instead of the Well Know Port 69. 4947 destination port instead of the Well Know Port 69.
4955 4948
4956 tftpblocksize - Block size to use for TFTP transfers; if not set, 4949 tftpblocksize - Block size to use for TFTP transfers; if not set,
4957 we use the TFTP server's default block size 4950 we use the TFTP server's default block size
4958 4951
4959 tftptimeout - Retransmission timeout for TFTP packets (in milli- 4952 tftptimeout - Retransmission timeout for TFTP packets (in milli-
4960 seconds, minimum value is 1000 = 1 second). Defines 4953 seconds, minimum value is 1000 = 1 second). Defines
4961 when a packet is considered to be lost so it has to 4954 when a packet is considered to be lost so it has to
4962 be retransmitted. The default is 5000 = 5 seconds. 4955 be retransmitted. The default is 5000 = 5 seconds.
4963 Lowering this value may make downloads succeed 4956 Lowering this value may make downloads succeed
4964 faster in networks with high packet loss rates or 4957 faster in networks with high packet loss rates or
4965 with unreliable TFTP servers. 4958 with unreliable TFTP servers.
4966 4959
4967 vlan - When set to a value < 4095 the traffic over 4960 vlan - When set to a value < 4095 the traffic over
4968 Ethernet is encapsulated/received over 802.1q 4961 Ethernet is encapsulated/received over 802.1q
4969 VLAN tagged frames. 4962 VLAN tagged frames.
4970 4963
4971 The following image location variables contain the location of images 4964 The following image location variables contain the location of images
4972 used in booting. The "Image" column gives the role of the image and is 4965 used in booting. The "Image" column gives the role of the image and is
4973 not an environment variable name. The other columns are environment 4966 not an environment variable name. The other columns are environment
4974 variable names. "File Name" gives the name of the file on a TFTP 4967 variable names. "File Name" gives the name of the file on a TFTP
4975 server, "RAM Address" gives the location in RAM the image will be 4968 server, "RAM Address" gives the location in RAM the image will be
4976 loaded to, and "Flash Location" gives the image's address in NOR 4969 loaded to, and "Flash Location" gives the image's address in NOR
4977 flash or offset in NAND flash. 4970 flash or offset in NAND flash.
4978 4971
4979 *Note* - these variables don't have to be defined for all boards, some 4972 *Note* - these variables don't have to be defined for all boards, some
4980 boards currenlty use other variables for these purposes, and some 4973 boards currenlty use other variables for these purposes, and some
4981 boards use these variables for other purposes. 4974 boards use these variables for other purposes.
4982 4975
4983 Image File Name RAM Address Flash Location 4976 Image File Name RAM Address Flash Location
4984 ----- --------- ----------- -------------- 4977 ----- --------- ----------- --------------
4985 u-boot u-boot u-boot_addr_r u-boot_addr 4978 u-boot u-boot u-boot_addr_r u-boot_addr
4986 Linux kernel bootfile kernel_addr_r kernel_addr 4979 Linux kernel bootfile kernel_addr_r kernel_addr
4987 device tree blob fdtfile fdt_addr_r fdt_addr 4980 device tree blob fdtfile fdt_addr_r fdt_addr
4988 ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr 4981 ramdisk ramdiskfile ramdisk_addr_r ramdisk_addr
4989 4982
4990 The following environment variables may be used and automatically 4983 The following environment variables may be used and automatically
4991 updated by the network boot commands ("bootp" and "rarpboot"), 4984 updated by the network boot commands ("bootp" and "rarpboot"),
4992 depending the information provided by your boot server: 4985 depending the information provided by your boot server:
4993 4986
4994 bootfile - see above 4987 bootfile - see above
4995 dnsip - IP address of your Domain Name Server 4988 dnsip - IP address of your Domain Name Server
4996 dnsip2 - IP address of your secondary Domain Name Server 4989 dnsip2 - IP address of your secondary Domain Name Server
4997 gatewayip - IP address of the Gateway (Router) to use 4990 gatewayip - IP address of the Gateway (Router) to use
4998 hostname - Target hostname 4991 hostname - Target hostname
4999 ipaddr - see above 4992 ipaddr - see above
5000 netmask - Subnet Mask 4993 netmask - Subnet Mask
5001 rootpath - Pathname of the root filesystem on the NFS server 4994 rootpath - Pathname of the root filesystem on the NFS server
5002 serverip - see above 4995 serverip - see above
5003 4996
5004 4997
5005 There are two special Environment Variables: 4998 There are two special Environment Variables:
5006 4999
5007 serial# - contains hardware identification information such 5000 serial# - contains hardware identification information such
5008 as type string and/or serial number 5001 as type string and/or serial number
5009 ethaddr - Ethernet address 5002 ethaddr - Ethernet address
5010 5003
5011 These variables can be set only once (usually during manufacturing of 5004 These variables can be set only once (usually during manufacturing of
5012 the board). U-Boot refuses to delete or overwrite these variables 5005 the board). U-Boot refuses to delete or overwrite these variables
5013 once they have been set once. 5006 once they have been set once.
5014 5007
5015 5008
5016 Further special Environment Variables: 5009 Further special Environment Variables:
5017 5010
5018 ver - Contains the U-Boot version string as printed 5011 ver - Contains the U-Boot version string as printed
5019 with the "version" command. This variable is 5012 with the "version" command. This variable is
5020 readonly (see CONFIG_VERSION_VARIABLE). 5013 readonly (see CONFIG_VERSION_VARIABLE).
5021 5014
5022 5015
5023 Please note that changes to some configuration parameters may take 5016 Please note that changes to some configuration parameters may take
5024 only effect after the next boot (yes, that's just like Windoze :-). 5017 only effect after the next boot (yes, that's just like Windoze :-).
5025 5018
5026 5019
5027 Callback functions for environment variables: 5020 Callback functions for environment variables:
5028 --------------------------------------------- 5021 ---------------------------------------------
5029 5022
5030 For some environment variables, the behavior of u-boot needs to change 5023 For some environment variables, the behavior of u-boot needs to change
5031 when their values are changed. This functionailty allows functions to 5024 when their values are changed. This functionailty allows functions to
5032 be associated with arbitrary variables. On creation, overwrite, or 5025 be associated with arbitrary variables. On creation, overwrite, or
5033 deletion, the callback will provide the opportunity for some side 5026 deletion, the callback will provide the opportunity for some side
5034 effect to happen or for the change to be rejected. 5027 effect to happen or for the change to be rejected.
5035 5028
5036 The callbacks are named and associated with a function using the 5029 The callbacks are named and associated with a function using the
5037 U_BOOT_ENV_CALLBACK macro in your board or driver code. 5030 U_BOOT_ENV_CALLBACK macro in your board or driver code.
5038 5031
5039 These callbacks are associated with variables in one of two ways. The 5032 These callbacks are associated with variables in one of two ways. The
5040 static list can be added to by defining CONFIG_ENV_CALLBACK_LIST_STATIC 5033 static list can be added to by defining CONFIG_ENV_CALLBACK_LIST_STATIC
5041 in the board configuration to a string that defines a list of 5034 in the board configuration to a string that defines a list of
5042 associations. The list must be in the following format: 5035 associations. The list must be in the following format:
5043 5036
5044 entry = variable_name[:callback_name] 5037 entry = variable_name[:callback_name]
5045 list = entry[,list] 5038 list = entry[,list]
5046 5039
5047 If the callback name is not specified, then the callback is deleted. 5040 If the callback name is not specified, then the callback is deleted.
5048 Spaces are also allowed anywhere in the list. 5041 Spaces are also allowed anywhere in the list.
5049 5042
5050 Callbacks can also be associated by defining the ".callbacks" variable 5043 Callbacks can also be associated by defining the ".callbacks" variable
5051 with the same list format above. Any association in ".callbacks" will 5044 with the same list format above. Any association in ".callbacks" will
5052 override any association in the static list. You can define 5045 override any association in the static list. You can define
5053 CONFIG_ENV_CALLBACK_LIST_DEFAULT to a list (string) to define the 5046 CONFIG_ENV_CALLBACK_LIST_DEFAULT to a list (string) to define the
5054 ".callbacks" envirnoment variable in the default or embedded environment. 5047 ".callbacks" envirnoment variable in the default or embedded environment.
5055 5048
5056 5049
5057 Command Line Parsing: 5050 Command Line Parsing:
5058 ===================== 5051 =====================
5059 5052
5060 There are two different command line parsers available with U-Boot: 5053 There are two different command line parsers available with U-Boot:
5061 the old "simple" one, and the much more powerful "hush" shell: 5054 the old "simple" one, and the much more powerful "hush" shell:
5062 5055
5063 Old, simple command line parser: 5056 Old, simple command line parser:
5064 -------------------------------- 5057 --------------------------------
5065 5058
5066 - supports environment variables (through setenv / saveenv commands) 5059 - supports environment variables (through setenv / saveenv commands)
5067 - several commands on one line, separated by ';' 5060 - several commands on one line, separated by ';'
5068 - variable substitution using "... ${name} ..." syntax 5061 - variable substitution using "... ${name} ..." syntax
5069 - special characters ('$', ';') can be escaped by prefixing with '\', 5062 - special characters ('$', ';') can be escaped by prefixing with '\',
5070 for example: 5063 for example:
5071 setenv bootcmd bootm \${address} 5064 setenv bootcmd bootm \${address}
5072 - You can also escape text by enclosing in single apostrophes, for example: 5065 - You can also escape text by enclosing in single apostrophes, for example:
5073 setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off' 5066 setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
5074 5067
5075 Hush shell: 5068 Hush shell:
5076 ----------- 5069 -----------
5077 5070
5078 - similar to Bourne shell, with control structures like 5071 - similar to Bourne shell, with control structures like
5079 if...then...else...fi, for...do...done; while...do...done, 5072 if...then...else...fi, for...do...done; while...do...done,
5080 until...do...done, ... 5073 until...do...done, ...
5081 - supports environment ("global") variables (through setenv / saveenv 5074 - supports environment ("global") variables (through setenv / saveenv
5082 commands) and local shell variables (through standard shell syntax 5075 commands) and local shell variables (through standard shell syntax
5083 "name=value"); only environment variables can be used with "run" 5076 "name=value"); only environment variables can be used with "run"
5084 command 5077 command
5085 5078
5086 General rules: 5079 General rules:
5087 -------------- 5080 --------------
5088 5081
5089 (1) If a command line (or an environment variable executed by a "run" 5082 (1) If a command line (or an environment variable executed by a "run"
5090 command) contains several commands separated by semicolon, and 5083 command) contains several commands separated by semicolon, and
5091 one of these commands fails, then the remaining commands will be 5084 one of these commands fails, then the remaining commands will be
5092 executed anyway. 5085 executed anyway.
5093 5086
5094 (2) If you execute several variables with one call to run (i. e. 5087 (2) If you execute several variables with one call to run (i. e.
5095 calling run with a list of variables as arguments), any failing 5088 calling run with a list of variables as arguments), any failing
5096 command will cause "run" to terminate, i. e. the remaining 5089 command will cause "run" to terminate, i. e. the remaining
5097 variables are not executed. 5090 variables are not executed.
5098 5091
5099 Note for Redundant Ethernet Interfaces: 5092 Note for Redundant Ethernet Interfaces:
5100 ======================================= 5093 =======================================
5101 5094
5102 Some boards come with redundant Ethernet interfaces; U-Boot supports 5095 Some boards come with redundant Ethernet interfaces; U-Boot supports
5103 such configurations and is capable of automatic selection of a 5096 such configurations and is capable of automatic selection of a
5104 "working" interface when needed. MAC assignment works as follows: 5097 "working" interface when needed. MAC assignment works as follows:
5105 5098
5106 Network interfaces are numbered eth0, eth1, eth2, ... Corresponding 5099 Network interfaces are numbered eth0, eth1, eth2, ... Corresponding
5107 MAC addresses can be stored in the environment as "ethaddr" (=>eth0), 5100 MAC addresses can be stored in the environment as "ethaddr" (=>eth0),
5108 "eth1addr" (=>eth1), "eth2addr", ... 5101 "eth1addr" (=>eth1), "eth2addr", ...
5109 5102
5110 If the network interface stores some valid MAC address (for instance 5103 If the network interface stores some valid MAC address (for instance
5111 in SROM), this is used as default address if there is NO correspon- 5104 in SROM), this is used as default address if there is NO correspon-
5112 ding setting in the environment; if the corresponding environment 5105 ding setting in the environment; if the corresponding environment
5113 variable is set, this overrides the settings in the card; that means: 5106 variable is set, this overrides the settings in the card; that means:
5114 5107
5115 o If the SROM has a valid MAC address, and there is no address in the 5108 o If the SROM has a valid MAC address, and there is no address in the
5116 environment, the SROM's address is used. 5109 environment, the SROM's address is used.
5117 5110
5118 o If there is no valid address in the SROM, and a definition in the 5111 o If there is no valid address in the SROM, and a definition in the
5119 environment exists, then the value from the environment variable is 5112 environment exists, then the value from the environment variable is
5120 used. 5113 used.
5121 5114
5122 o If both the SROM and the environment contain a MAC address, and 5115 o If both the SROM and the environment contain a MAC address, and
5123 both addresses are the same, this MAC address is used. 5116 both addresses are the same, this MAC address is used.
5124 5117
5125 o If both the SROM and the environment contain a MAC address, and the 5118 o If both the SROM and the environment contain a MAC address, and the
5126 addresses differ, the value from the environment is used and a 5119 addresses differ, the value from the environment is used and a
5127 warning is printed. 5120 warning is printed.
5128 5121
5129 o If neither SROM nor the environment contain a MAC address, an error 5122 o If neither SROM nor the environment contain a MAC address, an error
5130 is raised. 5123 is raised.
5131 5124
5132 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses 5125 If Ethernet drivers implement the 'write_hwaddr' function, valid MAC addresses
5133 will be programmed into hardware as part of the initialization process. This 5126 will be programmed into hardware as part of the initialization process. This
5134 may be skipped by setting the appropriate 'ethmacskip' environment variable. 5127 may be skipped by setting the appropriate 'ethmacskip' environment variable.
5135 The naming convention is as follows: 5128 The naming convention is as follows:
5136 "ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc. 5129 "ethmacskip" (=>eth0), "eth1macskip" (=>eth1) etc.
5137 5130
5138 Image Formats: 5131 Image Formats:
5139 ============== 5132 ==============
5140 5133
5141 U-Boot is capable of booting (and performing other auxiliary operations on) 5134 U-Boot is capable of booting (and performing other auxiliary operations on)
5142 images in two formats: 5135 images in two formats:
5143 5136
5144 New uImage format (FIT) 5137 New uImage format (FIT)
5145 ----------------------- 5138 -----------------------
5146 5139
5147 Flexible and powerful format based on Flattened Image Tree -- FIT (similar 5140 Flexible and powerful format based on Flattened Image Tree -- FIT (similar
5148 to Flattened Device Tree). It allows the use of images with multiple 5141 to Flattened Device Tree). It allows the use of images with multiple
5149 components (several kernels, ramdisks, etc.), with contents protected by 5142 components (several kernels, ramdisks, etc.), with contents protected by
5150 SHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory. 5143 SHA1, MD5 or CRC32. More details are found in the doc/uImage.FIT directory.
5151 5144
5152 5145
5153 Old uImage format 5146 Old uImage format
5154 ----------------- 5147 -----------------
5155 5148
5156 Old image format is based on binary files which can be basically anything, 5149 Old image format is based on binary files which can be basically anything,
5157 preceded by a special header; see the definitions in include/image.h for 5150 preceded by a special header; see the definitions in include/image.h for
5158 details; basically, the header defines the following image properties: 5151 details; basically, the header defines the following image properties:
5159 5152
5160 * Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD, 5153 * Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
5161 4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, 5154 4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
5162 LynxOS, pSOS, QNX, RTEMS, INTEGRITY; 5155 LynxOS, pSOS, QNX, RTEMS, INTEGRITY;
5163 Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS, 5156 Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, LynxOS,
5164 INTEGRITY). 5157 INTEGRITY).
5165 * Target CPU Architecture (Provisions for Alpha, ARM, AVR32, Intel x86, 5158 * Target CPU Architecture (Provisions for Alpha, ARM, AVR32, Intel x86,
5166 IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit; 5159 IA64, MIPS, NDS32, Nios II, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
5167 Currently supported: ARM, AVR32, Intel x86, MIPS, NDS32, Nios II, PowerPC). 5160 Currently supported: ARM, AVR32, Intel x86, MIPS, NDS32, Nios II, PowerPC).
5168 * Compression Type (uncompressed, gzip, bzip2) 5161 * Compression Type (uncompressed, gzip, bzip2)
5169 * Load Address 5162 * Load Address
5170 * Entry Point 5163 * Entry Point
5171 * Image Name 5164 * Image Name
5172 * Image Timestamp 5165 * Image Timestamp
5173 5166
5174 The header is marked by a special Magic Number, and both the header 5167 The header is marked by a special Magic Number, and both the header
5175 and the data portions of the image are secured against corruption by 5168 and the data portions of the image are secured against corruption by
5176 CRC32 checksums. 5169 CRC32 checksums.
5177 5170
5178 5171
5179 Linux Support: 5172 Linux Support:
5180 ============== 5173 ==============
5181 5174
5182 Although U-Boot should support any OS or standalone application 5175 Although U-Boot should support any OS or standalone application
5183 easily, the main focus has always been on Linux during the design of 5176 easily, the main focus has always been on Linux during the design of
5184 U-Boot. 5177 U-Boot.
5185 5178
5186 U-Boot includes many features that so far have been part of some 5179 U-Boot includes many features that so far have been part of some
5187 special "boot loader" code within the Linux kernel. Also, any 5180 special "boot loader" code within the Linux kernel. Also, any
5188 "initrd" images to be used are no longer part of one big Linux image; 5181 "initrd" images to be used are no longer part of one big Linux image;
5189 instead, kernel and "initrd" are separate images. This implementation 5182 instead, kernel and "initrd" are separate images. This implementation
5190 serves several purposes: 5183 serves several purposes:
5191 5184
5192 - the same features can be used for other OS or standalone 5185 - the same features can be used for other OS or standalone
5193 applications (for instance: using compressed images to reduce the 5186 applications (for instance: using compressed images to reduce the
5194 Flash memory footprint) 5187 Flash memory footprint)
5195 5188
5196 - it becomes much easier to port new Linux kernel versions because 5189 - it becomes much easier to port new Linux kernel versions because
5197 lots of low-level, hardware dependent stuff are done by U-Boot 5190 lots of low-level, hardware dependent stuff are done by U-Boot
5198 5191
5199 - the same Linux kernel image can now be used with different "initrd" 5192 - the same Linux kernel image can now be used with different "initrd"
5200 images; of course this also means that different kernel images can 5193 images; of course this also means that different kernel images can
5201 be run with the same "initrd". This makes testing easier (you don't 5194 be run with the same "initrd". This makes testing easier (you don't
5202 have to build a new "zImage.initrd" Linux image when you just 5195 have to build a new "zImage.initrd" Linux image when you just
5203 change a file in your "initrd"). Also, a field-upgrade of the 5196 change a file in your "initrd"). Also, a field-upgrade of the
5204 software is easier now. 5197 software is easier now.
5205 5198
5206 5199
5207 Linux HOWTO: 5200 Linux HOWTO:
5208 ============ 5201 ============
5209 5202
5210 Porting Linux to U-Boot based systems: 5203 Porting Linux to U-Boot based systems:
5211 --------------------------------------- 5204 ---------------------------------------
5212 5205
5213 U-Boot cannot save you from doing all the necessary modifications to 5206 U-Boot cannot save you from doing all the necessary modifications to
5214 configure the Linux device drivers for use with your target hardware 5207 configure the Linux device drivers for use with your target hardware
5215 (no, we don't intend to provide a full virtual machine interface to 5208 (no, we don't intend to provide a full virtual machine interface to
5216 Linux :-). 5209 Linux :-).
5217 5210
5218 But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot). 5211 But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).
5219 5212
5220 Just make sure your machine specific header file (for instance 5213 Just make sure your machine specific header file (for instance
5221 include/asm-ppc/tqm8xx.h) includes the same definition of the Board 5214 include/asm-ppc/tqm8xx.h) includes the same definition of the Board
5222 Information structure as we define in include/asm-<arch>/u-boot.h, 5215 Information structure as we define in include/asm-<arch>/u-boot.h,
5223 and make sure that your definition of IMAP_ADDR uses the same value 5216 and make sure that your definition of IMAP_ADDR uses the same value
5224 as your U-Boot configuration in CONFIG_SYS_IMMR. 5217 as your U-Boot configuration in CONFIG_SYS_IMMR.
5225 5218
5226 5219
5227 Configuring the Linux kernel: 5220 Configuring the Linux kernel:
5228 ----------------------------- 5221 -----------------------------
5229 5222
5230 No specific requirements for U-Boot. Make sure you have some root 5223 No specific requirements for U-Boot. Make sure you have some root
5231 device (initial ramdisk, NFS) for your target system. 5224 device (initial ramdisk, NFS) for your target system.
5232 5225
5233 5226
5234 Building a Linux Image: 5227 Building a Linux Image:
5235 ----------------------- 5228 -----------------------
5236 5229
5237 With U-Boot, "normal" build targets like "zImage" or "bzImage" are 5230 With U-Boot, "normal" build targets like "zImage" or "bzImage" are
5238 not used. If you use recent kernel source, a new build target 5231 not used. If you use recent kernel source, a new build target
5239 "uImage" will exist which automatically builds an image usable by 5232 "uImage" will exist which automatically builds an image usable by
5240 U-Boot. Most older kernels also have support for a "pImage" target, 5233 U-Boot. Most older kernels also have support for a "pImage" target,
5241 which was introduced for our predecessor project PPCBoot and uses a 5234 which was introduced for our predecessor project PPCBoot and uses a
5242 100% compatible format. 5235 100% compatible format.
5243 5236
5244 Example: 5237 Example:
5245 5238
5246 make TQM850L_config 5239 make TQM850L_config
5247 make oldconfig 5240 make oldconfig
5248 make dep 5241 make dep
5249 make uImage 5242 make uImage
5250 5243
5251 The "uImage" build target uses a special tool (in 'tools/mkimage') to 5244 The "uImage" build target uses a special tool (in 'tools/mkimage') to
5252 encapsulate a compressed Linux kernel image with header information, 5245 encapsulate a compressed Linux kernel image with header information,
5253 CRC32 checksum etc. for use with U-Boot. This is what we are doing: 5246 CRC32 checksum etc. for use with U-Boot. This is what we are doing:
5254 5247
5255 * build a standard "vmlinux" kernel image (in ELF binary format): 5248 * build a standard "vmlinux" kernel image (in ELF binary format):
5256 5249
5257 * convert the kernel into a raw binary image: 5250 * convert the kernel into a raw binary image:
5258 5251
5259 ${CROSS_COMPILE}-objcopy -O binary \ 5252 ${CROSS_COMPILE}-objcopy -O binary \
5260 -R .note -R .comment \ 5253 -R .note -R .comment \
5261 -S vmlinux linux.bin 5254 -S vmlinux linux.bin
5262 5255
5263 * compress the binary image: 5256 * compress the binary image:
5264 5257
5265 gzip -9 linux.bin 5258 gzip -9 linux.bin
5266 5259
5267 * package compressed binary image for U-Boot: 5260 * package compressed binary image for U-Boot:
5268 5261
5269 mkimage -A ppc -O linux -T kernel -C gzip \ 5262 mkimage -A ppc -O linux -T kernel -C gzip \
5270 -a 0 -e 0 -n "Linux Kernel Image" \ 5263 -a 0 -e 0 -n "Linux Kernel Image" \
5271 -d linux.bin.gz uImage 5264 -d linux.bin.gz uImage
5272 5265
5273 5266
5274 The "mkimage" tool can also be used to create ramdisk images for use 5267 The "mkimage" tool can also be used to create ramdisk images for use
5275 with U-Boot, either separated from the Linux kernel image, or 5268 with U-Boot, either separated from the Linux kernel image, or
5276 combined into one file. "mkimage" encapsulates the images with a 64 5269 combined into one file. "mkimage" encapsulates the images with a 64
5277 byte header containing information about target architecture, 5270 byte header containing information about target architecture,
5278 operating system, image type, compression method, entry points, time 5271 operating system, image type, compression method, entry points, time
5279 stamp, CRC32 checksums, etc. 5272 stamp, CRC32 checksums, etc.
5280 5273
5281 "mkimage" can be called in two ways: to verify existing images and 5274 "mkimage" can be called in two ways: to verify existing images and
5282 print the header information, or to build new images. 5275 print the header information, or to build new images.
5283 5276
5284 In the first form (with "-l" option) mkimage lists the information 5277 In the first form (with "-l" option) mkimage lists the information
5285 contained in the header of an existing U-Boot image; this includes 5278 contained in the header of an existing U-Boot image; this includes
5286 checksum verification: 5279 checksum verification:
5287 5280
5288 tools/mkimage -l image 5281 tools/mkimage -l image
5289 -l ==> list image header information 5282 -l ==> list image header information
5290 5283
5291 The second form (with "-d" option) is used to build a U-Boot image 5284 The second form (with "-d" option) is used to build a U-Boot image
5292 from a "data file" which is used as image payload: 5285 from a "data file" which is used as image payload:
5293 5286
5294 tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \ 5287 tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
5295 -n name -d data_file image 5288 -n name -d data_file image
5296 -A ==> set architecture to 'arch' 5289 -A ==> set architecture to 'arch'
5297 -O ==> set operating system to 'os' 5290 -O ==> set operating system to 'os'
5298 -T ==> set image type to 'type' 5291 -T ==> set image type to 'type'
5299 -C ==> set compression type 'comp' 5292 -C ==> set compression type 'comp'
5300 -a ==> set load address to 'addr' (hex) 5293 -a ==> set load address to 'addr' (hex)
5301 -e ==> set entry point to 'ep' (hex) 5294 -e ==> set entry point to 'ep' (hex)
5302 -n ==> set image name to 'name' 5295 -n ==> set image name to 'name'
5303 -d ==> use image data from 'datafile' 5296 -d ==> use image data from 'datafile'
5304 5297
5305 Right now, all Linux kernels for PowerPC systems use the same load 5298 Right now, all Linux kernels for PowerPC systems use the same load
5306 address (0x00000000), but the entry point address depends on the 5299 address (0x00000000), but the entry point address depends on the
5307 kernel version: 5300 kernel version:
5308 5301
5309 - 2.2.x kernels have the entry point at 0x0000000C, 5302 - 2.2.x kernels have the entry point at 0x0000000C,
5310 - 2.3.x and later kernels have the entry point at 0x00000000. 5303 - 2.3.x and later kernels have the entry point at 0x00000000.
5311 5304
5312 So a typical call to build a U-Boot image would read: 5305 So a typical call to build a U-Boot image would read:
5313 5306
5314 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \ 5307 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \
5315 > -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \ 5308 > -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
5316 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \ 5309 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \
5317 > examples/uImage.TQM850L 5310 > examples/uImage.TQM850L
5318 Image Name: 2.4.4 kernel for TQM850L 5311 Image Name: 2.4.4 kernel for TQM850L
5319 Created: Wed Jul 19 02:34:59 2000 5312 Created: Wed Jul 19 02:34:59 2000
5320 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5313 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5321 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB 5314 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
5322 Load Address: 0x00000000 5315 Load Address: 0x00000000
5323 Entry Point: 0x00000000 5316 Entry Point: 0x00000000
5324 5317
5325 To verify the contents of the image (or check for corruption): 5318 To verify the contents of the image (or check for corruption):
5326 5319
5327 -> tools/mkimage -l examples/uImage.TQM850L 5320 -> tools/mkimage -l examples/uImage.TQM850L
5328 Image Name: 2.4.4 kernel for TQM850L 5321 Image Name: 2.4.4 kernel for TQM850L
5329 Created: Wed Jul 19 02:34:59 2000 5322 Created: Wed Jul 19 02:34:59 2000
5330 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5323 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5331 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB 5324 Data Size: 335725 Bytes = 327.86 kB = 0.32 MB
5332 Load Address: 0x00000000 5325 Load Address: 0x00000000
5333 Entry Point: 0x00000000 5326 Entry Point: 0x00000000
5334 5327
5335 NOTE: for embedded systems where boot time is critical you can trade 5328 NOTE: for embedded systems where boot time is critical you can trade
5336 speed for memory and install an UNCOMPRESSED image instead: this 5329 speed for memory and install an UNCOMPRESSED image instead: this
5337 needs more space in Flash, but boots much faster since it does not 5330 needs more space in Flash, but boots much faster since it does not
5338 need to be uncompressed: 5331 need to be uncompressed:
5339 5332
5340 -> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz 5333 -> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz
5341 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \ 5334 -> tools/mkimage -n '2.4.4 kernel for TQM850L' \
5342 > -A ppc -O linux -T kernel -C none -a 0 -e 0 \ 5335 > -A ppc -O linux -T kernel -C none -a 0 -e 0 \
5343 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \ 5336 > -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \
5344 > examples/uImage.TQM850L-uncompressed 5337 > examples/uImage.TQM850L-uncompressed
5345 Image Name: 2.4.4 kernel for TQM850L 5338 Image Name: 2.4.4 kernel for TQM850L
5346 Created: Wed Jul 19 02:34:59 2000 5339 Created: Wed Jul 19 02:34:59 2000
5347 Image Type: PowerPC Linux Kernel Image (uncompressed) 5340 Image Type: PowerPC Linux Kernel Image (uncompressed)
5348 Data Size: 792160 Bytes = 773.59 kB = 0.76 MB 5341 Data Size: 792160 Bytes = 773.59 kB = 0.76 MB
5349 Load Address: 0x00000000 5342 Load Address: 0x00000000
5350 Entry Point: 0x00000000 5343 Entry Point: 0x00000000
5351 5344
5352 5345
5353 Similar you can build U-Boot images from a 'ramdisk.image.gz' file 5346 Similar you can build U-Boot images from a 'ramdisk.image.gz' file
5354 when your kernel is intended to use an initial ramdisk: 5347 when your kernel is intended to use an initial ramdisk:
5355 5348
5356 -> tools/mkimage -n 'Simple Ramdisk Image' \ 5349 -> tools/mkimage -n 'Simple Ramdisk Image' \
5357 > -A ppc -O linux -T ramdisk -C gzip \ 5350 > -A ppc -O linux -T ramdisk -C gzip \
5358 > -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd 5351 > -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
5359 Image Name: Simple Ramdisk Image 5352 Image Name: Simple Ramdisk Image
5360 Created: Wed Jan 12 14:01:50 2000 5353 Created: Wed Jan 12 14:01:50 2000
5361 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 5354 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
5362 Data Size: 566530 Bytes = 553.25 kB = 0.54 MB 5355 Data Size: 566530 Bytes = 553.25 kB = 0.54 MB
5363 Load Address: 0x00000000 5356 Load Address: 0x00000000
5364 Entry Point: 0x00000000 5357 Entry Point: 0x00000000
5365 5358
5366 The "dumpimage" is a tool to disassemble images built by mkimage. Its "-i" 5359 The "dumpimage" is a tool to disassemble images built by mkimage. Its "-i"
5367 option performs the converse operation of the mkimage's second form (the "-d" 5360 option performs the converse operation of the mkimage's second form (the "-d"
5368 option). Given an image built by mkimage, the dumpimage extracts a "data file" 5361 option). Given an image built by mkimage, the dumpimage extracts a "data file"
5369 from the image: 5362 from the image:
5370 5363
5371 tools/dumpimage -i image -p position data_file 5364 tools/dumpimage -i image -p position data_file
5372 -i ==> extract from the 'image' a specific 'data_file', \ 5365 -i ==> extract from the 'image' a specific 'data_file', \
5373 indexed by 'position' 5366 indexed by 'position'
5374 5367
5375 5368
5376 Installing a Linux Image: 5369 Installing a Linux Image:
5377 ------------------------- 5370 -------------------------
5378 5371
5379 To downloading a U-Boot image over the serial (console) interface, 5372 To downloading a U-Boot image over the serial (console) interface,
5380 you must convert the image to S-Record format: 5373 you must convert the image to S-Record format:
5381 5374
5382 objcopy -I binary -O srec examples/image examples/image.srec 5375 objcopy -I binary -O srec examples/image examples/image.srec
5383 5376
5384 The 'objcopy' does not understand the information in the U-Boot 5377 The 'objcopy' does not understand the information in the U-Boot
5385 image header, so the resulting S-Record file will be relative to 5378 image header, so the resulting S-Record file will be relative to
5386 address 0x00000000. To load it to a given address, you need to 5379 address 0x00000000. To load it to a given address, you need to
5387 specify the target address as 'offset' parameter with the 'loads' 5380 specify the target address as 'offset' parameter with the 'loads'
5388 command. 5381 command.
5389 5382
5390 Example: install the image to address 0x40100000 (which on the 5383 Example: install the image to address 0x40100000 (which on the
5391 TQM8xxL is in the first Flash bank): 5384 TQM8xxL is in the first Flash bank):
5392 5385
5393 => erase 40100000 401FFFFF 5386 => erase 40100000 401FFFFF
5394 5387
5395 .......... done 5388 .......... done
5396 Erased 8 sectors 5389 Erased 8 sectors
5397 5390
5398 => loads 40100000 5391 => loads 40100000
5399 ## Ready for S-Record download ... 5392 ## Ready for S-Record download ...
5400 ~>examples/image.srec 5393 ~>examples/image.srec
5401 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 5394 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
5402 ... 5395 ...
5403 15989 15990 15991 15992 5396 15989 15990 15991 15992
5404 [file transfer complete] 5397 [file transfer complete]
5405 [connected] 5398 [connected]
5406 ## Start Addr = 0x00000000 5399 ## Start Addr = 0x00000000
5407 5400
5408 5401
5409 You can check the success of the download using the 'iminfo' command; 5402 You can check the success of the download using the 'iminfo' command;
5410 this includes a checksum verification so you can be sure no data 5403 this includes a checksum verification so you can be sure no data
5411 corruption happened: 5404 corruption happened:
5412 5405
5413 => imi 40100000 5406 => imi 40100000
5414 5407
5415 ## Checking Image at 40100000 ... 5408 ## Checking Image at 40100000 ...
5416 Image Name: 2.2.13 for initrd on TQM850L 5409 Image Name: 2.2.13 for initrd on TQM850L
5417 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5410 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5418 Data Size: 335725 Bytes = 327 kB = 0 MB 5411 Data Size: 335725 Bytes = 327 kB = 0 MB
5419 Load Address: 00000000 5412 Load Address: 00000000
5420 Entry Point: 0000000c 5413 Entry Point: 0000000c
5421 Verifying Checksum ... OK 5414 Verifying Checksum ... OK
5422 5415
5423 5416
5424 Boot Linux: 5417 Boot Linux:
5425 ----------- 5418 -----------
5426 5419
5427 The "bootm" command is used to boot an application that is stored in 5420 The "bootm" command is used to boot an application that is stored in
5428 memory (RAM or Flash). In case of a Linux kernel image, the contents 5421 memory (RAM or Flash). In case of a Linux kernel image, the contents
5429 of the "bootargs" environment variable is passed to the kernel as 5422 of the "bootargs" environment variable is passed to the kernel as
5430 parameters. You can check and modify this variable using the 5423 parameters. You can check and modify this variable using the
5431 "printenv" and "setenv" commands: 5424 "printenv" and "setenv" commands:
5432 5425
5433 5426
5434 => printenv bootargs 5427 => printenv bootargs
5435 bootargs=root=/dev/ram 5428 bootargs=root=/dev/ram
5436 5429
5437 => setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 5430 => setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
5438 5431
5439 => printenv bootargs 5432 => printenv bootargs
5440 bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 5433 bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
5441 5434
5442 => bootm 40020000 5435 => bootm 40020000
5443 ## Booting Linux kernel at 40020000 ... 5436 ## Booting Linux kernel at 40020000 ...
5444 Image Name: 2.2.13 for NFS on TQM850L 5437 Image Name: 2.2.13 for NFS on TQM850L
5445 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5438 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5446 Data Size: 381681 Bytes = 372 kB = 0 MB 5439 Data Size: 381681 Bytes = 372 kB = 0 MB
5447 Load Address: 00000000 5440 Load Address: 00000000
5448 Entry Point: 0000000c 5441 Entry Point: 0000000c
5449 Verifying Checksum ... OK 5442 Verifying Checksum ... OK
5450 Uncompressing Kernel Image ... OK 5443 Uncompressing Kernel Image ... OK
5451 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 5444 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
5452 Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2 5445 Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
5453 time_init: decrementer frequency = 187500000/60 5446 time_init: decrementer frequency = 187500000/60
5454 Calibrating delay loop... 49.77 BogoMIPS 5447 Calibrating delay loop... 49.77 BogoMIPS
5455 Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000] 5448 Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
5456 ... 5449 ...
5457 5450
5458 If you want to boot a Linux kernel with initial RAM disk, you pass 5451 If you want to boot a Linux kernel with initial RAM disk, you pass
5459 the memory addresses of both the kernel and the initrd image (PPBCOOT 5452 the memory addresses of both the kernel and the initrd image (PPBCOOT
5460 format!) to the "bootm" command: 5453 format!) to the "bootm" command:
5461 5454
5462 => imi 40100000 40200000 5455 => imi 40100000 40200000
5463 5456
5464 ## Checking Image at 40100000 ... 5457 ## Checking Image at 40100000 ...
5465 Image Name: 2.2.13 for initrd on TQM850L 5458 Image Name: 2.2.13 for initrd on TQM850L
5466 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5459 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5467 Data Size: 335725 Bytes = 327 kB = 0 MB 5460 Data Size: 335725 Bytes = 327 kB = 0 MB
5468 Load Address: 00000000 5461 Load Address: 00000000
5469 Entry Point: 0000000c 5462 Entry Point: 0000000c
5470 Verifying Checksum ... OK 5463 Verifying Checksum ... OK
5471 5464
5472 ## Checking Image at 40200000 ... 5465 ## Checking Image at 40200000 ...
5473 Image Name: Simple Ramdisk Image 5466 Image Name: Simple Ramdisk Image
5474 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 5467 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
5475 Data Size: 566530 Bytes = 553 kB = 0 MB 5468 Data Size: 566530 Bytes = 553 kB = 0 MB
5476 Load Address: 00000000 5469 Load Address: 00000000
5477 Entry Point: 00000000 5470 Entry Point: 00000000
5478 Verifying Checksum ... OK 5471 Verifying Checksum ... OK
5479 5472
5480 => bootm 40100000 40200000 5473 => bootm 40100000 40200000
5481 ## Booting Linux kernel at 40100000 ... 5474 ## Booting Linux kernel at 40100000 ...
5482 Image Name: 2.2.13 for initrd on TQM850L 5475 Image Name: 2.2.13 for initrd on TQM850L
5483 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5476 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5484 Data Size: 335725 Bytes = 327 kB = 0 MB 5477 Data Size: 335725 Bytes = 327 kB = 0 MB
5485 Load Address: 00000000 5478 Load Address: 00000000
5486 Entry Point: 0000000c 5479 Entry Point: 0000000c
5487 Verifying Checksum ... OK 5480 Verifying Checksum ... OK
5488 Uncompressing Kernel Image ... OK 5481 Uncompressing Kernel Image ... OK
5489 ## Loading RAMDisk Image at 40200000 ... 5482 ## Loading RAMDisk Image at 40200000 ...
5490 Image Name: Simple Ramdisk Image 5483 Image Name: Simple Ramdisk Image
5491 Image Type: PowerPC Linux RAMDisk Image (gzip compressed) 5484 Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
5492 Data Size: 566530 Bytes = 553 kB = 0 MB 5485 Data Size: 566530 Bytes = 553 kB = 0 MB
5493 Load Address: 00000000 5486 Load Address: 00000000
5494 Entry Point: 00000000 5487 Entry Point: 00000000
5495 Verifying Checksum ... OK 5488 Verifying Checksum ... OK
5496 Loading Ramdisk ... OK 5489 Loading Ramdisk ... OK
5497 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 5490 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
5498 Boot arguments: root=/dev/ram 5491 Boot arguments: root=/dev/ram
5499 time_init: decrementer frequency = 187500000/60 5492 time_init: decrementer frequency = 187500000/60
5500 Calibrating delay loop... 49.77 BogoMIPS 5493 Calibrating delay loop... 49.77 BogoMIPS
5501 ... 5494 ...
5502 RAMDISK: Compressed image found at block 0 5495 RAMDISK: Compressed image found at block 0
5503 VFS: Mounted root (ext2 filesystem). 5496 VFS: Mounted root (ext2 filesystem).
5504 5497
5505 bash# 5498 bash#
5506 5499
5507 Boot Linux and pass a flat device tree: 5500 Boot Linux and pass a flat device tree:
5508 ----------- 5501 -----------
5509 5502
5510 First, U-Boot must be compiled with the appropriate defines. See the section 5503 First, U-Boot must be compiled with the appropriate defines. See the section
5511 titled "Linux Kernel Interface" above for a more in depth explanation. The 5504 titled "Linux Kernel Interface" above for a more in depth explanation. The
5512 following is an example of how to start a kernel and pass an updated 5505 following is an example of how to start a kernel and pass an updated
5513 flat device tree: 5506 flat device tree:
5514 5507
5515 => print oftaddr 5508 => print oftaddr
5516 oftaddr=0x300000 5509 oftaddr=0x300000
5517 => print oft 5510 => print oft
5518 oft=oftrees/mpc8540ads.dtb 5511 oft=oftrees/mpc8540ads.dtb
5519 => tftp $oftaddr $oft 5512 => tftp $oftaddr $oft
5520 Speed: 1000, full duplex 5513 Speed: 1000, full duplex
5521 Using TSEC0 device 5514 Using TSEC0 device
5522 TFTP from server 192.168.1.1; our IP address is 192.168.1.101 5515 TFTP from server 192.168.1.1; our IP address is 192.168.1.101
5523 Filename 'oftrees/mpc8540ads.dtb'. 5516 Filename 'oftrees/mpc8540ads.dtb'.
5524 Load address: 0x300000 5517 Load address: 0x300000
5525 Loading: # 5518 Loading: #
5526 done 5519 done
5527 Bytes transferred = 4106 (100a hex) 5520 Bytes transferred = 4106 (100a hex)
5528 => tftp $loadaddr $bootfile 5521 => tftp $loadaddr $bootfile
5529 Speed: 1000, full duplex 5522 Speed: 1000, full duplex
5530 Using TSEC0 device 5523 Using TSEC0 device
5531 TFTP from server 192.168.1.1; our IP address is 192.168.1.2 5524 TFTP from server 192.168.1.1; our IP address is 192.168.1.2
5532 Filename 'uImage'. 5525 Filename 'uImage'.
5533 Load address: 0x200000 5526 Load address: 0x200000
5534 Loading:############ 5527 Loading:############
5535 done 5528 done
5536 Bytes transferred = 1029407 (fb51f hex) 5529 Bytes transferred = 1029407 (fb51f hex)
5537 => print loadaddr 5530 => print loadaddr
5538 loadaddr=200000 5531 loadaddr=200000
5539 => print oftaddr 5532 => print oftaddr
5540 oftaddr=0x300000 5533 oftaddr=0x300000
5541 => bootm $loadaddr - $oftaddr 5534 => bootm $loadaddr - $oftaddr
5542 ## Booting image at 00200000 ... 5535 ## Booting image at 00200000 ...
5543 Image Name: Linux-2.6.17-dirty 5536 Image Name: Linux-2.6.17-dirty
5544 Image Type: PowerPC Linux Kernel Image (gzip compressed) 5537 Image Type: PowerPC Linux Kernel Image (gzip compressed)
5545 Data Size: 1029343 Bytes = 1005.2 kB 5538 Data Size: 1029343 Bytes = 1005.2 kB
5546 Load Address: 00000000 5539 Load Address: 00000000
5547 Entry Point: 00000000 5540 Entry Point: 00000000
5548 Verifying Checksum ... OK 5541 Verifying Checksum ... OK
5549 Uncompressing Kernel Image ... OK 5542 Uncompressing Kernel Image ... OK
5550 Booting using flat device tree at 0x300000 5543 Booting using flat device tree at 0x300000
5551 Using MPC85xx ADS machine description 5544 Using MPC85xx ADS machine description
5552 Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb 5545 Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb
5553 [snip] 5546 [snip]
5554 5547
5555 5548
5556 More About U-Boot Image Types: 5549 More About U-Boot Image Types:
5557 ------------------------------ 5550 ------------------------------
5558 5551
5559 U-Boot supports the following image types: 5552 U-Boot supports the following image types:
5560 5553
5561 "Standalone Programs" are directly runnable in the environment 5554 "Standalone Programs" are directly runnable in the environment
5562 provided by U-Boot; it is expected that (if they behave 5555 provided by U-Boot; it is expected that (if they behave
5563 well) you can continue to work in U-Boot after return from 5556 well) you can continue to work in U-Boot after return from
5564 the Standalone Program. 5557 the Standalone Program.
5565 "OS Kernel Images" are usually images of some Embedded OS which 5558 "OS Kernel Images" are usually images of some Embedded OS which
5566 will take over control completely. Usually these programs 5559 will take over control completely. Usually these programs
5567 will install their own set of exception handlers, device 5560 will install their own set of exception handlers, device
5568 drivers, set up the MMU, etc. - this means, that you cannot 5561 drivers, set up the MMU, etc. - this means, that you cannot
5569 expect to re-enter U-Boot except by resetting the CPU. 5562 expect to re-enter U-Boot except by resetting the CPU.
5570 "RAMDisk Images" are more or less just data blocks, and their 5563 "RAMDisk Images" are more or less just data blocks, and their
5571 parameters (address, size) are passed to an OS kernel that is 5564 parameters (address, size) are passed to an OS kernel that is
5572 being started. 5565 being started.
5573 "Multi-File Images" contain several images, typically an OS 5566 "Multi-File Images" contain several images, typically an OS
5574 (Linux) kernel image and one or more data images like 5567 (Linux) kernel image and one or more data images like
5575 RAMDisks. This construct is useful for instance when you want 5568 RAMDisks. This construct is useful for instance when you want
5576 to boot over the network using BOOTP etc., where the boot 5569 to boot over the network using BOOTP etc., where the boot
5577 server provides just a single image file, but you want to get 5570 server provides just a single image file, but you want to get
5578 for instance an OS kernel and a RAMDisk image. 5571 for instance an OS kernel and a RAMDisk image.
5579 5572
5580 "Multi-File Images" start with a list of image sizes, each 5573 "Multi-File Images" start with a list of image sizes, each
5581 image size (in bytes) specified by an "uint32_t" in network 5574 image size (in bytes) specified by an "uint32_t" in network
5582 byte order. This list is terminated by an "(uint32_t)0". 5575 byte order. This list is terminated by an "(uint32_t)0".
5583 Immediately after the terminating 0 follow the images, one by 5576 Immediately after the terminating 0 follow the images, one by
5584 one, all aligned on "uint32_t" boundaries (size rounded up to 5577 one, all aligned on "uint32_t" boundaries (size rounded up to
5585 a multiple of 4 bytes). 5578 a multiple of 4 bytes).
5586 5579
5587 "Firmware Images" are binary images containing firmware (like 5580 "Firmware Images" are binary images containing firmware (like
5588 U-Boot or FPGA images) which usually will be programmed to 5581 U-Boot or FPGA images) which usually will be programmed to
5589 flash memory. 5582 flash memory.
5590 5583
5591 "Script files" are command sequences that will be executed by 5584 "Script files" are command sequences that will be executed by
5592 U-Boot's command interpreter; this feature is especially 5585 U-Boot's command interpreter; this feature is especially
5593 useful when you configure U-Boot to use a real shell (hush) 5586 useful when you configure U-Boot to use a real shell (hush)
5594 as command interpreter. 5587 as command interpreter.
5595 5588
5596 Booting the Linux zImage: 5589 Booting the Linux zImage:
5597 ------------------------- 5590 -------------------------
5598 5591
5599 On some platforms, it's possible to boot Linux zImage. This is done 5592 On some platforms, it's possible to boot Linux zImage. This is done
5600 using the "bootz" command. The syntax of "bootz" command is the same 5593 using the "bootz" command. The syntax of "bootz" command is the same
5601 as the syntax of "bootm" command. 5594 as the syntax of "bootm" command.
5602 5595
5603 Note, defining the CONFIG_SUPPORT_RAW_INITRD allows user to supply 5596 Note, defining the CONFIG_SUPPORT_RAW_INITRD allows user to supply
5604 kernel with raw initrd images. The syntax is slightly different, the 5597 kernel with raw initrd images. The syntax is slightly different, the
5605 address of the initrd must be augmented by it's size, in the following 5598 address of the initrd must be augmented by it's size, in the following
5606 format: "<initrd addres>:<initrd size>". 5599 format: "<initrd addres>:<initrd size>".
5607 5600
5608 5601
5609 Standalone HOWTO: 5602 Standalone HOWTO:
5610 ================= 5603 =================
5611 5604
5612 One of the features of U-Boot is that you can dynamically load and 5605 One of the features of U-Boot is that you can dynamically load and
5613 run "standalone" applications, which can use some resources of 5606 run "standalone" applications, which can use some resources of
5614 U-Boot like console I/O functions or interrupt services. 5607 U-Boot like console I/O functions or interrupt services.
5615 5608
5616 Two simple examples are included with the sources: 5609 Two simple examples are included with the sources:
5617 5610
5618 "Hello World" Demo: 5611 "Hello World" Demo:
5619 ------------------- 5612 -------------------
5620 5613
5621 'examples/hello_world.c' contains a small "Hello World" Demo 5614 'examples/hello_world.c' contains a small "Hello World" Demo
5622 application; it is automatically compiled when you build U-Boot. 5615 application; it is automatically compiled when you build U-Boot.
5623 It's configured to run at address 0x00040004, so you can play with it 5616 It's configured to run at address 0x00040004, so you can play with it
5624 like that: 5617 like that:
5625 5618
5626 => loads 5619 => loads
5627 ## Ready for S-Record download ... 5620 ## Ready for S-Record download ...
5628 ~>examples/hello_world.srec 5621 ~>examples/hello_world.srec
5629 1 2 3 4 5 6 7 8 9 10 11 ... 5622 1 2 3 4 5 6 7 8 9 10 11 ...
5630 [file transfer complete] 5623 [file transfer complete]
5631 [connected] 5624 [connected]
5632 ## Start Addr = 0x00040004 5625 ## Start Addr = 0x00040004
5633 5626
5634 => go 40004 Hello World! This is a test. 5627 => go 40004 Hello World! This is a test.
5635 ## Starting application at 0x00040004 ... 5628 ## Starting application at 0x00040004 ...
5636 Hello World 5629 Hello World
5637 argc = 7 5630 argc = 7
5638 argv[0] = "40004" 5631 argv[0] = "40004"
5639 argv[1] = "Hello" 5632 argv[1] = "Hello"
5640 argv[2] = "World!" 5633 argv[2] = "World!"
5641 argv[3] = "This" 5634 argv[3] = "This"
5642 argv[4] = "is" 5635 argv[4] = "is"
5643 argv[5] = "a" 5636 argv[5] = "a"
5644 argv[6] = "test." 5637 argv[6] = "test."
5645 argv[7] = "<NULL>" 5638 argv[7] = "<NULL>"
5646 Hit any key to exit ... 5639 Hit any key to exit ...
5647 5640
5648 ## Application terminated, rc = 0x0 5641 ## Application terminated, rc = 0x0
5649 5642
5650 Another example, which demonstrates how to register a CPM interrupt 5643 Another example, which demonstrates how to register a CPM interrupt
5651 handler with the U-Boot code, can be found in 'examples/timer.c'. 5644 handler with the U-Boot code, can be found in 'examples/timer.c'.
5652 Here, a CPM timer is set up to generate an interrupt every second. 5645 Here, a CPM timer is set up to generate an interrupt every second.
5653 The interrupt service routine is trivial, just printing a '.' 5646 The interrupt service routine is trivial, just printing a '.'
5654 character, but this is just a demo program. The application can be 5647 character, but this is just a demo program. The application can be
5655 controlled by the following keys: 5648 controlled by the following keys:
5656 5649
5657 ? - print current values og the CPM Timer registers 5650 ? - print current values og the CPM Timer registers
5658 b - enable interrupts and start timer 5651 b - enable interrupts and start timer
5659 e - stop timer and disable interrupts 5652 e - stop timer and disable interrupts
5660 q - quit application 5653 q - quit application
5661 5654
5662 => loads 5655 => loads
5663 ## Ready for S-Record download ... 5656 ## Ready for S-Record download ...
5664 ~>examples/timer.srec 5657 ~>examples/timer.srec
5665 1 2 3 4 5 6 7 8 9 10 11 ... 5658 1 2 3 4 5 6 7 8 9 10 11 ...
5666 [file transfer complete] 5659 [file transfer complete]
5667 [connected] 5660 [connected]
5668 ## Start Addr = 0x00040004 5661 ## Start Addr = 0x00040004
5669 5662
5670 => go 40004 5663 => go 40004
5671 ## Starting application at 0x00040004 ... 5664 ## Starting application at 0x00040004 ...
5672 TIMERS=0xfff00980 5665 TIMERS=0xfff00980
5673 Using timer 1 5666 Using timer 1
5674 tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0 5667 tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
5675 5668
5676 Hit 'b': 5669 Hit 'b':
5677 [q, b, e, ?] Set interval 1000000 us 5670 [q, b, e, ?] Set interval 1000000 us
5678 Enabling timer 5671 Enabling timer
5679 Hit '?': 5672 Hit '?':
5680 [q, b, e, ?] ........ 5673 [q, b, e, ?] ........
5681 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0 5674 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
5682 Hit '?': 5675 Hit '?':
5683 [q, b, e, ?] . 5676 [q, b, e, ?] .
5684 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0 5677 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
5685 Hit '?': 5678 Hit '?':
5686 [q, b, e, ?] . 5679 [q, b, e, ?] .
5687 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0 5680 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
5688 Hit '?': 5681 Hit '?':
5689 [q, b, e, ?] . 5682 [q, b, e, ?] .
5690 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0 5683 tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
5691 Hit 'e': 5684 Hit 'e':
5692 [q, b, e, ?] ...Stopping timer 5685 [q, b, e, ?] ...Stopping timer
5693 Hit 'q': 5686 Hit 'q':
5694 [q, b, e, ?] ## Application terminated, rc = 0x0 5687 [q, b, e, ?] ## Application terminated, rc = 0x0
5695 5688
5696 5689
5697 Minicom warning: 5690 Minicom warning:
5698 ================ 5691 ================
5699 5692
5700 Over time, many people have reported problems when trying to use the 5693 Over time, many people have reported problems when trying to use the
5701 "minicom" terminal emulation program for serial download. I (wd) 5694 "minicom" terminal emulation program for serial download. I (wd)
5702 consider minicom to be broken, and recommend not to use it. Under 5695 consider minicom to be broken, and recommend not to use it. Under
5703 Unix, I recommend to use C-Kermit for general purpose use (and 5696 Unix, I recommend to use C-Kermit for general purpose use (and
5704 especially for kermit binary protocol download ("loadb" command), and 5697 especially for kermit binary protocol download ("loadb" command), and
5705 use "cu" for S-Record download ("loads" command). See 5698 use "cu" for S-Record download ("loads" command). See
5706 http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.3. 5699 http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.3.
5707 for help with kermit. 5700 for help with kermit.
5708 5701
5709 5702
5710 Nevertheless, if you absolutely want to use it try adding this 5703 Nevertheless, if you absolutely want to use it try adding this
5711 configuration to your "File transfer protocols" section: 5704 configuration to your "File transfer protocols" section:
5712 5705
5713 Name Program Name U/D FullScr IO-Red. Multi 5706 Name Program Name U/D FullScr IO-Red. Multi
5714 X kermit /usr/bin/kermit -i -l %l -s Y U Y N N 5707 X kermit /usr/bin/kermit -i -l %l -s Y U Y N N
5715 Y kermit /usr/bin/kermit -i -l %l -r N D Y N N 5708 Y kermit /usr/bin/kermit -i -l %l -r N D Y N N
5716 5709
5717 5710
5718 NetBSD Notes: 5711 NetBSD Notes:
5719 ============= 5712 =============
5720 5713
5721 Starting at version 0.9.2, U-Boot supports NetBSD both as host 5714 Starting at version 0.9.2, U-Boot supports NetBSD both as host
5722 (build U-Boot) and target system (boots NetBSD/mpc8xx). 5715 (build U-Boot) and target system (boots NetBSD/mpc8xx).
5723 5716
5724 Building requires a cross environment; it is known to work on 5717 Building requires a cross environment; it is known to work on
5725 NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also 5718 NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
5726 need gmake since the Makefiles are not compatible with BSD make). 5719 need gmake since the Makefiles are not compatible with BSD make).
5727 Note that the cross-powerpc package does not install include files; 5720 Note that the cross-powerpc package does not install include files;
5728 attempting to build U-Boot will fail because <machine/ansi.h> is 5721 attempting to build U-Boot will fail because <machine/ansi.h> is
5729 missing. This file has to be installed and patched manually: 5722 missing. This file has to be installed and patched manually:
5730 5723
5731 # cd /usr/pkg/cross/powerpc-netbsd/include 5724 # cd /usr/pkg/cross/powerpc-netbsd/include
5732 # mkdir powerpc 5725 # mkdir powerpc
5733 # ln -s powerpc machine 5726 # ln -s powerpc machine
5734 # cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h 5727 # cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
5735 # ${EDIT} powerpc/ansi.h ## must remove __va_list, _BSD_VA_LIST 5728 # ${EDIT} powerpc/ansi.h ## must remove __va_list, _BSD_VA_LIST
5736 5729
5737 Native builds *don't* work due to incompatibilities between native 5730 Native builds *don't* work due to incompatibilities between native
5738 and U-Boot include files. 5731 and U-Boot include files.
5739 5732
5740 Booting assumes that (the first part of) the image booted is a 5733 Booting assumes that (the first part of) the image booted is a
5741 stage-2 loader which in turn loads and then invokes the kernel 5734 stage-2 loader which in turn loads and then invokes the kernel
5742 proper. Loader sources will eventually appear in the NetBSD source 5735 proper. Loader sources will eventually appear in the NetBSD source
5743 tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the 5736 tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
5744 meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz 5737 meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz
5745 5738
5746 5739
5747 Implementation Internals: 5740 Implementation Internals:
5748 ========================= 5741 =========================
5749 5742
5750 The following is not intended to be a complete description of every 5743 The following is not intended to be a complete description of every
5751 implementation detail. However, it should help to understand the 5744 implementation detail. However, it should help to understand the
5752 inner workings of U-Boot and make it easier to port it to custom 5745 inner workings of U-Boot and make it easier to port it to custom
5753 hardware. 5746 hardware.
5754 5747
5755 5748
5756 Initial Stack, Global Data: 5749 Initial Stack, Global Data:
5757 --------------------------- 5750 ---------------------------
5758 5751
5759 The implementation of U-Boot is complicated by the fact that U-Boot 5752 The implementation of U-Boot is complicated by the fact that U-Boot
5760 starts running out of ROM (flash memory), usually without access to 5753 starts running out of ROM (flash memory), usually without access to
5761 system RAM (because the memory controller is not initialized yet). 5754 system RAM (because the memory controller is not initialized yet).
5762 This means that we don't have writable Data or BSS segments, and BSS 5755 This means that we don't have writable Data or BSS segments, and BSS
5763 is not initialized as zero. To be able to get a C environment working 5756 is not initialized as zero. To be able to get a C environment working
5764 at all, we have to allocate at least a minimal stack. Implementation 5757 at all, we have to allocate at least a minimal stack. Implementation
5765 options for this are defined and restricted by the CPU used: Some CPU 5758 options for this are defined and restricted by the CPU used: Some CPU
5766 models provide on-chip memory (like the IMMR area on MPC8xx and 5759 models provide on-chip memory (like the IMMR area on MPC8xx and
5767 MPC826x processors), on others (parts of) the data cache can be 5760 MPC826x processors), on others (parts of) the data cache can be
5768 locked as (mis-) used as memory, etc. 5761 locked as (mis-) used as memory, etc.
5769 5762
5770 Chris Hallinan posted a good summary of these issues to the 5763 Chris Hallinan posted a good summary of these issues to the
5771 U-Boot mailing list: 5764 U-Boot mailing list:
5772 5765
5773 Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)? 5766 Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
5774 From: "Chris Hallinan" <clh@net1plus.com> 5767 From: "Chris Hallinan" <clh@net1plus.com>
5775 Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET) 5768 Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)
5776 ... 5769 ...
5777 5770
5778 Correct me if I'm wrong, folks, but the way I understand it 5771 Correct me if I'm wrong, folks, but the way I understand it
5779 is this: Using DCACHE as initial RAM for Stack, etc, does not 5772 is this: Using DCACHE as initial RAM for Stack, etc, does not
5780 require any physical RAM backing up the cache. The cleverness 5773 require any physical RAM backing up the cache. The cleverness
5781 is that the cache is being used as a temporary supply of 5774 is that the cache is being used as a temporary supply of
5782 necessary storage before the SDRAM controller is setup. It's 5775 necessary storage before the SDRAM controller is setup. It's
5783 beyond the scope of this list to explain the details, but you 5776 beyond the scope of this list to explain the details, but you
5784 can see how this works by studying the cache architecture and 5777 can see how this works by studying the cache architecture and
5785 operation in the architecture and processor-specific manuals. 5778 operation in the architecture and processor-specific manuals.
5786 5779
5787 OCM is On Chip Memory, which I believe the 405GP has 4K. It 5780 OCM is On Chip Memory, which I believe the 405GP has 4K. It
5788 is another option for the system designer to use as an 5781 is another option for the system designer to use as an
5789 initial stack/RAM area prior to SDRAM being available. Either 5782 initial stack/RAM area prior to SDRAM being available. Either
5790 option should work for you. Using CS 4 should be fine if your 5783 option should work for you. Using CS 4 should be fine if your
5791 board designers haven't used it for something that would 5784 board designers haven't used it for something that would
5792 cause you grief during the initial boot! It is frequently not 5785 cause you grief during the initial boot! It is frequently not
5793 used. 5786 used.
5794 5787
5795 CONFIG_SYS_INIT_RAM_ADDR should be somewhere that won't interfere 5788 CONFIG_SYS_INIT_RAM_ADDR should be somewhere that won't interfere
5796 with your processor/board/system design. The default value 5789 with your processor/board/system design. The default value
5797 you will find in any recent u-boot distribution in 5790 you will find in any recent u-boot distribution in
5798 walnut.h should work for you. I'd set it to a value larger 5791 walnut.h should work for you. I'd set it to a value larger
5799 than your SDRAM module. If you have a 64MB SDRAM module, set 5792 than your SDRAM module. If you have a 64MB SDRAM module, set
5800 it above 400_0000. Just make sure your board has no resources 5793 it above 400_0000. Just make sure your board has no resources
5801 that are supposed to respond to that address! That code in 5794 that are supposed to respond to that address! That code in
5802 start.S has been around a while and should work as is when 5795 start.S has been around a while and should work as is when
5803 you get the config right. 5796 you get the config right.
5804 5797
5805 -Chris Hallinan 5798 -Chris Hallinan
5806 DS4.COM, Inc. 5799 DS4.COM, Inc.
5807 5800
5808 It is essential to remember this, since it has some impact on the C 5801 It is essential to remember this, since it has some impact on the C
5809 code for the initialization procedures: 5802 code for the initialization procedures:
5810 5803
5811 * Initialized global data (data segment) is read-only. Do not attempt 5804 * Initialized global data (data segment) is read-only. Do not attempt
5812 to write it. 5805 to write it.
5813 5806
5814 * Do not use any uninitialized global data (or implicitely initialized 5807 * Do not use any uninitialized global data (or implicitely initialized
5815 as zero data - BSS segment) at all - this is undefined, initiali- 5808 as zero data - BSS segment) at all - this is undefined, initiali-
5816 zation is performed later (when relocating to RAM). 5809 zation is performed later (when relocating to RAM).
5817 5810
5818 * Stack space is very limited. Avoid big data buffers or things like 5811 * Stack space is very limited. Avoid big data buffers or things like
5819 that. 5812 that.
5820 5813
5821 Having only the stack as writable memory limits means we cannot use 5814 Having only the stack as writable memory limits means we cannot use
5822 normal global data to share information beween the code. But it 5815 normal global data to share information beween the code. But it
5823 turned out that the implementation of U-Boot can be greatly 5816 turned out that the implementation of U-Boot can be greatly
5824 simplified by making a global data structure (gd_t) available to all 5817 simplified by making a global data structure (gd_t) available to all
5825 functions. We could pass a pointer to this data as argument to _all_ 5818 functions. We could pass a pointer to this data as argument to _all_
5826 functions, but this would bloat the code. Instead we use a feature of 5819 functions, but this would bloat the code. Instead we use a feature of
5827 the GCC compiler (Global Register Variables) to share the data: we 5820 the GCC compiler (Global Register Variables) to share the data: we
5828 place a pointer (gd) to the global data into a register which we 5821 place a pointer (gd) to the global data into a register which we
5829 reserve for this purpose. 5822 reserve for this purpose.
5830 5823
5831 When choosing a register for such a purpose we are restricted by the 5824 When choosing a register for such a purpose we are restricted by the
5832 relevant (E)ABI specifications for the current architecture, and by 5825 relevant (E)ABI specifications for the current architecture, and by
5833 GCC's implementation. 5826 GCC's implementation.
5834 5827
5835 For PowerPC, the following registers have specific use: 5828 For PowerPC, the following registers have specific use:
5836 R1: stack pointer 5829 R1: stack pointer
5837 R2: reserved for system use 5830 R2: reserved for system use
5838 R3-R4: parameter passing and return values 5831 R3-R4: parameter passing and return values
5839 R5-R10: parameter passing 5832 R5-R10: parameter passing
5840 R13: small data area pointer 5833 R13: small data area pointer
5841 R30: GOT pointer 5834 R30: GOT pointer
5842 R31: frame pointer 5835 R31: frame pointer
5843 5836
5844 (U-Boot also uses R12 as internal GOT pointer. r12 5837 (U-Boot also uses R12 as internal GOT pointer. r12
5845 is a volatile register so r12 needs to be reset when 5838 is a volatile register so r12 needs to be reset when
5846 going back and forth between asm and C) 5839 going back and forth between asm and C)
5847 5840
5848 ==> U-Boot will use R2 to hold a pointer to the global data 5841 ==> U-Boot will use R2 to hold a pointer to the global data
5849 5842
5850 Note: on PPC, we could use a static initializer (since the 5843 Note: on PPC, we could use a static initializer (since the
5851 address of the global data structure is known at compile time), 5844 address of the global data structure is known at compile time),
5852 but it turned out that reserving a register results in somewhat 5845 but it turned out that reserving a register results in somewhat
5853 smaller code - although the code savings are not that big (on 5846 smaller code - although the code savings are not that big (on
5854 average for all boards 752 bytes for the whole U-Boot image, 5847 average for all boards 752 bytes for the whole U-Boot image,
5855 624 text + 127 data). 5848 624 text + 127 data).
5856 5849
5857 On Blackfin, the normal C ABI (except for P3) is followed as documented here: 5850 On Blackfin, the normal C ABI (except for P3) is followed as documented here:
5858 http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface 5851 http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
5859 5852
5860 ==> U-Boot will use P3 to hold a pointer to the global data 5853 ==> U-Boot will use P3 to hold a pointer to the global data
5861 5854
5862 On ARM, the following registers are used: 5855 On ARM, the following registers are used:
5863 5856
5864 R0: function argument word/integer result 5857 R0: function argument word/integer result
5865 R1-R3: function argument word 5858 R1-R3: function argument word
5866 R9: platform specific 5859 R9: platform specific
5867 R10: stack limit (used only if stack checking is enabled) 5860 R10: stack limit (used only if stack checking is enabled)
5868 R11: argument (frame) pointer 5861 R11: argument (frame) pointer
5869 R12: temporary workspace 5862 R12: temporary workspace
5870 R13: stack pointer 5863 R13: stack pointer
5871 R14: link register 5864 R14: link register
5872 R15: program counter 5865 R15: program counter
5873 5866
5874 ==> U-Boot will use R9 to hold a pointer to the global data 5867 ==> U-Boot will use R9 to hold a pointer to the global data
5875 5868
5876 Note: on ARM, only R_ARM_RELATIVE relocations are supported. 5869 Note: on ARM, only R_ARM_RELATIVE relocations are supported.
5877 5870
5878 On Nios II, the ABI is documented here: 5871 On Nios II, the ABI is documented here:
5879 http://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf 5872 http://www.altera.com/literature/hb/nios2/n2cpu_nii51016.pdf
5880 5873
5881 ==> U-Boot will use gp to hold a pointer to the global data 5874 ==> U-Boot will use gp to hold a pointer to the global data
5882 5875
5883 Note: on Nios II, we give "-G0" option to gcc and don't use gp 5876 Note: on Nios II, we give "-G0" option to gcc and don't use gp
5884 to access small data sections, so gp is free. 5877 to access small data sections, so gp is free.
5885 5878
5886 On NDS32, the following registers are used: 5879 On NDS32, the following registers are used:
5887 5880
5888 R0-R1: argument/return 5881 R0-R1: argument/return
5889 R2-R5: argument 5882 R2-R5: argument
5890 R15: temporary register for assembler 5883 R15: temporary register for assembler
5891 R16: trampoline register 5884 R16: trampoline register
5892 R28: frame pointer (FP) 5885 R28: frame pointer (FP)
5893 R29: global pointer (GP) 5886 R29: global pointer (GP)
5894 R30: link register (LP) 5887 R30: link register (LP)
5895 R31: stack pointer (SP) 5888 R31: stack pointer (SP)
5896 PC: program counter (PC) 5889 PC: program counter (PC)
5897 5890
5898 ==> U-Boot will use R10 to hold a pointer to the global data 5891 ==> U-Boot will use R10 to hold a pointer to the global data
5899 5892
5900 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope, 5893 NOTE: DECLARE_GLOBAL_DATA_PTR must be used with file-global scope,
5901 or current versions of GCC may "optimize" the code too much. 5894 or current versions of GCC may "optimize" the code too much.
5902 5895
5903 Memory Management: 5896 Memory Management:
5904 ------------------ 5897 ------------------
5905 5898
5906 U-Boot runs in system state and uses physical addresses, i.e. the 5899 U-Boot runs in system state and uses physical addresses, i.e. the
5907 MMU is not used either for address mapping nor for memory protection. 5900 MMU is not used either for address mapping nor for memory protection.
5908 5901
5909 The available memory is mapped to fixed addresses using the memory 5902 The available memory is mapped to fixed addresses using the memory
5910 controller. In this process, a contiguous block is formed for each 5903 controller. In this process, a contiguous block is formed for each
5911 memory type (Flash, SDRAM, SRAM), even when it consists of several 5904 memory type (Flash, SDRAM, SRAM), even when it consists of several
5912 physical memory banks. 5905 physical memory banks.
5913 5906
5914 U-Boot is installed in the first 128 kB of the first Flash bank (on 5907 U-Boot is installed in the first 128 kB of the first Flash bank (on
5915 TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After 5908 TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
5916 booting and sizing and initializing DRAM, the code relocates itself 5909 booting and sizing and initializing DRAM, the code relocates itself
5917 to the upper end of DRAM. Immediately below the U-Boot code some 5910 to the upper end of DRAM. Immediately below the U-Boot code some
5918 memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN 5911 memory is reserved for use by malloc() [see CONFIG_SYS_MALLOC_LEN
5919 configuration setting]. Below that, a structure with global Board 5912 configuration setting]. Below that, a structure with global Board
5920 Info data is placed, followed by the stack (growing downward). 5913 Info data is placed, followed by the stack (growing downward).
5921 5914
5922 Additionally, some exception handler code is copied to the low 8 kB 5915 Additionally, some exception handler code is copied to the low 8 kB
5923 of DRAM (0x00000000 ... 0x00001FFF). 5916 of DRAM (0x00000000 ... 0x00001FFF).
5924 5917
5925 So a typical memory configuration with 16 MB of DRAM could look like 5918 So a typical memory configuration with 16 MB of DRAM could look like
5926 this: 5919 this:
5927 5920
5928 0x0000 0000 Exception Vector code 5921 0x0000 0000 Exception Vector code
5929 : 5922 :
5930 0x0000 1FFF 5923 0x0000 1FFF
5931 0x0000 2000 Free for Application Use 5924 0x0000 2000 Free for Application Use
5932 : 5925 :
5933 : 5926 :
5934 5927
5935 : 5928 :
5936 : 5929 :
5937 0x00FB FF20 Monitor Stack (Growing downward) 5930 0x00FB FF20 Monitor Stack (Growing downward)
5938 0x00FB FFAC Board Info Data and permanent copy of global data 5931 0x00FB FFAC Board Info Data and permanent copy of global data
5939 0x00FC 0000 Malloc Arena 5932 0x00FC 0000 Malloc Arena
5940 : 5933 :
5941 0x00FD FFFF 5934 0x00FD FFFF
5942 0x00FE 0000 RAM Copy of Monitor Code 5935 0x00FE 0000 RAM Copy of Monitor Code
5943 ... eventually: LCD or video framebuffer 5936 ... eventually: LCD or video framebuffer
5944 ... eventually: pRAM (Protected RAM - unchanged by reset) 5937 ... eventually: pRAM (Protected RAM - unchanged by reset)
5945 0x00FF FFFF [End of RAM] 5938 0x00FF FFFF [End of RAM]
5946 5939
5947 5940
5948 System Initialization: 5941 System Initialization:
5949 ---------------------- 5942 ----------------------
5950 5943
5951 In the reset configuration, U-Boot starts at the reset entry point 5944 In the reset configuration, U-Boot starts at the reset entry point
5952 (on most PowerPC systems at address 0x00000100). Because of the reset 5945 (on most PowerPC systems at address 0x00000100). Because of the reset
5953 configuration for CS0# this is a mirror of the onboard Flash memory. 5946 configuration for CS0# this is a mirror of the onboard Flash memory.
5954 To be able to re-map memory U-Boot then jumps to its link address. 5947 To be able to re-map memory U-Boot then jumps to its link address.
5955 To be able to implement the initialization code in C, a (small!) 5948 To be able to implement the initialization code in C, a (small!)
5956 initial stack is set up in the internal Dual Ported RAM (in case CPUs 5949 initial stack is set up in the internal Dual Ported RAM (in case CPUs
5957 which provide such a feature like MPC8xx or MPC8260), or in a locked 5950 which provide such a feature like MPC8xx or MPC8260), or in a locked
5958 part of the data cache. After that, U-Boot initializes the CPU core, 5951 part of the data cache. After that, U-Boot initializes the CPU core,
5959 the caches and the SIU. 5952 the caches and the SIU.
5960 5953
5961 Next, all (potentially) available memory banks are mapped using a 5954 Next, all (potentially) available memory banks are mapped using a
5962 preliminary mapping. For example, we put them on 512 MB boundaries 5955 preliminary mapping. For example, we put them on 512 MB boundaries
5963 (multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash 5956 (multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
5964 on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is 5957 on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
5965 programmed for SDRAM access. Using the temporary configuration, a 5958 programmed for SDRAM access. Using the temporary configuration, a
5966 simple memory test is run that determines the size of the SDRAM 5959 simple memory test is run that determines the size of the SDRAM
5967 banks. 5960 banks.
5968 5961
5969 When there is more than one SDRAM bank, and the banks are of 5962 When there is more than one SDRAM bank, and the banks are of
5970 different size, the largest is mapped first. For equal size, the first 5963 different size, the largest is mapped first. For equal size, the first
5971 bank (CS2#) is mapped first. The first mapping is always for address 5964 bank (CS2#) is mapped first. The first mapping is always for address
5972 0x00000000, with any additional banks following immediately to create 5965 0x00000000, with any additional banks following immediately to create
5973 contiguous memory starting from 0. 5966 contiguous memory starting from 0.
5974 5967
5975 Then, the monitor installs itself at the upper end of the SDRAM area 5968 Then, the monitor installs itself at the upper end of the SDRAM area
5976 and allocates memory for use by malloc() and for the global Board 5969 and allocates memory for use by malloc() and for the global Board
5977 Info data; also, the exception vector code is copied to the low RAM 5970 Info data; also, the exception vector code is copied to the low RAM
5978 pages, and the final stack is set up. 5971 pages, and the final stack is set up.
5979 5972
5980 Only after this relocation will you have a "normal" C environment; 5973 Only after this relocation will you have a "normal" C environment;
5981 until that you are restricted in several ways, mostly because you are 5974 until that you are restricted in several ways, mostly because you are
5982 running from ROM, and because the code will have to be relocated to a 5975 running from ROM, and because the code will have to be relocated to a
5983 new address in RAM. 5976 new address in RAM.
5984 5977
5985 5978
5986 U-Boot Porting Guide: 5979 U-Boot Porting Guide:
5987 ---------------------- 5980 ----------------------
5988 5981
5989 [Based on messages by Jerry Van Baren in the U-Boot-Users mailing 5982 [Based on messages by Jerry Van Baren in the U-Boot-Users mailing
5990 list, October 2002] 5983 list, October 2002]
5991 5984
5992 5985
5993 int main(int argc, char *argv[]) 5986 int main(int argc, char *argv[])
5994 { 5987 {
5995 sighandler_t no_more_time; 5988 sighandler_t no_more_time;
5996 5989
5997 signal(SIGALRM, no_more_time); 5990 signal(SIGALRM, no_more_time);
5998 alarm(PROJECT_DEADLINE - toSec (3 * WEEK)); 5991 alarm(PROJECT_DEADLINE - toSec (3 * WEEK));
5999 5992
6000 if (available_money > available_manpower) { 5993 if (available_money > available_manpower) {
6001 Pay consultant to port U-Boot; 5994 Pay consultant to port U-Boot;
6002 return 0; 5995 return 0;
6003 } 5996 }
6004 5997
6005 Download latest U-Boot source; 5998 Download latest U-Boot source;
6006 5999
6007 Subscribe to u-boot mailing list; 6000 Subscribe to u-boot mailing list;
6008 6001
6009 if (clueless) 6002 if (clueless)
6010 email("Hi, I am new to U-Boot, how do I get started?"); 6003 email("Hi, I am new to U-Boot, how do I get started?");
6011 6004
6012 while (learning) { 6005 while (learning) {
6013 Read the README file in the top level directory; 6006 Read the README file in the top level directory;
6014 Read http://www.denx.de/twiki/bin/view/DULG/Manual; 6007 Read http://www.denx.de/twiki/bin/view/DULG/Manual;
6015 Read applicable doc/*.README; 6008 Read applicable doc/*.README;
6016 Read the source, Luke; 6009 Read the source, Luke;
6017 /* find . -name "*.[chS]" | xargs grep -i <keyword> */ 6010 /* find . -name "*.[chS]" | xargs grep -i <keyword> */
6018 } 6011 }
6019 6012
6020 if (available_money > toLocalCurrency ($2500)) 6013 if (available_money > toLocalCurrency ($2500))
6021 Buy a BDI3000; 6014 Buy a BDI3000;
6022 else 6015 else
6023 Add a lot of aggravation and time; 6016 Add a lot of aggravation and time;
6024 6017
6025 if (a similar board exists) { /* hopefully... */ 6018 if (a similar board exists) { /* hopefully... */
6026 cp -a board/<similar> board/<myboard> 6019 cp -a board/<similar> board/<myboard>
6027 cp include/configs/<similar>.h include/configs/<myboard>.h 6020 cp include/configs/<similar>.h include/configs/<myboard>.h
6028 } else { 6021 } else {
6029 Create your own board support subdirectory; 6022 Create your own board support subdirectory;
6030 Create your own board include/configs/<myboard>.h file; 6023 Create your own board include/configs/<myboard>.h file;
6031 } 6024 }
6032 Edit new board/<myboard> files 6025 Edit new board/<myboard> files
6033 Edit new include/configs/<myboard>.h 6026 Edit new include/configs/<myboard>.h
6034 6027
6035 while (!accepted) { 6028 while (!accepted) {
6036 while (!running) { 6029 while (!running) {
6037 do { 6030 do {
6038 Add / modify source code; 6031 Add / modify source code;
6039 } until (compiles); 6032 } until (compiles);
6040 Debug; 6033 Debug;
6041 if (clueless) 6034 if (clueless)
6042 email("Hi, I am having problems..."); 6035 email("Hi, I am having problems...");
6043 } 6036 }
6044 Send patch file to the U-Boot email list; 6037 Send patch file to the U-Boot email list;
6045 if (reasonable critiques) 6038 if (reasonable critiques)
6046 Incorporate improvements from email list code review; 6039 Incorporate improvements from email list code review;
6047 else 6040 else
6048 Defend code as written; 6041 Defend code as written;
6049 } 6042 }
6050 6043
6051 return 0; 6044 return 0;
6052 } 6045 }
6053 6046
6054 void no_more_time (int sig) 6047 void no_more_time (int sig)
6055 { 6048 {
6056 hire_a_guru(); 6049 hire_a_guru();
6057 } 6050 }
6058 6051
6059 6052
6060 Coding Standards: 6053 Coding Standards:
6061 ----------------- 6054 -----------------
6062 6055
6063 All contributions to U-Boot should conform to the Linux kernel 6056 All contributions to U-Boot should conform to the Linux kernel
6064 coding style; see the file "Documentation/CodingStyle" and the script 6057 coding style; see the file "Documentation/CodingStyle" and the script
6065 "scripts/Lindent" in your Linux kernel source directory. 6058 "scripts/Lindent" in your Linux kernel source directory.
6066 6059
6067 Source files originating from a different project (for example the 6060 Source files originating from a different project (for example the
6068 MTD subsystem) are generally exempt from these guidelines and are not 6061 MTD subsystem) are generally exempt from these guidelines and are not
6069 reformated to ease subsequent migration to newer versions of those 6062 reformated to ease subsequent migration to newer versions of those
6070 sources. 6063 sources.
6071 6064
6072 Please note that U-Boot is implemented in C (and to some small parts in 6065 Please note that U-Boot is implemented in C (and to some small parts in
6073 Assembler); no C++ is used, so please do not use C++ style comments (//) 6066 Assembler); no C++ is used, so please do not use C++ style comments (//)
6074 in your code. 6067 in your code.
6075 6068
6076 Please also stick to the following formatting rules: 6069 Please also stick to the following formatting rules:
6077 - remove any trailing white space 6070 - remove any trailing white space
6078 - use TAB characters for indentation and vertical alignment, not spaces 6071 - use TAB characters for indentation and vertical alignment, not spaces
6079 - make sure NOT to use DOS '\r\n' line feeds 6072 - make sure NOT to use DOS '\r\n' line feeds
6080 - do not add more than 2 consecutive empty lines to source files 6073 - do not add more than 2 consecutive empty lines to source files
6081 - do not add trailing empty lines to source files 6074 - do not add trailing empty lines to source files
6082 6075
6083 Submissions which do not conform to the standards may be returned 6076 Submissions which do not conform to the standards may be returned
6084 with a request to reformat the changes. 6077 with a request to reformat the changes.
6085 6078
6086 6079
6087 Submitting Patches: 6080 Submitting Patches:
6088 ------------------- 6081 -------------------
6089 6082
6090 Since the number of patches for U-Boot is growing, we need to 6083 Since the number of patches for U-Boot is growing, we need to
6091 establish some rules. Submissions which do not conform to these rules 6084 establish some rules. Submissions which do not conform to these rules
6092 may be rejected, even when they contain important and valuable stuff. 6085 may be rejected, even when they contain important and valuable stuff.
6093 6086
6094 Please see http://www.denx.de/wiki/U-Boot/Patches for details. 6087 Please see http://www.denx.de/wiki/U-Boot/Patches for details.
6095 6088
6096 Patches shall be sent to the u-boot mailing list <u-boot@lists.denx.de>; 6089 Patches shall be sent to the u-boot mailing list <u-boot@lists.denx.de>;
6097 see http://lists.denx.de/mailman/listinfo/u-boot 6090 see http://lists.denx.de/mailman/listinfo/u-boot
6098 6091
6099 When you send a patch, please include the following information with 6092 When you send a patch, please include the following information with
6100 it: 6093 it:
6101 6094
6102 * For bug fixes: a description of the bug and how your patch fixes 6095 * For bug fixes: a description of the bug and how your patch fixes
6103 this bug. Please try to include a way of demonstrating that the 6096 this bug. Please try to include a way of demonstrating that the
6104 patch actually fixes something. 6097 patch actually fixes something.
6105 6098
6106 * For new features: a description of the feature and your 6099 * For new features: a description of the feature and your
6107 implementation. 6100 implementation.
6108 6101
6109 * A CHANGELOG entry as plaintext (separate from the patch) 6102 * A CHANGELOG entry as plaintext (separate from the patch)
6110 6103
6111 * For major contributions, your entry to the CREDITS file 6104 * For major contributions, your entry to the CREDITS file
6112 6105
6113 * When you add support for a new board, don't forget to add a 6106 * When you add support for a new board, don't forget to add a
6114 maintainer e-mail address to the boards.cfg file, too. 6107 maintainer e-mail address to the boards.cfg file, too.
6115 6108
6116 * If your patch adds new configuration options, don't forget to 6109 * If your patch adds new configuration options, don't forget to
6117 document these in the README file. 6110 document these in the README file.
6118 6111
6119 * The patch itself. If you are using git (which is *strongly* 6112 * The patch itself. If you are using git (which is *strongly*
6120 recommended) you can easily generate the patch using the 6113 recommended) you can easily generate the patch using the
6121 "git format-patch". If you then use "git send-email" to send it to 6114 "git format-patch". If you then use "git send-email" to send it to
6122 the U-Boot mailing list, you will avoid most of the common problems 6115 the U-Boot mailing list, you will avoid most of the common problems
6123 with some other mail clients. 6116 with some other mail clients.
6124 6117
6125 If you cannot use git, use "diff -purN OLD NEW". If your version of 6118 If you cannot use git, use "diff -purN OLD NEW". If your version of
6126 diff does not support these options, then get the latest version of 6119 diff does not support these options, then get the latest version of
6127 GNU diff. 6120 GNU diff.
6128 6121
6129 The current directory when running this command shall be the parent 6122 The current directory when running this command shall be the parent
6130 directory of the U-Boot source tree (i. e. please make sure that 6123 directory of the U-Boot source tree (i. e. please make sure that
6131 your patch includes sufficient directory information for the 6124 your patch includes sufficient directory information for the
6132 affected files). 6125 affected files).
6133 6126
6134 We prefer patches as plain text. MIME attachments are discouraged, 6127 We prefer patches as plain text. MIME attachments are discouraged,
6135 and compressed attachments must not be used. 6128 and compressed attachments must not be used.
6136 6129
6137 * If one logical set of modifications affects or creates several 6130 * If one logical set of modifications affects or creates several
6138 files, all these changes shall be submitted in a SINGLE patch file. 6131 files, all these changes shall be submitted in a SINGLE patch file.
6139 6132
6140 * Changesets that contain different, unrelated modifications shall be 6133 * Changesets that contain different, unrelated modifications shall be
6141 submitted as SEPARATE patches, one patch per changeset. 6134 submitted as SEPARATE patches, one patch per changeset.
6142 6135
6143 6136
6144 Notes: 6137 Notes:
6145 6138
6146 * Before sending the patch, run the MAKEALL script on your patched 6139 * Before sending the patch, run the MAKEALL script on your patched
6147 source tree and make sure that no errors or warnings are reported 6140 source tree and make sure that no errors or warnings are reported
6148 for any of the boards. 6141 for any of the boards.
6149 6142
6150 * Keep your modifications to the necessary minimum: A patch 6143 * Keep your modifications to the necessary minimum: A patch
6151 containing several unrelated changes or arbitrary reformats will be 6144 containing several unrelated changes or arbitrary reformats will be
6152 returned with a request to re-formatting / split it. 6145 returned with a request to re-formatting / split it.
6153 6146
6154 * If you modify existing code, make sure that your new code does not 6147 * If you modify existing code, make sure that your new code does not
6155 add to the memory footprint of the code ;-) Small is beautiful! 6148 add to the memory footprint of the code ;-) Small is beautiful!
6156 When adding new features, these should compile conditionally only 6149 When adding new features, these should compile conditionally only
6157 (using #ifdef), and the resulting code with the new feature 6150 (using #ifdef), and the resulting code with the new feature
6158 disabled must not need more memory than the old code without your 6151 disabled must not need more memory than the old code without your
6159 modification. 6152 modification.
6160 6153
6161 * Remember that there is a size limit of 100 kB per message on the 6154 * Remember that there is a size limit of 100 kB per message on the
6162 u-boot mailing list. Bigger patches will be moderated. If they are 6155 u-boot mailing list. Bigger patches will be moderated. If they are
6163 reasonable and not too big, they will be acknowledged. But patches 6156 reasonable and not too big, they will be acknowledged. But patches
6164 bigger than the size limit should be avoided. 6157 bigger than the size limit should be avoided.
6165 6158
board/samsung/origen/origen.c
1 /* 1 /*
2 * Copyright (C) 2011 Samsung Electronics 2 * Copyright (C) 2011 Samsung Electronics
3 * 3 *
4 * SPDX-License-Identifier: GPL-2.0+ 4 * SPDX-License-Identifier: GPL-2.0+
5 */ 5 */
6 6
7 #include <common.h> 7 #include <common.h>
8 #include <asm/io.h> 8 #include <asm/io.h>
9 #include <asm/arch/cpu.h> 9 #include <asm/arch/cpu.h>
10 #include <asm/arch/gpio.h> 10 #include <asm/arch/gpio.h>
11 #include <asm/arch/mmc.h> 11 #include <asm/arch/mmc.h>
12 #include <asm/arch/periph.h> 12 #include <asm/arch/periph.h>
13 #include <asm/arch/pinmux.h> 13 #include <asm/arch/pinmux.h>
14 #include <usb.h> 14 #include <usb.h>
15 15
16 DECLARE_GLOBAL_DATA_PTR; 16 DECLARE_GLOBAL_DATA_PTR;
17 17
18 u32 get_board_rev(void) 18 u32 get_board_rev(void)
19 { 19 {
20 return 0; 20 return 0;
21 } 21 }
22 22
23 int exynos_init(void) 23 int exynos_init(void)
24 { 24 {
25 return 0; 25 return 0;
26 } 26 }
27 27
28 int board_usb_init(int index, enum usb_init_type init) 28 int board_usb_init(int index, enum usb_init_type init)
29 { 29 {
30 return 0; 30 return 0;
31 } 31 }
32 32
33 #ifdef CONFIG_USB_CABLE_CHECK
34 int usb_cable_connected(void)
35 {
36 return 0;
37 }
38 #endif
39
40 #ifdef CONFIG_BOARD_EARLY_INIT_F 33 #ifdef CONFIG_BOARD_EARLY_INIT_F
41 int exynos_early_init_f(void) 34 int exynos_early_init_f(void)
42 { 35 {
43 return 0; 36 return 0;
44 } 37 }
45 #endif 38 #endif
46 39
board/samsung/trats/trats.c
1 /* 1 /*
2 * Copyright (C) 2011 Samsung Electronics 2 * Copyright (C) 2011 Samsung Electronics
3 * Heungjun Kim <riverful.kim@samsung.com> 3 * Heungjun Kim <riverful.kim@samsung.com>
4 * Kyungmin Park <kyungmin.park@samsung.com> 4 * Kyungmin Park <kyungmin.park@samsung.com>
5 * Donghwa Lee <dh09.lee@samsung.com> 5 * Donghwa Lee <dh09.lee@samsung.com>
6 * 6 *
7 * SPDX-License-Identifier: GPL-2.0+ 7 * SPDX-License-Identifier: GPL-2.0+
8 */ 8 */
9 9
10 #include <common.h> 10 #include <common.h>
11 #include <lcd.h> 11 #include <lcd.h>
12 #include <asm/io.h> 12 #include <asm/io.h>
13 #include <asm/arch/cpu.h> 13 #include <asm/arch/cpu.h>
14 #include <asm/arch/gpio.h> 14 #include <asm/arch/gpio.h>
15 #include <asm/arch/pinmux.h> 15 #include <asm/arch/pinmux.h>
16 #include <asm/arch/clock.h> 16 #include <asm/arch/clock.h>
17 #include <asm/arch/mipi_dsim.h> 17 #include <asm/arch/mipi_dsim.h>
18 #include <asm/arch/watchdog.h> 18 #include <asm/arch/watchdog.h>
19 #include <asm/arch/power.h> 19 #include <asm/arch/power.h>
20 #include <power/pmic.h> 20 #include <power/pmic.h>
21 #include <usb/s3c_udc.h> 21 #include <usb/s3c_udc.h>
22 #include <power/max8997_pmic.h> 22 #include <power/max8997_pmic.h>
23 #include <power/max8997_muic.h> 23 #include <power/max8997_muic.h>
24 #include <power/battery.h> 24 #include <power/battery.h>
25 #include <power/max17042_fg.h> 25 #include <power/max17042_fg.h>
26 #include <libtizen.h> 26 #include <libtizen.h>
27 #include <usb.h> 27 #include <usb.h>
28 #include <usb_mass_storage.h> 28 #include <usb_mass_storage.h>
29 29
30 #include "setup.h" 30 #include "setup.h"
31 31
32 DECLARE_GLOBAL_DATA_PTR; 32 DECLARE_GLOBAL_DATA_PTR;
33 33
34 unsigned int board_rev; 34 unsigned int board_rev;
35 35
36 #ifdef CONFIG_REVISION_TAG 36 #ifdef CONFIG_REVISION_TAG
37 u32 get_board_rev(void) 37 u32 get_board_rev(void)
38 { 38 {
39 return board_rev; 39 return board_rev;
40 } 40 }
41 #endif 41 #endif
42 42
43 static void check_hw_revision(void); 43 static void check_hw_revision(void);
44 struct s3c_plat_otg_data s5pc210_otg_data; 44 struct s3c_plat_otg_data s5pc210_otg_data;
45 45
46 int exynos_init(void) 46 int exynos_init(void)
47 { 47 {
48 check_hw_revision(); 48 check_hw_revision();
49 printf("HW Revision:\t0x%x\n", board_rev); 49 printf("HW Revision:\t0x%x\n", board_rev);
50 50
51 return 0; 51 return 0;
52 } 52 }
53 53
54 void i2c_init_board(void) 54 void i2c_init_board(void)
55 { 55 {
56 int err; 56 int err;
57 struct exynos4_gpio_part2 *gpio2 = 57 struct exynos4_gpio_part2 *gpio2 =
58 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2(); 58 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
59 59
60 /* I2C_5 -> PMIC */ 60 /* I2C_5 -> PMIC */
61 err = exynos_pinmux_config(PERIPH_ID_I2C5, PINMUX_FLAG_NONE); 61 err = exynos_pinmux_config(PERIPH_ID_I2C5, PINMUX_FLAG_NONE);
62 if (err) { 62 if (err) {
63 debug("I2C%d not configured\n", (I2C_5)); 63 debug("I2C%d not configured\n", (I2C_5));
64 return; 64 return;
65 } 65 }
66 66
67 /* I2C_8 -> FG */ 67 /* I2C_8 -> FG */
68 s5p_gpio_direction_output(&gpio2->y4, 0, 1); 68 s5p_gpio_direction_output(&gpio2->y4, 0, 1);
69 s5p_gpio_direction_output(&gpio2->y4, 1, 1); 69 s5p_gpio_direction_output(&gpio2->y4, 1, 1);
70 } 70 }
71 71
72 static void trats_low_power_mode(void) 72 static void trats_low_power_mode(void)
73 { 73 {
74 struct exynos4_clock *clk = 74 struct exynos4_clock *clk =
75 (struct exynos4_clock *)samsung_get_base_clock(); 75 (struct exynos4_clock *)samsung_get_base_clock();
76 struct exynos4_power *pwr = 76 struct exynos4_power *pwr =
77 (struct exynos4_power *)samsung_get_base_power(); 77 (struct exynos4_power *)samsung_get_base_power();
78 78
79 /* Power down CORE1 */ 79 /* Power down CORE1 */
80 /* LOCAL_PWR_CFG [1:0] 0x3 EN, 0x0 DIS */ 80 /* LOCAL_PWR_CFG [1:0] 0x3 EN, 0x0 DIS */
81 writel(0x0, &pwr->arm_core1_configuration); 81 writel(0x0, &pwr->arm_core1_configuration);
82 82
83 /* Change the APLL frequency */ 83 /* Change the APLL frequency */
84 /* ENABLE (1 enable) | LOCKED (1 locked) */ 84 /* ENABLE (1 enable) | LOCKED (1 locked) */
85 /* [31] | [29] */ 85 /* [31] | [29] */
86 /* FSEL | MDIV | PDIV | SDIV */ 86 /* FSEL | MDIV | PDIV | SDIV */
87 /* [27] | [25:16] | [13:8] | [2:0] */ 87 /* [27] | [25:16] | [13:8] | [2:0] */
88 writel(0xa0c80604, &clk->apll_con0); 88 writel(0xa0c80604, &clk->apll_con0);
89 89
90 /* Change CPU0 clock divider */ 90 /* Change CPU0 clock divider */
91 /* CORE2_RATIO | APLL_RATIO | PCLK_DBG_RATIO | ATB_RATIO */ 91 /* CORE2_RATIO | APLL_RATIO | PCLK_DBG_RATIO | ATB_RATIO */
92 /* [30:28] | [26:24] | [22:20] | [18:16] */ 92 /* [30:28] | [26:24] | [22:20] | [18:16] */
93 /* PERIPH_RATIO | COREM1_RATIO | COREM0_RATIO | CORE_RATIO */ 93 /* PERIPH_RATIO | COREM1_RATIO | COREM0_RATIO | CORE_RATIO */
94 /* [14:12] | [10:8] | [6:4] | [2:0] */ 94 /* [14:12] | [10:8] | [6:4] | [2:0] */
95 writel(0x00000100, &clk->div_cpu0); 95 writel(0x00000100, &clk->div_cpu0);
96 96
97 /* CLK_DIV_STAT_CPU0 - wait until clock gets stable (0 = stable) */ 97 /* CLK_DIV_STAT_CPU0 - wait until clock gets stable (0 = stable) */
98 while (readl(&clk->div_stat_cpu0) & 0x1111111) 98 while (readl(&clk->div_stat_cpu0) & 0x1111111)
99 continue; 99 continue;
100 100
101 /* Change clock divider ratio for DMC */ 101 /* Change clock divider ratio for DMC */
102 /* DMCP_RATIO | DMCD_RATIO */ 102 /* DMCP_RATIO | DMCD_RATIO */
103 /* [22:20] | [18:16] */ 103 /* [22:20] | [18:16] */
104 /* DMC_RATIO | DPHY_RATIO | ACP_PCLK_RATIO | ACP_RATIO */ 104 /* DMC_RATIO | DPHY_RATIO | ACP_PCLK_RATIO | ACP_RATIO */
105 /* [14:12] | [10:8] | [6:4] | [2:0] */ 105 /* [14:12] | [10:8] | [6:4] | [2:0] */
106 writel(0x13113117, &clk->div_dmc0); 106 writel(0x13113117, &clk->div_dmc0);
107 107
108 /* CLK_DIV_STAT_DMC0 - wait until clock gets stable (0 = stable) */ 108 /* CLK_DIV_STAT_DMC0 - wait until clock gets stable (0 = stable) */
109 while (readl(&clk->div_stat_dmc0) & 0x11111111) 109 while (readl(&clk->div_stat_dmc0) & 0x11111111)
110 continue; 110 continue;
111 111
112 /* Turn off unnecessary power domains */ 112 /* Turn off unnecessary power domains */
113 writel(0x0, &pwr->xxti_configuration); /* XXTI */ 113 writel(0x0, &pwr->xxti_configuration); /* XXTI */
114 writel(0x0, &pwr->cam_configuration); /* CAM */ 114 writel(0x0, &pwr->cam_configuration); /* CAM */
115 writel(0x0, &pwr->tv_configuration); /* TV */ 115 writel(0x0, &pwr->tv_configuration); /* TV */
116 writel(0x0, &pwr->mfc_configuration); /* MFC */ 116 writel(0x0, &pwr->mfc_configuration); /* MFC */
117 writel(0x0, &pwr->g3d_configuration); /* G3D */ 117 writel(0x0, &pwr->g3d_configuration); /* G3D */
118 writel(0x0, &pwr->gps_configuration); /* GPS */ 118 writel(0x0, &pwr->gps_configuration); /* GPS */
119 writel(0x0, &pwr->gps_alive_configuration); /* GPS_ALIVE */ 119 writel(0x0, &pwr->gps_alive_configuration); /* GPS_ALIVE */
120 120
121 /* Turn off unnecessary clocks */ 121 /* Turn off unnecessary clocks */
122 writel(0x0, &clk->gate_ip_cam); /* CAM */ 122 writel(0x0, &clk->gate_ip_cam); /* CAM */
123 writel(0x0, &clk->gate_ip_tv); /* TV */ 123 writel(0x0, &clk->gate_ip_tv); /* TV */
124 writel(0x0, &clk->gate_ip_mfc); /* MFC */ 124 writel(0x0, &clk->gate_ip_mfc); /* MFC */
125 writel(0x0, &clk->gate_ip_g3d); /* G3D */ 125 writel(0x0, &clk->gate_ip_g3d); /* G3D */
126 writel(0x0, &clk->gate_ip_image); /* IMAGE */ 126 writel(0x0, &clk->gate_ip_image); /* IMAGE */
127 writel(0x0, &clk->gate_ip_gps); /* GPS */ 127 writel(0x0, &clk->gate_ip_gps); /* GPS */
128 } 128 }
129 129
130 static int pmic_init_max8997(void) 130 static int pmic_init_max8997(void)
131 { 131 {
132 struct pmic *p = pmic_get("MAX8997_PMIC"); 132 struct pmic *p = pmic_get("MAX8997_PMIC");
133 int i = 0, ret = 0; 133 int i = 0, ret = 0;
134 u32 val; 134 u32 val;
135 135
136 if (pmic_probe(p)) 136 if (pmic_probe(p))
137 return -1; 137 return -1;
138 138
139 /* BUCK1 VARM: 1.2V */ 139 /* BUCK1 VARM: 1.2V */
140 val = (1200000 - 650000) / 25000; 140 val = (1200000 - 650000) / 25000;
141 ret |= pmic_reg_write(p, MAX8997_REG_BUCK1DVS1, val); 141 ret |= pmic_reg_write(p, MAX8997_REG_BUCK1DVS1, val);
142 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */ 142 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */
143 ret |= pmic_reg_write(p, MAX8997_REG_BUCK1CTRL, val); 143 ret |= pmic_reg_write(p, MAX8997_REG_BUCK1CTRL, val);
144 144
145 /* BUCK2 VINT: 1.1V */ 145 /* BUCK2 VINT: 1.1V */
146 val = (1100000 - 650000) / 25000; 146 val = (1100000 - 650000) / 25000;
147 ret |= pmic_reg_write(p, MAX8997_REG_BUCK2DVS1, val); 147 ret |= pmic_reg_write(p, MAX8997_REG_BUCK2DVS1, val);
148 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */ 148 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */
149 ret |= pmic_reg_write(p, MAX8997_REG_BUCK2CTRL, val); 149 ret |= pmic_reg_write(p, MAX8997_REG_BUCK2CTRL, val);
150 150
151 151
152 /* BUCK3 G3D: 1.1V - OFF */ 152 /* BUCK3 G3D: 1.1V - OFF */
153 ret |= pmic_reg_read(p, MAX8997_REG_BUCK3CTRL, &val); 153 ret |= pmic_reg_read(p, MAX8997_REG_BUCK3CTRL, &val);
154 val &= ~ENBUCK; 154 val &= ~ENBUCK;
155 ret |= pmic_reg_write(p, MAX8997_REG_BUCK3CTRL, val); 155 ret |= pmic_reg_write(p, MAX8997_REG_BUCK3CTRL, val);
156 156
157 val = (1100000 - 750000) / 50000; 157 val = (1100000 - 750000) / 50000;
158 ret |= pmic_reg_write(p, MAX8997_REG_BUCK3DVS, val); 158 ret |= pmic_reg_write(p, MAX8997_REG_BUCK3DVS, val);
159 159
160 /* BUCK4 CAMISP: 1.2V - OFF */ 160 /* BUCK4 CAMISP: 1.2V - OFF */
161 ret |= pmic_reg_read(p, MAX8997_REG_BUCK4CTRL, &val); 161 ret |= pmic_reg_read(p, MAX8997_REG_BUCK4CTRL, &val);
162 val &= ~ENBUCK; 162 val &= ~ENBUCK;
163 ret |= pmic_reg_write(p, MAX8997_REG_BUCK4CTRL, val); 163 ret |= pmic_reg_write(p, MAX8997_REG_BUCK4CTRL, val);
164 164
165 val = (1200000 - 650000) / 25000; 165 val = (1200000 - 650000) / 25000;
166 ret |= pmic_reg_write(p, MAX8997_REG_BUCK4DVS, val); 166 ret |= pmic_reg_write(p, MAX8997_REG_BUCK4DVS, val);
167 167
168 /* BUCK5 VMEM: 1.2V */ 168 /* BUCK5 VMEM: 1.2V */
169 val = (1200000 - 650000) / 25000; 169 val = (1200000 - 650000) / 25000;
170 for (i = 0; i < 8; i++) 170 for (i = 0; i < 8; i++)
171 ret |= pmic_reg_write(p, MAX8997_REG_BUCK5DVS1 + i, val); 171 ret |= pmic_reg_write(p, MAX8997_REG_BUCK5DVS1 + i, val);
172 172
173 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */ 173 val = ENBUCK | ACTIVE_DISCHARGE; /* DVS OFF */
174 ret |= pmic_reg_write(p, MAX8997_REG_BUCK5CTRL, val); 174 ret |= pmic_reg_write(p, MAX8997_REG_BUCK5CTRL, val);
175 175
176 /* BUCK6 CAM AF: 2.8V */ 176 /* BUCK6 CAM AF: 2.8V */
177 /* No Voltage Setting Register */ 177 /* No Voltage Setting Register */
178 /* GNSLCT 3.0X */ 178 /* GNSLCT 3.0X */
179 val = GNSLCT; 179 val = GNSLCT;
180 ret |= pmic_reg_write(p, MAX8997_REG_BUCK6CTRL, val); 180 ret |= pmic_reg_write(p, MAX8997_REG_BUCK6CTRL, val);
181 181
182 /* BUCK7 VCC_SUB: 2.0V */ 182 /* BUCK7 VCC_SUB: 2.0V */
183 val = (2000000 - 750000) / 50000; 183 val = (2000000 - 750000) / 50000;
184 ret |= pmic_reg_write(p, MAX8997_REG_BUCK7DVS, val); 184 ret |= pmic_reg_write(p, MAX8997_REG_BUCK7DVS, val);
185 185
186 /* LDO1 VADC: 3.3V */ 186 /* LDO1 VADC: 3.3V */
187 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */ 187 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */
188 ret |= pmic_reg_write(p, MAX8997_REG_LDO1CTRL, val); 188 ret |= pmic_reg_write(p, MAX8997_REG_LDO1CTRL, val);
189 189
190 /* LDO1 Disable active discharging */ 190 /* LDO1 Disable active discharging */
191 ret |= pmic_reg_read(p, MAX8997_REG_LDO1CONFIG, &val); 191 ret |= pmic_reg_read(p, MAX8997_REG_LDO1CONFIG, &val);
192 val &= ~LDO_ADE; 192 val &= ~LDO_ADE;
193 ret |= pmic_reg_write(p, MAX8997_REG_LDO1CONFIG, val); 193 ret |= pmic_reg_write(p, MAX8997_REG_LDO1CONFIG, val);
194 194
195 /* LDO2 VALIVE: 1.1V */ 195 /* LDO2 VALIVE: 1.1V */
196 val = max8997_reg_ldo(1100000) | EN_LDO; 196 val = max8997_reg_ldo(1100000) | EN_LDO;
197 ret |= pmic_reg_write(p, MAX8997_REG_LDO2CTRL, val); 197 ret |= pmic_reg_write(p, MAX8997_REG_LDO2CTRL, val);
198 198
199 /* LDO3 VUSB/MIPI: 1.1V */ 199 /* LDO3 VUSB/MIPI: 1.1V */
200 val = max8997_reg_ldo(1100000) | DIS_LDO; /* OFF */ 200 val = max8997_reg_ldo(1100000) | DIS_LDO; /* OFF */
201 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, val); 201 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, val);
202 202
203 /* LDO4 VMIPI: 1.8V */ 203 /* LDO4 VMIPI: 1.8V */
204 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */ 204 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */
205 ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, val); 205 ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, val);
206 206
207 /* LDO5 VHSIC: 1.2V */ 207 /* LDO5 VHSIC: 1.2V */
208 val = max8997_reg_ldo(1200000) | DIS_LDO; /* OFF */ 208 val = max8997_reg_ldo(1200000) | DIS_LDO; /* OFF */
209 ret |= pmic_reg_write(p, MAX8997_REG_LDO5CTRL, val); 209 ret |= pmic_reg_write(p, MAX8997_REG_LDO5CTRL, val);
210 210
211 /* LDO6 VCC_1.8V_PDA: 1.8V */ 211 /* LDO6 VCC_1.8V_PDA: 1.8V */
212 val = max8997_reg_ldo(1800000) | EN_LDO; 212 val = max8997_reg_ldo(1800000) | EN_LDO;
213 ret |= pmic_reg_write(p, MAX8997_REG_LDO6CTRL, val); 213 ret |= pmic_reg_write(p, MAX8997_REG_LDO6CTRL, val);
214 214
215 /* LDO7 CAM_ISP: 1.8V */ 215 /* LDO7 CAM_ISP: 1.8V */
216 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */ 216 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */
217 ret |= pmic_reg_write(p, MAX8997_REG_LDO7CTRL, val); 217 ret |= pmic_reg_write(p, MAX8997_REG_LDO7CTRL, val);
218 218
219 /* LDO8 VDAC/VUSB: 3.3V */ 219 /* LDO8 VDAC/VUSB: 3.3V */
220 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */ 220 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */
221 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, val); 221 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, val);
222 222
223 /* LDO9 VCC_2.8V_PDA: 2.8V */ 223 /* LDO9 VCC_2.8V_PDA: 2.8V */
224 val = max8997_reg_ldo(2800000) | EN_LDO; 224 val = max8997_reg_ldo(2800000) | EN_LDO;
225 ret |= pmic_reg_write(p, MAX8997_REG_LDO9CTRL, val); 225 ret |= pmic_reg_write(p, MAX8997_REG_LDO9CTRL, val);
226 226
227 /* LDO10 VPLL: 1.1V */ 227 /* LDO10 VPLL: 1.1V */
228 val = max8997_reg_ldo(1100000) | EN_LDO; 228 val = max8997_reg_ldo(1100000) | EN_LDO;
229 ret |= pmic_reg_write(p, MAX8997_REG_LDO10CTRL, val); 229 ret |= pmic_reg_write(p, MAX8997_REG_LDO10CTRL, val);
230 230
231 /* LDO11 TOUCH: 2.8V */ 231 /* LDO11 TOUCH: 2.8V */
232 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */ 232 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */
233 ret |= pmic_reg_write(p, MAX8997_REG_LDO11CTRL, val); 233 ret |= pmic_reg_write(p, MAX8997_REG_LDO11CTRL, val);
234 234
235 /* LDO12 VTCAM: 1.8V */ 235 /* LDO12 VTCAM: 1.8V */
236 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */ 236 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */
237 ret |= pmic_reg_write(p, MAX8997_REG_LDO12CTRL, val); 237 ret |= pmic_reg_write(p, MAX8997_REG_LDO12CTRL, val);
238 238
239 /* LDO13 VCC_3.0_LCD: 3.0V */ 239 /* LDO13 VCC_3.0_LCD: 3.0V */
240 val = max8997_reg_ldo(3000000) | DIS_LDO; /* OFF */ 240 val = max8997_reg_ldo(3000000) | DIS_LDO; /* OFF */
241 ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, val); 241 ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, val);
242 242
243 /* LDO14 MOTOR: 3.0V */ 243 /* LDO14 MOTOR: 3.0V */
244 val = max8997_reg_ldo(3000000) | DIS_LDO; /* OFF */ 244 val = max8997_reg_ldo(3000000) | DIS_LDO; /* OFF */
245 ret |= pmic_reg_write(p, MAX8997_REG_LDO14CTRL, val); 245 ret |= pmic_reg_write(p, MAX8997_REG_LDO14CTRL, val);
246 246
247 /* LDO15 LED_A: 2.8V */ 247 /* LDO15 LED_A: 2.8V */
248 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */ 248 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */
249 ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, val); 249 ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, val);
250 250
251 /* LDO16 CAM_SENSOR: 1.8V */ 251 /* LDO16 CAM_SENSOR: 1.8V */
252 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */ 252 val = max8997_reg_ldo(1800000) | DIS_LDO; /* OFF */
253 ret |= pmic_reg_write(p, MAX8997_REG_LDO16CTRL, val); 253 ret |= pmic_reg_write(p, MAX8997_REG_LDO16CTRL, val);
254 254
255 /* LDO17 VTF: 2.8V */ 255 /* LDO17 VTF: 2.8V */
256 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */ 256 val = max8997_reg_ldo(2800000) | DIS_LDO; /* OFF */
257 ret |= pmic_reg_write(p, MAX8997_REG_LDO17CTRL, val); 257 ret |= pmic_reg_write(p, MAX8997_REG_LDO17CTRL, val);
258 258
259 /* LDO18 TOUCH_LED 3.3V */ 259 /* LDO18 TOUCH_LED 3.3V */
260 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */ 260 val = max8997_reg_ldo(3300000) | DIS_LDO; /* OFF */
261 ret |= pmic_reg_write(p, MAX8997_REG_LDO18CTRL, val); 261 ret |= pmic_reg_write(p, MAX8997_REG_LDO18CTRL, val);
262 262
263 /* LDO21 VDDQ: 1.2V */ 263 /* LDO21 VDDQ: 1.2V */
264 val = max8997_reg_ldo(1200000) | EN_LDO; 264 val = max8997_reg_ldo(1200000) | EN_LDO;
265 ret |= pmic_reg_write(p, MAX8997_REG_LDO21CTRL, val); 265 ret |= pmic_reg_write(p, MAX8997_REG_LDO21CTRL, val);
266 266
267 /* SAFEOUT for both 1 and 2: 4.9V, Active discharge, Enable */ 267 /* SAFEOUT for both 1 and 2: 4.9V, Active discharge, Enable */
268 val = (SAFEOUT_4_90V << 0) | (SAFEOUT_4_90V << 2) | 268 val = (SAFEOUT_4_90V << 0) | (SAFEOUT_4_90V << 2) |
269 ACTDISSAFEO1 | ACTDISSAFEO2 | ENSAFEOUT1 | ENSAFEOUT2; 269 ACTDISSAFEO1 | ACTDISSAFEO2 | ENSAFEOUT1 | ENSAFEOUT2;
270 ret |= pmic_reg_write(p, MAX8997_REG_SAFEOUTCTRL, val); 270 ret |= pmic_reg_write(p, MAX8997_REG_SAFEOUTCTRL, val);
271 271
272 if (ret) { 272 if (ret) {
273 puts("MAX8997 PMIC setting error!\n"); 273 puts("MAX8997 PMIC setting error!\n");
274 return -1; 274 return -1;
275 } 275 }
276 return 0; 276 return 0;
277 } 277 }
278 278
279 int exynos_power_init(void) 279 int exynos_power_init(void)
280 { 280 {
281 int chrg, ret; 281 int chrg, ret;
282 struct power_battery *pb; 282 struct power_battery *pb;
283 struct pmic *p_fg, *p_chrg, *p_muic, *p_bat; 283 struct pmic *p_fg, *p_chrg, *p_muic, *p_bat;
284 284
285 /* 285 /*
286 * For PMIC/MUIC the I2C bus is named as I2C5, but it is connected 286 * For PMIC/MUIC the I2C bus is named as I2C5, but it is connected
287 * to logical I2C adapter 0 287 * to logical I2C adapter 0
288 * 288 *
289 * The FUEL_GAUGE is marked as I2C9 on the schematic, but connected 289 * The FUEL_GAUGE is marked as I2C9 on the schematic, but connected
290 * to logical I2C adapter 1 290 * to logical I2C adapter 1
291 */ 291 */
292 ret = pmic_init(I2C_5); 292 ret = pmic_init(I2C_5);
293 ret |= pmic_init_max8997(); 293 ret |= pmic_init_max8997();
294 ret |= power_fg_init(I2C_9); 294 ret |= power_fg_init(I2C_9);
295 ret |= power_muic_init(I2C_5); 295 ret |= power_muic_init(I2C_5);
296 ret |= power_bat_init(0); 296 ret |= power_bat_init(0);
297 if (ret) 297 if (ret)
298 return ret; 298 return ret;
299 299
300 p_fg = pmic_get("MAX17042_FG"); 300 p_fg = pmic_get("MAX17042_FG");
301 if (!p_fg) { 301 if (!p_fg) {
302 puts("MAX17042_FG: Not found\n"); 302 puts("MAX17042_FG: Not found\n");
303 return -ENODEV; 303 return -ENODEV;
304 } 304 }
305 305
306 p_chrg = pmic_get("MAX8997_PMIC"); 306 p_chrg = pmic_get("MAX8997_PMIC");
307 if (!p_chrg) { 307 if (!p_chrg) {
308 puts("MAX8997_PMIC: Not found\n"); 308 puts("MAX8997_PMIC: Not found\n");
309 return -ENODEV; 309 return -ENODEV;
310 } 310 }
311 311
312 p_muic = pmic_get("MAX8997_MUIC"); 312 p_muic = pmic_get("MAX8997_MUIC");
313 if (!p_muic) { 313 if (!p_muic) {
314 puts("MAX8997_MUIC: Not found\n"); 314 puts("MAX8997_MUIC: Not found\n");
315 return -ENODEV; 315 return -ENODEV;
316 } 316 }
317 317
318 p_bat = pmic_get("BAT_TRATS"); 318 p_bat = pmic_get("BAT_TRATS");
319 if (!p_bat) { 319 if (!p_bat) {
320 puts("BAT_TRATS: Not found\n"); 320 puts("BAT_TRATS: Not found\n");
321 return -ENODEV; 321 return -ENODEV;
322 } 322 }
323 323
324 p_fg->parent = p_bat; 324 p_fg->parent = p_bat;
325 p_chrg->parent = p_bat; 325 p_chrg->parent = p_bat;
326 p_muic->parent = p_bat; 326 p_muic->parent = p_bat;
327 327
328 p_bat->low_power_mode = trats_low_power_mode; 328 p_bat->low_power_mode = trats_low_power_mode;
329 p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic); 329 p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic);
330 330
331 pb = p_bat->pbat; 331 pb = p_bat->pbat;
332 chrg = p_muic->chrg->chrg_type(p_muic); 332 chrg = p_muic->chrg->chrg_type(p_muic);
333 debug("CHARGER TYPE: %d\n", chrg); 333 debug("CHARGER TYPE: %d\n", chrg);
334 334
335 if (!p_chrg->chrg->chrg_bat_present(p_chrg)) { 335 if (!p_chrg->chrg->chrg_bat_present(p_chrg)) {
336 puts("No battery detected\n"); 336 puts("No battery detected\n");
337 return -1; 337 return -1;
338 } 338 }
339 339
340 p_fg->fg->fg_battery_check(p_fg, p_bat); 340 p_fg->fg->fg_battery_check(p_fg, p_bat);
341 341
342 if (pb->bat->state == CHARGE && chrg == CHARGER_USB) 342 if (pb->bat->state == CHARGE && chrg == CHARGER_USB)
343 puts("CHARGE Battery !\n"); 343 puts("CHARGE Battery !\n");
344 344
345 return 0; 345 return 0;
346 } 346 }
347 347
348 static unsigned int get_hw_revision(void) 348 static unsigned int get_hw_revision(void)
349 { 349 {
350 struct exynos4_gpio_part1 *gpio = 350 struct exynos4_gpio_part1 *gpio =
351 (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1(); 351 (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1();
352 int hwrev = 0; 352 int hwrev = 0;
353 int i; 353 int i;
354 354
355 /* hw_rev[3:0] == GPE1[3:0] */ 355 /* hw_rev[3:0] == GPE1[3:0] */
356 for (i = 0; i < 4; i++) { 356 for (i = 0; i < 4; i++) {
357 s5p_gpio_cfg_pin(&gpio->e1, i, GPIO_INPUT); 357 s5p_gpio_cfg_pin(&gpio->e1, i, GPIO_INPUT);
358 s5p_gpio_set_pull(&gpio->e1, i, GPIO_PULL_NONE); 358 s5p_gpio_set_pull(&gpio->e1, i, GPIO_PULL_NONE);
359 } 359 }
360 360
361 udelay(1); 361 udelay(1);
362 362
363 for (i = 0; i < 4; i++) 363 for (i = 0; i < 4; i++)
364 hwrev |= (s5p_gpio_get_value(&gpio->e1, i) << i); 364 hwrev |= (s5p_gpio_get_value(&gpio->e1, i) << i);
365 365
366 debug("hwrev 0x%x\n", hwrev); 366 debug("hwrev 0x%x\n", hwrev);
367 367
368 return hwrev; 368 return hwrev;
369 } 369 }
370 370
371 static void check_hw_revision(void) 371 static void check_hw_revision(void)
372 { 372 {
373 int hwrev; 373 int hwrev;
374 374
375 hwrev = get_hw_revision(); 375 hwrev = get_hw_revision();
376 376
377 board_rev |= hwrev; 377 board_rev |= hwrev;
378 } 378 }
379 379
380 380
381 #ifdef CONFIG_USB_GADGET 381 #ifdef CONFIG_USB_GADGET
382 static int s5pc210_phy_control(int on) 382 static int s5pc210_phy_control(int on)
383 { 383 {
384 int ret = 0; 384 int ret = 0;
385 u32 val = 0; 385 u32 val = 0;
386 struct pmic *p = pmic_get("MAX8997_PMIC"); 386 struct pmic *p = pmic_get("MAX8997_PMIC");
387 if (!p) 387 if (!p)
388 return -ENODEV; 388 return -ENODEV;
389 389
390 if (pmic_probe(p)) 390 if (pmic_probe(p))
391 return -1; 391 return -1;
392 392
393 if (on) { 393 if (on) {
394 ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL, 394 ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
395 ENSAFEOUT1, LDO_ON); 395 ENSAFEOUT1, LDO_ON);
396 ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val); 396 ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val);
397 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, EN_LDO | val); 397 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, EN_LDO | val);
398 398
399 ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val); 399 ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val);
400 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, EN_LDO | val); 400 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, EN_LDO | val);
401 } else { 401 } else {
402 ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val); 402 ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val);
403 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, DIS_LDO | val); 403 ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, DIS_LDO | val);
404 404
405 ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val); 405 ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val);
406 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, DIS_LDO | val); 406 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, DIS_LDO | val);
407 ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL, 407 ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
408 ENSAFEOUT1, LDO_OFF); 408 ENSAFEOUT1, LDO_OFF);
409 } 409 }
410 410
411 if (ret) { 411 if (ret) {
412 puts("MAX8997 LDO setting error!\n"); 412 puts("MAX8997 LDO setting error!\n");
413 return -1; 413 return -1;
414 } 414 }
415 415
416 return 0; 416 return 0;
417 } 417 }
418 418
419 struct s3c_plat_otg_data s5pc210_otg_data = { 419 struct s3c_plat_otg_data s5pc210_otg_data = {
420 .phy_control = s5pc210_phy_control, 420 .phy_control = s5pc210_phy_control,
421 .regs_phy = EXYNOS4_USBPHY_BASE, 421 .regs_phy = EXYNOS4_USBPHY_BASE,
422 .regs_otg = EXYNOS4_USBOTG_BASE, 422 .regs_otg = EXYNOS4_USBOTG_BASE,
423 .usb_phy_ctrl = EXYNOS4_USBPHY_CONTROL, 423 .usb_phy_ctrl = EXYNOS4_USBPHY_CONTROL,
424 .usb_flags = PHY0_SLEEP, 424 .usb_flags = PHY0_SLEEP,
425 }; 425 };
426 426
427 int board_usb_init(int index, enum usb_init_type init) 427 int board_usb_init(int index, enum usb_init_type init)
428 { 428 {
429 debug("USB_udc_probe\n"); 429 debug("USB_udc_probe\n");
430 return s3c_udc_probe(&s5pc210_otg_data); 430 return s3c_udc_probe(&s5pc210_otg_data);
431 } 431 }
432 432
433 #ifdef CONFIG_USB_CABLE_CHECK 433 int g_dnl_board_usb_cable_connected(void)
434 int usb_cable_connected(void)
435 { 434 {
436 struct pmic *muic = pmic_get("MAX8997_MUIC"); 435 struct pmic *muic = pmic_get("MAX8997_MUIC");
437 if (!muic) 436 if (!muic)
438 return 0; 437 return 0;
439 438
440 return !!muic->chrg->chrg_type(muic); 439 return !!muic->chrg->chrg_type(muic);
441 } 440 }
442 #endif
443 #endif 441 #endif
444 442
445 static void pmic_reset(void) 443 static void pmic_reset(void)
446 { 444 {
447 struct exynos4_gpio_part2 *gpio = 445 struct exynos4_gpio_part2 *gpio =
448 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2(); 446 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
449 447
450 s5p_gpio_direction_output(&gpio->x0, 7, 1); 448 s5p_gpio_direction_output(&gpio->x0, 7, 1);
451 s5p_gpio_set_pull(&gpio->x2, 7, GPIO_PULL_NONE); 449 s5p_gpio_set_pull(&gpio->x2, 7, GPIO_PULL_NONE);
452 } 450 }
453 451
454 static void board_clock_init(void) 452 static void board_clock_init(void)
455 { 453 {
456 struct exynos4_clock *clk = 454 struct exynos4_clock *clk =
457 (struct exynos4_clock *)samsung_get_base_clock(); 455 (struct exynos4_clock *)samsung_get_base_clock();
458 456
459 writel(CLK_SRC_CPU_VAL, (unsigned int)&clk->src_cpu); 457 writel(CLK_SRC_CPU_VAL, (unsigned int)&clk->src_cpu);
460 writel(CLK_SRC_TOP0_VAL, (unsigned int)&clk->src_top0); 458 writel(CLK_SRC_TOP0_VAL, (unsigned int)&clk->src_top0);
461 writel(CLK_SRC_FSYS_VAL, (unsigned int)&clk->src_fsys); 459 writel(CLK_SRC_FSYS_VAL, (unsigned int)&clk->src_fsys);
462 writel(CLK_SRC_PERIL0_VAL, (unsigned int)&clk->src_peril0); 460 writel(CLK_SRC_PERIL0_VAL, (unsigned int)&clk->src_peril0);
463 461
464 writel(CLK_DIV_CPU0_VAL, (unsigned int)&clk->div_cpu0); 462 writel(CLK_DIV_CPU0_VAL, (unsigned int)&clk->div_cpu0);
465 writel(CLK_DIV_CPU1_VAL, (unsigned int)&clk->div_cpu1); 463 writel(CLK_DIV_CPU1_VAL, (unsigned int)&clk->div_cpu1);
466 writel(CLK_DIV_DMC0_VAL, (unsigned int)&clk->div_dmc0); 464 writel(CLK_DIV_DMC0_VAL, (unsigned int)&clk->div_dmc0);
467 writel(CLK_DIV_DMC1_VAL, (unsigned int)&clk->div_dmc1); 465 writel(CLK_DIV_DMC1_VAL, (unsigned int)&clk->div_dmc1);
468 writel(CLK_DIV_LEFTBUS_VAL, (unsigned int)&clk->div_leftbus); 466 writel(CLK_DIV_LEFTBUS_VAL, (unsigned int)&clk->div_leftbus);
469 writel(CLK_DIV_RIGHTBUS_VAL, (unsigned int)&clk->div_rightbus); 467 writel(CLK_DIV_RIGHTBUS_VAL, (unsigned int)&clk->div_rightbus);
470 writel(CLK_DIV_TOP_VAL, (unsigned int)&clk->div_top); 468 writel(CLK_DIV_TOP_VAL, (unsigned int)&clk->div_top);
471 writel(CLK_DIV_FSYS1_VAL, (unsigned int)&clk->div_fsys1); 469 writel(CLK_DIV_FSYS1_VAL, (unsigned int)&clk->div_fsys1);
472 writel(CLK_DIV_FSYS2_VAL, (unsigned int)&clk->div_fsys2); 470 writel(CLK_DIV_FSYS2_VAL, (unsigned int)&clk->div_fsys2);
473 writel(CLK_DIV_FSYS3_VAL, (unsigned int)&clk->div_fsys3); 471 writel(CLK_DIV_FSYS3_VAL, (unsigned int)&clk->div_fsys3);
474 writel(CLK_DIV_PERIL0_VAL, (unsigned int)&clk->div_peril0); 472 writel(CLK_DIV_PERIL0_VAL, (unsigned int)&clk->div_peril0);
475 writel(CLK_DIV_PERIL3_VAL, (unsigned int)&clk->div_peril3); 473 writel(CLK_DIV_PERIL3_VAL, (unsigned int)&clk->div_peril3);
476 474
477 writel(PLL_LOCKTIME, (unsigned int)&clk->apll_lock); 475 writel(PLL_LOCKTIME, (unsigned int)&clk->apll_lock);
478 writel(PLL_LOCKTIME, (unsigned int)&clk->mpll_lock); 476 writel(PLL_LOCKTIME, (unsigned int)&clk->mpll_lock);
479 writel(PLL_LOCKTIME, (unsigned int)&clk->epll_lock); 477 writel(PLL_LOCKTIME, (unsigned int)&clk->epll_lock);
480 writel(PLL_LOCKTIME, (unsigned int)&clk->vpll_lock); 478 writel(PLL_LOCKTIME, (unsigned int)&clk->vpll_lock);
481 writel(APLL_CON1_VAL, (unsigned int)&clk->apll_con1); 479 writel(APLL_CON1_VAL, (unsigned int)&clk->apll_con1);
482 writel(APLL_CON0_VAL, (unsigned int)&clk->apll_con0); 480 writel(APLL_CON0_VAL, (unsigned int)&clk->apll_con0);
483 writel(MPLL_CON1_VAL, (unsigned int)&clk->mpll_con1); 481 writel(MPLL_CON1_VAL, (unsigned int)&clk->mpll_con1);
484 writel(MPLL_CON0_VAL, (unsigned int)&clk->mpll_con0); 482 writel(MPLL_CON0_VAL, (unsigned int)&clk->mpll_con0);
485 writel(EPLL_CON1_VAL, (unsigned int)&clk->epll_con1); 483 writel(EPLL_CON1_VAL, (unsigned int)&clk->epll_con1);
486 writel(EPLL_CON0_VAL, (unsigned int)&clk->epll_con0); 484 writel(EPLL_CON0_VAL, (unsigned int)&clk->epll_con0);
487 writel(VPLL_CON1_VAL, (unsigned int)&clk->vpll_con1); 485 writel(VPLL_CON1_VAL, (unsigned int)&clk->vpll_con1);
488 writel(VPLL_CON0_VAL, (unsigned int)&clk->vpll_con0); 486 writel(VPLL_CON0_VAL, (unsigned int)&clk->vpll_con0);
489 487
490 writel(CLK_GATE_IP_CAM_VAL, (unsigned int)&clk->gate_ip_cam); 488 writel(CLK_GATE_IP_CAM_VAL, (unsigned int)&clk->gate_ip_cam);
491 writel(CLK_GATE_IP_VP_VAL, (unsigned int)&clk->gate_ip_tv); 489 writel(CLK_GATE_IP_VP_VAL, (unsigned int)&clk->gate_ip_tv);
492 writel(CLK_GATE_IP_MFC_VAL, (unsigned int)&clk->gate_ip_mfc); 490 writel(CLK_GATE_IP_MFC_VAL, (unsigned int)&clk->gate_ip_mfc);
493 writel(CLK_GATE_IP_G3D_VAL, (unsigned int)&clk->gate_ip_g3d); 491 writel(CLK_GATE_IP_G3D_VAL, (unsigned int)&clk->gate_ip_g3d);
494 writel(CLK_GATE_IP_IMAGE_VAL, (unsigned int)&clk->gate_ip_image); 492 writel(CLK_GATE_IP_IMAGE_VAL, (unsigned int)&clk->gate_ip_image);
495 writel(CLK_GATE_IP_LCD0_VAL, (unsigned int)&clk->gate_ip_lcd0); 493 writel(CLK_GATE_IP_LCD0_VAL, (unsigned int)&clk->gate_ip_lcd0);
496 writel(CLK_GATE_IP_LCD1_VAL, (unsigned int)&clk->gate_ip_lcd1); 494 writel(CLK_GATE_IP_LCD1_VAL, (unsigned int)&clk->gate_ip_lcd1);
497 writel(CLK_GATE_IP_FSYS_VAL, (unsigned int)&clk->gate_ip_fsys); 495 writel(CLK_GATE_IP_FSYS_VAL, (unsigned int)&clk->gate_ip_fsys);
498 writel(CLK_GATE_IP_GPS_VAL, (unsigned int)&clk->gate_ip_gps); 496 writel(CLK_GATE_IP_GPS_VAL, (unsigned int)&clk->gate_ip_gps);
499 writel(CLK_GATE_IP_PERIL_VAL, (unsigned int)&clk->gate_ip_peril); 497 writel(CLK_GATE_IP_PERIL_VAL, (unsigned int)&clk->gate_ip_peril);
500 writel(CLK_GATE_IP_PERIR_VAL, (unsigned int)&clk->gate_ip_perir); 498 writel(CLK_GATE_IP_PERIR_VAL, (unsigned int)&clk->gate_ip_perir);
501 writel(CLK_GATE_BLOCK_VAL, (unsigned int)&clk->gate_block); 499 writel(CLK_GATE_BLOCK_VAL, (unsigned int)&clk->gate_block);
502 } 500 }
503 501
504 static void board_power_init(void) 502 static void board_power_init(void)
505 { 503 {
506 struct exynos4_power *pwr = 504 struct exynos4_power *pwr =
507 (struct exynos4_power *)samsung_get_base_power(); 505 (struct exynos4_power *)samsung_get_base_power();
508 506
509 /* PS HOLD */ 507 /* PS HOLD */
510 writel(EXYNOS4_PS_HOLD_CON_VAL, (unsigned int)&pwr->ps_hold_control); 508 writel(EXYNOS4_PS_HOLD_CON_VAL, (unsigned int)&pwr->ps_hold_control);
511 509
512 /* Set power down */ 510 /* Set power down */
513 writel(0, (unsigned int)&pwr->cam_configuration); 511 writel(0, (unsigned int)&pwr->cam_configuration);
514 writel(0, (unsigned int)&pwr->tv_configuration); 512 writel(0, (unsigned int)&pwr->tv_configuration);
515 writel(0, (unsigned int)&pwr->mfc_configuration); 513 writel(0, (unsigned int)&pwr->mfc_configuration);
516 writel(0, (unsigned int)&pwr->g3d_configuration); 514 writel(0, (unsigned int)&pwr->g3d_configuration);
517 writel(0, (unsigned int)&pwr->lcd1_configuration); 515 writel(0, (unsigned int)&pwr->lcd1_configuration);
518 writel(0, (unsigned int)&pwr->gps_configuration); 516 writel(0, (unsigned int)&pwr->gps_configuration);
519 writel(0, (unsigned int)&pwr->gps_alive_configuration); 517 writel(0, (unsigned int)&pwr->gps_alive_configuration);
520 518
521 /* It is necessary to power down core 1 */ 519 /* It is necessary to power down core 1 */
522 /* to successfully boot CPU1 in kernel */ 520 /* to successfully boot CPU1 in kernel */
523 writel(0, (unsigned int)&pwr->arm_core1_configuration); 521 writel(0, (unsigned int)&pwr->arm_core1_configuration);
524 } 522 }
525 523
526 static void exynos_uart_init(void) 524 static void exynos_uart_init(void)
527 { 525 {
528 struct exynos4_gpio_part2 *gpio2 = 526 struct exynos4_gpio_part2 *gpio2 =
529 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2(); 527 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
530 528
531 /* UART_SEL GPY4[7] (part2) at EXYNOS4 */ 529 /* UART_SEL GPY4[7] (part2) at EXYNOS4 */
532 s5p_gpio_set_pull(&gpio2->y4, 7, GPIO_PULL_UP); 530 s5p_gpio_set_pull(&gpio2->y4, 7, GPIO_PULL_UP);
533 s5p_gpio_direction_output(&gpio2->y4, 7, 1); 531 s5p_gpio_direction_output(&gpio2->y4, 7, 1);
534 } 532 }
535 533
536 int exynos_early_init_f(void) 534 int exynos_early_init_f(void)
537 { 535 {
538 wdt_stop(); 536 wdt_stop();
539 pmic_reset(); 537 pmic_reset();
540 board_clock_init(); 538 board_clock_init();
541 exynos_uart_init(); 539 exynos_uart_init();
542 board_power_init(); 540 board_power_init();
543 541
544 return 0; 542 return 0;
545 } 543 }
546 544
547 void exynos_reset_lcd(void) 545 void exynos_reset_lcd(void)
548 { 546 {
549 struct exynos4_gpio_part2 *gpio2 = 547 struct exynos4_gpio_part2 *gpio2 =
550 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2(); 548 (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
551 549
552 s5p_gpio_direction_output(&gpio2->y4, 5, 1); 550 s5p_gpio_direction_output(&gpio2->y4, 5, 1);
553 udelay(10000); 551 udelay(10000);
554 s5p_gpio_direction_output(&gpio2->y4, 5, 0); 552 s5p_gpio_direction_output(&gpio2->y4, 5, 0);
555 udelay(10000); 553 udelay(10000);
556 s5p_gpio_direction_output(&gpio2->y4, 5, 1); 554 s5p_gpio_direction_output(&gpio2->y4, 5, 1);
557 } 555 }
558 556
559 int lcd_power(void) 557 int lcd_power(void)
560 { 558 {
561 int ret = 0; 559 int ret = 0;
562 struct pmic *p = pmic_get("MAX8997_PMIC"); 560 struct pmic *p = pmic_get("MAX8997_PMIC");
563 if (!p) 561 if (!p)
564 return -ENODEV; 562 return -ENODEV;
565 563
566 if (pmic_probe(p)) 564 if (pmic_probe(p))
567 return 0; 565 return 0;
568 566
569 /* LDO15 voltage: 2.2v */ 567 /* LDO15 voltage: 2.2v */
570 ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, 0x1c | EN_LDO); 568 ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, 0x1c | EN_LDO);
571 /* LDO13 voltage: 3.0v */ 569 /* LDO13 voltage: 3.0v */
572 ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, 0x2c | EN_LDO); 570 ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, 0x2c | EN_LDO);
573 571
574 if (ret) { 572 if (ret) {
575 puts("MAX8997 LDO setting error!\n"); 573 puts("MAX8997 LDO setting error!\n");
576 return -1; 574 return -1;
577 } 575 }
578 576
579 return 0; 577 return 0;
580 } 578 }
581 579
582 int mipi_power(void) 580 int mipi_power(void)
583 { 581 {
584 int ret = 0; 582 int ret = 0;
585 struct pmic *p = pmic_get("MAX8997_PMIC"); 583 struct pmic *p = pmic_get("MAX8997_PMIC");
586 if (!p) 584 if (!p)
587 return -ENODEV; 585 return -ENODEV;
588 586
589 if (pmic_probe(p)) 587 if (pmic_probe(p))
590 return 0; 588 return 0;
591 589
592 /* LDO3 voltage: 1.1v */ 590 /* LDO3 voltage: 1.1v */
593 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, 0x6 | EN_LDO); 591 ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, 0x6 | EN_LDO);
594 /* LDO4 voltage: 1.8v */ 592 /* LDO4 voltage: 1.8v */
595 ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, 0x14 | EN_LDO); 593 ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, 0x14 | EN_LDO);
596 594
597 if (ret) { 595 if (ret) {
598 puts("MAX8997 LDO setting error!\n"); 596 puts("MAX8997 LDO setting error!\n");
599 return -1; 597 return -1;
600 } 598 }
601 599
602 return 0; 600 return 0;
603 } 601 }
604 602
605 void exynos_lcd_misc_init(vidinfo_t *vid) 603 void exynos_lcd_misc_init(vidinfo_t *vid)
606 { 604 {
607 #ifdef CONFIG_TIZEN 605 #ifdef CONFIG_TIZEN
608 get_tizen_logo_info(vid); 606 get_tizen_logo_info(vid);
609 #endif 607 #endif
610 #ifdef CONFIG_S6E8AX0 608 #ifdef CONFIG_S6E8AX0
611 s6e8ax0_init(); 609 s6e8ax0_init();
612 setenv("lcdinfo", "lcd=s6e8ax0"); 610 setenv("lcdinfo", "lcd=s6e8ax0");
613 #endif 611 #endif
614 } 612 }
615 613
board/samsung/trats2/trats2.c
1 /* 1 /*
2 * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. 2 * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
3 * Sanghee Kim <sh0130.kim@samsung.com> 3 * Sanghee Kim <sh0130.kim@samsung.com>
4 * Piotr Wilczek <p.wilczek@samsung.com> 4 * Piotr Wilczek <p.wilczek@samsung.com>
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #include <common.h> 9 #include <common.h>
10 #include <lcd.h> 10 #include <lcd.h>
11 #include <asm/arch/pinmux.h> 11 #include <asm/arch/pinmux.h>
12 #include <asm/arch/power.h> 12 #include <asm/arch/power.h>
13 #include <asm/arch/mipi_dsim.h> 13 #include <asm/arch/mipi_dsim.h>
14 #include <power/pmic.h> 14 #include <power/pmic.h>
15 #include <power/max77686_pmic.h> 15 #include <power/max77686_pmic.h>
16 #include <power/battery.h> 16 #include <power/battery.h>
17 #include <power/max77693_pmic.h> 17 #include <power/max77693_pmic.h>
18 #include <power/max77693_muic.h> 18 #include <power/max77693_muic.h>
19 #include <power/max77693_fg.h> 19 #include <power/max77693_fg.h>
20 #include <libtizen.h> 20 #include <libtizen.h>
21 #include <errno.h> 21 #include <errno.h>
22 #include <usb.h> 22 #include <usb.h>
23 #include <usb/s3c_udc.h> 23 #include <usb/s3c_udc.h>
24 #include <usb_mass_storage.h> 24 #include <usb_mass_storage.h>
25 25
26 DECLARE_GLOBAL_DATA_PTR; 26 DECLARE_GLOBAL_DATA_PTR;
27 27
28 static struct exynos4x12_gpio_part1 *gpio1; 28 static struct exynos4x12_gpio_part1 *gpio1;
29 static struct exynos4x12_gpio_part2 *gpio2; 29 static struct exynos4x12_gpio_part2 *gpio2;
30 30
31 static unsigned int board_rev = -1; 31 static unsigned int board_rev = -1;
32 32
33 static inline u32 get_model_rev(void); 33 static inline u32 get_model_rev(void);
34 34
35 static void check_hw_revision(void) 35 static void check_hw_revision(void)
36 { 36 {
37 int modelrev = 0; 37 int modelrev = 0;
38 int i; 38 int i;
39 39
40 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2(); 40 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
41 41
42 /* 42 /*
43 * GPM1[1:0]: MODEL_REV[1:0] 43 * GPM1[1:0]: MODEL_REV[1:0]
44 * Don't set as pull-none for these N/C pin. 44 * Don't set as pull-none for these N/C pin.
45 * TRM say that it may cause unexcepted state and leakage current. 45 * TRM say that it may cause unexcepted state and leakage current.
46 * and pull-none is only for output function. 46 * and pull-none is only for output function.
47 */ 47 */
48 for (i = 0; i < 2; i++) 48 for (i = 0; i < 2; i++)
49 s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT); 49 s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT);
50 50
51 /* GPM1[5:2]: HW_REV[3:0] */ 51 /* GPM1[5:2]: HW_REV[3:0] */
52 for (i = 2; i < 6; i++) { 52 for (i = 2; i < 6; i++) {
53 s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT); 53 s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT);
54 s5p_gpio_set_pull(&gpio2->m1, i, GPIO_PULL_NONE); 54 s5p_gpio_set_pull(&gpio2->m1, i, GPIO_PULL_NONE);
55 } 55 }
56 56
57 /* GPM1[1:0]: MODEL_REV[1:0] */ 57 /* GPM1[1:0]: MODEL_REV[1:0] */
58 for (i = 0; i < 2; i++) 58 for (i = 0; i < 2; i++)
59 modelrev |= (s5p_gpio_get_value(&gpio2->m1, i) << i); 59 modelrev |= (s5p_gpio_get_value(&gpio2->m1, i) << i);
60 60
61 /* board_rev[15:8] = model */ 61 /* board_rev[15:8] = model */
62 board_rev = modelrev << 8; 62 board_rev = modelrev << 8;
63 } 63 }
64 64
65 u32 get_board_rev(void) 65 u32 get_board_rev(void)
66 { 66 {
67 return board_rev; 67 return board_rev;
68 } 68 }
69 69
70 static inline u32 get_model_rev(void) 70 static inline u32 get_model_rev(void)
71 { 71 {
72 return (board_rev >> 8) & 0xff; 72 return (board_rev >> 8) & 0xff;
73 } 73 }
74 74
75 static void board_external_gpio_init(void) 75 static void board_external_gpio_init(void)
76 { 76 {
77 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2(); 77 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
78 78
79 /* 79 /*
80 * some pins which in alive block are connected with external pull-up 80 * some pins which in alive block are connected with external pull-up
81 * but it's default setting is pull-down. 81 * but it's default setting is pull-down.
82 * if that pin set as input then that floated 82 * if that pin set as input then that floated
83 */ 83 */
84 84
85 s5p_gpio_set_pull(&gpio2->x0, 2, GPIO_PULL_NONE); /* PS_ALS_INT */ 85 s5p_gpio_set_pull(&gpio2->x0, 2, GPIO_PULL_NONE); /* PS_ALS_INT */
86 s5p_gpio_set_pull(&gpio2->x0, 4, GPIO_PULL_NONE); /* TSP_nINT */ 86 s5p_gpio_set_pull(&gpio2->x0, 4, GPIO_PULL_NONE); /* TSP_nINT */
87 s5p_gpio_set_pull(&gpio2->x0, 7, GPIO_PULL_NONE); /* AP_PMIC_IRQ*/ 87 s5p_gpio_set_pull(&gpio2->x0, 7, GPIO_PULL_NONE); /* AP_PMIC_IRQ*/
88 s5p_gpio_set_pull(&gpio2->x1, 5, GPIO_PULL_NONE); /* IF_PMIC_IRQ*/ 88 s5p_gpio_set_pull(&gpio2->x1, 5, GPIO_PULL_NONE); /* IF_PMIC_IRQ*/
89 s5p_gpio_set_pull(&gpio2->x2, 0, GPIO_PULL_NONE); /* VOL_UP */ 89 s5p_gpio_set_pull(&gpio2->x2, 0, GPIO_PULL_NONE); /* VOL_UP */
90 s5p_gpio_set_pull(&gpio2->x2, 1, GPIO_PULL_NONE); /* VOL_DOWN */ 90 s5p_gpio_set_pull(&gpio2->x2, 1, GPIO_PULL_NONE); /* VOL_DOWN */
91 s5p_gpio_set_pull(&gpio2->x2, 3, GPIO_PULL_NONE); /* FUEL_ALERT */ 91 s5p_gpio_set_pull(&gpio2->x2, 3, GPIO_PULL_NONE); /* FUEL_ALERT */
92 s5p_gpio_set_pull(&gpio2->x2, 4, GPIO_PULL_NONE); /* ADC_INT */ 92 s5p_gpio_set_pull(&gpio2->x2, 4, GPIO_PULL_NONE); /* ADC_INT */
93 s5p_gpio_set_pull(&gpio2->x2, 7, GPIO_PULL_NONE); /* nPOWER */ 93 s5p_gpio_set_pull(&gpio2->x2, 7, GPIO_PULL_NONE); /* nPOWER */
94 s5p_gpio_set_pull(&gpio2->x3, 0, GPIO_PULL_NONE); /* WPC_INT */ 94 s5p_gpio_set_pull(&gpio2->x3, 0, GPIO_PULL_NONE); /* WPC_INT */
95 s5p_gpio_set_pull(&gpio2->x3, 5, GPIO_PULL_NONE); /* OK_KEY */ 95 s5p_gpio_set_pull(&gpio2->x3, 5, GPIO_PULL_NONE); /* OK_KEY */
96 s5p_gpio_set_pull(&gpio2->x3, 7, GPIO_PULL_NONE); /* HDMI_HPD */ 96 s5p_gpio_set_pull(&gpio2->x3, 7, GPIO_PULL_NONE); /* HDMI_HPD */
97 } 97 }
98 98
99 #ifdef CONFIG_SYS_I2C_INIT_BOARD 99 #ifdef CONFIG_SYS_I2C_INIT_BOARD
100 static void board_init_i2c(void) 100 static void board_init_i2c(void)
101 { 101 {
102 int err; 102 int err;
103 103
104 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1(); 104 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
105 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2(); 105 gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
106 106
107 /* I2C_7 */ 107 /* I2C_7 */
108 err = exynos_pinmux_config(PERIPH_ID_I2C7, PINMUX_FLAG_NONE); 108 err = exynos_pinmux_config(PERIPH_ID_I2C7, PINMUX_FLAG_NONE);
109 if (err) { 109 if (err) {
110 debug("I2C%d not configured\n", (I2C_7)); 110 debug("I2C%d not configured\n", (I2C_7));
111 return; 111 return;
112 } 112 }
113 113
114 /* I2C_8 */ 114 /* I2C_8 */
115 s5p_gpio_direction_output(&gpio1->f1, 4, 1); 115 s5p_gpio_direction_output(&gpio1->f1, 4, 1);
116 s5p_gpio_direction_output(&gpio1->f1, 5, 1); 116 s5p_gpio_direction_output(&gpio1->f1, 5, 1);
117 117
118 /* I2C_9 */ 118 /* I2C_9 */
119 s5p_gpio_direction_output(&gpio2->m2, 1, 1); 119 s5p_gpio_direction_output(&gpio2->m2, 1, 1);
120 s5p_gpio_direction_output(&gpio2->m2, 0, 1); 120 s5p_gpio_direction_output(&gpio2->m2, 0, 1);
121 } 121 }
122 #endif 122 #endif
123 123
124 #ifdef CONFIG_SYS_I2C_SOFT 124 #ifdef CONFIG_SYS_I2C_SOFT
125 int get_soft_i2c_scl_pin(void) 125 int get_soft_i2c_scl_pin(void)
126 { 126 {
127 if (I2C_ADAP_HWNR) 127 if (I2C_ADAP_HWNR)
128 return exynos4x12_gpio_get(2, m2, 1); /* I2C9 */ 128 return exynos4x12_gpio_get(2, m2, 1); /* I2C9 */
129 else 129 else
130 return exynos4x12_gpio_get(1, f1, 4); /* I2C8 */ 130 return exynos4x12_gpio_get(1, f1, 4); /* I2C8 */
131 } 131 }
132 132
133 int get_soft_i2c_sda_pin(void) 133 int get_soft_i2c_sda_pin(void)
134 { 134 {
135 if (I2C_ADAP_HWNR) 135 if (I2C_ADAP_HWNR)
136 return exynos4x12_gpio_get(2, m2, 0); /* I2C9 */ 136 return exynos4x12_gpio_get(2, m2, 0); /* I2C9 */
137 else 137 else
138 return exynos4x12_gpio_get(1, f1, 5); /* I2C8 */ 138 return exynos4x12_gpio_get(1, f1, 5); /* I2C8 */
139 } 139 }
140 #endif 140 #endif
141 141
142 int exynos_early_init_f(void) 142 int exynos_early_init_f(void)
143 { 143 {
144 board_external_gpio_init(); 144 board_external_gpio_init();
145 145
146 return 0; 146 return 0;
147 } 147 }
148 148
149 static int pmic_init_max77686(void); 149 static int pmic_init_max77686(void);
150 150
151 int exynos_init(void) 151 int exynos_init(void)
152 { 152 {
153 struct exynos4_power *pwr = 153 struct exynos4_power *pwr =
154 (struct exynos4_power *)samsung_get_base_power(); 154 (struct exynos4_power *)samsung_get_base_power();
155 155
156 check_hw_revision(); 156 check_hw_revision();
157 printf("HW Revision:\t0x%04x\n", board_rev); 157 printf("HW Revision:\t0x%04x\n", board_rev);
158 158
159 /* 159 /*
160 * First bootloader on the TRATS2 platform uses 160 * First bootloader on the TRATS2 platform uses
161 * INFORM4 and INFORM5 registers for recovery 161 * INFORM4 and INFORM5 registers for recovery
162 * 162 *
163 * To indicate correct boot chain - those two 163 * To indicate correct boot chain - those two
164 * registers must be cleared out 164 * registers must be cleared out
165 */ 165 */
166 writel(0, &pwr->inform4); 166 writel(0, &pwr->inform4);
167 writel(0, &pwr->inform5); 167 writel(0, &pwr->inform5);
168 168
169 return 0; 169 return 0;
170 } 170 }
171 171
172 int exynos_power_init(void) 172 int exynos_power_init(void)
173 { 173 {
174 int chrg; 174 int chrg;
175 struct power_battery *pb; 175 struct power_battery *pb;
176 struct pmic *p_chrg, *p_muic, *p_fg, *p_bat; 176 struct pmic *p_chrg, *p_muic, *p_fg, *p_bat;
177 177
178 #ifdef CONFIG_SYS_I2C_INIT_BOARD 178 #ifdef CONFIG_SYS_I2C_INIT_BOARD
179 board_init_i2c(); 179 board_init_i2c();
180 #endif 180 #endif
181 pmic_init(I2C_7); /* I2C adapter 7 - bus name s3c24x0_7 */ 181 pmic_init(I2C_7); /* I2C adapter 7 - bus name s3c24x0_7 */
182 pmic_init_max77686(); 182 pmic_init_max77686();
183 pmic_init_max77693(I2C_10); /* I2C adapter 10 - bus name soft1 */ 183 pmic_init_max77693(I2C_10); /* I2C adapter 10 - bus name soft1 */
184 power_muic_init(I2C_10); /* I2C adapter 10 - bus name soft1 */ 184 power_muic_init(I2C_10); /* I2C adapter 10 - bus name soft1 */
185 power_fg_init(I2C_9); /* I2C adapter 9 - bus name soft0 */ 185 power_fg_init(I2C_9); /* I2C adapter 9 - bus name soft0 */
186 power_bat_init(0); 186 power_bat_init(0);
187 187
188 p_chrg = pmic_get("MAX77693_PMIC"); 188 p_chrg = pmic_get("MAX77693_PMIC");
189 if (!p_chrg) { 189 if (!p_chrg) {
190 puts("MAX77693_PMIC: Not found\n"); 190 puts("MAX77693_PMIC: Not found\n");
191 return -ENODEV; 191 return -ENODEV;
192 } 192 }
193 193
194 p_muic = pmic_get("MAX77693_MUIC"); 194 p_muic = pmic_get("MAX77693_MUIC");
195 if (!p_muic) { 195 if (!p_muic) {
196 puts("MAX77693_MUIC: Not found\n"); 196 puts("MAX77693_MUIC: Not found\n");
197 return -ENODEV; 197 return -ENODEV;
198 } 198 }
199 199
200 p_fg = pmic_get("MAX77693_FG"); 200 p_fg = pmic_get("MAX77693_FG");
201 if (!p_fg) { 201 if (!p_fg) {
202 puts("MAX17042_FG: Not found\n"); 202 puts("MAX17042_FG: Not found\n");
203 return -ENODEV; 203 return -ENODEV;
204 } 204 }
205 205
206 if (p_chrg->chrg->chrg_bat_present(p_chrg) == 0) 206 if (p_chrg->chrg->chrg_bat_present(p_chrg) == 0)
207 puts("No battery detected\n"); 207 puts("No battery detected\n");
208 208
209 p_bat = pmic_get("BAT_TRATS2"); 209 p_bat = pmic_get("BAT_TRATS2");
210 if (!p_bat) { 210 if (!p_bat) {
211 puts("BAT_TRATS2: Not found\n"); 211 puts("BAT_TRATS2: Not found\n");
212 return -ENODEV; 212 return -ENODEV;
213 } 213 }
214 214
215 p_fg->parent = p_bat; 215 p_fg->parent = p_bat;
216 p_chrg->parent = p_bat; 216 p_chrg->parent = p_bat;
217 p_muic->parent = p_bat; 217 p_muic->parent = p_bat;
218 218
219 p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic); 219 p_bat->pbat->battery_init(p_bat, p_fg, p_chrg, p_muic);
220 220
221 pb = p_bat->pbat; 221 pb = p_bat->pbat;
222 chrg = p_muic->chrg->chrg_type(p_muic); 222 chrg = p_muic->chrg->chrg_type(p_muic);
223 debug("CHARGER TYPE: %d\n", chrg); 223 debug("CHARGER TYPE: %d\n", chrg);
224 224
225 if (!p_chrg->chrg->chrg_bat_present(p_chrg)) { 225 if (!p_chrg->chrg->chrg_bat_present(p_chrg)) {
226 puts("No battery detected\n"); 226 puts("No battery detected\n");
227 return -1; 227 return -1;
228 } 228 }
229 229
230 p_fg->fg->fg_battery_check(p_fg, p_bat); 230 p_fg->fg->fg_battery_check(p_fg, p_bat);
231 231
232 if (pb->bat->state == CHARGE && chrg == CHARGER_USB) 232 if (pb->bat->state == CHARGE && chrg == CHARGER_USB)
233 puts("CHARGE Battery !\n"); 233 puts("CHARGE Battery !\n");
234 234
235 return 0; 235 return 0;
236 } 236 }
237 237
238 #ifdef CONFIG_USB_GADGET 238 #ifdef CONFIG_USB_GADGET
239 static int s5pc210_phy_control(int on) 239 static int s5pc210_phy_control(int on)
240 { 240 {
241 int ret = 0; 241 int ret = 0;
242 unsigned int val; 242 unsigned int val;
243 struct pmic *p, *p_pmic, *p_muic; 243 struct pmic *p, *p_pmic, *p_muic;
244 244
245 p_pmic = pmic_get("MAX77686_PMIC"); 245 p_pmic = pmic_get("MAX77686_PMIC");
246 if (!p_pmic) 246 if (!p_pmic)
247 return -ENODEV; 247 return -ENODEV;
248 248
249 if (pmic_probe(p_pmic)) 249 if (pmic_probe(p_pmic))
250 return -1; 250 return -1;
251 251
252 p_muic = pmic_get("MAX77693_MUIC"); 252 p_muic = pmic_get("MAX77693_MUIC");
253 if (!p_muic) 253 if (!p_muic)
254 return -ENODEV; 254 return -ENODEV;
255 255
256 if (pmic_probe(p_muic)) 256 if (pmic_probe(p_muic))
257 return -1; 257 return -1;
258 258
259 if (on) { 259 if (on) {
260 ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON); 260 ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_ON);
261 if (ret) 261 if (ret)
262 return -1; 262 return -1;
263 263
264 p = pmic_get("MAX77693_PMIC"); 264 p = pmic_get("MAX77693_PMIC");
265 if (!p) 265 if (!p)
266 return -ENODEV; 266 return -ENODEV;
267 267
268 if (pmic_probe(p)) 268 if (pmic_probe(p))
269 return -1; 269 return -1;
270 270
271 /* SAFEOUT */ 271 /* SAFEOUT */
272 ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val); 272 ret = pmic_reg_read(p, MAX77693_SAFEOUT, &val);
273 if (ret) 273 if (ret)
274 return -1; 274 return -1;
275 275
276 val |= MAX77693_ENSAFEOUT1; 276 val |= MAX77693_ENSAFEOUT1;
277 ret = pmic_reg_write(p, MAX77693_SAFEOUT, val); 277 ret = pmic_reg_write(p, MAX77693_SAFEOUT, val);
278 if (ret) 278 if (ret)
279 return -1; 279 return -1;
280 280
281 /* PATH: USB */ 281 /* PATH: USB */
282 ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, 282 ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
283 MAX77693_MUIC_CTRL1_DN1DP2); 283 MAX77693_MUIC_CTRL1_DN1DP2);
284 284
285 } else { 285 } else {
286 ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM); 286 ret = max77686_set_ldo_mode(p_pmic, 12, OPMODE_LPM);
287 if (ret) 287 if (ret)
288 return -1; 288 return -1;
289 289
290 /* PATH: UART */ 290 /* PATH: UART */
291 ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1, 291 ret = pmic_reg_write(p_muic, MAX77693_MUIC_CONTROL1,
292 MAX77693_MUIC_CTRL1_UT1UR2); 292 MAX77693_MUIC_CTRL1_UT1UR2);
293 } 293 }
294 294
295 if (ret) 295 if (ret)
296 return -1; 296 return -1;
297 297
298 return 0; 298 return 0;
299 } 299 }
300 300
301 struct s3c_plat_otg_data s5pc210_otg_data = { 301 struct s3c_plat_otg_data s5pc210_otg_data = {
302 .phy_control = s5pc210_phy_control, 302 .phy_control = s5pc210_phy_control,
303 .regs_phy = EXYNOS4X12_USBPHY_BASE, 303 .regs_phy = EXYNOS4X12_USBPHY_BASE,
304 .regs_otg = EXYNOS4X12_USBOTG_BASE, 304 .regs_otg = EXYNOS4X12_USBOTG_BASE,
305 .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL, 305 .usb_phy_ctrl = EXYNOS4X12_USBPHY_CONTROL,
306 .usb_flags = PHY0_SLEEP, 306 .usb_flags = PHY0_SLEEP,
307 }; 307 };
308 308
309 int board_usb_init(int index, enum usb_init_type init) 309 int board_usb_init(int index, enum usb_init_type init)
310 { 310 {
311 debug("USB_udc_probe\n"); 311 debug("USB_udc_probe\n");
312 return s3c_udc_probe(&s5pc210_otg_data); 312 return s3c_udc_probe(&s5pc210_otg_data);
313 } 313 }
314 314
315 #ifdef CONFIG_USB_CABLE_CHECK 315 int g_dnl_board_usb_cable_connected(void)
316 int usb_cable_connected(void)
317 { 316 {
318 struct pmic *muic = pmic_get("MAX77693_MUIC"); 317 struct pmic *muic = pmic_get("MAX77693_MUIC");
319 if (!muic) 318 if (!muic)
320 return 0; 319 return 0;
321 320
322 return !!muic->chrg->chrg_type(muic); 321 return !!muic->chrg->chrg_type(muic);
323 } 322 }
324 #endif
325 #endif 323 #endif
326 324
327 static int pmic_init_max77686(void) 325 static int pmic_init_max77686(void)
328 { 326 {
329 struct pmic *p = pmic_get("MAX77686_PMIC"); 327 struct pmic *p = pmic_get("MAX77686_PMIC");
330 328
331 if (pmic_probe(p)) 329 if (pmic_probe(p))
332 return -1; 330 return -1;
333 331
334 /* BUCK/LDO Output Voltage */ 332 /* BUCK/LDO Output Voltage */
335 max77686_set_ldo_voltage(p, 21, 2800000); /* LDO21 VTF_2.8V */ 333 max77686_set_ldo_voltage(p, 21, 2800000); /* LDO21 VTF_2.8V */
336 max77686_set_ldo_voltage(p, 23, 3300000); /* LDO23 TSP_AVDD_3.3V*/ 334 max77686_set_ldo_voltage(p, 23, 3300000); /* LDO23 TSP_AVDD_3.3V*/
337 max77686_set_ldo_voltage(p, 24, 1800000); /* LDO24 TSP_VDD_1.8V */ 335 max77686_set_ldo_voltage(p, 24, 1800000); /* LDO24 TSP_VDD_1.8V */
338 336
339 /* BUCK/LDO Output Mode */ 337 /* BUCK/LDO Output Mode */
340 max77686_set_buck_mode(p, 1, OPMODE_STANDBY); /* BUCK1 VMIF_1.1V_AP */ 338 max77686_set_buck_mode(p, 1, OPMODE_STANDBY); /* BUCK1 VMIF_1.1V_AP */
341 max77686_set_buck_mode(p, 2, OPMODE_ON); /* BUCK2 VARM_1.0V_AP */ 339 max77686_set_buck_mode(p, 2, OPMODE_ON); /* BUCK2 VARM_1.0V_AP */
342 max77686_set_buck_mode(p, 3, OPMODE_ON); /* BUCK3 VINT_1.0V_AP */ 340 max77686_set_buck_mode(p, 3, OPMODE_ON); /* BUCK3 VINT_1.0V_AP */
343 max77686_set_buck_mode(p, 4, OPMODE_ON); /* BUCK4 VG3D_1.0V_AP */ 341 max77686_set_buck_mode(p, 4, OPMODE_ON); /* BUCK4 VG3D_1.0V_AP */
344 max77686_set_buck_mode(p, 5, OPMODE_ON); /* BUCK5 VMEM_1.2V_AP */ 342 max77686_set_buck_mode(p, 5, OPMODE_ON); /* BUCK5 VMEM_1.2V_AP */
345 max77686_set_buck_mode(p, 6, OPMODE_ON); /* BUCK6 VCC_SUB_1.35V*/ 343 max77686_set_buck_mode(p, 6, OPMODE_ON); /* BUCK6 VCC_SUB_1.35V*/
346 max77686_set_buck_mode(p, 7, OPMODE_ON); /* BUCK7 VCC_SUB_2.0V */ 344 max77686_set_buck_mode(p, 7, OPMODE_ON); /* BUCK7 VCC_SUB_2.0V */
347 max77686_set_buck_mode(p, 8, OPMODE_OFF); /* VMEM_VDDF_2.85V */ 345 max77686_set_buck_mode(p, 8, OPMODE_OFF); /* VMEM_VDDF_2.85V */
348 max77686_set_buck_mode(p, 9, OPMODE_OFF); /* CAM_ISP_CORE_1.2V*/ 346 max77686_set_buck_mode(p, 9, OPMODE_OFF); /* CAM_ISP_CORE_1.2V*/
349 347
350 max77686_set_ldo_mode(p, 1, OPMODE_LPM); /* LDO1 VALIVE_1.0V_AP*/ 348 max77686_set_ldo_mode(p, 1, OPMODE_LPM); /* LDO1 VALIVE_1.0V_AP*/
351 max77686_set_ldo_mode(p, 2, OPMODE_STANDBY); /* LDO2 VM1M2_1.2V_AP */ 349 max77686_set_ldo_mode(p, 2, OPMODE_STANDBY); /* LDO2 VM1M2_1.2V_AP */
352 max77686_set_ldo_mode(p, 3, OPMODE_LPM); /* LDO3 VCC_1.8V_AP */ 350 max77686_set_ldo_mode(p, 3, OPMODE_LPM); /* LDO3 VCC_1.8V_AP */
353 max77686_set_ldo_mode(p, 4, OPMODE_LPM); /* LDO4 VCC_2.8V_AP */ 351 max77686_set_ldo_mode(p, 4, OPMODE_LPM); /* LDO4 VCC_2.8V_AP */
354 max77686_set_ldo_mode(p, 5, OPMODE_OFF); /* LDO5_VCC_1.8V_IO */ 352 max77686_set_ldo_mode(p, 5, OPMODE_OFF); /* LDO5_VCC_1.8V_IO */
355 max77686_set_ldo_mode(p, 6, OPMODE_STANDBY); /* LDO6 VMPLL_1.0V_AP */ 353 max77686_set_ldo_mode(p, 6, OPMODE_STANDBY); /* LDO6 VMPLL_1.0V_AP */
356 max77686_set_ldo_mode(p, 7, OPMODE_STANDBY); /* LDO7 VPLL_1.0V_AP */ 354 max77686_set_ldo_mode(p, 7, OPMODE_STANDBY); /* LDO7 VPLL_1.0V_AP */
357 max77686_set_ldo_mode(p, 8, OPMODE_LPM); /* LDO8 VMIPI_1.0V_AP */ 355 max77686_set_ldo_mode(p, 8, OPMODE_LPM); /* LDO8 VMIPI_1.0V_AP */
358 max77686_set_ldo_mode(p, 9, OPMODE_OFF); /* CAM_ISP_MIPI_1.2*/ 356 max77686_set_ldo_mode(p, 9, OPMODE_OFF); /* CAM_ISP_MIPI_1.2*/
359 max77686_set_ldo_mode(p, 10, OPMODE_LPM); /* LDO10 VMIPI_1.8V_AP*/ 357 max77686_set_ldo_mode(p, 10, OPMODE_LPM); /* LDO10 VMIPI_1.8V_AP*/
360 max77686_set_ldo_mode(p, 11, OPMODE_STANDBY); /* LDO11 VABB1_1.8V_AP*/ 358 max77686_set_ldo_mode(p, 11, OPMODE_STANDBY); /* LDO11 VABB1_1.8V_AP*/
361 max77686_set_ldo_mode(p, 12, OPMODE_LPM); /* LDO12 VUOTG_3.0V_AP*/ 359 max77686_set_ldo_mode(p, 12, OPMODE_LPM); /* LDO12 VUOTG_3.0V_AP*/
362 max77686_set_ldo_mode(p, 13, OPMODE_OFF); /* LDO13 VC2C_1.8V_AP */ 360 max77686_set_ldo_mode(p, 13, OPMODE_OFF); /* LDO13 VC2C_1.8V_AP */
363 max77686_set_ldo_mode(p, 14, OPMODE_STANDBY); /* VABB02_1.8V_AP */ 361 max77686_set_ldo_mode(p, 14, OPMODE_STANDBY); /* VABB02_1.8V_AP */
364 max77686_set_ldo_mode(p, 15, OPMODE_STANDBY); /* LDO15 VHSIC_1.0V_AP*/ 362 max77686_set_ldo_mode(p, 15, OPMODE_STANDBY); /* LDO15 VHSIC_1.0V_AP*/
365 max77686_set_ldo_mode(p, 16, OPMODE_STANDBY); /* LDO16 VHSIC_1.8V_AP*/ 363 max77686_set_ldo_mode(p, 16, OPMODE_STANDBY); /* LDO16 VHSIC_1.8V_AP*/
366 max77686_set_ldo_mode(p, 17, OPMODE_OFF); /* CAM_SENSOR_CORE_1.2*/ 364 max77686_set_ldo_mode(p, 17, OPMODE_OFF); /* CAM_SENSOR_CORE_1.2*/
367 max77686_set_ldo_mode(p, 18, OPMODE_OFF); /* CAM_ISP_SEN_IO_1.8V*/ 365 max77686_set_ldo_mode(p, 18, OPMODE_OFF); /* CAM_ISP_SEN_IO_1.8V*/
368 max77686_set_ldo_mode(p, 19, OPMODE_OFF); /* LDO19 VT_CAM_1.8V */ 366 max77686_set_ldo_mode(p, 19, OPMODE_OFF); /* LDO19 VT_CAM_1.8V */
369 max77686_set_ldo_mode(p, 20, OPMODE_ON); /* LDO20 VDDQ_PRE_1.8V*/ 367 max77686_set_ldo_mode(p, 20, OPMODE_ON); /* LDO20 VDDQ_PRE_1.8V*/
370 max77686_set_ldo_mode(p, 21, OPMODE_OFF); /* LDO21 VTF_2.8V */ 368 max77686_set_ldo_mode(p, 21, OPMODE_OFF); /* LDO21 VTF_2.8V */
371 max77686_set_ldo_mode(p, 22, OPMODE_OFF); /* LDO22 VMEM_VDD_2.8V*/ 369 max77686_set_ldo_mode(p, 22, OPMODE_OFF); /* LDO22 VMEM_VDD_2.8V*/
372 max77686_set_ldo_mode(p, 23, OPMODE_OFF); /* LDO23 TSP_AVDD_3.3V*/ 370 max77686_set_ldo_mode(p, 23, OPMODE_OFF); /* LDO23 TSP_AVDD_3.3V*/
373 max77686_set_ldo_mode(p, 24, OPMODE_OFF); /* LDO24 TSP_VDD_1.8V */ 371 max77686_set_ldo_mode(p, 24, OPMODE_OFF); /* LDO24 TSP_VDD_1.8V */
374 max77686_set_ldo_mode(p, 25, OPMODE_OFF); /* LDO25 VCC_3.3V_LCD */ 372 max77686_set_ldo_mode(p, 25, OPMODE_OFF); /* LDO25 VCC_3.3V_LCD */
375 max77686_set_ldo_mode(p, 26, OPMODE_OFF); /*LDO26 VCC_3.0V_MOTOR*/ 373 max77686_set_ldo_mode(p, 26, OPMODE_OFF); /*LDO26 VCC_3.0V_MOTOR*/
376 374
377 return 0; 375 return 0;
378 } 376 }
379 377
380 /* 378 /*
381 * LCD 379 * LCD
382 */ 380 */
383 381
384 #ifdef CONFIG_LCD 382 #ifdef CONFIG_LCD
385 int mipi_power(void) 383 int mipi_power(void)
386 { 384 {
387 struct pmic *p = pmic_get("MAX77686_PMIC"); 385 struct pmic *p = pmic_get("MAX77686_PMIC");
388 386
389 /* LDO8 VMIPI_1.0V_AP */ 387 /* LDO8 VMIPI_1.0V_AP */
390 max77686_set_ldo_mode(p, 8, OPMODE_ON); 388 max77686_set_ldo_mode(p, 8, OPMODE_ON);
391 /* LDO10 VMIPI_1.8V_AP */ 389 /* LDO10 VMIPI_1.8V_AP */
392 max77686_set_ldo_mode(p, 10, OPMODE_ON); 390 max77686_set_ldo_mode(p, 10, OPMODE_ON);
393 391
394 return 0; 392 return 0;
395 } 393 }
396 394
397 void exynos_lcd_power_on(void) 395 void exynos_lcd_power_on(void)
398 { 396 {
399 struct pmic *p = pmic_get("MAX77686_PMIC"); 397 struct pmic *p = pmic_get("MAX77686_PMIC");
400 398
401 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1(); 399 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
402 400
403 /* LCD_2.2V_EN: GPC0[1] */ 401 /* LCD_2.2V_EN: GPC0[1] */
404 s5p_gpio_set_pull(&gpio1->c0, 1, GPIO_PULL_UP); 402 s5p_gpio_set_pull(&gpio1->c0, 1, GPIO_PULL_UP);
405 s5p_gpio_direction_output(&gpio1->c0, 1, 1); 403 s5p_gpio_direction_output(&gpio1->c0, 1, 1);
406 404
407 /* LDO25 VCC_3.1V_LCD */ 405 /* LDO25 VCC_3.1V_LCD */
408 pmic_probe(p); 406 pmic_probe(p);
409 max77686_set_ldo_voltage(p, 25, 3100000); 407 max77686_set_ldo_voltage(p, 25, 3100000);
410 max77686_set_ldo_mode(p, 25, OPMODE_LPM); 408 max77686_set_ldo_mode(p, 25, OPMODE_LPM);
411 } 409 }
412 410
413 void exynos_reset_lcd(void) 411 void exynos_reset_lcd(void)
414 { 412 {
415 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1(); 413 gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
416 414
417 /* reset lcd */ 415 /* reset lcd */
418 s5p_gpio_direction_output(&gpio1->f2, 1, 0); 416 s5p_gpio_direction_output(&gpio1->f2, 1, 0);
419 udelay(10); 417 udelay(10);
420 s5p_gpio_set_value(&gpio1->f2, 1, 1); 418 s5p_gpio_set_value(&gpio1->f2, 1, 1);
421 } 419 }
422 420
423 void exynos_lcd_misc_init(vidinfo_t *vid) 421 void exynos_lcd_misc_init(vidinfo_t *vid)
424 { 422 {
425 #ifdef CONFIG_TIZEN 423 #ifdef CONFIG_TIZEN
426 get_tizen_logo_info(vid); 424 get_tizen_logo_info(vid);
427 #endif 425 #endif
428 #ifdef CONFIG_S6E8AX0 426 #ifdef CONFIG_S6E8AX0
429 s6e8ax0_init(); 427 s6e8ax0_init();
430 #endif 428 #endif
431 } 429 }
432 #endif /* LCD */ 430 #endif /* LCD */
433 431
board/samsung/universal_c210/universal.c
1 /* 1 /*
2 * Copyright (C) 2010 Samsung Electronics 2 * Copyright (C) 2010 Samsung Electronics
3 * Minkyu Kang <mk7.kang@samsung.com> 3 * Minkyu Kang <mk7.kang@samsung.com>
4 * Kyungmin Park <kyungmin.park@samsung.com> 4 * Kyungmin Park <kyungmin.park@samsung.com>
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #include <common.h> 9 #include <common.h>
10 #include <spi.h> 10 #include <spi.h>
11 #include <lcd.h> 11 #include <lcd.h>
12 #include <asm/io.h> 12 #include <asm/io.h>
13 #include <asm/gpio.h> 13 #include <asm/gpio.h>
14 #include <asm/arch/adc.h> 14 #include <asm/arch/adc.h>
15 #include <asm/arch/gpio.h> 15 #include <asm/arch/gpio.h>
16 #include <asm/arch/pinmux.h> 16 #include <asm/arch/pinmux.h>
17 #include <asm/arch/watchdog.h> 17 #include <asm/arch/watchdog.h>
18 #include <ld9040.h> 18 #include <ld9040.h>
19 #include <power/pmic.h> 19 #include <power/pmic.h>
20 #include <usb.h> 20 #include <usb.h>
21 #include <usb/s3c_udc.h> 21 #include <usb/s3c_udc.h>
22 #include <asm/arch/cpu.h> 22 #include <asm/arch/cpu.h>
23 #include <power/max8998_pmic.h> 23 #include <power/max8998_pmic.h>
24 #include <libtizen.h> 24 #include <libtizen.h>
25 #include <samsung/misc.h> 25 #include <samsung/misc.h>
26 #include <usb_mass_storage.h> 26 #include <usb_mass_storage.h>
27 27
28 DECLARE_GLOBAL_DATA_PTR; 28 DECLARE_GLOBAL_DATA_PTR;
29 29
30 struct exynos4_gpio_part1 *gpio1; 30 struct exynos4_gpio_part1 *gpio1;
31 struct exynos4_gpio_part2 *gpio2; 31 struct exynos4_gpio_part2 *gpio2;
32 unsigned int board_rev; 32 unsigned int board_rev;
33 33
34 u32 get_board_rev(void) 34 u32 get_board_rev(void)
35 { 35 {
36 return board_rev; 36 return board_rev;
37 } 37 }
38 38
39 static int get_hwrev(void) 39 static int get_hwrev(void)
40 { 40 {
41 return board_rev & 0xFF; 41 return board_rev & 0xFF;
42 } 42 }
43 43
44 static void init_pmic_lcd(void); 44 static void init_pmic_lcd(void);
45 45
46 int exynos_power_init(void) 46 int exynos_power_init(void)
47 { 47 {
48 int ret; 48 int ret;
49 49
50 /* 50 /*
51 * For PMIC the I2C bus is named as I2C5, but it is connected 51 * For PMIC the I2C bus is named as I2C5, but it is connected
52 * to logical I2C adapter 0 52 * to logical I2C adapter 0
53 */ 53 */
54 ret = pmic_init(I2C_0); 54 ret = pmic_init(I2C_0);
55 if (ret) 55 if (ret)
56 return ret; 56 return ret;
57 57
58 init_pmic_lcd(); 58 init_pmic_lcd();
59 59
60 return 0; 60 return 0;
61 } 61 }
62 62
63 static unsigned short get_adc_value(int channel) 63 static unsigned short get_adc_value(int channel)
64 { 64 {
65 struct s5p_adc *adc = (struct s5p_adc *)samsung_get_base_adc(); 65 struct s5p_adc *adc = (struct s5p_adc *)samsung_get_base_adc();
66 unsigned short ret = 0; 66 unsigned short ret = 0;
67 unsigned int reg; 67 unsigned int reg;
68 unsigned int loop = 0; 68 unsigned int loop = 0;
69 69
70 writel(channel & 0xF, &adc->adcmux); 70 writel(channel & 0xF, &adc->adcmux);
71 writel((1 << 14) | (49 << 6), &adc->adccon); 71 writel((1 << 14) | (49 << 6), &adc->adccon);
72 writel(1000 & 0xffff, &adc->adcdly); 72 writel(1000 & 0xffff, &adc->adcdly);
73 writel(readl(&adc->adccon) | (1 << 16), &adc->adccon); /* 12 bit */ 73 writel(readl(&adc->adccon) | (1 << 16), &adc->adccon); /* 12 bit */
74 udelay(10); 74 udelay(10);
75 writel(readl(&adc->adccon) | (1 << 0), &adc->adccon); /* Enable */ 75 writel(readl(&adc->adccon) | (1 << 0), &adc->adccon); /* Enable */
76 udelay(10); 76 udelay(10);
77 77
78 do { 78 do {
79 udelay(1); 79 udelay(1);
80 reg = readl(&adc->adccon); 80 reg = readl(&adc->adccon);
81 } while (!(reg & (1 << 15)) && (loop++ < 1000)); 81 } while (!(reg & (1 << 15)) && (loop++ < 1000));
82 82
83 ret = readl(&adc->adcdat0) & 0xFFF; 83 ret = readl(&adc->adcdat0) & 0xFFF;
84 84
85 return ret; 85 return ret;
86 } 86 }
87 87
88 static int adc_power_control(int on) 88 static int adc_power_control(int on)
89 { 89 {
90 int ret; 90 int ret;
91 struct pmic *p = pmic_get("MAX8998_PMIC"); 91 struct pmic *p = pmic_get("MAX8998_PMIC");
92 if (!p) 92 if (!p)
93 return -ENODEV; 93 return -ENODEV;
94 94
95 if (pmic_probe(p)) 95 if (pmic_probe(p))
96 return -1; 96 return -1;
97 97
98 ret = pmic_set_output(p, 98 ret = pmic_set_output(p,
99 MAX8998_REG_ONOFF1, 99 MAX8998_REG_ONOFF1,
100 MAX8998_LDO4, !!on); 100 MAX8998_LDO4, !!on);
101 101
102 return ret; 102 return ret;
103 } 103 }
104 104
105 static unsigned int get_hw_revision(void) 105 static unsigned int get_hw_revision(void)
106 { 106 {
107 int hwrev, mode0, mode1; 107 int hwrev, mode0, mode1;
108 108
109 adc_power_control(1); 109 adc_power_control(1);
110 110
111 mode0 = get_adc_value(1); /* HWREV_MODE0 */ 111 mode0 = get_adc_value(1); /* HWREV_MODE0 */
112 mode1 = get_adc_value(2); /* HWREV_MODE1 */ 112 mode1 = get_adc_value(2); /* HWREV_MODE1 */
113 113
114 /* 114 /*
115 * XXX Always set the default hwrev as the latest board 115 * XXX Always set the default hwrev as the latest board
116 * ADC = (voltage) / 3.3 * 4096 116 * ADC = (voltage) / 3.3 * 4096
117 */ 117 */
118 hwrev = 3; 118 hwrev = 3;
119 119
120 #define IS_RANGE(x, min, max) ((x) > (min) && (x) < (max)) 120 #define IS_RANGE(x, min, max) ((x) > (min) && (x) < (max))
121 if (IS_RANGE(mode0, 80, 200) && IS_RANGE(mode1, 80, 200)) 121 if (IS_RANGE(mode0, 80, 200) && IS_RANGE(mode1, 80, 200))
122 hwrev = 0x0; /* 0.01V 0.01V */ 122 hwrev = 0x0; /* 0.01V 0.01V */
123 if (IS_RANGE(mode0, 750, 1000) && IS_RANGE(mode1, 80, 200)) 123 if (IS_RANGE(mode0, 750, 1000) && IS_RANGE(mode1, 80, 200))
124 hwrev = 0x1; /* 610mV 0.01V */ 124 hwrev = 0x1; /* 610mV 0.01V */
125 if (IS_RANGE(mode0, 1300, 1700) && IS_RANGE(mode1, 80, 200)) 125 if (IS_RANGE(mode0, 1300, 1700) && IS_RANGE(mode1, 80, 200))
126 hwrev = 0x2; /* 1.16V 0.01V */ 126 hwrev = 0x2; /* 1.16V 0.01V */
127 if (IS_RANGE(mode0, 2000, 2400) && IS_RANGE(mode1, 80, 200)) 127 if (IS_RANGE(mode0, 2000, 2400) && IS_RANGE(mode1, 80, 200))
128 hwrev = 0x3; /* 1.79V 0.01V */ 128 hwrev = 0x3; /* 1.79V 0.01V */
129 #undef IS_RANGE 129 #undef IS_RANGE
130 130
131 debug("mode0: %d, mode1: %d, hwrev 0x%x\n", mode0, mode1, hwrev); 131 debug("mode0: %d, mode1: %d, hwrev 0x%x\n", mode0, mode1, hwrev);
132 132
133 adc_power_control(0); 133 adc_power_control(0);
134 134
135 return hwrev; 135 return hwrev;
136 } 136 }
137 137
138 static void check_hw_revision(void) 138 static void check_hw_revision(void)
139 { 139 {
140 int hwrev; 140 int hwrev;
141 141
142 hwrev = get_hw_revision(); 142 hwrev = get_hw_revision();
143 143
144 board_rev |= hwrev; 144 board_rev |= hwrev;
145 } 145 }
146 146
147 #ifdef CONFIG_USB_GADGET 147 #ifdef CONFIG_USB_GADGET
148 static int s5pc210_phy_control(int on) 148 static int s5pc210_phy_control(int on)
149 { 149 {
150 int ret = 0; 150 int ret = 0;
151 struct pmic *p = pmic_get("MAX8998_PMIC"); 151 struct pmic *p = pmic_get("MAX8998_PMIC");
152 if (!p) 152 if (!p)
153 return -ENODEV; 153 return -ENODEV;
154 154
155 if (pmic_probe(p)) 155 if (pmic_probe(p))
156 return -1; 156 return -1;
157 157
158 if (on) { 158 if (on) {
159 ret |= pmic_set_output(p, 159 ret |= pmic_set_output(p,
160 MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, 160 MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
161 MAX8998_SAFEOUT1, LDO_ON); 161 MAX8998_SAFEOUT1, LDO_ON);
162 ret |= pmic_set_output(p, MAX8998_REG_ONOFF1, 162 ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
163 MAX8998_LDO3, LDO_ON); 163 MAX8998_LDO3, LDO_ON);
164 ret |= pmic_set_output(p, MAX8998_REG_ONOFF2, 164 ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
165 MAX8998_LDO8, LDO_ON); 165 MAX8998_LDO8, LDO_ON);
166 166
167 } else { 167 } else {
168 ret |= pmic_set_output(p, MAX8998_REG_ONOFF2, 168 ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
169 MAX8998_LDO8, LDO_OFF); 169 MAX8998_LDO8, LDO_OFF);
170 ret |= pmic_set_output(p, MAX8998_REG_ONOFF1, 170 ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
171 MAX8998_LDO3, LDO_OFF); 171 MAX8998_LDO3, LDO_OFF);
172 ret |= pmic_set_output(p, 172 ret |= pmic_set_output(p,
173 MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, 173 MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
174 MAX8998_SAFEOUT1, LDO_OFF); 174 MAX8998_SAFEOUT1, LDO_OFF);
175 } 175 }
176 176
177 if (ret) { 177 if (ret) {
178 puts("MAX8998 LDO setting error!\n"); 178 puts("MAX8998 LDO setting error!\n");
179 return -1; 179 return -1;
180 } 180 }
181 181
182 return 0; 182 return 0;
183 } 183 }
184 184
185 struct s3c_plat_otg_data s5pc210_otg_data = { 185 struct s3c_plat_otg_data s5pc210_otg_data = {
186 .phy_control = s5pc210_phy_control, 186 .phy_control = s5pc210_phy_control,
187 .regs_phy = EXYNOS4_USBPHY_BASE, 187 .regs_phy = EXYNOS4_USBPHY_BASE,
188 .regs_otg = EXYNOS4_USBOTG_BASE, 188 .regs_otg = EXYNOS4_USBOTG_BASE,
189 .usb_phy_ctrl = EXYNOS4_USBPHY_CONTROL, 189 .usb_phy_ctrl = EXYNOS4_USBPHY_CONTROL,
190 .usb_flags = PHY0_SLEEP, 190 .usb_flags = PHY0_SLEEP,
191 }; 191 };
192 #endif 192 #endif
193 193
194 int board_usb_init(int index, enum usb_init_type init) 194 int board_usb_init(int index, enum usb_init_type init)
195 { 195 {
196 debug("USB_udc_probe\n"); 196 debug("USB_udc_probe\n");
197 return s3c_udc_probe(&s5pc210_otg_data); 197 return s3c_udc_probe(&s5pc210_otg_data);
198 } 198 }
199 199
200 #ifdef CONFIG_USB_CABLE_CHECK
201 int usb_cable_connected(void)
202 {
203 return 0;
204 }
205 #endif
206
207 int exynos_early_init_f(void) 200 int exynos_early_init_f(void)
208 { 201 {
209 wdt_stop(); 202 wdt_stop();
210 203
211 return 0; 204 return 0;
212 } 205 }
213 206
214 #ifdef CONFIG_SOFT_SPI 207 #ifdef CONFIG_SOFT_SPI
215 static void soft_spi_init(void) 208 static void soft_spi_init(void)
216 { 209 {
217 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_SCLK, 210 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_SCLK,
218 CONFIG_SOFT_SPI_MODE & SPI_CPOL); 211 CONFIG_SOFT_SPI_MODE & SPI_CPOL);
219 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_MOSI, 1); 212 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_MOSI, 1);
220 gpio_direction_input(CONFIG_SOFT_SPI_GPIO_MISO); 213 gpio_direction_input(CONFIG_SOFT_SPI_GPIO_MISO);
221 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_CS, 214 gpio_direction_output(CONFIG_SOFT_SPI_GPIO_CS,
222 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH)); 215 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
223 } 216 }
224 217
225 void spi_cs_activate(struct spi_slave *slave) 218 void spi_cs_activate(struct spi_slave *slave)
226 { 219 {
227 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS, 220 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
228 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH)); 221 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
229 SPI_SCL(1); 222 SPI_SCL(1);
230 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS, 223 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
231 CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH); 224 CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH);
232 } 225 }
233 226
234 void spi_cs_deactivate(struct spi_slave *slave) 227 void spi_cs_deactivate(struct spi_slave *slave)
235 { 228 {
236 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS, 229 gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
237 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH)); 230 !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
238 } 231 }
239 232
240 int spi_cs_is_valid(unsigned int bus, unsigned int cs) 233 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
241 { 234 {
242 return bus == 0 && cs == 0; 235 return bus == 0 && cs == 0;
243 } 236 }
244 237
245 void universal_spi_scl(int bit) 238 void universal_spi_scl(int bit)
246 { 239 {
247 gpio_set_value(CONFIG_SOFT_SPI_GPIO_SCLK, bit); 240 gpio_set_value(CONFIG_SOFT_SPI_GPIO_SCLK, bit);
248 } 241 }
249 242
250 void universal_spi_sda(int bit) 243 void universal_spi_sda(int bit)
251 { 244 {
252 gpio_set_value(CONFIG_SOFT_SPI_GPIO_MOSI, bit); 245 gpio_set_value(CONFIG_SOFT_SPI_GPIO_MOSI, bit);
253 } 246 }
254 247
255 int universal_spi_read(void) 248 int universal_spi_read(void)
256 { 249 {
257 return gpio_get_value(CONFIG_SOFT_SPI_GPIO_MISO); 250 return gpio_get_value(CONFIG_SOFT_SPI_GPIO_MISO);
258 } 251 }
259 #endif 252 #endif
260 253
261 static void init_pmic_lcd(void) 254 static void init_pmic_lcd(void)
262 { 255 {
263 unsigned char val; 256 unsigned char val;
264 int ret = 0; 257 int ret = 0;
265 258
266 struct pmic *p = pmic_get("MAX8998_PMIC"); 259 struct pmic *p = pmic_get("MAX8998_PMIC");
267 260
268 if (!p) 261 if (!p)
269 return; 262 return;
270 263
271 if (pmic_probe(p)) 264 if (pmic_probe(p))
272 return; 265 return;
273 266
274 /* LDO7 1.8V */ 267 /* LDO7 1.8V */
275 val = 0x02; /* (1800 - 1600) / 100; */ 268 val = 0x02; /* (1800 - 1600) / 100; */
276 ret |= pmic_reg_write(p, MAX8998_REG_LDO7, val); 269 ret |= pmic_reg_write(p, MAX8998_REG_LDO7, val);
277 270
278 /* LDO17 3.0V */ 271 /* LDO17 3.0V */
279 val = 0xe; /* (3000 - 1600) / 100; */ 272 val = 0xe; /* (3000 - 1600) / 100; */
280 ret |= pmic_reg_write(p, MAX8998_REG_LDO17, val); 273 ret |= pmic_reg_write(p, MAX8998_REG_LDO17, val);
281 274
282 /* Disable unneeded regulators */ 275 /* Disable unneeded regulators */
283 /* 276 /*
284 * ONOFF1 277 * ONOFF1
285 * Buck1 ON, Buck2 OFF, Buck3 ON, Buck4 ON 278 * Buck1 ON, Buck2 OFF, Buck3 ON, Buck4 ON
286 * LDO2 ON, LDO3 OFF, LDO4 OFF, LDO5 ON 279 * LDO2 ON, LDO3 OFF, LDO4 OFF, LDO5 ON
287 */ 280 */
288 val = 0xB9; 281 val = 0xB9;
289 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF1, val); 282 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF1, val);
290 283
291 /* ONOFF2 284 /* ONOFF2
292 * LDO6 OFF, LDO7 ON, LDO8 OFF, LDO9 ON, 285 * LDO6 OFF, LDO7 ON, LDO8 OFF, LDO9 ON,
293 * LDO10 OFF, LDO11 OFF, LDO12 OFF, LDO13 OFF 286 * LDO10 OFF, LDO11 OFF, LDO12 OFF, LDO13 OFF
294 */ 287 */
295 val = 0x50; 288 val = 0x50;
296 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF2, val); 289 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF2, val);
297 290
298 /* ONOFF3 291 /* ONOFF3
299 * LDO14 OFF, LDO15 OFF, LGO16 OFF, LDO17 OFF 292 * LDO14 OFF, LDO15 OFF, LGO16 OFF, LDO17 OFF
300 * EPWRHOLD OFF, EBATTMON OFF, ELBCNFG2 OFF, ELBCNFG1 OFF 293 * EPWRHOLD OFF, EBATTMON OFF, ELBCNFG2 OFF, ELBCNFG1 OFF
301 */ 294 */
302 val = 0x00; 295 val = 0x00;
303 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF3, val); 296 ret |= pmic_reg_write(p, MAX8998_REG_ONOFF3, val);
304 297
305 if (ret) 298 if (ret)
306 puts("LCD pmic initialisation error!\n"); 299 puts("LCD pmic initialisation error!\n");
307 } 300 }
308 301
309 void exynos_cfg_lcd_gpio(void) 302 void exynos_cfg_lcd_gpio(void)
310 { 303 {
311 unsigned int i, f3_end = 4; 304 unsigned int i, f3_end = 4;
312 305
313 for (i = 0; i < 8; i++) { 306 for (i = 0; i < 8; i++) {
314 /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */ 307 /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */
315 s5p_gpio_cfg_pin(&gpio1->f0, i, GPIO_FUNC(2)); 308 s5p_gpio_cfg_pin(&gpio1->f0, i, GPIO_FUNC(2));
316 s5p_gpio_cfg_pin(&gpio1->f1, i, GPIO_FUNC(2)); 309 s5p_gpio_cfg_pin(&gpio1->f1, i, GPIO_FUNC(2));
317 s5p_gpio_cfg_pin(&gpio1->f2, i, GPIO_FUNC(2)); 310 s5p_gpio_cfg_pin(&gpio1->f2, i, GPIO_FUNC(2));
318 /* pull-up/down disable */ 311 /* pull-up/down disable */
319 s5p_gpio_set_pull(&gpio1->f0, i, GPIO_PULL_NONE); 312 s5p_gpio_set_pull(&gpio1->f0, i, GPIO_PULL_NONE);
320 s5p_gpio_set_pull(&gpio1->f1, i, GPIO_PULL_NONE); 313 s5p_gpio_set_pull(&gpio1->f1, i, GPIO_PULL_NONE);
321 s5p_gpio_set_pull(&gpio1->f2, i, GPIO_PULL_NONE); 314 s5p_gpio_set_pull(&gpio1->f2, i, GPIO_PULL_NONE);
322 315
323 /* drive strength to max (24bit) */ 316 /* drive strength to max (24bit) */
324 s5p_gpio_set_drv(&gpio1->f0, i, GPIO_DRV_4X); 317 s5p_gpio_set_drv(&gpio1->f0, i, GPIO_DRV_4X);
325 s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW); 318 s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
326 s5p_gpio_set_drv(&gpio1->f1, i, GPIO_DRV_4X); 319 s5p_gpio_set_drv(&gpio1->f1, i, GPIO_DRV_4X);
327 s5p_gpio_set_rate(&gpio1->f1, i, GPIO_DRV_SLOW); 320 s5p_gpio_set_rate(&gpio1->f1, i, GPIO_DRV_SLOW);
328 s5p_gpio_set_drv(&gpio1->f2, i, GPIO_DRV_4X); 321 s5p_gpio_set_drv(&gpio1->f2, i, GPIO_DRV_4X);
329 s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW); 322 s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
330 } 323 }
331 324
332 for (i = 0; i < f3_end; i++) { 325 for (i = 0; i < f3_end; i++) {
333 /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */ 326 /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */
334 s5p_gpio_cfg_pin(&gpio1->f3, i, GPIO_FUNC(2)); 327 s5p_gpio_cfg_pin(&gpio1->f3, i, GPIO_FUNC(2));
335 /* pull-up/down disable */ 328 /* pull-up/down disable */
336 s5p_gpio_set_pull(&gpio1->f3, i, GPIO_PULL_NONE); 329 s5p_gpio_set_pull(&gpio1->f3, i, GPIO_PULL_NONE);
337 /* drive strength to max (24bit) */ 330 /* drive strength to max (24bit) */
338 s5p_gpio_set_drv(&gpio1->f3, i, GPIO_DRV_4X); 331 s5p_gpio_set_drv(&gpio1->f3, i, GPIO_DRV_4X);
339 s5p_gpio_set_rate(&gpio1->f3, i, GPIO_DRV_SLOW); 332 s5p_gpio_set_rate(&gpio1->f3, i, GPIO_DRV_SLOW);
340 } 333 }
341 334
342 /* gpio pad configuration for LCD reset. */ 335 /* gpio pad configuration for LCD reset. */
343 s5p_gpio_cfg_pin(&gpio2->y4, 5, GPIO_OUTPUT); 336 s5p_gpio_cfg_pin(&gpio2->y4, 5, GPIO_OUTPUT);
344 337
345 spi_init(); 338 spi_init();
346 } 339 }
347 340
348 int mipi_power(void) 341 int mipi_power(void)
349 { 342 {
350 return 0; 343 return 0;
351 } 344 }
352 345
353 void exynos_reset_lcd(void) 346 void exynos_reset_lcd(void)
354 { 347 {
355 s5p_gpio_set_value(&gpio2->y4, 5, 1); 348 s5p_gpio_set_value(&gpio2->y4, 5, 1);
356 udelay(10000); 349 udelay(10000);
357 s5p_gpio_set_value(&gpio2->y4, 5, 0); 350 s5p_gpio_set_value(&gpio2->y4, 5, 0);
358 udelay(10000); 351 udelay(10000);
359 s5p_gpio_set_value(&gpio2->y4, 5, 1); 352 s5p_gpio_set_value(&gpio2->y4, 5, 1);
360 udelay(100); 353 udelay(100);
361 } 354 }
362 355
363 void exynos_lcd_power_on(void) 356 void exynos_lcd_power_on(void)
364 { 357 {
365 struct pmic *p = pmic_get("MAX8998_PMIC"); 358 struct pmic *p = pmic_get("MAX8998_PMIC");
366 359
367 if (!p) 360 if (!p)
368 return; 361 return;
369 362
370 if (pmic_probe(p)) 363 if (pmic_probe(p))
371 return; 364 return;
372 365
373 pmic_set_output(p, MAX8998_REG_ONOFF3, MAX8998_LDO17, LDO_ON); 366 pmic_set_output(p, MAX8998_REG_ONOFF3, MAX8998_LDO17, LDO_ON);
374 pmic_set_output(p, MAX8998_REG_ONOFF2, MAX8998_LDO7, LDO_ON); 367 pmic_set_output(p, MAX8998_REG_ONOFF2, MAX8998_LDO7, LDO_ON);
375 } 368 }
376 369
377 void exynos_cfg_ldo(void) 370 void exynos_cfg_ldo(void)
378 { 371 {
379 ld9040_cfg_ldo(); 372 ld9040_cfg_ldo();
380 } 373 }
381 374
382 void exynos_enable_ldo(unsigned int onoff) 375 void exynos_enable_ldo(unsigned int onoff)
383 { 376 {
384 ld9040_enable_ldo(onoff); 377 ld9040_enable_ldo(onoff);
385 } 378 }
386 379
387 int exynos_init(void) 380 int exynos_init(void)
388 { 381 {
389 gpio1 = (struct exynos4_gpio_part1 *) EXYNOS4_GPIO_PART1_BASE; 382 gpio1 = (struct exynos4_gpio_part1 *) EXYNOS4_GPIO_PART1_BASE;
390 gpio2 = (struct exynos4_gpio_part2 *) EXYNOS4_GPIO_PART2_BASE; 383 gpio2 = (struct exynos4_gpio_part2 *) EXYNOS4_GPIO_PART2_BASE;
391 384
392 gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210; 385 gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
393 386
394 switch (get_hwrev()) { 387 switch (get_hwrev()) {
395 case 0: 388 case 0:
396 /* 389 /*
397 * Set the low to enable LDO_EN 390 * Set the low to enable LDO_EN
398 * But when you use the test board for eMMC booting 391 * But when you use the test board for eMMC booting
399 * you should set it HIGH since it removes the inverter 392 * you should set it HIGH since it removes the inverter
400 */ 393 */
401 /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */ 394 /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */
402 s5p_gpio_direction_output(&gpio1->e3, 6, 0); 395 s5p_gpio_direction_output(&gpio1->e3, 6, 0);
403 break; 396 break;
404 default: 397 default:
405 /* 398 /*
406 * Default reset state is High and there's no inverter 399 * Default reset state is High and there's no inverter
407 * But set it as HIGH to ensure 400 * But set it as HIGH to ensure
408 */ 401 */
409 /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */ 402 /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */
410 s5p_gpio_direction_output(&gpio1->e1, 3, 1); 403 s5p_gpio_direction_output(&gpio1->e1, 3, 1);
411 break; 404 break;
412 } 405 }
413 406
414 #ifdef CONFIG_SOFT_SPI 407 #ifdef CONFIG_SOFT_SPI
415 soft_spi_init(); 408 soft_spi_init();
416 #endif 409 #endif
417 check_hw_revision(); 410 check_hw_revision();
418 printf("HW Revision:\t0x%x\n", board_rev); 411 printf("HW Revision:\t0x%x\n", board_rev);
419 412
420 return 0; 413 return 0;
421 } 414 }
422 415
423 void exynos_lcd_misc_init(vidinfo_t *vid) 416 void exynos_lcd_misc_init(vidinfo_t *vid)
424 { 417 {
425 #ifdef CONFIG_TIZEN 418 #ifdef CONFIG_TIZEN
426 get_tizen_logo_info(vid); 419 get_tizen_logo_info(vid);
427 #endif 420 #endif
428 421
429 /* for LD9040. */ 422 /* for LD9040. */
430 vid->pclk_name = 1; /* MPLL */ 423 vid->pclk_name = 1; /* MPLL */
431 vid->sclk_div = 1; 424 vid->sclk_div = 1;
432 425
433 setenv("lcdinfo", "lcd=ld9040"); 426 setenv("lcdinfo", "lcd=ld9040");
434 } 427 }
435 428
common/cmd_usb_mass_storage.c
1 /* 1 /*
2 * Copyright (C) 2011 Samsung Electronics 2 * Copyright (C) 2011 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com> 3 * Lukasz Majewski <l.majewski@samsung.com>
4 * 4 *
5 * SPDX-License-Identifier: GPL-2.0+ 5 * SPDX-License-Identifier: GPL-2.0+
6 */ 6 */
7 7
8 #include <errno.h> 8 #include <errno.h>
9 #include <common.h> 9 #include <common.h>
10 #include <command.h> 10 #include <command.h>
11 #include <g_dnl.h> 11 #include <g_dnl.h>
12 #include <usb.h> 12 #include <usb.h>
13 #include <usb_mass_storage.h> 13 #include <usb_mass_storage.h>
14 14
15 int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, 15 int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
16 int argc, char * const argv[]) 16 int argc, char * const argv[])
17 { 17 {
18 if (argc < 3) 18 if (argc < 3)
19 return CMD_RET_USAGE; 19 return CMD_RET_USAGE;
20 20
21 const char *usb_controller = argv[1]; 21 const char *usb_controller = argv[1];
22 const char *mmc_devstring = argv[2]; 22 const char *mmc_devstring = argv[2];
23 23
24 unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0); 24 unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0);
25 25
26 struct ums *ums = ums_init(dev_num); 26 struct ums *ums = ums_init(dev_num);
27 if (!ums) 27 if (!ums)
28 return CMD_RET_FAILURE; 28 return CMD_RET_FAILURE;
29 29
30 unsigned int controller_index = (unsigned int)(simple_strtoul( 30 unsigned int controller_index = (unsigned int)(simple_strtoul(
31 usb_controller, NULL, 0)); 31 usb_controller, NULL, 0));
32 if (board_usb_init(controller_index, USB_INIT_DEVICE)) { 32 if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
33 error("Couldn't init USB controller."); 33 error("Couldn't init USB controller.");
34 return CMD_RET_FAILURE; 34 return CMD_RET_FAILURE;
35 } 35 }
36 36
37 int rc = fsg_init(ums); 37 int rc = fsg_init(ums);
38 if (rc) { 38 if (rc) {
39 error("fsg_init failed"); 39 error("fsg_init failed");
40 return CMD_RET_FAILURE; 40 return CMD_RET_FAILURE;
41 } 41 }
42 42
43 g_dnl_register("ums"); 43 g_dnl_register("ums");
44 44
45 /* Timeout unit: seconds */ 45 /* Timeout unit: seconds */
46 int cable_ready_timeout = UMS_CABLE_READY_TIMEOUT; 46 int cable_ready_timeout = UMS_CABLE_READY_TIMEOUT;
47 47
48 if (!usb_cable_connected()) { 48 if (!g_dnl_board_usb_cable_connected()) {
49 /*
50 * Won't execute if we don't know whether the cable is
51 * connected.
52 */
49 puts("Please connect USB cable.\n"); 53 puts("Please connect USB cable.\n");
50 54
51 while (!usb_cable_connected()) { 55 while (!g_dnl_board_usb_cable_connected()) {
52 if (ctrlc()) { 56 if (ctrlc()) {
53 puts("\rCTRL+C - Operation aborted.\n"); 57 puts("\rCTRL+C - Operation aborted.\n");
54 goto exit; 58 goto exit;
55 } 59 }
56 if (!cable_ready_timeout) { 60 if (!cable_ready_timeout) {
57 puts("\rUSB cable not detected.\n" \ 61 puts("\rUSB cable not detected.\n" \
58 "Command exit.\n"); 62 "Command exit.\n");
59 goto exit; 63 goto exit;
60 } 64 }
61 65
62 printf("\rAuto exit in: %.2d s.", cable_ready_timeout); 66 printf("\rAuto exit in: %.2d s.", cable_ready_timeout);
63 mdelay(1000); 67 mdelay(1000);
64 cable_ready_timeout--; 68 cable_ready_timeout--;
65 } 69 }
66 puts("\r\n"); 70 puts("\r\n");
67 } 71 }
68 72
69 while (1) { 73 while (1) {
70 usb_gadget_handle_interrupts(); 74 usb_gadget_handle_interrupts();
71 75
72 rc = fsg_main_thread(NULL); 76 rc = fsg_main_thread(NULL);
73 if (rc) { 77 if (rc) {
74 /* Check I/O error */ 78 /* Check I/O error */
75 if (rc == -EIO) 79 if (rc == -EIO)
76 printf("\rCheck USB cable connection\n"); 80 printf("\rCheck USB cable connection\n");
77 81
78 /* Check CTRL+C */ 82 /* Check CTRL+C */
79 if (rc == -EPIPE) 83 if (rc == -EPIPE)
80 printf("\rCTRL+C - Operation aborted\n"); 84 printf("\rCTRL+C - Operation aborted\n");
81 85
82 goto exit; 86 goto exit;
83 } 87 }
84 } 88 }
85 exit: 89 exit:
86 g_dnl_unregister(); 90 g_dnl_unregister();
87 return CMD_RET_SUCCESS; 91 return CMD_RET_SUCCESS;
88 } 92 }
89 93
90 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage, 94 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
91 "Use the UMS [User Mass Storage]", 95 "Use the UMS [User Mass Storage]",
92 "ums <USB_controller> <mmc_dev> e.g. ums 0 0" 96 "ums <USB_controller> <mmc_dev> e.g. ums 0 0"
93 ); 97 );
94 98
drivers/usb/gadget/f_mass_storage.c
1 /* 1 /*
2 * f_mass_storage.c -- Mass Storage USB Composite Function 2 * f_mass_storage.c -- Mass Storage USB Composite Function
3 * 3 *
4 * Copyright (C) 2003-2008 Alan Stern 4 * Copyright (C) 2003-2008 Alan Stern
5 * Copyright (C) 2009 Samsung Electronics 5 * Copyright (C) 2009 Samsung Electronics
6 * Author: Michal Nazarewicz <m.nazarewicz@samsung.com> 6 * Author: Michal Nazarewicz <m.nazarewicz@samsung.com>
7 * All rights reserved. 7 * All rights reserved.
8 * 8 *
9 * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause 9 * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause
10 */ 10 */
11 11
12 /* 12 /*
13 * The Mass Storage Function acts as a USB Mass Storage device, 13 * The Mass Storage Function acts as a USB Mass Storage device,
14 * appearing to the host as a disk drive or as a CD-ROM drive. In 14 * appearing to the host as a disk drive or as a CD-ROM drive. In
15 * addition to providing an example of a genuinely useful composite 15 * addition to providing an example of a genuinely useful composite
16 * function for a USB device, it also illustrates a technique of 16 * function for a USB device, it also illustrates a technique of
17 * double-buffering for increased throughput. 17 * double-buffering for increased throughput.
18 * 18 *
19 * Function supports multiple logical units (LUNs). Backing storage 19 * Function supports multiple logical units (LUNs). Backing storage
20 * for each LUN is provided by a regular file or a block device. 20 * for each LUN is provided by a regular file or a block device.
21 * Access for each LUN can be limited to read-only. Moreover, the 21 * Access for each LUN can be limited to read-only. Moreover, the
22 * function can indicate that LUN is removable and/or CD-ROM. (The 22 * function can indicate that LUN is removable and/or CD-ROM. (The
23 * later implies read-only access.) 23 * later implies read-only access.)
24 * 24 *
25 * MSF is configured by specifying a fsg_config structure. It has the 25 * MSF is configured by specifying a fsg_config structure. It has the
26 * following fields: 26 * following fields:
27 * 27 *
28 * nluns Number of LUNs function have (anywhere from 1 28 * nluns Number of LUNs function have (anywhere from 1
29 * to FSG_MAX_LUNS which is 8). 29 * to FSG_MAX_LUNS which is 8).
30 * luns An array of LUN configuration values. This 30 * luns An array of LUN configuration values. This
31 * should be filled for each LUN that 31 * should be filled for each LUN that
32 * function will include (ie. for "nluns" 32 * function will include (ie. for "nluns"
33 * LUNs). Each element of the array has 33 * LUNs). Each element of the array has
34 * the following fields: 34 * the following fields:
35 * ->filename The path to the backing file for the LUN. 35 * ->filename The path to the backing file for the LUN.
36 * Required if LUN is not marked as 36 * Required if LUN is not marked as
37 * removable. 37 * removable.
38 * ->ro Flag specifying access to the LUN shall be 38 * ->ro Flag specifying access to the LUN shall be
39 * read-only. This is implied if CD-ROM 39 * read-only. This is implied if CD-ROM
40 * emulation is enabled as well as when 40 * emulation is enabled as well as when
41 * it was impossible to open "filename" 41 * it was impossible to open "filename"
42 * in R/W mode. 42 * in R/W mode.
43 * ->removable Flag specifying that LUN shall be indicated as 43 * ->removable Flag specifying that LUN shall be indicated as
44 * being removable. 44 * being removable.
45 * ->cdrom Flag specifying that LUN shall be reported as 45 * ->cdrom Flag specifying that LUN shall be reported as
46 * being a CD-ROM. 46 * being a CD-ROM.
47 * 47 *
48 * lun_name_format A printf-like format for names of the LUN 48 * lun_name_format A printf-like format for names of the LUN
49 * devices. This determines how the 49 * devices. This determines how the
50 * directory in sysfs will be named. 50 * directory in sysfs will be named.
51 * Unless you are using several MSFs in 51 * Unless you are using several MSFs in
52 * a single gadget (as opposed to single 52 * a single gadget (as opposed to single
53 * MSF in many configurations) you may 53 * MSF in many configurations) you may
54 * leave it as NULL (in which case 54 * leave it as NULL (in which case
55 * "lun%d" will be used). In the format 55 * "lun%d" will be used). In the format
56 * you can use "%d" to index LUNs for 56 * you can use "%d" to index LUNs for
57 * MSF's with more than one LUN. (Beware 57 * MSF's with more than one LUN. (Beware
58 * that there is only one integer given 58 * that there is only one integer given
59 * as an argument for the format and 59 * as an argument for the format and
60 * specifying invalid format may cause 60 * specifying invalid format may cause
61 * unspecified behaviour.) 61 * unspecified behaviour.)
62 * thread_name Name of the kernel thread process used by the 62 * thread_name Name of the kernel thread process used by the
63 * MSF. You can safely set it to NULL 63 * MSF. You can safely set it to NULL
64 * (in which case default "file-storage" 64 * (in which case default "file-storage"
65 * will be used). 65 * will be used).
66 * 66 *
67 * vendor_name 67 * vendor_name
68 * product_name 68 * product_name
69 * release Information used as a reply to INQUIRY 69 * release Information used as a reply to INQUIRY
70 * request. To use default set to NULL, 70 * request. To use default set to NULL,
71 * NULL, 0xffff respectively. The first 71 * NULL, 0xffff respectively. The first
72 * field should be 8 and the second 16 72 * field should be 8 and the second 16
73 * characters or less. 73 * characters or less.
74 * 74 *
75 * can_stall Set to permit function to halt bulk endpoints. 75 * can_stall Set to permit function to halt bulk endpoints.
76 * Disabled on some USB devices known not 76 * Disabled on some USB devices known not
77 * to work correctly. You should set it 77 * to work correctly. You should set it
78 * to true. 78 * to true.
79 * 79 *
80 * If "removable" is not set for a LUN then a backing file must be 80 * If "removable" is not set for a LUN then a backing file must be
81 * specified. If it is set, then NULL filename means the LUN's medium 81 * specified. If it is set, then NULL filename means the LUN's medium
82 * is not loaded (an empty string as "filename" in the fsg_config 82 * is not loaded (an empty string as "filename" in the fsg_config
83 * structure causes error). The CD-ROM emulation includes a single 83 * structure causes error). The CD-ROM emulation includes a single
84 * data track and no audio tracks; hence there need be only one 84 * data track and no audio tracks; hence there need be only one
85 * backing file per LUN. Note also that the CD-ROM block length is 85 * backing file per LUN. Note also that the CD-ROM block length is
86 * set to 512 rather than the more common value 2048. 86 * set to 512 rather than the more common value 2048.
87 * 87 *
88 * 88 *
89 * MSF includes support for module parameters. If gadget using it 89 * MSF includes support for module parameters. If gadget using it
90 * decides to use it, the following module parameters will be 90 * decides to use it, the following module parameters will be
91 * available: 91 * available:
92 * 92 *
93 * file=filename[,filename...] 93 * file=filename[,filename...]
94 * Names of the files or block devices used for 94 * Names of the files or block devices used for
95 * backing storage. 95 * backing storage.
96 * ro=b[,b...] Default false, boolean for read-only access. 96 * ro=b[,b...] Default false, boolean for read-only access.
97 * removable=b[,b...] 97 * removable=b[,b...]
98 * Default true, boolean for removable media. 98 * Default true, boolean for removable media.
99 * cdrom=b[,b...] Default false, boolean for whether to emulate 99 * cdrom=b[,b...] Default false, boolean for whether to emulate
100 * a CD-ROM drive. 100 * a CD-ROM drive.
101 * luns=N Default N = number of filenames, number of 101 * luns=N Default N = number of filenames, number of
102 * LUNs to support. 102 * LUNs to support.
103 * stall Default determined according to the type of 103 * stall Default determined according to the type of
104 * USB device controller (usually true), 104 * USB device controller (usually true),
105 * boolean to permit the driver to halt 105 * boolean to permit the driver to halt
106 * bulk endpoints. 106 * bulk endpoints.
107 * 107 *
108 * The module parameters may be prefixed with some string. You need 108 * The module parameters may be prefixed with some string. You need
109 * to consult gadget's documentation or source to verify whether it is 109 * to consult gadget's documentation or source to verify whether it is
110 * using those module parameters and if it does what are the prefixes 110 * using those module parameters and if it does what are the prefixes
111 * (look for FSG_MODULE_PARAMETERS() macro usage, what's inside it is 111 * (look for FSG_MODULE_PARAMETERS() macro usage, what's inside it is
112 * the prefix). 112 * the prefix).
113 * 113 *
114 * 114 *
115 * Requirements are modest; only a bulk-in and a bulk-out endpoint are 115 * Requirements are modest; only a bulk-in and a bulk-out endpoint are
116 * needed. The memory requirement amounts to two 16K buffers, size 116 * needed. The memory requirement amounts to two 16K buffers, size
117 * configurable by a parameter. Support is included for both 117 * configurable by a parameter. Support is included for both
118 * full-speed and high-speed operation. 118 * full-speed and high-speed operation.
119 * 119 *
120 * Note that the driver is slightly non-portable in that it assumes a 120 * Note that the driver is slightly non-portable in that it assumes a
121 * single memory/DMA buffer will be useable for bulk-in, bulk-out, and 121 * single memory/DMA buffer will be useable for bulk-in, bulk-out, and
122 * interrupt-in endpoints. With most device controllers this isn't an 122 * interrupt-in endpoints. With most device controllers this isn't an
123 * issue, but there may be some with hardware restrictions that prevent 123 * issue, but there may be some with hardware restrictions that prevent
124 * a buffer from being used by more than one endpoint. 124 * a buffer from being used by more than one endpoint.
125 * 125 *
126 * 126 *
127 * The pathnames of the backing files and the ro settings are 127 * The pathnames of the backing files and the ro settings are
128 * available in the attribute files "file" and "ro" in the lun<n> (or 128 * available in the attribute files "file" and "ro" in the lun<n> (or
129 * to be more precise in a directory which name comes from 129 * to be more precise in a directory which name comes from
130 * "lun_name_format" option!) subdirectory of the gadget's sysfs 130 * "lun_name_format" option!) subdirectory of the gadget's sysfs
131 * directory. If the "removable" option is set, writing to these 131 * directory. If the "removable" option is set, writing to these
132 * files will simulate ejecting/loading the medium (writing an empty 132 * files will simulate ejecting/loading the medium (writing an empty
133 * line means eject) and adjusting a write-enable tab. Changes to the 133 * line means eject) and adjusting a write-enable tab. Changes to the
134 * ro setting are not allowed when the medium is loaded or if CD-ROM 134 * ro setting are not allowed when the medium is loaded or if CD-ROM
135 * emulation is being used. 135 * emulation is being used.
136 * 136 *
137 * When a LUN receive an "eject" SCSI request (Start/Stop Unit), 137 * When a LUN receive an "eject" SCSI request (Start/Stop Unit),
138 * if the LUN is removable, the backing file is released to simulate 138 * if the LUN is removable, the backing file is released to simulate
139 * ejection. 139 * ejection.
140 * 140 *
141 * 141 *
142 * This function is heavily based on "File-backed Storage Gadget" by 142 * This function is heavily based on "File-backed Storage Gadget" by
143 * Alan Stern which in turn is heavily based on "Gadget Zero" by David 143 * Alan Stern which in turn is heavily based on "Gadget Zero" by David
144 * Brownell. The driver's SCSI command interface was based on the 144 * Brownell. The driver's SCSI command interface was based on the
145 * "Information technology - Small Computer System Interface - 2" 145 * "Information technology - Small Computer System Interface - 2"
146 * document from X3T9.2 Project 375D, Revision 10L, 7-SEP-93, 146 * document from X3T9.2 Project 375D, Revision 10L, 7-SEP-93,
147 * available at <http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf>. 147 * available at <http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf>.
148 * The single exception is opcode 0x23 (READ FORMAT CAPACITIES), which 148 * The single exception is opcode 0x23 (READ FORMAT CAPACITIES), which
149 * was based on the "Universal Serial Bus Mass Storage Class UFI 149 * was based on the "Universal Serial Bus Mass Storage Class UFI
150 * Command Specification" document, Revision 1.0, December 14, 1998, 150 * Command Specification" document, Revision 1.0, December 14, 1998,
151 * available at 151 * available at
152 * <http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf>. 152 * <http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf>.
153 */ 153 */
154 154
155 /* 155 /*
156 * Driver Design 156 * Driver Design
157 * 157 *
158 * The MSF is fairly straightforward. There is a main kernel 158 * The MSF is fairly straightforward. There is a main kernel
159 * thread that handles most of the work. Interrupt routines field 159 * thread that handles most of the work. Interrupt routines field
160 * callbacks from the controller driver: bulk- and interrupt-request 160 * callbacks from the controller driver: bulk- and interrupt-request
161 * completion notifications, endpoint-0 events, and disconnect events. 161 * completion notifications, endpoint-0 events, and disconnect events.
162 * Completion events are passed to the main thread by wakeup calls. Many 162 * Completion events are passed to the main thread by wakeup calls. Many
163 * ep0 requests are handled at interrupt time, but SetInterface, 163 * ep0 requests are handled at interrupt time, but SetInterface,
164 * SetConfiguration, and device reset requests are forwarded to the 164 * SetConfiguration, and device reset requests are forwarded to the
165 * thread in the form of "exceptions" using SIGUSR1 signals (since they 165 * thread in the form of "exceptions" using SIGUSR1 signals (since they
166 * should interrupt any ongoing file I/O operations). 166 * should interrupt any ongoing file I/O operations).
167 * 167 *
168 * The thread's main routine implements the standard command/data/status 168 * The thread's main routine implements the standard command/data/status
169 * parts of a SCSI interaction. It and its subroutines are full of tests 169 * parts of a SCSI interaction. It and its subroutines are full of tests
170 * for pending signals/exceptions -- all this polling is necessary since 170 * for pending signals/exceptions -- all this polling is necessary since
171 * the kernel has no setjmp/longjmp equivalents. (Maybe this is an 171 * the kernel has no setjmp/longjmp equivalents. (Maybe this is an
172 * indication that the driver really wants to be running in userspace.) 172 * indication that the driver really wants to be running in userspace.)
173 * An important point is that so long as the thread is alive it keeps an 173 * An important point is that so long as the thread is alive it keeps an
174 * open reference to the backing file. This will prevent unmounting 174 * open reference to the backing file. This will prevent unmounting
175 * the backing file's underlying filesystem and could cause problems 175 * the backing file's underlying filesystem and could cause problems
176 * during system shutdown, for example. To prevent such problems, the 176 * during system shutdown, for example. To prevent such problems, the
177 * thread catches INT, TERM, and KILL signals and converts them into 177 * thread catches INT, TERM, and KILL signals and converts them into
178 * an EXIT exception. 178 * an EXIT exception.
179 * 179 *
180 * In normal operation the main thread is started during the gadget's 180 * In normal operation the main thread is started during the gadget's
181 * fsg_bind() callback and stopped during fsg_unbind(). But it can 181 * fsg_bind() callback and stopped during fsg_unbind(). But it can
182 * also exit when it receives a signal, and there's no point leaving 182 * also exit when it receives a signal, and there's no point leaving
183 * the gadget running when the thread is dead. At of this moment, MSF 183 * the gadget running when the thread is dead. At of this moment, MSF
184 * provides no way to deregister the gadget when thread dies -- maybe 184 * provides no way to deregister the gadget when thread dies -- maybe
185 * a callback functions is needed. 185 * a callback functions is needed.
186 * 186 *
187 * To provide maximum throughput, the driver uses a circular pipeline of 187 * To provide maximum throughput, the driver uses a circular pipeline of
188 * buffer heads (struct fsg_buffhd). In principle the pipeline can be 188 * buffer heads (struct fsg_buffhd). In principle the pipeline can be
189 * arbitrarily long; in practice the benefits don't justify having more 189 * arbitrarily long; in practice the benefits don't justify having more
190 * than 2 stages (i.e., double buffering). But it helps to think of the 190 * than 2 stages (i.e., double buffering). But it helps to think of the
191 * pipeline as being a long one. Each buffer head contains a bulk-in and 191 * pipeline as being a long one. Each buffer head contains a bulk-in and
192 * a bulk-out request pointer (since the buffer can be used for both 192 * a bulk-out request pointer (since the buffer can be used for both
193 * output and input -- directions always are given from the host's 193 * output and input -- directions always are given from the host's
194 * point of view) as well as a pointer to the buffer and various state 194 * point of view) as well as a pointer to the buffer and various state
195 * variables. 195 * variables.
196 * 196 *
197 * Use of the pipeline follows a simple protocol. There is a variable 197 * Use of the pipeline follows a simple protocol. There is a variable
198 * (fsg->next_buffhd_to_fill) that points to the next buffer head to use. 198 * (fsg->next_buffhd_to_fill) that points to the next buffer head to use.
199 * At any time that buffer head may still be in use from an earlier 199 * At any time that buffer head may still be in use from an earlier
200 * request, so each buffer head has a state variable indicating whether 200 * request, so each buffer head has a state variable indicating whether
201 * it is EMPTY, FULL, or BUSY. Typical use involves waiting for the 201 * it is EMPTY, FULL, or BUSY. Typical use involves waiting for the
202 * buffer head to be EMPTY, filling the buffer either by file I/O or by 202 * buffer head to be EMPTY, filling the buffer either by file I/O or by
203 * USB I/O (during which the buffer head is BUSY), and marking the buffer 203 * USB I/O (during which the buffer head is BUSY), and marking the buffer
204 * head FULL when the I/O is complete. Then the buffer will be emptied 204 * head FULL when the I/O is complete. Then the buffer will be emptied
205 * (again possibly by USB I/O, during which it is marked BUSY) and 205 * (again possibly by USB I/O, during which it is marked BUSY) and
206 * finally marked EMPTY again (possibly by a completion routine). 206 * finally marked EMPTY again (possibly by a completion routine).
207 * 207 *
208 * A module parameter tells the driver to avoid stalling the bulk 208 * A module parameter tells the driver to avoid stalling the bulk
209 * endpoints wherever the transport specification allows. This is 209 * endpoints wherever the transport specification allows. This is
210 * necessary for some UDCs like the SuperH, which cannot reliably clear a 210 * necessary for some UDCs like the SuperH, which cannot reliably clear a
211 * halt on a bulk endpoint. However, under certain circumstances the 211 * halt on a bulk endpoint. However, under certain circumstances the
212 * Bulk-only specification requires a stall. In such cases the driver 212 * Bulk-only specification requires a stall. In such cases the driver
213 * will halt the endpoint and set a flag indicating that it should clear 213 * will halt the endpoint and set a flag indicating that it should clear
214 * the halt in software during the next device reset. Hopefully this 214 * the halt in software during the next device reset. Hopefully this
215 * will permit everything to work correctly. Furthermore, although the 215 * will permit everything to work correctly. Furthermore, although the
216 * specification allows the bulk-out endpoint to halt when the host sends 216 * specification allows the bulk-out endpoint to halt when the host sends
217 * too much data, implementing this would cause an unavoidable race. 217 * too much data, implementing this would cause an unavoidable race.
218 * The driver will always use the "no-stall" approach for OUT transfers. 218 * The driver will always use the "no-stall" approach for OUT transfers.
219 * 219 *
220 * One subtle point concerns sending status-stage responses for ep0 220 * One subtle point concerns sending status-stage responses for ep0
221 * requests. Some of these requests, such as device reset, can involve 221 * requests. Some of these requests, such as device reset, can involve
222 * interrupting an ongoing file I/O operation, which might take an 222 * interrupting an ongoing file I/O operation, which might take an
223 * arbitrarily long time. During that delay the host might give up on 223 * arbitrarily long time. During that delay the host might give up on
224 * the original ep0 request and issue a new one. When that happens the 224 * the original ep0 request and issue a new one. When that happens the
225 * driver should not notify the host about completion of the original 225 * driver should not notify the host about completion of the original
226 * request, as the host will no longer be waiting for it. So the driver 226 * request, as the host will no longer be waiting for it. So the driver
227 * assigns to each ep0 request a unique tag, and it keeps track of the 227 * assigns to each ep0 request a unique tag, and it keeps track of the
228 * tag value of the request associated with a long-running exception 228 * tag value of the request associated with a long-running exception
229 * (device-reset, interface-change, or configuration-change). When the 229 * (device-reset, interface-change, or configuration-change). When the
230 * exception handler is finished, the status-stage response is submitted 230 * exception handler is finished, the status-stage response is submitted
231 * only if the current ep0 request tag is equal to the exception request 231 * only if the current ep0 request tag is equal to the exception request
232 * tag. Thus only the most recently received ep0 request will get a 232 * tag. Thus only the most recently received ep0 request will get a
233 * status-stage response. 233 * status-stage response.
234 * 234 *
235 * Warning: This driver source file is too long. It ought to be split up 235 * Warning: This driver source file is too long. It ought to be split up
236 * into a header file plus about 3 separate .c files, to handle the details 236 * into a header file plus about 3 separate .c files, to handle the details
237 * of the Gadget, USB Mass Storage, and SCSI protocols. 237 * of the Gadget, USB Mass Storage, and SCSI protocols.
238 */ 238 */
239 239
240 /* #define VERBOSE_DEBUG */ 240 /* #define VERBOSE_DEBUG */
241 /* #define DUMP_MSGS */ 241 /* #define DUMP_MSGS */
242 242
243 #include <config.h> 243 #include <config.h>
244 #include <malloc.h> 244 #include <malloc.h>
245 #include <common.h> 245 #include <common.h>
246 #include <usb.h> 246 #include <g_dnl.h>
247 247
248 #include <linux/err.h> 248 #include <linux/err.h>
249 #include <linux/usb/ch9.h> 249 #include <linux/usb/ch9.h>
250 #include <linux/usb/gadget.h> 250 #include <linux/usb/gadget.h>
251 #include <usb_mass_storage.h> 251 #include <usb_mass_storage.h>
252 252
253 #include <asm/unaligned.h> 253 #include <asm/unaligned.h>
254 #include <linux/usb/gadget.h> 254 #include <linux/usb/gadget.h>
255 #include <linux/usb/gadget.h> 255 #include <linux/usb/gadget.h>
256 #include <linux/usb/composite.h> 256 #include <linux/usb/composite.h>
257 #include <usb/lin_gadget_compat.h> 257 #include <usb/lin_gadget_compat.h>
258 258
259 /*------------------------------------------------------------------------*/ 259 /*------------------------------------------------------------------------*/
260 260
261 #define FSG_DRIVER_DESC "Mass Storage Function" 261 #define FSG_DRIVER_DESC "Mass Storage Function"
262 #define FSG_DRIVER_VERSION "2012/06/5" 262 #define FSG_DRIVER_VERSION "2012/06/5"
263 263
264 static const char fsg_string_interface[] = "Mass Storage"; 264 static const char fsg_string_interface[] = "Mass Storage";
265 265
266 #define FSG_NO_INTR_EP 1 266 #define FSG_NO_INTR_EP 1
267 #define FSG_NO_DEVICE_STRINGS 1 267 #define FSG_NO_DEVICE_STRINGS 1
268 #define FSG_NO_OTG 1 268 #define FSG_NO_OTG 1
269 #define FSG_NO_INTR_EP 1 269 #define FSG_NO_INTR_EP 1
270 270
271 #include "storage_common.c" 271 #include "storage_common.c"
272 272
273 /*-------------------------------------------------------------------------*/ 273 /*-------------------------------------------------------------------------*/
274 274
275 #define GFP_ATOMIC ((gfp_t) 0) 275 #define GFP_ATOMIC ((gfp_t) 0)
276 #define PAGE_CACHE_SHIFT 12 276 #define PAGE_CACHE_SHIFT 12
277 #define PAGE_CACHE_SIZE (1 << PAGE_CACHE_SHIFT) 277 #define PAGE_CACHE_SIZE (1 << PAGE_CACHE_SHIFT)
278 #define kthread_create(...) __builtin_return_address(0) 278 #define kthread_create(...) __builtin_return_address(0)
279 #define wait_for_completion(...) do {} while (0) 279 #define wait_for_completion(...) do {} while (0)
280 280
281 struct kref {int x; }; 281 struct kref {int x; };
282 struct completion {int x; }; 282 struct completion {int x; };
283 283
284 inline void set_bit(int nr, volatile void *addr) 284 inline void set_bit(int nr, volatile void *addr)
285 { 285 {
286 int mask; 286 int mask;
287 unsigned int *a = (unsigned int *) addr; 287 unsigned int *a = (unsigned int *) addr;
288 288
289 a += nr >> 5; 289 a += nr >> 5;
290 mask = 1 << (nr & 0x1f); 290 mask = 1 << (nr & 0x1f);
291 *a |= mask; 291 *a |= mask;
292 } 292 }
293 293
294 inline void clear_bit(int nr, volatile void *addr) 294 inline void clear_bit(int nr, volatile void *addr)
295 { 295 {
296 int mask; 296 int mask;
297 unsigned int *a = (unsigned int *) addr; 297 unsigned int *a = (unsigned int *) addr;
298 298
299 a += nr >> 5; 299 a += nr >> 5;
300 mask = 1 << (nr & 0x1f); 300 mask = 1 << (nr & 0x1f);
301 *a &= ~mask; 301 *a &= ~mask;
302 } 302 }
303 303
304 struct fsg_dev; 304 struct fsg_dev;
305 struct fsg_common; 305 struct fsg_common;
306 306
307 /* Data shared by all the FSG instances. */ 307 /* Data shared by all the FSG instances. */
308 struct fsg_common { 308 struct fsg_common {
309 struct usb_gadget *gadget; 309 struct usb_gadget *gadget;
310 struct fsg_dev *fsg, *new_fsg; 310 struct fsg_dev *fsg, *new_fsg;
311 311
312 struct usb_ep *ep0; /* Copy of gadget->ep0 */ 312 struct usb_ep *ep0; /* Copy of gadget->ep0 */
313 struct usb_request *ep0req; /* Copy of cdev->req */ 313 struct usb_request *ep0req; /* Copy of cdev->req */
314 unsigned int ep0_req_tag; 314 unsigned int ep0_req_tag;
315 315
316 struct fsg_buffhd *next_buffhd_to_fill; 316 struct fsg_buffhd *next_buffhd_to_fill;
317 struct fsg_buffhd *next_buffhd_to_drain; 317 struct fsg_buffhd *next_buffhd_to_drain;
318 struct fsg_buffhd buffhds[FSG_NUM_BUFFERS]; 318 struct fsg_buffhd buffhds[FSG_NUM_BUFFERS];
319 319
320 int cmnd_size; 320 int cmnd_size;
321 u8 cmnd[MAX_COMMAND_SIZE]; 321 u8 cmnd[MAX_COMMAND_SIZE];
322 322
323 unsigned int nluns; 323 unsigned int nluns;
324 unsigned int lun; 324 unsigned int lun;
325 struct fsg_lun luns[FSG_MAX_LUNS]; 325 struct fsg_lun luns[FSG_MAX_LUNS];
326 326
327 unsigned int bulk_out_maxpacket; 327 unsigned int bulk_out_maxpacket;
328 enum fsg_state state; /* For exception handling */ 328 enum fsg_state state; /* For exception handling */
329 unsigned int exception_req_tag; 329 unsigned int exception_req_tag;
330 330
331 enum data_direction data_dir; 331 enum data_direction data_dir;
332 u32 data_size; 332 u32 data_size;
333 u32 data_size_from_cmnd; 333 u32 data_size_from_cmnd;
334 u32 tag; 334 u32 tag;
335 u32 residue; 335 u32 residue;
336 u32 usb_amount_left; 336 u32 usb_amount_left;
337 337
338 unsigned int can_stall:1; 338 unsigned int can_stall:1;
339 unsigned int free_storage_on_release:1; 339 unsigned int free_storage_on_release:1;
340 unsigned int phase_error:1; 340 unsigned int phase_error:1;
341 unsigned int short_packet_received:1; 341 unsigned int short_packet_received:1;
342 unsigned int bad_lun_okay:1; 342 unsigned int bad_lun_okay:1;
343 unsigned int running:1; 343 unsigned int running:1;
344 344
345 int thread_wakeup_needed; 345 int thread_wakeup_needed;
346 struct completion thread_notifier; 346 struct completion thread_notifier;
347 struct task_struct *thread_task; 347 struct task_struct *thread_task;
348 348
349 /* Callback functions. */ 349 /* Callback functions. */
350 const struct fsg_operations *ops; 350 const struct fsg_operations *ops;
351 /* Gadget's private data. */ 351 /* Gadget's private data. */
352 void *private_data; 352 void *private_data;
353 353
354 const char *vendor_name; /* 8 characters or less */ 354 const char *vendor_name; /* 8 characters or less */
355 const char *product_name; /* 16 characters or less */ 355 const char *product_name; /* 16 characters or less */
356 u16 release; 356 u16 release;
357 357
358 /* Vendor (8 chars), product (16 chars), release (4 358 /* Vendor (8 chars), product (16 chars), release (4
359 * hexadecimal digits) and NUL byte */ 359 * hexadecimal digits) and NUL byte */
360 char inquiry_string[8 + 16 + 4 + 1]; 360 char inquiry_string[8 + 16 + 4 + 1];
361 361
362 struct kref ref; 362 struct kref ref;
363 }; 363 };
364 364
365 struct fsg_config { 365 struct fsg_config {
366 unsigned nluns; 366 unsigned nluns;
367 struct fsg_lun_config { 367 struct fsg_lun_config {
368 const char *filename; 368 const char *filename;
369 char ro; 369 char ro;
370 char removable; 370 char removable;
371 char cdrom; 371 char cdrom;
372 char nofua; 372 char nofua;
373 } luns[FSG_MAX_LUNS]; 373 } luns[FSG_MAX_LUNS];
374 374
375 /* Callback functions. */ 375 /* Callback functions. */
376 const struct fsg_operations *ops; 376 const struct fsg_operations *ops;
377 /* Gadget's private data. */ 377 /* Gadget's private data. */
378 void *private_data; 378 void *private_data;
379 379
380 const char *vendor_name; /* 8 characters or less */ 380 const char *vendor_name; /* 8 characters or less */
381 const char *product_name; /* 16 characters or less */ 381 const char *product_name; /* 16 characters or less */
382 382
383 char can_stall; 383 char can_stall;
384 }; 384 };
385 385
386 struct fsg_dev { 386 struct fsg_dev {
387 struct usb_function function; 387 struct usb_function function;
388 struct usb_gadget *gadget; /* Copy of cdev->gadget */ 388 struct usb_gadget *gadget; /* Copy of cdev->gadget */
389 struct fsg_common *common; 389 struct fsg_common *common;
390 390
391 u16 interface_number; 391 u16 interface_number;
392 392
393 unsigned int bulk_in_enabled:1; 393 unsigned int bulk_in_enabled:1;
394 unsigned int bulk_out_enabled:1; 394 unsigned int bulk_out_enabled:1;
395 395
396 unsigned long atomic_bitflags; 396 unsigned long atomic_bitflags;
397 #define IGNORE_BULK_OUT 0 397 #define IGNORE_BULK_OUT 0
398 398
399 struct usb_ep *bulk_in; 399 struct usb_ep *bulk_in;
400 struct usb_ep *bulk_out; 400 struct usb_ep *bulk_out;
401 }; 401 };
402 402
403 403
404 static inline int __fsg_is_set(struct fsg_common *common, 404 static inline int __fsg_is_set(struct fsg_common *common,
405 const char *func, unsigned line) 405 const char *func, unsigned line)
406 { 406 {
407 if (common->fsg) 407 if (common->fsg)
408 return 1; 408 return 1;
409 ERROR(common, "common->fsg is NULL in %s at %u\n", func, line); 409 ERROR(common, "common->fsg is NULL in %s at %u\n", func, line);
410 WARN_ON(1); 410 WARN_ON(1);
411 return 0; 411 return 0;
412 } 412 }
413 413
414 #define fsg_is_set(common) likely(__fsg_is_set(common, __func__, __LINE__)) 414 #define fsg_is_set(common) likely(__fsg_is_set(common, __func__, __LINE__))
415 415
416 416
417 static inline struct fsg_dev *fsg_from_func(struct usb_function *f) 417 static inline struct fsg_dev *fsg_from_func(struct usb_function *f)
418 { 418 {
419 return container_of(f, struct fsg_dev, function); 419 return container_of(f, struct fsg_dev, function);
420 } 420 }
421 421
422 422
423 typedef void (*fsg_routine_t)(struct fsg_dev *); 423 typedef void (*fsg_routine_t)(struct fsg_dev *);
424 424
425 static int exception_in_progress(struct fsg_common *common) 425 static int exception_in_progress(struct fsg_common *common)
426 { 426 {
427 return common->state > FSG_STATE_IDLE; 427 return common->state > FSG_STATE_IDLE;
428 } 428 }
429 429
430 /* Make bulk-out requests be divisible by the maxpacket size */ 430 /* Make bulk-out requests be divisible by the maxpacket size */
431 static void set_bulk_out_req_length(struct fsg_common *common, 431 static void set_bulk_out_req_length(struct fsg_common *common,
432 struct fsg_buffhd *bh, unsigned int length) 432 struct fsg_buffhd *bh, unsigned int length)
433 { 433 {
434 unsigned int rem; 434 unsigned int rem;
435 435
436 bh->bulk_out_intended_length = length; 436 bh->bulk_out_intended_length = length;
437 rem = length % common->bulk_out_maxpacket; 437 rem = length % common->bulk_out_maxpacket;
438 if (rem > 0) 438 if (rem > 0)
439 length += common->bulk_out_maxpacket - rem; 439 length += common->bulk_out_maxpacket - rem;
440 bh->outreq->length = length; 440 bh->outreq->length = length;
441 } 441 }
442 442
443 /*-------------------------------------------------------------------------*/ 443 /*-------------------------------------------------------------------------*/
444 444
445 struct ums *ums; 445 struct ums *ums;
446 struct fsg_common *the_fsg_common; 446 struct fsg_common *the_fsg_common;
447 447
448 static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep) 448 static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
449 { 449 {
450 const char *name; 450 const char *name;
451 451
452 if (ep == fsg->bulk_in) 452 if (ep == fsg->bulk_in)
453 name = "bulk-in"; 453 name = "bulk-in";
454 else if (ep == fsg->bulk_out) 454 else if (ep == fsg->bulk_out)
455 name = "bulk-out"; 455 name = "bulk-out";
456 else 456 else
457 name = ep->name; 457 name = ep->name;
458 DBG(fsg, "%s set halt\n", name); 458 DBG(fsg, "%s set halt\n", name);
459 return usb_ep_set_halt(ep); 459 return usb_ep_set_halt(ep);
460 } 460 }
461 461
462 /*-------------------------------------------------------------------------*/ 462 /*-------------------------------------------------------------------------*/
463 463
464 /* These routines may be called in process context or in_irq */ 464 /* These routines may be called in process context or in_irq */
465 465
466 /* Caller must hold fsg->lock */ 466 /* Caller must hold fsg->lock */
467 static void wakeup_thread(struct fsg_common *common) 467 static void wakeup_thread(struct fsg_common *common)
468 { 468 {
469 common->thread_wakeup_needed = 1; 469 common->thread_wakeup_needed = 1;
470 } 470 }
471 471
472 static void raise_exception(struct fsg_common *common, enum fsg_state new_state) 472 static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
473 { 473 {
474 /* Do nothing if a higher-priority exception is already in progress. 474 /* Do nothing if a higher-priority exception is already in progress.
475 * If a lower-or-equal priority exception is in progress, preempt it 475 * If a lower-or-equal priority exception is in progress, preempt it
476 * and notify the main thread by sending it a signal. */ 476 * and notify the main thread by sending it a signal. */
477 if (common->state <= new_state) { 477 if (common->state <= new_state) {
478 common->exception_req_tag = common->ep0_req_tag; 478 common->exception_req_tag = common->ep0_req_tag;
479 common->state = new_state; 479 common->state = new_state;
480 common->thread_wakeup_needed = 1; 480 common->thread_wakeup_needed = 1;
481 } 481 }
482 } 482 }
483 483
484 /*-------------------------------------------------------------------------*/ 484 /*-------------------------------------------------------------------------*/
485 485
486 static int ep0_queue(struct fsg_common *common) 486 static int ep0_queue(struct fsg_common *common)
487 { 487 {
488 int rc; 488 int rc;
489 489
490 rc = usb_ep_queue(common->ep0, common->ep0req, GFP_ATOMIC); 490 rc = usb_ep_queue(common->ep0, common->ep0req, GFP_ATOMIC);
491 common->ep0->driver_data = common; 491 common->ep0->driver_data = common;
492 if (rc != 0 && rc != -ESHUTDOWN) { 492 if (rc != 0 && rc != -ESHUTDOWN) {
493 /* We can't do much more than wait for a reset */ 493 /* We can't do much more than wait for a reset */
494 WARNING(common, "error in submission: %s --> %d\n", 494 WARNING(common, "error in submission: %s --> %d\n",
495 common->ep0->name, rc); 495 common->ep0->name, rc);
496 } 496 }
497 return rc; 497 return rc;
498 } 498 }
499 499
500 /*-------------------------------------------------------------------------*/ 500 /*-------------------------------------------------------------------------*/
501 501
502 /* Bulk and interrupt endpoint completion handlers. 502 /* Bulk and interrupt endpoint completion handlers.
503 * These always run in_irq. */ 503 * These always run in_irq. */
504 504
505 static void bulk_in_complete(struct usb_ep *ep, struct usb_request *req) 505 static void bulk_in_complete(struct usb_ep *ep, struct usb_request *req)
506 { 506 {
507 struct fsg_common *common = ep->driver_data; 507 struct fsg_common *common = ep->driver_data;
508 struct fsg_buffhd *bh = req->context; 508 struct fsg_buffhd *bh = req->context;
509 509
510 if (req->status || req->actual != req->length) 510 if (req->status || req->actual != req->length)
511 DBG(common, "%s --> %d, %u/%u\n", __func__, 511 DBG(common, "%s --> %d, %u/%u\n", __func__,
512 req->status, req->actual, req->length); 512 req->status, req->actual, req->length);
513 if (req->status == -ECONNRESET) /* Request was cancelled */ 513 if (req->status == -ECONNRESET) /* Request was cancelled */
514 usb_ep_fifo_flush(ep); 514 usb_ep_fifo_flush(ep);
515 515
516 /* Hold the lock while we update the request and buffer states */ 516 /* Hold the lock while we update the request and buffer states */
517 bh->inreq_busy = 0; 517 bh->inreq_busy = 0;
518 bh->state = BUF_STATE_EMPTY; 518 bh->state = BUF_STATE_EMPTY;
519 wakeup_thread(common); 519 wakeup_thread(common);
520 } 520 }
521 521
522 static void bulk_out_complete(struct usb_ep *ep, struct usb_request *req) 522 static void bulk_out_complete(struct usb_ep *ep, struct usb_request *req)
523 { 523 {
524 struct fsg_common *common = ep->driver_data; 524 struct fsg_common *common = ep->driver_data;
525 struct fsg_buffhd *bh = req->context; 525 struct fsg_buffhd *bh = req->context;
526 526
527 dump_msg(common, "bulk-out", req->buf, req->actual); 527 dump_msg(common, "bulk-out", req->buf, req->actual);
528 if (req->status || req->actual != bh->bulk_out_intended_length) 528 if (req->status || req->actual != bh->bulk_out_intended_length)
529 DBG(common, "%s --> %d, %u/%u\n", __func__, 529 DBG(common, "%s --> %d, %u/%u\n", __func__,
530 req->status, req->actual, 530 req->status, req->actual,
531 bh->bulk_out_intended_length); 531 bh->bulk_out_intended_length);
532 if (req->status == -ECONNRESET) /* Request was cancelled */ 532 if (req->status == -ECONNRESET) /* Request was cancelled */
533 usb_ep_fifo_flush(ep); 533 usb_ep_fifo_flush(ep);
534 534
535 /* Hold the lock while we update the request and buffer states */ 535 /* Hold the lock while we update the request and buffer states */
536 bh->outreq_busy = 0; 536 bh->outreq_busy = 0;
537 bh->state = BUF_STATE_FULL; 537 bh->state = BUF_STATE_FULL;
538 wakeup_thread(common); 538 wakeup_thread(common);
539 } 539 }
540 540
541 /*-------------------------------------------------------------------------*/ 541 /*-------------------------------------------------------------------------*/
542 542
543 /* Ep0 class-specific handlers. These always run in_irq. */ 543 /* Ep0 class-specific handlers. These always run in_irq. */
544 544
545 static int fsg_setup(struct usb_function *f, 545 static int fsg_setup(struct usb_function *f,
546 const struct usb_ctrlrequest *ctrl) 546 const struct usb_ctrlrequest *ctrl)
547 { 547 {
548 struct fsg_dev *fsg = fsg_from_func(f); 548 struct fsg_dev *fsg = fsg_from_func(f);
549 struct usb_request *req = fsg->common->ep0req; 549 struct usb_request *req = fsg->common->ep0req;
550 u16 w_index = get_unaligned_le16(&ctrl->wIndex); 550 u16 w_index = get_unaligned_le16(&ctrl->wIndex);
551 u16 w_value = get_unaligned_le16(&ctrl->wValue); 551 u16 w_value = get_unaligned_le16(&ctrl->wValue);
552 u16 w_length = get_unaligned_le16(&ctrl->wLength); 552 u16 w_length = get_unaligned_le16(&ctrl->wLength);
553 553
554 if (!fsg_is_set(fsg->common)) 554 if (!fsg_is_set(fsg->common))
555 return -EOPNOTSUPP; 555 return -EOPNOTSUPP;
556 556
557 switch (ctrl->bRequest) { 557 switch (ctrl->bRequest) {
558 558
559 case USB_BULK_RESET_REQUEST: 559 case USB_BULK_RESET_REQUEST:
560 if (ctrl->bRequestType != 560 if (ctrl->bRequestType !=
561 (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE)) 561 (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
562 break; 562 break;
563 if (w_index != fsg->interface_number || w_value != 0) 563 if (w_index != fsg->interface_number || w_value != 0)
564 return -EDOM; 564 return -EDOM;
565 565
566 /* Raise an exception to stop the current operation 566 /* Raise an exception to stop the current operation
567 * and reinitialize our state. */ 567 * and reinitialize our state. */
568 DBG(fsg, "bulk reset request\n"); 568 DBG(fsg, "bulk reset request\n");
569 raise_exception(fsg->common, FSG_STATE_RESET); 569 raise_exception(fsg->common, FSG_STATE_RESET);
570 return DELAYED_STATUS; 570 return DELAYED_STATUS;
571 571
572 case USB_BULK_GET_MAX_LUN_REQUEST: 572 case USB_BULK_GET_MAX_LUN_REQUEST:
573 if (ctrl->bRequestType != 573 if (ctrl->bRequestType !=
574 (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE)) 574 (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
575 break; 575 break;
576 if (w_index != fsg->interface_number || w_value != 0) 576 if (w_index != fsg->interface_number || w_value != 0)
577 return -EDOM; 577 return -EDOM;
578 VDBG(fsg, "get max LUN\n"); 578 VDBG(fsg, "get max LUN\n");
579 *(u8 *) req->buf = fsg->common->nluns - 1; 579 *(u8 *) req->buf = fsg->common->nluns - 1;
580 580
581 /* Respond with data/status */ 581 /* Respond with data/status */
582 req->length = min((u16)1, w_length); 582 req->length = min((u16)1, w_length);
583 return ep0_queue(fsg->common); 583 return ep0_queue(fsg->common);
584 } 584 }
585 585
586 VDBG(fsg, 586 VDBG(fsg,
587 "unknown class-specific control req " 587 "unknown class-specific control req "
588 "%02x.%02x v%04x i%04x l%u\n", 588 "%02x.%02x v%04x i%04x l%u\n",
589 ctrl->bRequestType, ctrl->bRequest, 589 ctrl->bRequestType, ctrl->bRequest,
590 get_unaligned_le16(&ctrl->wValue), w_index, w_length); 590 get_unaligned_le16(&ctrl->wValue), w_index, w_length);
591 return -EOPNOTSUPP; 591 return -EOPNOTSUPP;
592 } 592 }
593 593
594 /*-------------------------------------------------------------------------*/ 594 /*-------------------------------------------------------------------------*/
595 595
596 /* All the following routines run in process context */ 596 /* All the following routines run in process context */
597 597
598 /* Use this for bulk or interrupt transfers, not ep0 */ 598 /* Use this for bulk or interrupt transfers, not ep0 */
599 static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep, 599 static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep,
600 struct usb_request *req, int *pbusy, 600 struct usb_request *req, int *pbusy,
601 enum fsg_buffer_state *state) 601 enum fsg_buffer_state *state)
602 { 602 {
603 int rc; 603 int rc;
604 604
605 if (ep == fsg->bulk_in) 605 if (ep == fsg->bulk_in)
606 dump_msg(fsg, "bulk-in", req->buf, req->length); 606 dump_msg(fsg, "bulk-in", req->buf, req->length);
607 607
608 *pbusy = 1; 608 *pbusy = 1;
609 *state = BUF_STATE_BUSY; 609 *state = BUF_STATE_BUSY;
610 rc = usb_ep_queue(ep, req, GFP_KERNEL); 610 rc = usb_ep_queue(ep, req, GFP_KERNEL);
611 if (rc != 0) { 611 if (rc != 0) {
612 *pbusy = 0; 612 *pbusy = 0;
613 *state = BUF_STATE_EMPTY; 613 *state = BUF_STATE_EMPTY;
614 614
615 /* We can't do much more than wait for a reset */ 615 /* We can't do much more than wait for a reset */
616 616
617 /* Note: currently the net2280 driver fails zero-length 617 /* Note: currently the net2280 driver fails zero-length
618 * submissions if DMA is enabled. */ 618 * submissions if DMA is enabled. */
619 if (rc != -ESHUTDOWN && !(rc == -EOPNOTSUPP && 619 if (rc != -ESHUTDOWN && !(rc == -EOPNOTSUPP &&
620 req->length == 0)) 620 req->length == 0))
621 WARNING(fsg, "error in submission: %s --> %d\n", 621 WARNING(fsg, "error in submission: %s --> %d\n",
622 ep->name, rc); 622 ep->name, rc);
623 } 623 }
624 } 624 }
625 625
626 #define START_TRANSFER_OR(common, ep_name, req, pbusy, state) \ 626 #define START_TRANSFER_OR(common, ep_name, req, pbusy, state) \
627 if (fsg_is_set(common)) \ 627 if (fsg_is_set(common)) \
628 start_transfer((common)->fsg, (common)->fsg->ep_name, \ 628 start_transfer((common)->fsg, (common)->fsg->ep_name, \
629 req, pbusy, state); \ 629 req, pbusy, state); \
630 else 630 else
631 631
632 #define START_TRANSFER(common, ep_name, req, pbusy, state) \ 632 #define START_TRANSFER(common, ep_name, req, pbusy, state) \
633 START_TRANSFER_OR(common, ep_name, req, pbusy, state) (void)0 633 START_TRANSFER_OR(common, ep_name, req, pbusy, state) (void)0
634 634
635 static void busy_indicator(void) 635 static void busy_indicator(void)
636 { 636 {
637 static int state; 637 static int state;
638 638
639 switch (state) { 639 switch (state) {
640 case 0: 640 case 0:
641 puts("\r|"); break; 641 puts("\r|"); break;
642 case 1: 642 case 1:
643 puts("\r/"); break; 643 puts("\r/"); break;
644 case 2: 644 case 2:
645 puts("\r-"); break; 645 puts("\r-"); break;
646 case 3: 646 case 3:
647 puts("\r\\"); break; 647 puts("\r\\"); break;
648 case 4: 648 case 4:
649 puts("\r|"); break; 649 puts("\r|"); break;
650 case 5: 650 case 5:
651 puts("\r/"); break; 651 puts("\r/"); break;
652 case 6: 652 case 6:
653 puts("\r-"); break; 653 puts("\r-"); break;
654 case 7: 654 case 7:
655 puts("\r\\"); break; 655 puts("\r\\"); break;
656 default: 656 default:
657 state = 0; 657 state = 0;
658 } 658 }
659 if (state++ == 8) 659 if (state++ == 8)
660 state = 0; 660 state = 0;
661 } 661 }
662 662
663 static int sleep_thread(struct fsg_common *common) 663 static int sleep_thread(struct fsg_common *common)
664 { 664 {
665 int rc = 0; 665 int rc = 0;
666 int i = 0, k = 0; 666 int i = 0, k = 0;
667 667
668 /* Wait until a signal arrives or we are woken up */ 668 /* Wait until a signal arrives or we are woken up */
669 for (;;) { 669 for (;;) {
670 if (common->thread_wakeup_needed) 670 if (common->thread_wakeup_needed)
671 break; 671 break;
672 672
673 if (++i == 50000) { 673 if (++i == 50000) {
674 busy_indicator(); 674 busy_indicator();
675 i = 0; 675 i = 0;
676 k++; 676 k++;
677 } 677 }
678 678
679 if (k == 10) { 679 if (k == 10) {
680 /* Handle CTRL+C */ 680 /* Handle CTRL+C */
681 if (ctrlc()) 681 if (ctrlc())
682 return -EPIPE; 682 return -EPIPE;
683 #ifdef CONFIG_USB_CABLE_CHECK 683
684 /* Check cable connection */ 684 /* Check cable connection */
685 if (!usb_cable_connected()) 685 if (!g_dnl_board_usb_cable_connected())
686 return -EIO; 686 return -EIO;
687 #endif 687
688 k = 0; 688 k = 0;
689 } 689 }
690 690
691 usb_gadget_handle_interrupts(); 691 usb_gadget_handle_interrupts();
692 } 692 }
693 common->thread_wakeup_needed = 0; 693 common->thread_wakeup_needed = 0;
694 return rc; 694 return rc;
695 } 695 }
696 696
697 /*-------------------------------------------------------------------------*/ 697 /*-------------------------------------------------------------------------*/
698 698
699 static int do_read(struct fsg_common *common) 699 static int do_read(struct fsg_common *common)
700 { 700 {
701 struct fsg_lun *curlun = &common->luns[common->lun]; 701 struct fsg_lun *curlun = &common->luns[common->lun];
702 u32 lba; 702 u32 lba;
703 struct fsg_buffhd *bh; 703 struct fsg_buffhd *bh;
704 int rc; 704 int rc;
705 u32 amount_left; 705 u32 amount_left;
706 loff_t file_offset; 706 loff_t file_offset;
707 unsigned int amount; 707 unsigned int amount;
708 unsigned int partial_page; 708 unsigned int partial_page;
709 ssize_t nread; 709 ssize_t nread;
710 710
711 /* Get the starting Logical Block Address and check that it's 711 /* Get the starting Logical Block Address and check that it's
712 * not too big */ 712 * not too big */
713 if (common->cmnd[0] == SC_READ_6) 713 if (common->cmnd[0] == SC_READ_6)
714 lba = get_unaligned_be24(&common->cmnd[1]); 714 lba = get_unaligned_be24(&common->cmnd[1]);
715 else { 715 else {
716 lba = get_unaligned_be32(&common->cmnd[2]); 716 lba = get_unaligned_be32(&common->cmnd[2]);
717 717
718 /* We allow DPO (Disable Page Out = don't save data in the 718 /* We allow DPO (Disable Page Out = don't save data in the
719 * cache) and FUA (Force Unit Access = don't read from the 719 * cache) and FUA (Force Unit Access = don't read from the
720 * cache), but we don't implement them. */ 720 * cache), but we don't implement them. */
721 if ((common->cmnd[1] & ~0x18) != 0) { 721 if ((common->cmnd[1] & ~0x18) != 0) {
722 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 722 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
723 return -EINVAL; 723 return -EINVAL;
724 } 724 }
725 } 725 }
726 if (lba >= curlun->num_sectors) { 726 if (lba >= curlun->num_sectors) {
727 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 727 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
728 return -EINVAL; 728 return -EINVAL;
729 } 729 }
730 file_offset = ((loff_t) lba) << 9; 730 file_offset = ((loff_t) lba) << 9;
731 731
732 /* Carry out the file reads */ 732 /* Carry out the file reads */
733 amount_left = common->data_size_from_cmnd; 733 amount_left = common->data_size_from_cmnd;
734 if (unlikely(amount_left == 0)) 734 if (unlikely(amount_left == 0))
735 return -EIO; /* No default reply */ 735 return -EIO; /* No default reply */
736 736
737 for (;;) { 737 for (;;) {
738 738
739 /* Figure out how much we need to read: 739 /* Figure out how much we need to read:
740 * Try to read the remaining amount. 740 * Try to read the remaining amount.
741 * But don't read more than the buffer size. 741 * But don't read more than the buffer size.
742 * And don't try to read past the end of the file. 742 * And don't try to read past the end of the file.
743 * Finally, if we're not at a page boundary, don't read past 743 * Finally, if we're not at a page boundary, don't read past
744 * the next page. 744 * the next page.
745 * If this means reading 0 then we were asked to read past 745 * If this means reading 0 then we were asked to read past
746 * the end of file. */ 746 * the end of file. */
747 amount = min(amount_left, FSG_BUFLEN); 747 amount = min(amount_left, FSG_BUFLEN);
748 partial_page = file_offset & (PAGE_CACHE_SIZE - 1); 748 partial_page = file_offset & (PAGE_CACHE_SIZE - 1);
749 if (partial_page > 0) 749 if (partial_page > 0)
750 amount = min(amount, (unsigned int) PAGE_CACHE_SIZE - 750 amount = min(amount, (unsigned int) PAGE_CACHE_SIZE -
751 partial_page); 751 partial_page);
752 752
753 /* Wait for the next buffer to become available */ 753 /* Wait for the next buffer to become available */
754 bh = common->next_buffhd_to_fill; 754 bh = common->next_buffhd_to_fill;
755 while (bh->state != BUF_STATE_EMPTY) { 755 while (bh->state != BUF_STATE_EMPTY) {
756 rc = sleep_thread(common); 756 rc = sleep_thread(common);
757 if (rc) 757 if (rc)
758 return rc; 758 return rc;
759 } 759 }
760 760
761 /* If we were asked to read past the end of file, 761 /* If we were asked to read past the end of file,
762 * end with an empty buffer. */ 762 * end with an empty buffer. */
763 if (amount == 0) { 763 if (amount == 0) {
764 curlun->sense_data = 764 curlun->sense_data =
765 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 765 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
766 curlun->info_valid = 1; 766 curlun->info_valid = 1;
767 bh->inreq->length = 0; 767 bh->inreq->length = 0;
768 bh->state = BUF_STATE_FULL; 768 bh->state = BUF_STATE_FULL;
769 break; 769 break;
770 } 770 }
771 771
772 /* Perform the read */ 772 /* Perform the read */
773 rc = ums->read_sector(ums, 773 rc = ums->read_sector(ums,
774 file_offset / SECTOR_SIZE, 774 file_offset / SECTOR_SIZE,
775 amount / SECTOR_SIZE, 775 amount / SECTOR_SIZE,
776 (char __user *)bh->buf); 776 (char __user *)bh->buf);
777 if (!rc) 777 if (!rc)
778 return -EIO; 778 return -EIO;
779 779
780 nread = rc * SECTOR_SIZE; 780 nread = rc * SECTOR_SIZE;
781 781
782 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount, 782 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
783 (unsigned long long) file_offset, 783 (unsigned long long) file_offset,
784 (int) nread); 784 (int) nread);
785 785
786 if (nread < 0) { 786 if (nread < 0) {
787 LDBG(curlun, "error in file read: %d\n", 787 LDBG(curlun, "error in file read: %d\n",
788 (int) nread); 788 (int) nread);
789 nread = 0; 789 nread = 0;
790 } else if (nread < amount) { 790 } else if (nread < amount) {
791 LDBG(curlun, "partial file read: %d/%u\n", 791 LDBG(curlun, "partial file read: %d/%u\n",
792 (int) nread, amount); 792 (int) nread, amount);
793 nread -= (nread & 511); /* Round down to a block */ 793 nread -= (nread & 511); /* Round down to a block */
794 } 794 }
795 file_offset += nread; 795 file_offset += nread;
796 amount_left -= nread; 796 amount_left -= nread;
797 common->residue -= nread; 797 common->residue -= nread;
798 bh->inreq->length = nread; 798 bh->inreq->length = nread;
799 bh->state = BUF_STATE_FULL; 799 bh->state = BUF_STATE_FULL;
800 800
801 /* If an error occurred, report it and its position */ 801 /* If an error occurred, report it and its position */
802 if (nread < amount) { 802 if (nread < amount) {
803 curlun->sense_data = SS_UNRECOVERED_READ_ERROR; 803 curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
804 curlun->info_valid = 1; 804 curlun->info_valid = 1;
805 break; 805 break;
806 } 806 }
807 807
808 if (amount_left == 0) 808 if (amount_left == 0)
809 break; /* No more left to read */ 809 break; /* No more left to read */
810 810
811 /* Send this buffer and go read some more */ 811 /* Send this buffer and go read some more */
812 bh->inreq->zero = 0; 812 bh->inreq->zero = 0;
813 START_TRANSFER_OR(common, bulk_in, bh->inreq, 813 START_TRANSFER_OR(common, bulk_in, bh->inreq,
814 &bh->inreq_busy, &bh->state) 814 &bh->inreq_busy, &bh->state)
815 /* Don't know what to do if 815 /* Don't know what to do if
816 * common->fsg is NULL */ 816 * common->fsg is NULL */
817 return -EIO; 817 return -EIO;
818 common->next_buffhd_to_fill = bh->next; 818 common->next_buffhd_to_fill = bh->next;
819 } 819 }
820 820
821 return -EIO; /* No default reply */ 821 return -EIO; /* No default reply */
822 } 822 }
823 823
824 /*-------------------------------------------------------------------------*/ 824 /*-------------------------------------------------------------------------*/
825 825
826 static int do_write(struct fsg_common *common) 826 static int do_write(struct fsg_common *common)
827 { 827 {
828 struct fsg_lun *curlun = &common->luns[common->lun]; 828 struct fsg_lun *curlun = &common->luns[common->lun];
829 u32 lba; 829 u32 lba;
830 struct fsg_buffhd *bh; 830 struct fsg_buffhd *bh;
831 int get_some_more; 831 int get_some_more;
832 u32 amount_left_to_req, amount_left_to_write; 832 u32 amount_left_to_req, amount_left_to_write;
833 loff_t usb_offset, file_offset; 833 loff_t usb_offset, file_offset;
834 unsigned int amount; 834 unsigned int amount;
835 unsigned int partial_page; 835 unsigned int partial_page;
836 ssize_t nwritten; 836 ssize_t nwritten;
837 int rc; 837 int rc;
838 838
839 if (curlun->ro) { 839 if (curlun->ro) {
840 curlun->sense_data = SS_WRITE_PROTECTED; 840 curlun->sense_data = SS_WRITE_PROTECTED;
841 return -EINVAL; 841 return -EINVAL;
842 } 842 }
843 843
844 /* Get the starting Logical Block Address and check that it's 844 /* Get the starting Logical Block Address and check that it's
845 * not too big */ 845 * not too big */
846 if (common->cmnd[0] == SC_WRITE_6) 846 if (common->cmnd[0] == SC_WRITE_6)
847 lba = get_unaligned_be24(&common->cmnd[1]); 847 lba = get_unaligned_be24(&common->cmnd[1]);
848 else { 848 else {
849 lba = get_unaligned_be32(&common->cmnd[2]); 849 lba = get_unaligned_be32(&common->cmnd[2]);
850 850
851 /* We allow DPO (Disable Page Out = don't save data in the 851 /* We allow DPO (Disable Page Out = don't save data in the
852 * cache) and FUA (Force Unit Access = write directly to the 852 * cache) and FUA (Force Unit Access = write directly to the
853 * medium). We don't implement DPO; we implement FUA by 853 * medium). We don't implement DPO; we implement FUA by
854 * performing synchronous output. */ 854 * performing synchronous output. */
855 if (common->cmnd[1] & ~0x18) { 855 if (common->cmnd[1] & ~0x18) {
856 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 856 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
857 return -EINVAL; 857 return -EINVAL;
858 } 858 }
859 } 859 }
860 if (lba >= curlun->num_sectors) { 860 if (lba >= curlun->num_sectors) {
861 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 861 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
862 return -EINVAL; 862 return -EINVAL;
863 } 863 }
864 864
865 /* Carry out the file writes */ 865 /* Carry out the file writes */
866 get_some_more = 1; 866 get_some_more = 1;
867 file_offset = usb_offset = ((loff_t) lba) << 9; 867 file_offset = usb_offset = ((loff_t) lba) << 9;
868 amount_left_to_req = common->data_size_from_cmnd; 868 amount_left_to_req = common->data_size_from_cmnd;
869 amount_left_to_write = common->data_size_from_cmnd; 869 amount_left_to_write = common->data_size_from_cmnd;
870 870
871 while (amount_left_to_write > 0) { 871 while (amount_left_to_write > 0) {
872 872
873 /* Queue a request for more data from the host */ 873 /* Queue a request for more data from the host */
874 bh = common->next_buffhd_to_fill; 874 bh = common->next_buffhd_to_fill;
875 if (bh->state == BUF_STATE_EMPTY && get_some_more) { 875 if (bh->state == BUF_STATE_EMPTY && get_some_more) {
876 876
877 /* Figure out how much we want to get: 877 /* Figure out how much we want to get:
878 * Try to get the remaining amount. 878 * Try to get the remaining amount.
879 * But don't get more than the buffer size. 879 * But don't get more than the buffer size.
880 * And don't try to go past the end of the file. 880 * And don't try to go past the end of the file.
881 * If we're not at a page boundary, 881 * If we're not at a page boundary,
882 * don't go past the next page. 882 * don't go past the next page.
883 * If this means getting 0, then we were asked 883 * If this means getting 0, then we were asked
884 * to write past the end of file. 884 * to write past the end of file.
885 * Finally, round down to a block boundary. */ 885 * Finally, round down to a block boundary. */
886 amount = min(amount_left_to_req, FSG_BUFLEN); 886 amount = min(amount_left_to_req, FSG_BUFLEN);
887 partial_page = usb_offset & (PAGE_CACHE_SIZE - 1); 887 partial_page = usb_offset & (PAGE_CACHE_SIZE - 1);
888 if (partial_page > 0) 888 if (partial_page > 0)
889 amount = min(amount, 889 amount = min(amount,
890 (unsigned int) PAGE_CACHE_SIZE - partial_page); 890 (unsigned int) PAGE_CACHE_SIZE - partial_page);
891 891
892 if (amount == 0) { 892 if (amount == 0) {
893 get_some_more = 0; 893 get_some_more = 0;
894 curlun->sense_data = 894 curlun->sense_data =
895 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 895 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
896 curlun->info_valid = 1; 896 curlun->info_valid = 1;
897 continue; 897 continue;
898 } 898 }
899 amount -= (amount & 511); 899 amount -= (amount & 511);
900 if (amount == 0) { 900 if (amount == 0) {
901 901
902 /* Why were we were asked to transfer a 902 /* Why were we were asked to transfer a
903 * partial block? */ 903 * partial block? */
904 get_some_more = 0; 904 get_some_more = 0;
905 continue; 905 continue;
906 } 906 }
907 907
908 /* Get the next buffer */ 908 /* Get the next buffer */
909 usb_offset += amount; 909 usb_offset += amount;
910 common->usb_amount_left -= amount; 910 common->usb_amount_left -= amount;
911 amount_left_to_req -= amount; 911 amount_left_to_req -= amount;
912 if (amount_left_to_req == 0) 912 if (amount_left_to_req == 0)
913 get_some_more = 0; 913 get_some_more = 0;
914 914
915 /* amount is always divisible by 512, hence by 915 /* amount is always divisible by 512, hence by
916 * the bulk-out maxpacket size */ 916 * the bulk-out maxpacket size */
917 bh->outreq->length = amount; 917 bh->outreq->length = amount;
918 bh->bulk_out_intended_length = amount; 918 bh->bulk_out_intended_length = amount;
919 bh->outreq->short_not_ok = 1; 919 bh->outreq->short_not_ok = 1;
920 START_TRANSFER_OR(common, bulk_out, bh->outreq, 920 START_TRANSFER_OR(common, bulk_out, bh->outreq,
921 &bh->outreq_busy, &bh->state) 921 &bh->outreq_busy, &bh->state)
922 /* Don't know what to do if 922 /* Don't know what to do if
923 * common->fsg is NULL */ 923 * common->fsg is NULL */
924 return -EIO; 924 return -EIO;
925 common->next_buffhd_to_fill = bh->next; 925 common->next_buffhd_to_fill = bh->next;
926 continue; 926 continue;
927 } 927 }
928 928
929 /* Write the received data to the backing file */ 929 /* Write the received data to the backing file */
930 bh = common->next_buffhd_to_drain; 930 bh = common->next_buffhd_to_drain;
931 if (bh->state == BUF_STATE_EMPTY && !get_some_more) 931 if (bh->state == BUF_STATE_EMPTY && !get_some_more)
932 break; /* We stopped early */ 932 break; /* We stopped early */
933 if (bh->state == BUF_STATE_FULL) { 933 if (bh->state == BUF_STATE_FULL) {
934 common->next_buffhd_to_drain = bh->next; 934 common->next_buffhd_to_drain = bh->next;
935 bh->state = BUF_STATE_EMPTY; 935 bh->state = BUF_STATE_EMPTY;
936 936
937 /* Did something go wrong with the transfer? */ 937 /* Did something go wrong with the transfer? */
938 if (bh->outreq->status != 0) { 938 if (bh->outreq->status != 0) {
939 curlun->sense_data = SS_COMMUNICATION_FAILURE; 939 curlun->sense_data = SS_COMMUNICATION_FAILURE;
940 curlun->info_valid = 1; 940 curlun->info_valid = 1;
941 break; 941 break;
942 } 942 }
943 943
944 amount = bh->outreq->actual; 944 amount = bh->outreq->actual;
945 945
946 /* Perform the write */ 946 /* Perform the write */
947 rc = ums->write_sector(ums, 947 rc = ums->write_sector(ums,
948 file_offset / SECTOR_SIZE, 948 file_offset / SECTOR_SIZE,
949 amount / SECTOR_SIZE, 949 amount / SECTOR_SIZE,
950 (char __user *)bh->buf); 950 (char __user *)bh->buf);
951 if (!rc) 951 if (!rc)
952 return -EIO; 952 return -EIO;
953 nwritten = rc * SECTOR_SIZE; 953 nwritten = rc * SECTOR_SIZE;
954 954
955 VLDBG(curlun, "file write %u @ %llu -> %d\n", amount, 955 VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
956 (unsigned long long) file_offset, 956 (unsigned long long) file_offset,
957 (int) nwritten); 957 (int) nwritten);
958 958
959 if (nwritten < 0) { 959 if (nwritten < 0) {
960 LDBG(curlun, "error in file write: %d\n", 960 LDBG(curlun, "error in file write: %d\n",
961 (int) nwritten); 961 (int) nwritten);
962 nwritten = 0; 962 nwritten = 0;
963 } else if (nwritten < amount) { 963 } else if (nwritten < amount) {
964 LDBG(curlun, "partial file write: %d/%u\n", 964 LDBG(curlun, "partial file write: %d/%u\n",
965 (int) nwritten, amount); 965 (int) nwritten, amount);
966 nwritten -= (nwritten & 511); 966 nwritten -= (nwritten & 511);
967 /* Round down to a block */ 967 /* Round down to a block */
968 } 968 }
969 file_offset += nwritten; 969 file_offset += nwritten;
970 amount_left_to_write -= nwritten; 970 amount_left_to_write -= nwritten;
971 common->residue -= nwritten; 971 common->residue -= nwritten;
972 972
973 /* If an error occurred, report it and its position */ 973 /* If an error occurred, report it and its position */
974 if (nwritten < amount) { 974 if (nwritten < amount) {
975 printf("nwritten:%d amount:%d\n", nwritten, 975 printf("nwritten:%d amount:%d\n", nwritten,
976 amount); 976 amount);
977 curlun->sense_data = SS_WRITE_ERROR; 977 curlun->sense_data = SS_WRITE_ERROR;
978 curlun->info_valid = 1; 978 curlun->info_valid = 1;
979 break; 979 break;
980 } 980 }
981 981
982 /* Did the host decide to stop early? */ 982 /* Did the host decide to stop early? */
983 if (bh->outreq->actual != bh->outreq->length) { 983 if (bh->outreq->actual != bh->outreq->length) {
984 common->short_packet_received = 1; 984 common->short_packet_received = 1;
985 break; 985 break;
986 } 986 }
987 continue; 987 continue;
988 } 988 }
989 989
990 /* Wait for something to happen */ 990 /* Wait for something to happen */
991 rc = sleep_thread(common); 991 rc = sleep_thread(common);
992 if (rc) 992 if (rc)
993 return rc; 993 return rc;
994 } 994 }
995 995
996 return -EIO; /* No default reply */ 996 return -EIO; /* No default reply */
997 } 997 }
998 998
999 /*-------------------------------------------------------------------------*/ 999 /*-------------------------------------------------------------------------*/
1000 1000
1001 static int do_synchronize_cache(struct fsg_common *common) 1001 static int do_synchronize_cache(struct fsg_common *common)
1002 { 1002 {
1003 return 0; 1003 return 0;
1004 } 1004 }
1005 1005
1006 /*-------------------------------------------------------------------------*/ 1006 /*-------------------------------------------------------------------------*/
1007 1007
1008 static int do_verify(struct fsg_common *common) 1008 static int do_verify(struct fsg_common *common)
1009 { 1009 {
1010 struct fsg_lun *curlun = &common->luns[common->lun]; 1010 struct fsg_lun *curlun = &common->luns[common->lun];
1011 u32 lba; 1011 u32 lba;
1012 u32 verification_length; 1012 u32 verification_length;
1013 struct fsg_buffhd *bh = common->next_buffhd_to_fill; 1013 struct fsg_buffhd *bh = common->next_buffhd_to_fill;
1014 loff_t file_offset; 1014 loff_t file_offset;
1015 u32 amount_left; 1015 u32 amount_left;
1016 unsigned int amount; 1016 unsigned int amount;
1017 ssize_t nread; 1017 ssize_t nread;
1018 int rc; 1018 int rc;
1019 1019
1020 /* Get the starting Logical Block Address and check that it's 1020 /* Get the starting Logical Block Address and check that it's
1021 * not too big */ 1021 * not too big */
1022 lba = get_unaligned_be32(&common->cmnd[2]); 1022 lba = get_unaligned_be32(&common->cmnd[2]);
1023 if (lba >= curlun->num_sectors) { 1023 if (lba >= curlun->num_sectors) {
1024 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 1024 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1025 return -EINVAL; 1025 return -EINVAL;
1026 } 1026 }
1027 1027
1028 /* We allow DPO (Disable Page Out = don't save data in the 1028 /* We allow DPO (Disable Page Out = don't save data in the
1029 * cache) but we don't implement it. */ 1029 * cache) but we don't implement it. */
1030 if (common->cmnd[1] & ~0x10) { 1030 if (common->cmnd[1] & ~0x10) {
1031 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1031 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1032 return -EINVAL; 1032 return -EINVAL;
1033 } 1033 }
1034 1034
1035 verification_length = get_unaligned_be16(&common->cmnd[7]); 1035 verification_length = get_unaligned_be16(&common->cmnd[7]);
1036 if (unlikely(verification_length == 0)) 1036 if (unlikely(verification_length == 0))
1037 return -EIO; /* No default reply */ 1037 return -EIO; /* No default reply */
1038 1038
1039 /* Prepare to carry out the file verify */ 1039 /* Prepare to carry out the file verify */
1040 amount_left = verification_length << 9; 1040 amount_left = verification_length << 9;
1041 file_offset = ((loff_t) lba) << 9; 1041 file_offset = ((loff_t) lba) << 9;
1042 1042
1043 /* Write out all the dirty buffers before invalidating them */ 1043 /* Write out all the dirty buffers before invalidating them */
1044 1044
1045 /* Just try to read the requested blocks */ 1045 /* Just try to read the requested blocks */
1046 while (amount_left > 0) { 1046 while (amount_left > 0) {
1047 1047
1048 /* Figure out how much we need to read: 1048 /* Figure out how much we need to read:
1049 * Try to read the remaining amount, but not more than 1049 * Try to read the remaining amount, but not more than
1050 * the buffer size. 1050 * the buffer size.
1051 * And don't try to read past the end of the file. 1051 * And don't try to read past the end of the file.
1052 * If this means reading 0 then we were asked to read 1052 * If this means reading 0 then we were asked to read
1053 * past the end of file. */ 1053 * past the end of file. */
1054 amount = min(amount_left, FSG_BUFLEN); 1054 amount = min(amount_left, FSG_BUFLEN);
1055 if (amount == 0) { 1055 if (amount == 0) {
1056 curlun->sense_data = 1056 curlun->sense_data =
1057 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 1057 SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1058 curlun->info_valid = 1; 1058 curlun->info_valid = 1;
1059 break; 1059 break;
1060 } 1060 }
1061 1061
1062 /* Perform the read */ 1062 /* Perform the read */
1063 rc = ums->read_sector(ums, 1063 rc = ums->read_sector(ums,
1064 file_offset / SECTOR_SIZE, 1064 file_offset / SECTOR_SIZE,
1065 amount / SECTOR_SIZE, 1065 amount / SECTOR_SIZE,
1066 (char __user *)bh->buf); 1066 (char __user *)bh->buf);
1067 if (!rc) 1067 if (!rc)
1068 return -EIO; 1068 return -EIO;
1069 nread = rc * SECTOR_SIZE; 1069 nread = rc * SECTOR_SIZE;
1070 1070
1071 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount, 1071 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
1072 (unsigned long long) file_offset, 1072 (unsigned long long) file_offset,
1073 (int) nread); 1073 (int) nread);
1074 if (nread < 0) { 1074 if (nread < 0) {
1075 LDBG(curlun, "error in file verify: %d\n", 1075 LDBG(curlun, "error in file verify: %d\n",
1076 (int) nread); 1076 (int) nread);
1077 nread = 0; 1077 nread = 0;
1078 } else if (nread < amount) { 1078 } else if (nread < amount) {
1079 LDBG(curlun, "partial file verify: %d/%u\n", 1079 LDBG(curlun, "partial file verify: %d/%u\n",
1080 (int) nread, amount); 1080 (int) nread, amount);
1081 nread -= (nread & 511); /* Round down to a sector */ 1081 nread -= (nread & 511); /* Round down to a sector */
1082 } 1082 }
1083 if (nread == 0) { 1083 if (nread == 0) {
1084 curlun->sense_data = SS_UNRECOVERED_READ_ERROR; 1084 curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
1085 curlun->info_valid = 1; 1085 curlun->info_valid = 1;
1086 break; 1086 break;
1087 } 1087 }
1088 file_offset += nread; 1088 file_offset += nread;
1089 amount_left -= nread; 1089 amount_left -= nread;
1090 } 1090 }
1091 return 0; 1091 return 0;
1092 } 1092 }
1093 1093
1094 /*-------------------------------------------------------------------------*/ 1094 /*-------------------------------------------------------------------------*/
1095 1095
1096 static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh) 1096 static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
1097 { 1097 {
1098 struct fsg_lun *curlun = &common->luns[common->lun]; 1098 struct fsg_lun *curlun = &common->luns[common->lun];
1099 static const char vendor_id[] = "Linux "; 1099 static const char vendor_id[] = "Linux ";
1100 u8 *buf = (u8 *) bh->buf; 1100 u8 *buf = (u8 *) bh->buf;
1101 1101
1102 if (!curlun) { /* Unsupported LUNs are okay */ 1102 if (!curlun) { /* Unsupported LUNs are okay */
1103 common->bad_lun_okay = 1; 1103 common->bad_lun_okay = 1;
1104 memset(buf, 0, 36); 1104 memset(buf, 0, 36);
1105 buf[0] = 0x7f; /* Unsupported, no device-type */ 1105 buf[0] = 0x7f; /* Unsupported, no device-type */
1106 buf[4] = 31; /* Additional length */ 1106 buf[4] = 31; /* Additional length */
1107 return 36; 1107 return 36;
1108 } 1108 }
1109 1109
1110 memset(buf, 0, 8); 1110 memset(buf, 0, 8);
1111 buf[0] = TYPE_DISK; 1111 buf[0] = TYPE_DISK;
1112 buf[2] = 2; /* ANSI SCSI level 2 */ 1112 buf[2] = 2; /* ANSI SCSI level 2 */
1113 buf[3] = 2; /* SCSI-2 INQUIRY data format */ 1113 buf[3] = 2; /* SCSI-2 INQUIRY data format */
1114 buf[4] = 31; /* Additional length */ 1114 buf[4] = 31; /* Additional length */
1115 /* No special options */ 1115 /* No special options */
1116 sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id , 1116 sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
1117 ums->name, (u16) 0xffff); 1117 ums->name, (u16) 0xffff);
1118 1118
1119 return 36; 1119 return 36;
1120 } 1120 }
1121 1121
1122 1122
1123 static int do_request_sense(struct fsg_common *common, struct fsg_buffhd *bh) 1123 static int do_request_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1124 { 1124 {
1125 struct fsg_lun *curlun = &common->luns[common->lun]; 1125 struct fsg_lun *curlun = &common->luns[common->lun];
1126 u8 *buf = (u8 *) bh->buf; 1126 u8 *buf = (u8 *) bh->buf;
1127 u32 sd, sdinfo; 1127 u32 sd, sdinfo;
1128 int valid; 1128 int valid;
1129 1129
1130 /* 1130 /*
1131 * From the SCSI-2 spec., section 7.9 (Unit attention condition): 1131 * From the SCSI-2 spec., section 7.9 (Unit attention condition):
1132 * 1132 *
1133 * If a REQUEST SENSE command is received from an initiator 1133 * If a REQUEST SENSE command is received from an initiator
1134 * with a pending unit attention condition (before the target 1134 * with a pending unit attention condition (before the target
1135 * generates the contingent allegiance condition), then the 1135 * generates the contingent allegiance condition), then the
1136 * target shall either: 1136 * target shall either:
1137 * a) report any pending sense data and preserve the unit 1137 * a) report any pending sense data and preserve the unit
1138 * attention condition on the logical unit, or, 1138 * attention condition on the logical unit, or,
1139 * b) report the unit attention condition, may discard any 1139 * b) report the unit attention condition, may discard any
1140 * pending sense data, and clear the unit attention 1140 * pending sense data, and clear the unit attention
1141 * condition on the logical unit for that initiator. 1141 * condition on the logical unit for that initiator.
1142 * 1142 *
1143 * FSG normally uses option a); enable this code to use option b). 1143 * FSG normally uses option a); enable this code to use option b).
1144 */ 1144 */
1145 #if 0 1145 #if 0
1146 if (curlun && curlun->unit_attention_data != SS_NO_SENSE) { 1146 if (curlun && curlun->unit_attention_data != SS_NO_SENSE) {
1147 curlun->sense_data = curlun->unit_attention_data; 1147 curlun->sense_data = curlun->unit_attention_data;
1148 curlun->unit_attention_data = SS_NO_SENSE; 1148 curlun->unit_attention_data = SS_NO_SENSE;
1149 } 1149 }
1150 #endif 1150 #endif
1151 1151
1152 if (!curlun) { /* Unsupported LUNs are okay */ 1152 if (!curlun) { /* Unsupported LUNs are okay */
1153 common->bad_lun_okay = 1; 1153 common->bad_lun_okay = 1;
1154 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED; 1154 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1155 sdinfo = 0; 1155 sdinfo = 0;
1156 valid = 0; 1156 valid = 0;
1157 } else { 1157 } else {
1158 sd = curlun->sense_data; 1158 sd = curlun->sense_data;
1159 valid = curlun->info_valid << 7; 1159 valid = curlun->info_valid << 7;
1160 curlun->sense_data = SS_NO_SENSE; 1160 curlun->sense_data = SS_NO_SENSE;
1161 curlun->info_valid = 0; 1161 curlun->info_valid = 0;
1162 } 1162 }
1163 1163
1164 memset(buf, 0, 18); 1164 memset(buf, 0, 18);
1165 buf[0] = valid | 0x70; /* Valid, current error */ 1165 buf[0] = valid | 0x70; /* Valid, current error */
1166 buf[2] = SK(sd); 1166 buf[2] = SK(sd);
1167 put_unaligned_be32(sdinfo, &buf[3]); /* Sense information */ 1167 put_unaligned_be32(sdinfo, &buf[3]); /* Sense information */
1168 buf[7] = 18 - 8; /* Additional sense length */ 1168 buf[7] = 18 - 8; /* Additional sense length */
1169 buf[12] = ASC(sd); 1169 buf[12] = ASC(sd);
1170 buf[13] = ASCQ(sd); 1170 buf[13] = ASCQ(sd);
1171 return 18; 1171 return 18;
1172 } 1172 }
1173 1173
1174 static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh) 1174 static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
1175 { 1175 {
1176 struct fsg_lun *curlun = &common->luns[common->lun]; 1176 struct fsg_lun *curlun = &common->luns[common->lun];
1177 u32 lba = get_unaligned_be32(&common->cmnd[2]); 1177 u32 lba = get_unaligned_be32(&common->cmnd[2]);
1178 int pmi = common->cmnd[8]; 1178 int pmi = common->cmnd[8];
1179 u8 *buf = (u8 *) bh->buf; 1179 u8 *buf = (u8 *) bh->buf;
1180 1180
1181 /* Check the PMI and LBA fields */ 1181 /* Check the PMI and LBA fields */
1182 if (pmi > 1 || (pmi == 0 && lba != 0)) { 1182 if (pmi > 1 || (pmi == 0 && lba != 0)) {
1183 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1183 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1184 return -EINVAL; 1184 return -EINVAL;
1185 } 1185 }
1186 1186
1187 put_unaligned_be32(curlun->num_sectors - 1, &buf[0]); 1187 put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
1188 /* Max logical block */ 1188 /* Max logical block */
1189 put_unaligned_be32(512, &buf[4]); /* Block length */ 1189 put_unaligned_be32(512, &buf[4]); /* Block length */
1190 return 8; 1190 return 8;
1191 } 1191 }
1192 1192
1193 static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh) 1193 static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh)
1194 { 1194 {
1195 struct fsg_lun *curlun = &common->luns[common->lun]; 1195 struct fsg_lun *curlun = &common->luns[common->lun];
1196 int msf = common->cmnd[1] & 0x02; 1196 int msf = common->cmnd[1] & 0x02;
1197 u32 lba = get_unaligned_be32(&common->cmnd[2]); 1197 u32 lba = get_unaligned_be32(&common->cmnd[2]);
1198 u8 *buf = (u8 *) bh->buf; 1198 u8 *buf = (u8 *) bh->buf;
1199 1199
1200 if (common->cmnd[1] & ~0x02) { /* Mask away MSF */ 1200 if (common->cmnd[1] & ~0x02) { /* Mask away MSF */
1201 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1201 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1202 return -EINVAL; 1202 return -EINVAL;
1203 } 1203 }
1204 if (lba >= curlun->num_sectors) { 1204 if (lba >= curlun->num_sectors) {
1205 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; 1205 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1206 return -EINVAL; 1206 return -EINVAL;
1207 } 1207 }
1208 1208
1209 memset(buf, 0, 8); 1209 memset(buf, 0, 8);
1210 buf[0] = 0x01; /* 2048 bytes of user data, rest is EC */ 1210 buf[0] = 0x01; /* 2048 bytes of user data, rest is EC */
1211 store_cdrom_address(&buf[4], msf, lba); 1211 store_cdrom_address(&buf[4], msf, lba);
1212 return 8; 1212 return 8;
1213 } 1213 }
1214 1214
1215 1215
1216 static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh) 1216 static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
1217 { 1217 {
1218 struct fsg_lun *curlun = &common->luns[common->lun]; 1218 struct fsg_lun *curlun = &common->luns[common->lun];
1219 int msf = common->cmnd[1] & 0x02; 1219 int msf = common->cmnd[1] & 0x02;
1220 int start_track = common->cmnd[6]; 1220 int start_track = common->cmnd[6];
1221 u8 *buf = (u8 *) bh->buf; 1221 u8 *buf = (u8 *) bh->buf;
1222 1222
1223 if ((common->cmnd[1] & ~0x02) != 0 || /* Mask away MSF */ 1223 if ((common->cmnd[1] & ~0x02) != 0 || /* Mask away MSF */
1224 start_track > 1) { 1224 start_track > 1) {
1225 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1225 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1226 return -EINVAL; 1226 return -EINVAL;
1227 } 1227 }
1228 1228
1229 memset(buf, 0, 20); 1229 memset(buf, 0, 20);
1230 buf[1] = (20-2); /* TOC data length */ 1230 buf[1] = (20-2); /* TOC data length */
1231 buf[2] = 1; /* First track number */ 1231 buf[2] = 1; /* First track number */
1232 buf[3] = 1; /* Last track number */ 1232 buf[3] = 1; /* Last track number */
1233 buf[5] = 0x16; /* Data track, copying allowed */ 1233 buf[5] = 0x16; /* Data track, copying allowed */
1234 buf[6] = 0x01; /* Only track is number 1 */ 1234 buf[6] = 0x01; /* Only track is number 1 */
1235 store_cdrom_address(&buf[8], msf, 0); 1235 store_cdrom_address(&buf[8], msf, 0);
1236 1236
1237 buf[13] = 0x16; /* Lead-out track is data */ 1237 buf[13] = 0x16; /* Lead-out track is data */
1238 buf[14] = 0xAA; /* Lead-out track number */ 1238 buf[14] = 0xAA; /* Lead-out track number */
1239 store_cdrom_address(&buf[16], msf, curlun->num_sectors); 1239 store_cdrom_address(&buf[16], msf, curlun->num_sectors);
1240 1240
1241 return 20; 1241 return 20;
1242 } 1242 }
1243 1243
1244 static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh) 1244 static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1245 { 1245 {
1246 struct fsg_lun *curlun = &common->luns[common->lun]; 1246 struct fsg_lun *curlun = &common->luns[common->lun];
1247 int mscmnd = common->cmnd[0]; 1247 int mscmnd = common->cmnd[0];
1248 u8 *buf = (u8 *) bh->buf; 1248 u8 *buf = (u8 *) bh->buf;
1249 u8 *buf0 = buf; 1249 u8 *buf0 = buf;
1250 int pc, page_code; 1250 int pc, page_code;
1251 int changeable_values, all_pages; 1251 int changeable_values, all_pages;
1252 int valid_page = 0; 1252 int valid_page = 0;
1253 int len, limit; 1253 int len, limit;
1254 1254
1255 if ((common->cmnd[1] & ~0x08) != 0) { /* Mask away DBD */ 1255 if ((common->cmnd[1] & ~0x08) != 0) { /* Mask away DBD */
1256 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1256 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1257 return -EINVAL; 1257 return -EINVAL;
1258 } 1258 }
1259 pc = common->cmnd[2] >> 6; 1259 pc = common->cmnd[2] >> 6;
1260 page_code = common->cmnd[2] & 0x3f; 1260 page_code = common->cmnd[2] & 0x3f;
1261 if (pc == 3) { 1261 if (pc == 3) {
1262 curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED; 1262 curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED;
1263 return -EINVAL; 1263 return -EINVAL;
1264 } 1264 }
1265 changeable_values = (pc == 1); 1265 changeable_values = (pc == 1);
1266 all_pages = (page_code == 0x3f); 1266 all_pages = (page_code == 0x3f);
1267 1267
1268 /* Write the mode parameter header. Fixed values are: default 1268 /* Write the mode parameter header. Fixed values are: default
1269 * medium type, no cache control (DPOFUA), and no block descriptors. 1269 * medium type, no cache control (DPOFUA), and no block descriptors.
1270 * The only variable value is the WriteProtect bit. We will fill in 1270 * The only variable value is the WriteProtect bit. We will fill in
1271 * the mode data length later. */ 1271 * the mode data length later. */
1272 memset(buf, 0, 8); 1272 memset(buf, 0, 8);
1273 if (mscmnd == SC_MODE_SENSE_6) { 1273 if (mscmnd == SC_MODE_SENSE_6) {
1274 buf[2] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */ 1274 buf[2] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */
1275 buf += 4; 1275 buf += 4;
1276 limit = 255; 1276 limit = 255;
1277 } else { /* SC_MODE_SENSE_10 */ 1277 } else { /* SC_MODE_SENSE_10 */
1278 buf[3] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */ 1278 buf[3] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */
1279 buf += 8; 1279 buf += 8;
1280 limit = 65535; /* Should really be FSG_BUFLEN */ 1280 limit = 65535; /* Should really be FSG_BUFLEN */
1281 } 1281 }
1282 1282
1283 /* No block descriptors */ 1283 /* No block descriptors */
1284 1284
1285 /* The mode pages, in numerical order. The only page we support 1285 /* The mode pages, in numerical order. The only page we support
1286 * is the Caching page. */ 1286 * is the Caching page. */
1287 if (page_code == 0x08 || all_pages) { 1287 if (page_code == 0x08 || all_pages) {
1288 valid_page = 1; 1288 valid_page = 1;
1289 buf[0] = 0x08; /* Page code */ 1289 buf[0] = 0x08; /* Page code */
1290 buf[1] = 10; /* Page length */ 1290 buf[1] = 10; /* Page length */
1291 memset(buf+2, 0, 10); /* None of the fields are changeable */ 1291 memset(buf+2, 0, 10); /* None of the fields are changeable */
1292 1292
1293 if (!changeable_values) { 1293 if (!changeable_values) {
1294 buf[2] = 0x04; /* Write cache enable, */ 1294 buf[2] = 0x04; /* Write cache enable, */
1295 /* Read cache not disabled */ 1295 /* Read cache not disabled */
1296 /* No cache retention priorities */ 1296 /* No cache retention priorities */
1297 put_unaligned_be16(0xffff, &buf[4]); 1297 put_unaligned_be16(0xffff, &buf[4]);
1298 /* Don't disable prefetch */ 1298 /* Don't disable prefetch */
1299 /* Minimum prefetch = 0 */ 1299 /* Minimum prefetch = 0 */
1300 put_unaligned_be16(0xffff, &buf[8]); 1300 put_unaligned_be16(0xffff, &buf[8]);
1301 /* Maximum prefetch */ 1301 /* Maximum prefetch */
1302 put_unaligned_be16(0xffff, &buf[10]); 1302 put_unaligned_be16(0xffff, &buf[10]);
1303 /* Maximum prefetch ceiling */ 1303 /* Maximum prefetch ceiling */
1304 } 1304 }
1305 buf += 12; 1305 buf += 12;
1306 } 1306 }
1307 1307
1308 /* Check that a valid page was requested and the mode data length 1308 /* Check that a valid page was requested and the mode data length
1309 * isn't too long. */ 1309 * isn't too long. */
1310 len = buf - buf0; 1310 len = buf - buf0;
1311 if (!valid_page || len > limit) { 1311 if (!valid_page || len > limit) {
1312 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1312 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1313 return -EINVAL; 1313 return -EINVAL;
1314 } 1314 }
1315 1315
1316 /* Store the mode data length */ 1316 /* Store the mode data length */
1317 if (mscmnd == SC_MODE_SENSE_6) 1317 if (mscmnd == SC_MODE_SENSE_6)
1318 buf0[0] = len - 1; 1318 buf0[0] = len - 1;
1319 else 1319 else
1320 put_unaligned_be16(len - 2, buf0); 1320 put_unaligned_be16(len - 2, buf0);
1321 return len; 1321 return len;
1322 } 1322 }
1323 1323
1324 1324
1325 static int do_start_stop(struct fsg_common *common) 1325 static int do_start_stop(struct fsg_common *common)
1326 { 1326 {
1327 struct fsg_lun *curlun = &common->luns[common->lun]; 1327 struct fsg_lun *curlun = &common->luns[common->lun];
1328 1328
1329 if (!curlun) { 1329 if (!curlun) {
1330 return -EINVAL; 1330 return -EINVAL;
1331 } else if (!curlun->removable) { 1331 } else if (!curlun->removable) {
1332 curlun->sense_data = SS_INVALID_COMMAND; 1332 curlun->sense_data = SS_INVALID_COMMAND;
1333 return -EINVAL; 1333 return -EINVAL;
1334 } 1334 }
1335 1335
1336 return 0; 1336 return 0;
1337 } 1337 }
1338 1338
1339 static int do_prevent_allow(struct fsg_common *common) 1339 static int do_prevent_allow(struct fsg_common *common)
1340 { 1340 {
1341 struct fsg_lun *curlun = &common->luns[common->lun]; 1341 struct fsg_lun *curlun = &common->luns[common->lun];
1342 int prevent; 1342 int prevent;
1343 1343
1344 if (!curlun->removable) { 1344 if (!curlun->removable) {
1345 curlun->sense_data = SS_INVALID_COMMAND; 1345 curlun->sense_data = SS_INVALID_COMMAND;
1346 return -EINVAL; 1346 return -EINVAL;
1347 } 1347 }
1348 1348
1349 prevent = common->cmnd[4] & 0x01; 1349 prevent = common->cmnd[4] & 0x01;
1350 if ((common->cmnd[4] & ~0x01) != 0) { /* Mask away Prevent */ 1350 if ((common->cmnd[4] & ~0x01) != 0) { /* Mask away Prevent */
1351 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1351 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1352 return -EINVAL; 1352 return -EINVAL;
1353 } 1353 }
1354 1354
1355 if (curlun->prevent_medium_removal && !prevent) 1355 if (curlun->prevent_medium_removal && !prevent)
1356 fsg_lun_fsync_sub(curlun); 1356 fsg_lun_fsync_sub(curlun);
1357 curlun->prevent_medium_removal = prevent; 1357 curlun->prevent_medium_removal = prevent;
1358 return 0; 1358 return 0;
1359 } 1359 }
1360 1360
1361 1361
1362 static int do_read_format_capacities(struct fsg_common *common, 1362 static int do_read_format_capacities(struct fsg_common *common,
1363 struct fsg_buffhd *bh) 1363 struct fsg_buffhd *bh)
1364 { 1364 {
1365 struct fsg_lun *curlun = &common->luns[common->lun]; 1365 struct fsg_lun *curlun = &common->luns[common->lun];
1366 u8 *buf = (u8 *) bh->buf; 1366 u8 *buf = (u8 *) bh->buf;
1367 1367
1368 buf[0] = buf[1] = buf[2] = 0; 1368 buf[0] = buf[1] = buf[2] = 0;
1369 buf[3] = 8; /* Only the Current/Maximum Capacity Descriptor */ 1369 buf[3] = 8; /* Only the Current/Maximum Capacity Descriptor */
1370 buf += 4; 1370 buf += 4;
1371 1371
1372 put_unaligned_be32(curlun->num_sectors, &buf[0]); 1372 put_unaligned_be32(curlun->num_sectors, &buf[0]);
1373 /* Number of blocks */ 1373 /* Number of blocks */
1374 put_unaligned_be32(512, &buf[4]); /* Block length */ 1374 put_unaligned_be32(512, &buf[4]); /* Block length */
1375 buf[4] = 0x02; /* Current capacity */ 1375 buf[4] = 0x02; /* Current capacity */
1376 return 12; 1376 return 12;
1377 } 1377 }
1378 1378
1379 1379
1380 static int do_mode_select(struct fsg_common *common, struct fsg_buffhd *bh) 1380 static int do_mode_select(struct fsg_common *common, struct fsg_buffhd *bh)
1381 { 1381 {
1382 struct fsg_lun *curlun = &common->luns[common->lun]; 1382 struct fsg_lun *curlun = &common->luns[common->lun];
1383 1383
1384 /* We don't support MODE SELECT */ 1384 /* We don't support MODE SELECT */
1385 if (curlun) 1385 if (curlun)
1386 curlun->sense_data = SS_INVALID_COMMAND; 1386 curlun->sense_data = SS_INVALID_COMMAND;
1387 return -EINVAL; 1387 return -EINVAL;
1388 } 1388 }
1389 1389
1390 1390
1391 /*-------------------------------------------------------------------------*/ 1391 /*-------------------------------------------------------------------------*/
1392 1392
1393 static int halt_bulk_in_endpoint(struct fsg_dev *fsg) 1393 static int halt_bulk_in_endpoint(struct fsg_dev *fsg)
1394 { 1394 {
1395 int rc; 1395 int rc;
1396 1396
1397 rc = fsg_set_halt(fsg, fsg->bulk_in); 1397 rc = fsg_set_halt(fsg, fsg->bulk_in);
1398 if (rc == -EAGAIN) 1398 if (rc == -EAGAIN)
1399 VDBG(fsg, "delayed bulk-in endpoint halt\n"); 1399 VDBG(fsg, "delayed bulk-in endpoint halt\n");
1400 while (rc != 0) { 1400 while (rc != 0) {
1401 if (rc != -EAGAIN) { 1401 if (rc != -EAGAIN) {
1402 WARNING(fsg, "usb_ep_set_halt -> %d\n", rc); 1402 WARNING(fsg, "usb_ep_set_halt -> %d\n", rc);
1403 rc = 0; 1403 rc = 0;
1404 break; 1404 break;
1405 } 1405 }
1406 1406
1407 rc = usb_ep_set_halt(fsg->bulk_in); 1407 rc = usb_ep_set_halt(fsg->bulk_in);
1408 } 1408 }
1409 return rc; 1409 return rc;
1410 } 1410 }
1411 1411
1412 static int wedge_bulk_in_endpoint(struct fsg_dev *fsg) 1412 static int wedge_bulk_in_endpoint(struct fsg_dev *fsg)
1413 { 1413 {
1414 int rc; 1414 int rc;
1415 1415
1416 DBG(fsg, "bulk-in set wedge\n"); 1416 DBG(fsg, "bulk-in set wedge\n");
1417 rc = 0; /* usb_ep_set_wedge(fsg->bulk_in); */ 1417 rc = 0; /* usb_ep_set_wedge(fsg->bulk_in); */
1418 if (rc == -EAGAIN) 1418 if (rc == -EAGAIN)
1419 VDBG(fsg, "delayed bulk-in endpoint wedge\n"); 1419 VDBG(fsg, "delayed bulk-in endpoint wedge\n");
1420 while (rc != 0) { 1420 while (rc != 0) {
1421 if (rc != -EAGAIN) { 1421 if (rc != -EAGAIN) {
1422 WARNING(fsg, "usb_ep_set_wedge -> %d\n", rc); 1422 WARNING(fsg, "usb_ep_set_wedge -> %d\n", rc);
1423 rc = 0; 1423 rc = 0;
1424 break; 1424 break;
1425 } 1425 }
1426 } 1426 }
1427 return rc; 1427 return rc;
1428 } 1428 }
1429 1429
1430 static int pad_with_zeros(struct fsg_dev *fsg) 1430 static int pad_with_zeros(struct fsg_dev *fsg)
1431 { 1431 {
1432 struct fsg_buffhd *bh = fsg->common->next_buffhd_to_fill; 1432 struct fsg_buffhd *bh = fsg->common->next_buffhd_to_fill;
1433 u32 nkeep = bh->inreq->length; 1433 u32 nkeep = bh->inreq->length;
1434 u32 nsend; 1434 u32 nsend;
1435 int rc; 1435 int rc;
1436 1436
1437 bh->state = BUF_STATE_EMPTY; /* For the first iteration */ 1437 bh->state = BUF_STATE_EMPTY; /* For the first iteration */
1438 fsg->common->usb_amount_left = nkeep + fsg->common->residue; 1438 fsg->common->usb_amount_left = nkeep + fsg->common->residue;
1439 while (fsg->common->usb_amount_left > 0) { 1439 while (fsg->common->usb_amount_left > 0) {
1440 1440
1441 /* Wait for the next buffer to be free */ 1441 /* Wait for the next buffer to be free */
1442 while (bh->state != BUF_STATE_EMPTY) { 1442 while (bh->state != BUF_STATE_EMPTY) {
1443 rc = sleep_thread(fsg->common); 1443 rc = sleep_thread(fsg->common);
1444 if (rc) 1444 if (rc)
1445 return rc; 1445 return rc;
1446 } 1446 }
1447 1447
1448 nsend = min(fsg->common->usb_amount_left, FSG_BUFLEN); 1448 nsend = min(fsg->common->usb_amount_left, FSG_BUFLEN);
1449 memset(bh->buf + nkeep, 0, nsend - nkeep); 1449 memset(bh->buf + nkeep, 0, nsend - nkeep);
1450 bh->inreq->length = nsend; 1450 bh->inreq->length = nsend;
1451 bh->inreq->zero = 0; 1451 bh->inreq->zero = 0;
1452 start_transfer(fsg, fsg->bulk_in, bh->inreq, 1452 start_transfer(fsg, fsg->bulk_in, bh->inreq,
1453 &bh->inreq_busy, &bh->state); 1453 &bh->inreq_busy, &bh->state);
1454 bh = fsg->common->next_buffhd_to_fill = bh->next; 1454 bh = fsg->common->next_buffhd_to_fill = bh->next;
1455 fsg->common->usb_amount_left -= nsend; 1455 fsg->common->usb_amount_left -= nsend;
1456 nkeep = 0; 1456 nkeep = 0;
1457 } 1457 }
1458 return 0; 1458 return 0;
1459 } 1459 }
1460 1460
1461 static int throw_away_data(struct fsg_common *common) 1461 static int throw_away_data(struct fsg_common *common)
1462 { 1462 {
1463 struct fsg_buffhd *bh; 1463 struct fsg_buffhd *bh;
1464 u32 amount; 1464 u32 amount;
1465 int rc; 1465 int rc;
1466 1466
1467 for (bh = common->next_buffhd_to_drain; 1467 for (bh = common->next_buffhd_to_drain;
1468 bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0; 1468 bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0;
1469 bh = common->next_buffhd_to_drain) { 1469 bh = common->next_buffhd_to_drain) {
1470 1470
1471 /* Throw away the data in a filled buffer */ 1471 /* Throw away the data in a filled buffer */
1472 if (bh->state == BUF_STATE_FULL) { 1472 if (bh->state == BUF_STATE_FULL) {
1473 bh->state = BUF_STATE_EMPTY; 1473 bh->state = BUF_STATE_EMPTY;
1474 common->next_buffhd_to_drain = bh->next; 1474 common->next_buffhd_to_drain = bh->next;
1475 1475
1476 /* A short packet or an error ends everything */ 1476 /* A short packet or an error ends everything */
1477 if (bh->outreq->actual != bh->outreq->length || 1477 if (bh->outreq->actual != bh->outreq->length ||
1478 bh->outreq->status != 0) { 1478 bh->outreq->status != 0) {
1479 raise_exception(common, 1479 raise_exception(common,
1480 FSG_STATE_ABORT_BULK_OUT); 1480 FSG_STATE_ABORT_BULK_OUT);
1481 return -EINTR; 1481 return -EINTR;
1482 } 1482 }
1483 continue; 1483 continue;
1484 } 1484 }
1485 1485
1486 /* Try to submit another request if we need one */ 1486 /* Try to submit another request if we need one */
1487 bh = common->next_buffhd_to_fill; 1487 bh = common->next_buffhd_to_fill;
1488 if (bh->state == BUF_STATE_EMPTY 1488 if (bh->state == BUF_STATE_EMPTY
1489 && common->usb_amount_left > 0) { 1489 && common->usb_amount_left > 0) {
1490 amount = min(common->usb_amount_left, FSG_BUFLEN); 1490 amount = min(common->usb_amount_left, FSG_BUFLEN);
1491 1491
1492 /* amount is always divisible by 512, hence by 1492 /* amount is always divisible by 512, hence by
1493 * the bulk-out maxpacket size */ 1493 * the bulk-out maxpacket size */
1494 bh->outreq->length = amount; 1494 bh->outreq->length = amount;
1495 bh->bulk_out_intended_length = amount; 1495 bh->bulk_out_intended_length = amount;
1496 bh->outreq->short_not_ok = 1; 1496 bh->outreq->short_not_ok = 1;
1497 START_TRANSFER_OR(common, bulk_out, bh->outreq, 1497 START_TRANSFER_OR(common, bulk_out, bh->outreq,
1498 &bh->outreq_busy, &bh->state) 1498 &bh->outreq_busy, &bh->state)
1499 /* Don't know what to do if 1499 /* Don't know what to do if
1500 * common->fsg is NULL */ 1500 * common->fsg is NULL */
1501 return -EIO; 1501 return -EIO;
1502 common->next_buffhd_to_fill = bh->next; 1502 common->next_buffhd_to_fill = bh->next;
1503 common->usb_amount_left -= amount; 1503 common->usb_amount_left -= amount;
1504 continue; 1504 continue;
1505 } 1505 }
1506 1506
1507 /* Otherwise wait for something to happen */ 1507 /* Otherwise wait for something to happen */
1508 rc = sleep_thread(common); 1508 rc = sleep_thread(common);
1509 if (rc) 1509 if (rc)
1510 return rc; 1510 return rc;
1511 } 1511 }
1512 return 0; 1512 return 0;
1513 } 1513 }
1514 1514
1515 1515
1516 static int finish_reply(struct fsg_common *common) 1516 static int finish_reply(struct fsg_common *common)
1517 { 1517 {
1518 struct fsg_buffhd *bh = common->next_buffhd_to_fill; 1518 struct fsg_buffhd *bh = common->next_buffhd_to_fill;
1519 int rc = 0; 1519 int rc = 0;
1520 1520
1521 switch (common->data_dir) { 1521 switch (common->data_dir) {
1522 case DATA_DIR_NONE: 1522 case DATA_DIR_NONE:
1523 break; /* Nothing to send */ 1523 break; /* Nothing to send */
1524 1524
1525 /* If we don't know whether the host wants to read or write, 1525 /* If we don't know whether the host wants to read or write,
1526 * this must be CB or CBI with an unknown command. We mustn't 1526 * this must be CB or CBI with an unknown command. We mustn't
1527 * try to send or receive any data. So stall both bulk pipes 1527 * try to send or receive any data. So stall both bulk pipes
1528 * if we can and wait for a reset. */ 1528 * if we can and wait for a reset. */
1529 case DATA_DIR_UNKNOWN: 1529 case DATA_DIR_UNKNOWN:
1530 if (!common->can_stall) { 1530 if (!common->can_stall) {
1531 /* Nothing */ 1531 /* Nothing */
1532 } else if (fsg_is_set(common)) { 1532 } else if (fsg_is_set(common)) {
1533 fsg_set_halt(common->fsg, common->fsg->bulk_out); 1533 fsg_set_halt(common->fsg, common->fsg->bulk_out);
1534 rc = halt_bulk_in_endpoint(common->fsg); 1534 rc = halt_bulk_in_endpoint(common->fsg);
1535 } else { 1535 } else {
1536 /* Don't know what to do if common->fsg is NULL */ 1536 /* Don't know what to do if common->fsg is NULL */
1537 rc = -EIO; 1537 rc = -EIO;
1538 } 1538 }
1539 break; 1539 break;
1540 1540
1541 /* All but the last buffer of data must have already been sent */ 1541 /* All but the last buffer of data must have already been sent */
1542 case DATA_DIR_TO_HOST: 1542 case DATA_DIR_TO_HOST:
1543 if (common->data_size == 0) { 1543 if (common->data_size == 0) {
1544 /* Nothing to send */ 1544 /* Nothing to send */
1545 1545
1546 /* If there's no residue, simply send the last buffer */ 1546 /* If there's no residue, simply send the last buffer */
1547 } else if (common->residue == 0) { 1547 } else if (common->residue == 0) {
1548 bh->inreq->zero = 0; 1548 bh->inreq->zero = 0;
1549 START_TRANSFER_OR(common, bulk_in, bh->inreq, 1549 START_TRANSFER_OR(common, bulk_in, bh->inreq,
1550 &bh->inreq_busy, &bh->state) 1550 &bh->inreq_busy, &bh->state)
1551 return -EIO; 1551 return -EIO;
1552 common->next_buffhd_to_fill = bh->next; 1552 common->next_buffhd_to_fill = bh->next;
1553 1553
1554 /* For Bulk-only, if we're allowed to stall then send the 1554 /* For Bulk-only, if we're allowed to stall then send the
1555 * short packet and halt the bulk-in endpoint. If we can't 1555 * short packet and halt the bulk-in endpoint. If we can't
1556 * stall, pad out the remaining data with 0's. */ 1556 * stall, pad out the remaining data with 0's. */
1557 } else if (common->can_stall) { 1557 } else if (common->can_stall) {
1558 bh->inreq->zero = 1; 1558 bh->inreq->zero = 1;
1559 START_TRANSFER_OR(common, bulk_in, bh->inreq, 1559 START_TRANSFER_OR(common, bulk_in, bh->inreq,
1560 &bh->inreq_busy, &bh->state) 1560 &bh->inreq_busy, &bh->state)
1561 /* Don't know what to do if 1561 /* Don't know what to do if
1562 * common->fsg is NULL */ 1562 * common->fsg is NULL */
1563 rc = -EIO; 1563 rc = -EIO;
1564 common->next_buffhd_to_fill = bh->next; 1564 common->next_buffhd_to_fill = bh->next;
1565 if (common->fsg) 1565 if (common->fsg)
1566 rc = halt_bulk_in_endpoint(common->fsg); 1566 rc = halt_bulk_in_endpoint(common->fsg);
1567 } else if (fsg_is_set(common)) { 1567 } else if (fsg_is_set(common)) {
1568 rc = pad_with_zeros(common->fsg); 1568 rc = pad_with_zeros(common->fsg);
1569 } else { 1569 } else {
1570 /* Don't know what to do if common->fsg is NULL */ 1570 /* Don't know what to do if common->fsg is NULL */
1571 rc = -EIO; 1571 rc = -EIO;
1572 } 1572 }
1573 break; 1573 break;
1574 1574
1575 /* We have processed all we want from the data the host has sent. 1575 /* We have processed all we want from the data the host has sent.
1576 * There may still be outstanding bulk-out requests. */ 1576 * There may still be outstanding bulk-out requests. */
1577 case DATA_DIR_FROM_HOST: 1577 case DATA_DIR_FROM_HOST:
1578 if (common->residue == 0) { 1578 if (common->residue == 0) {
1579 /* Nothing to receive */ 1579 /* Nothing to receive */
1580 1580
1581 /* Did the host stop sending unexpectedly early? */ 1581 /* Did the host stop sending unexpectedly early? */
1582 } else if (common->short_packet_received) { 1582 } else if (common->short_packet_received) {
1583 raise_exception(common, FSG_STATE_ABORT_BULK_OUT); 1583 raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1584 rc = -EINTR; 1584 rc = -EINTR;
1585 1585
1586 /* We haven't processed all the incoming data. Even though 1586 /* We haven't processed all the incoming data. Even though
1587 * we may be allowed to stall, doing so would cause a race. 1587 * we may be allowed to stall, doing so would cause a race.
1588 * The controller may already have ACK'ed all the remaining 1588 * The controller may already have ACK'ed all the remaining
1589 * bulk-out packets, in which case the host wouldn't see a 1589 * bulk-out packets, in which case the host wouldn't see a
1590 * STALL. Not realizing the endpoint was halted, it wouldn't 1590 * STALL. Not realizing the endpoint was halted, it wouldn't
1591 * clear the halt -- leading to problems later on. */ 1591 * clear the halt -- leading to problems later on. */
1592 #if 0 1592 #if 0
1593 } else if (common->can_stall) { 1593 } else if (common->can_stall) {
1594 if (fsg_is_set(common)) 1594 if (fsg_is_set(common))
1595 fsg_set_halt(common->fsg, 1595 fsg_set_halt(common->fsg,
1596 common->fsg->bulk_out); 1596 common->fsg->bulk_out);
1597 raise_exception(common, FSG_STATE_ABORT_BULK_OUT); 1597 raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1598 rc = -EINTR; 1598 rc = -EINTR;
1599 #endif 1599 #endif
1600 1600
1601 /* We can't stall. Read in the excess data and throw it 1601 /* We can't stall. Read in the excess data and throw it
1602 * all away. */ 1602 * all away. */
1603 } else { 1603 } else {
1604 rc = throw_away_data(common); 1604 rc = throw_away_data(common);
1605 } 1605 }
1606 break; 1606 break;
1607 } 1607 }
1608 return rc; 1608 return rc;
1609 } 1609 }
1610 1610
1611 1611
1612 static int send_status(struct fsg_common *common) 1612 static int send_status(struct fsg_common *common)
1613 { 1613 {
1614 struct fsg_lun *curlun = &common->luns[common->lun]; 1614 struct fsg_lun *curlun = &common->luns[common->lun];
1615 struct fsg_buffhd *bh; 1615 struct fsg_buffhd *bh;
1616 struct bulk_cs_wrap *csw; 1616 struct bulk_cs_wrap *csw;
1617 int rc; 1617 int rc;
1618 u8 status = USB_STATUS_PASS; 1618 u8 status = USB_STATUS_PASS;
1619 u32 sd, sdinfo = 0; 1619 u32 sd, sdinfo = 0;
1620 1620
1621 /* Wait for the next buffer to become available */ 1621 /* Wait for the next buffer to become available */
1622 bh = common->next_buffhd_to_fill; 1622 bh = common->next_buffhd_to_fill;
1623 while (bh->state != BUF_STATE_EMPTY) { 1623 while (bh->state != BUF_STATE_EMPTY) {
1624 rc = sleep_thread(common); 1624 rc = sleep_thread(common);
1625 if (rc) 1625 if (rc)
1626 return rc; 1626 return rc;
1627 } 1627 }
1628 1628
1629 if (curlun) 1629 if (curlun)
1630 sd = curlun->sense_data; 1630 sd = curlun->sense_data;
1631 else if (common->bad_lun_okay) 1631 else if (common->bad_lun_okay)
1632 sd = SS_NO_SENSE; 1632 sd = SS_NO_SENSE;
1633 else 1633 else
1634 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED; 1634 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1635 1635
1636 if (common->phase_error) { 1636 if (common->phase_error) {
1637 DBG(common, "sending phase-error status\n"); 1637 DBG(common, "sending phase-error status\n");
1638 status = USB_STATUS_PHASE_ERROR; 1638 status = USB_STATUS_PHASE_ERROR;
1639 sd = SS_INVALID_COMMAND; 1639 sd = SS_INVALID_COMMAND;
1640 } else if (sd != SS_NO_SENSE) { 1640 } else if (sd != SS_NO_SENSE) {
1641 DBG(common, "sending command-failure status\n"); 1641 DBG(common, "sending command-failure status\n");
1642 status = USB_STATUS_FAIL; 1642 status = USB_STATUS_FAIL;
1643 VDBG(common, " sense data: SK x%02x, ASC x%02x, ASCQ x%02x;" 1643 VDBG(common, " sense data: SK x%02x, ASC x%02x, ASCQ x%02x;"
1644 " info x%x\n", 1644 " info x%x\n",
1645 SK(sd), ASC(sd), ASCQ(sd), sdinfo); 1645 SK(sd), ASC(sd), ASCQ(sd), sdinfo);
1646 } 1646 }
1647 1647
1648 /* Store and send the Bulk-only CSW */ 1648 /* Store and send the Bulk-only CSW */
1649 csw = (void *)bh->buf; 1649 csw = (void *)bh->buf;
1650 1650
1651 csw->Signature = cpu_to_le32(USB_BULK_CS_SIG); 1651 csw->Signature = cpu_to_le32(USB_BULK_CS_SIG);
1652 csw->Tag = common->tag; 1652 csw->Tag = common->tag;
1653 csw->Residue = cpu_to_le32(common->residue); 1653 csw->Residue = cpu_to_le32(common->residue);
1654 csw->Status = status; 1654 csw->Status = status;
1655 1655
1656 bh->inreq->length = USB_BULK_CS_WRAP_LEN; 1656 bh->inreq->length = USB_BULK_CS_WRAP_LEN;
1657 bh->inreq->zero = 0; 1657 bh->inreq->zero = 0;
1658 START_TRANSFER_OR(common, bulk_in, bh->inreq, 1658 START_TRANSFER_OR(common, bulk_in, bh->inreq,
1659 &bh->inreq_busy, &bh->state) 1659 &bh->inreq_busy, &bh->state)
1660 /* Don't know what to do if common->fsg is NULL */ 1660 /* Don't know what to do if common->fsg is NULL */
1661 return -EIO; 1661 return -EIO;
1662 1662
1663 common->next_buffhd_to_fill = bh->next; 1663 common->next_buffhd_to_fill = bh->next;
1664 return 0; 1664 return 0;
1665 } 1665 }
1666 1666
1667 1667
1668 /*-------------------------------------------------------------------------*/ 1668 /*-------------------------------------------------------------------------*/
1669 1669
1670 /* Check whether the command is properly formed and whether its data size 1670 /* Check whether the command is properly formed and whether its data size
1671 * and direction agree with the values we already have. */ 1671 * and direction agree with the values we already have. */
1672 static int check_command(struct fsg_common *common, int cmnd_size, 1672 static int check_command(struct fsg_common *common, int cmnd_size,
1673 enum data_direction data_dir, unsigned int mask, 1673 enum data_direction data_dir, unsigned int mask,
1674 int needs_medium, const char *name) 1674 int needs_medium, const char *name)
1675 { 1675 {
1676 int i; 1676 int i;
1677 int lun = common->cmnd[1] >> 5; 1677 int lun = common->cmnd[1] >> 5;
1678 static const char dirletter[4] = {'u', 'o', 'i', 'n'}; 1678 static const char dirletter[4] = {'u', 'o', 'i', 'n'};
1679 char hdlen[20]; 1679 char hdlen[20];
1680 struct fsg_lun *curlun; 1680 struct fsg_lun *curlun;
1681 1681
1682 hdlen[0] = 0; 1682 hdlen[0] = 0;
1683 if (common->data_dir != DATA_DIR_UNKNOWN) 1683 if (common->data_dir != DATA_DIR_UNKNOWN)
1684 sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir], 1684 sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir],
1685 common->data_size); 1685 common->data_size);
1686 VDBG(common, "SCSI command: %s; Dc=%d, D%c=%u; Hc=%d%s\n", 1686 VDBG(common, "SCSI command: %s; Dc=%d, D%c=%u; Hc=%d%s\n",
1687 name, cmnd_size, dirletter[(int) data_dir], 1687 name, cmnd_size, dirletter[(int) data_dir],
1688 common->data_size_from_cmnd, common->cmnd_size, hdlen); 1688 common->data_size_from_cmnd, common->cmnd_size, hdlen);
1689 1689
1690 /* We can't reply at all until we know the correct data direction 1690 /* We can't reply at all until we know the correct data direction
1691 * and size. */ 1691 * and size. */
1692 if (common->data_size_from_cmnd == 0) 1692 if (common->data_size_from_cmnd == 0)
1693 data_dir = DATA_DIR_NONE; 1693 data_dir = DATA_DIR_NONE;
1694 if (common->data_size < common->data_size_from_cmnd) { 1694 if (common->data_size < common->data_size_from_cmnd) {
1695 /* Host data size < Device data size is a phase error. 1695 /* Host data size < Device data size is a phase error.
1696 * Carry out the command, but only transfer as much as 1696 * Carry out the command, but only transfer as much as
1697 * we are allowed. */ 1697 * we are allowed. */
1698 common->data_size_from_cmnd = common->data_size; 1698 common->data_size_from_cmnd = common->data_size;
1699 common->phase_error = 1; 1699 common->phase_error = 1;
1700 } 1700 }
1701 common->residue = common->data_size; 1701 common->residue = common->data_size;
1702 common->usb_amount_left = common->data_size; 1702 common->usb_amount_left = common->data_size;
1703 1703
1704 /* Conflicting data directions is a phase error */ 1704 /* Conflicting data directions is a phase error */
1705 if (common->data_dir != data_dir 1705 if (common->data_dir != data_dir
1706 && common->data_size_from_cmnd > 0) { 1706 && common->data_size_from_cmnd > 0) {
1707 common->phase_error = 1; 1707 common->phase_error = 1;
1708 return -EINVAL; 1708 return -EINVAL;
1709 } 1709 }
1710 1710
1711 /* Verify the length of the command itself */ 1711 /* Verify the length of the command itself */
1712 if (cmnd_size != common->cmnd_size) { 1712 if (cmnd_size != common->cmnd_size) {
1713 1713
1714 /* Special case workaround: There are plenty of buggy SCSI 1714 /* Special case workaround: There are plenty of buggy SCSI
1715 * implementations. Many have issues with cbw->Length 1715 * implementations. Many have issues with cbw->Length
1716 * field passing a wrong command size. For those cases we 1716 * field passing a wrong command size. For those cases we
1717 * always try to work around the problem by using the length 1717 * always try to work around the problem by using the length
1718 * sent by the host side provided it is at least as large 1718 * sent by the host side provided it is at least as large
1719 * as the correct command length. 1719 * as the correct command length.
1720 * Examples of such cases would be MS-Windows, which issues 1720 * Examples of such cases would be MS-Windows, which issues
1721 * REQUEST SENSE with cbw->Length == 12 where it should 1721 * REQUEST SENSE with cbw->Length == 12 where it should
1722 * be 6, and xbox360 issuing INQUIRY, TEST UNIT READY and 1722 * be 6, and xbox360 issuing INQUIRY, TEST UNIT READY and
1723 * REQUEST SENSE with cbw->Length == 10 where it should 1723 * REQUEST SENSE with cbw->Length == 10 where it should
1724 * be 6 as well. 1724 * be 6 as well.
1725 */ 1725 */
1726 if (cmnd_size <= common->cmnd_size) { 1726 if (cmnd_size <= common->cmnd_size) {
1727 DBG(common, "%s is buggy! Expected length %d " 1727 DBG(common, "%s is buggy! Expected length %d "
1728 "but we got %d\n", name, 1728 "but we got %d\n", name,
1729 cmnd_size, common->cmnd_size); 1729 cmnd_size, common->cmnd_size);
1730 cmnd_size = common->cmnd_size; 1730 cmnd_size = common->cmnd_size;
1731 } else { 1731 } else {
1732 common->phase_error = 1; 1732 common->phase_error = 1;
1733 return -EINVAL; 1733 return -EINVAL;
1734 } 1734 }
1735 } 1735 }
1736 1736
1737 /* Check that the LUN values are consistent */ 1737 /* Check that the LUN values are consistent */
1738 if (common->lun != lun) 1738 if (common->lun != lun)
1739 DBG(common, "using LUN %d from CBW, not LUN %d from CDB\n", 1739 DBG(common, "using LUN %d from CBW, not LUN %d from CDB\n",
1740 common->lun, lun); 1740 common->lun, lun);
1741 1741
1742 /* Check the LUN */ 1742 /* Check the LUN */
1743 if (common->lun >= 0 && common->lun < common->nluns) { 1743 if (common->lun >= 0 && common->lun < common->nluns) {
1744 curlun = &common->luns[common->lun]; 1744 curlun = &common->luns[common->lun];
1745 if (common->cmnd[0] != SC_REQUEST_SENSE) { 1745 if (common->cmnd[0] != SC_REQUEST_SENSE) {
1746 curlun->sense_data = SS_NO_SENSE; 1746 curlun->sense_data = SS_NO_SENSE;
1747 curlun->info_valid = 0; 1747 curlun->info_valid = 0;
1748 } 1748 }
1749 } else { 1749 } else {
1750 curlun = NULL; 1750 curlun = NULL;
1751 common->bad_lun_okay = 0; 1751 common->bad_lun_okay = 0;
1752 1752
1753 /* INQUIRY and REQUEST SENSE commands are explicitly allowed 1753 /* INQUIRY and REQUEST SENSE commands are explicitly allowed
1754 * to use unsupported LUNs; all others may not. */ 1754 * to use unsupported LUNs; all others may not. */
1755 if (common->cmnd[0] != SC_INQUIRY && 1755 if (common->cmnd[0] != SC_INQUIRY &&
1756 common->cmnd[0] != SC_REQUEST_SENSE) { 1756 common->cmnd[0] != SC_REQUEST_SENSE) {
1757 DBG(common, "unsupported LUN %d\n", common->lun); 1757 DBG(common, "unsupported LUN %d\n", common->lun);
1758 return -EINVAL; 1758 return -EINVAL;
1759 } 1759 }
1760 } 1760 }
1761 #if 0 1761 #if 0
1762 /* If a unit attention condition exists, only INQUIRY and 1762 /* If a unit attention condition exists, only INQUIRY and
1763 * REQUEST SENSE commands are allowed; anything else must fail. */ 1763 * REQUEST SENSE commands are allowed; anything else must fail. */
1764 if (curlun && curlun->unit_attention_data != SS_NO_SENSE && 1764 if (curlun && curlun->unit_attention_data != SS_NO_SENSE &&
1765 common->cmnd[0] != SC_INQUIRY && 1765 common->cmnd[0] != SC_INQUIRY &&
1766 common->cmnd[0] != SC_REQUEST_SENSE) { 1766 common->cmnd[0] != SC_REQUEST_SENSE) {
1767 curlun->sense_data = curlun->unit_attention_data; 1767 curlun->sense_data = curlun->unit_attention_data;
1768 curlun->unit_attention_data = SS_NO_SENSE; 1768 curlun->unit_attention_data = SS_NO_SENSE;
1769 return -EINVAL; 1769 return -EINVAL;
1770 } 1770 }
1771 #endif 1771 #endif
1772 /* Check that only command bytes listed in the mask are non-zero */ 1772 /* Check that only command bytes listed in the mask are non-zero */
1773 common->cmnd[1] &= 0x1f; /* Mask away the LUN */ 1773 common->cmnd[1] &= 0x1f; /* Mask away the LUN */
1774 for (i = 1; i < cmnd_size; ++i) { 1774 for (i = 1; i < cmnd_size; ++i) {
1775 if (common->cmnd[i] && !(mask & (1 << i))) { 1775 if (common->cmnd[i] && !(mask & (1 << i))) {
1776 if (curlun) 1776 if (curlun)
1777 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; 1777 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1778 return -EINVAL; 1778 return -EINVAL;
1779 } 1779 }
1780 } 1780 }
1781 1781
1782 return 0; 1782 return 0;
1783 } 1783 }
1784 1784
1785 1785
1786 static int do_scsi_command(struct fsg_common *common) 1786 static int do_scsi_command(struct fsg_common *common)
1787 { 1787 {
1788 struct fsg_buffhd *bh; 1788 struct fsg_buffhd *bh;
1789 int rc; 1789 int rc;
1790 int reply = -EINVAL; 1790 int reply = -EINVAL;
1791 int i; 1791 int i;
1792 static char unknown[16]; 1792 static char unknown[16];
1793 struct fsg_lun *curlun = &common->luns[common->lun]; 1793 struct fsg_lun *curlun = &common->luns[common->lun];
1794 1794
1795 dump_cdb(common); 1795 dump_cdb(common);
1796 1796
1797 /* Wait for the next buffer to become available for data or status */ 1797 /* Wait for the next buffer to become available for data or status */
1798 bh = common->next_buffhd_to_fill; 1798 bh = common->next_buffhd_to_fill;
1799 common->next_buffhd_to_drain = bh; 1799 common->next_buffhd_to_drain = bh;
1800 while (bh->state != BUF_STATE_EMPTY) { 1800 while (bh->state != BUF_STATE_EMPTY) {
1801 rc = sleep_thread(common); 1801 rc = sleep_thread(common);
1802 if (rc) 1802 if (rc)
1803 return rc; 1803 return rc;
1804 } 1804 }
1805 common->phase_error = 0; 1805 common->phase_error = 0;
1806 common->short_packet_received = 0; 1806 common->short_packet_received = 0;
1807 1807
1808 down_read(&common->filesem); /* We're using the backing file */ 1808 down_read(&common->filesem); /* We're using the backing file */
1809 switch (common->cmnd[0]) { 1809 switch (common->cmnd[0]) {
1810 1810
1811 case SC_INQUIRY: 1811 case SC_INQUIRY:
1812 common->data_size_from_cmnd = common->cmnd[4]; 1812 common->data_size_from_cmnd = common->cmnd[4];
1813 reply = check_command(common, 6, DATA_DIR_TO_HOST, 1813 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1814 (1<<4), 0, 1814 (1<<4), 0,
1815 "INQUIRY"); 1815 "INQUIRY");
1816 if (reply == 0) 1816 if (reply == 0)
1817 reply = do_inquiry(common, bh); 1817 reply = do_inquiry(common, bh);
1818 break; 1818 break;
1819 1819
1820 case SC_MODE_SELECT_6: 1820 case SC_MODE_SELECT_6:
1821 common->data_size_from_cmnd = common->cmnd[4]; 1821 common->data_size_from_cmnd = common->cmnd[4];
1822 reply = check_command(common, 6, DATA_DIR_FROM_HOST, 1822 reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1823 (1<<1) | (1<<4), 0, 1823 (1<<1) | (1<<4), 0,
1824 "MODE SELECT(6)"); 1824 "MODE SELECT(6)");
1825 if (reply == 0) 1825 if (reply == 0)
1826 reply = do_mode_select(common, bh); 1826 reply = do_mode_select(common, bh);
1827 break; 1827 break;
1828 1828
1829 case SC_MODE_SELECT_10: 1829 case SC_MODE_SELECT_10:
1830 common->data_size_from_cmnd = 1830 common->data_size_from_cmnd =
1831 get_unaligned_be16(&common->cmnd[7]); 1831 get_unaligned_be16(&common->cmnd[7]);
1832 reply = check_command(common, 10, DATA_DIR_FROM_HOST, 1832 reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1833 (1<<1) | (3<<7), 0, 1833 (1<<1) | (3<<7), 0,
1834 "MODE SELECT(10)"); 1834 "MODE SELECT(10)");
1835 if (reply == 0) 1835 if (reply == 0)
1836 reply = do_mode_select(common, bh); 1836 reply = do_mode_select(common, bh);
1837 break; 1837 break;
1838 1838
1839 case SC_MODE_SENSE_6: 1839 case SC_MODE_SENSE_6:
1840 common->data_size_from_cmnd = common->cmnd[4]; 1840 common->data_size_from_cmnd = common->cmnd[4];
1841 reply = check_command(common, 6, DATA_DIR_TO_HOST, 1841 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1842 (1<<1) | (1<<2) | (1<<4), 0, 1842 (1<<1) | (1<<2) | (1<<4), 0,
1843 "MODE SENSE(6)"); 1843 "MODE SENSE(6)");
1844 if (reply == 0) 1844 if (reply == 0)
1845 reply = do_mode_sense(common, bh); 1845 reply = do_mode_sense(common, bh);
1846 break; 1846 break;
1847 1847
1848 case SC_MODE_SENSE_10: 1848 case SC_MODE_SENSE_10:
1849 common->data_size_from_cmnd = 1849 common->data_size_from_cmnd =
1850 get_unaligned_be16(&common->cmnd[7]); 1850 get_unaligned_be16(&common->cmnd[7]);
1851 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1851 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1852 (1<<1) | (1<<2) | (3<<7), 0, 1852 (1<<1) | (1<<2) | (3<<7), 0,
1853 "MODE SENSE(10)"); 1853 "MODE SENSE(10)");
1854 if (reply == 0) 1854 if (reply == 0)
1855 reply = do_mode_sense(common, bh); 1855 reply = do_mode_sense(common, bh);
1856 break; 1856 break;
1857 1857
1858 case SC_PREVENT_ALLOW_MEDIUM_REMOVAL: 1858 case SC_PREVENT_ALLOW_MEDIUM_REMOVAL:
1859 common->data_size_from_cmnd = 0; 1859 common->data_size_from_cmnd = 0;
1860 reply = check_command(common, 6, DATA_DIR_NONE, 1860 reply = check_command(common, 6, DATA_DIR_NONE,
1861 (1<<4), 0, 1861 (1<<4), 0,
1862 "PREVENT-ALLOW MEDIUM REMOVAL"); 1862 "PREVENT-ALLOW MEDIUM REMOVAL");
1863 if (reply == 0) 1863 if (reply == 0)
1864 reply = do_prevent_allow(common); 1864 reply = do_prevent_allow(common);
1865 break; 1865 break;
1866 1866
1867 case SC_READ_6: 1867 case SC_READ_6:
1868 i = common->cmnd[4]; 1868 i = common->cmnd[4];
1869 common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9; 1869 common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9;
1870 reply = check_command(common, 6, DATA_DIR_TO_HOST, 1870 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1871 (7<<1) | (1<<4), 1, 1871 (7<<1) | (1<<4), 1,
1872 "READ(6)"); 1872 "READ(6)");
1873 if (reply == 0) 1873 if (reply == 0)
1874 reply = do_read(common); 1874 reply = do_read(common);
1875 break; 1875 break;
1876 1876
1877 case SC_READ_10: 1877 case SC_READ_10:
1878 common->data_size_from_cmnd = 1878 common->data_size_from_cmnd =
1879 get_unaligned_be16(&common->cmnd[7]) << 9; 1879 get_unaligned_be16(&common->cmnd[7]) << 9;
1880 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1880 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1881 (1<<1) | (0xf<<2) | (3<<7), 1, 1881 (1<<1) | (0xf<<2) | (3<<7), 1,
1882 "READ(10)"); 1882 "READ(10)");
1883 if (reply == 0) 1883 if (reply == 0)
1884 reply = do_read(common); 1884 reply = do_read(common);
1885 break; 1885 break;
1886 1886
1887 case SC_READ_12: 1887 case SC_READ_12:
1888 common->data_size_from_cmnd = 1888 common->data_size_from_cmnd =
1889 get_unaligned_be32(&common->cmnd[6]) << 9; 1889 get_unaligned_be32(&common->cmnd[6]) << 9;
1890 reply = check_command(common, 12, DATA_DIR_TO_HOST, 1890 reply = check_command(common, 12, DATA_DIR_TO_HOST,
1891 (1<<1) | (0xf<<2) | (0xf<<6), 1, 1891 (1<<1) | (0xf<<2) | (0xf<<6), 1,
1892 "READ(12)"); 1892 "READ(12)");
1893 if (reply == 0) 1893 if (reply == 0)
1894 reply = do_read(common); 1894 reply = do_read(common);
1895 break; 1895 break;
1896 1896
1897 case SC_READ_CAPACITY: 1897 case SC_READ_CAPACITY:
1898 common->data_size_from_cmnd = 8; 1898 common->data_size_from_cmnd = 8;
1899 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1899 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1900 (0xf<<2) | (1<<8), 1, 1900 (0xf<<2) | (1<<8), 1,
1901 "READ CAPACITY"); 1901 "READ CAPACITY");
1902 if (reply == 0) 1902 if (reply == 0)
1903 reply = do_read_capacity(common, bh); 1903 reply = do_read_capacity(common, bh);
1904 break; 1904 break;
1905 1905
1906 case SC_READ_HEADER: 1906 case SC_READ_HEADER:
1907 if (!common->luns[common->lun].cdrom) 1907 if (!common->luns[common->lun].cdrom)
1908 goto unknown_cmnd; 1908 goto unknown_cmnd;
1909 common->data_size_from_cmnd = 1909 common->data_size_from_cmnd =
1910 get_unaligned_be16(&common->cmnd[7]); 1910 get_unaligned_be16(&common->cmnd[7]);
1911 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1911 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1912 (3<<7) | (0x1f<<1), 1, 1912 (3<<7) | (0x1f<<1), 1,
1913 "READ HEADER"); 1913 "READ HEADER");
1914 if (reply == 0) 1914 if (reply == 0)
1915 reply = do_read_header(common, bh); 1915 reply = do_read_header(common, bh);
1916 break; 1916 break;
1917 1917
1918 case SC_READ_TOC: 1918 case SC_READ_TOC:
1919 if (!common->luns[common->lun].cdrom) 1919 if (!common->luns[common->lun].cdrom)
1920 goto unknown_cmnd; 1920 goto unknown_cmnd;
1921 common->data_size_from_cmnd = 1921 common->data_size_from_cmnd =
1922 get_unaligned_be16(&common->cmnd[7]); 1922 get_unaligned_be16(&common->cmnd[7]);
1923 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1923 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1924 (7<<6) | (1<<1), 1, 1924 (7<<6) | (1<<1), 1,
1925 "READ TOC"); 1925 "READ TOC");
1926 if (reply == 0) 1926 if (reply == 0)
1927 reply = do_read_toc(common, bh); 1927 reply = do_read_toc(common, bh);
1928 break; 1928 break;
1929 1929
1930 case SC_READ_FORMAT_CAPACITIES: 1930 case SC_READ_FORMAT_CAPACITIES:
1931 common->data_size_from_cmnd = 1931 common->data_size_from_cmnd =
1932 get_unaligned_be16(&common->cmnd[7]); 1932 get_unaligned_be16(&common->cmnd[7]);
1933 reply = check_command(common, 10, DATA_DIR_TO_HOST, 1933 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1934 (3<<7), 1, 1934 (3<<7), 1,
1935 "READ FORMAT CAPACITIES"); 1935 "READ FORMAT CAPACITIES");
1936 if (reply == 0) 1936 if (reply == 0)
1937 reply = do_read_format_capacities(common, bh); 1937 reply = do_read_format_capacities(common, bh);
1938 break; 1938 break;
1939 1939
1940 case SC_REQUEST_SENSE: 1940 case SC_REQUEST_SENSE:
1941 common->data_size_from_cmnd = common->cmnd[4]; 1941 common->data_size_from_cmnd = common->cmnd[4];
1942 reply = check_command(common, 6, DATA_DIR_TO_HOST, 1942 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1943 (1<<4), 0, 1943 (1<<4), 0,
1944 "REQUEST SENSE"); 1944 "REQUEST SENSE");
1945 if (reply == 0) 1945 if (reply == 0)
1946 reply = do_request_sense(common, bh); 1946 reply = do_request_sense(common, bh);
1947 break; 1947 break;
1948 1948
1949 case SC_START_STOP_UNIT: 1949 case SC_START_STOP_UNIT:
1950 common->data_size_from_cmnd = 0; 1950 common->data_size_from_cmnd = 0;
1951 reply = check_command(common, 6, DATA_DIR_NONE, 1951 reply = check_command(common, 6, DATA_DIR_NONE,
1952 (1<<1) | (1<<4), 0, 1952 (1<<1) | (1<<4), 0,
1953 "START-STOP UNIT"); 1953 "START-STOP UNIT");
1954 if (reply == 0) 1954 if (reply == 0)
1955 reply = do_start_stop(common); 1955 reply = do_start_stop(common);
1956 break; 1956 break;
1957 1957
1958 case SC_SYNCHRONIZE_CACHE: 1958 case SC_SYNCHRONIZE_CACHE:
1959 common->data_size_from_cmnd = 0; 1959 common->data_size_from_cmnd = 0;
1960 reply = check_command(common, 10, DATA_DIR_NONE, 1960 reply = check_command(common, 10, DATA_DIR_NONE,
1961 (0xf<<2) | (3<<7), 1, 1961 (0xf<<2) | (3<<7), 1,
1962 "SYNCHRONIZE CACHE"); 1962 "SYNCHRONIZE CACHE");
1963 if (reply == 0) 1963 if (reply == 0)
1964 reply = do_synchronize_cache(common); 1964 reply = do_synchronize_cache(common);
1965 break; 1965 break;
1966 1966
1967 case SC_TEST_UNIT_READY: 1967 case SC_TEST_UNIT_READY:
1968 common->data_size_from_cmnd = 0; 1968 common->data_size_from_cmnd = 0;
1969 reply = check_command(common, 6, DATA_DIR_NONE, 1969 reply = check_command(common, 6, DATA_DIR_NONE,
1970 0, 1, 1970 0, 1,
1971 "TEST UNIT READY"); 1971 "TEST UNIT READY");
1972 break; 1972 break;
1973 1973
1974 /* Although optional, this command is used by MS-Windows. We 1974 /* Although optional, this command is used by MS-Windows. We
1975 * support a minimal version: BytChk must be 0. */ 1975 * support a minimal version: BytChk must be 0. */
1976 case SC_VERIFY: 1976 case SC_VERIFY:
1977 common->data_size_from_cmnd = 0; 1977 common->data_size_from_cmnd = 0;
1978 reply = check_command(common, 10, DATA_DIR_NONE, 1978 reply = check_command(common, 10, DATA_DIR_NONE,
1979 (1<<1) | (0xf<<2) | (3<<7), 1, 1979 (1<<1) | (0xf<<2) | (3<<7), 1,
1980 "VERIFY"); 1980 "VERIFY");
1981 if (reply == 0) 1981 if (reply == 0)
1982 reply = do_verify(common); 1982 reply = do_verify(common);
1983 break; 1983 break;
1984 1984
1985 case SC_WRITE_6: 1985 case SC_WRITE_6:
1986 i = common->cmnd[4]; 1986 i = common->cmnd[4];
1987 common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9; 1987 common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9;
1988 reply = check_command(common, 6, DATA_DIR_FROM_HOST, 1988 reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1989 (7<<1) | (1<<4), 1, 1989 (7<<1) | (1<<4), 1,
1990 "WRITE(6)"); 1990 "WRITE(6)");
1991 if (reply == 0) 1991 if (reply == 0)
1992 reply = do_write(common); 1992 reply = do_write(common);
1993 break; 1993 break;
1994 1994
1995 case SC_WRITE_10: 1995 case SC_WRITE_10:
1996 common->data_size_from_cmnd = 1996 common->data_size_from_cmnd =
1997 get_unaligned_be16(&common->cmnd[7]) << 9; 1997 get_unaligned_be16(&common->cmnd[7]) << 9;
1998 reply = check_command(common, 10, DATA_DIR_FROM_HOST, 1998 reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1999 (1<<1) | (0xf<<2) | (3<<7), 1, 1999 (1<<1) | (0xf<<2) | (3<<7), 1,
2000 "WRITE(10)"); 2000 "WRITE(10)");
2001 if (reply == 0) 2001 if (reply == 0)
2002 reply = do_write(common); 2002 reply = do_write(common);
2003 break; 2003 break;
2004 2004
2005 case SC_WRITE_12: 2005 case SC_WRITE_12:
2006 common->data_size_from_cmnd = 2006 common->data_size_from_cmnd =
2007 get_unaligned_be32(&common->cmnd[6]) << 9; 2007 get_unaligned_be32(&common->cmnd[6]) << 9;
2008 reply = check_command(common, 12, DATA_DIR_FROM_HOST, 2008 reply = check_command(common, 12, DATA_DIR_FROM_HOST,
2009 (1<<1) | (0xf<<2) | (0xf<<6), 1, 2009 (1<<1) | (0xf<<2) | (0xf<<6), 1,
2010 "WRITE(12)"); 2010 "WRITE(12)");
2011 if (reply == 0) 2011 if (reply == 0)
2012 reply = do_write(common); 2012 reply = do_write(common);
2013 break; 2013 break;
2014 2014
2015 /* Some mandatory commands that we recognize but don't implement. 2015 /* Some mandatory commands that we recognize but don't implement.
2016 * They don't mean much in this setting. It's left as an exercise 2016 * They don't mean much in this setting. It's left as an exercise
2017 * for anyone interested to implement RESERVE and RELEASE in terms 2017 * for anyone interested to implement RESERVE and RELEASE in terms
2018 * of Posix locks. */ 2018 * of Posix locks. */
2019 case SC_FORMAT_UNIT: 2019 case SC_FORMAT_UNIT:
2020 case SC_RELEASE: 2020 case SC_RELEASE:
2021 case SC_RESERVE: 2021 case SC_RESERVE:
2022 case SC_SEND_DIAGNOSTIC: 2022 case SC_SEND_DIAGNOSTIC:
2023 /* Fall through */ 2023 /* Fall through */
2024 2024
2025 default: 2025 default:
2026 unknown_cmnd: 2026 unknown_cmnd:
2027 common->data_size_from_cmnd = 0; 2027 common->data_size_from_cmnd = 0;
2028 sprintf(unknown, "Unknown x%02x", common->cmnd[0]); 2028 sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
2029 reply = check_command(common, common->cmnd_size, 2029 reply = check_command(common, common->cmnd_size,
2030 DATA_DIR_UNKNOWN, 0xff, 0, unknown); 2030 DATA_DIR_UNKNOWN, 0xff, 0, unknown);
2031 if (reply == 0) { 2031 if (reply == 0) {
2032 curlun->sense_data = SS_INVALID_COMMAND; 2032 curlun->sense_data = SS_INVALID_COMMAND;
2033 reply = -EINVAL; 2033 reply = -EINVAL;
2034 } 2034 }
2035 break; 2035 break;
2036 } 2036 }
2037 up_read(&common->filesem); 2037 up_read(&common->filesem);
2038 2038
2039 if (reply == -EINTR) 2039 if (reply == -EINTR)
2040 return -EINTR; 2040 return -EINTR;
2041 2041
2042 /* Set up the single reply buffer for finish_reply() */ 2042 /* Set up the single reply buffer for finish_reply() */
2043 if (reply == -EINVAL) 2043 if (reply == -EINVAL)
2044 reply = 0; /* Error reply length */ 2044 reply = 0; /* Error reply length */
2045 if (reply >= 0 && common->data_dir == DATA_DIR_TO_HOST) { 2045 if (reply >= 0 && common->data_dir == DATA_DIR_TO_HOST) {
2046 reply = min((u32) reply, common->data_size_from_cmnd); 2046 reply = min((u32) reply, common->data_size_from_cmnd);
2047 bh->inreq->length = reply; 2047 bh->inreq->length = reply;
2048 bh->state = BUF_STATE_FULL; 2048 bh->state = BUF_STATE_FULL;
2049 common->residue -= reply; 2049 common->residue -= reply;
2050 } /* Otherwise it's already set */ 2050 } /* Otherwise it's already set */
2051 2051
2052 return 0; 2052 return 0;
2053 } 2053 }
2054 2054
2055 /*-------------------------------------------------------------------------*/ 2055 /*-------------------------------------------------------------------------*/
2056 2056
2057 static int received_cbw(struct fsg_dev *fsg, struct fsg_buffhd *bh) 2057 static int received_cbw(struct fsg_dev *fsg, struct fsg_buffhd *bh)
2058 { 2058 {
2059 struct usb_request *req = bh->outreq; 2059 struct usb_request *req = bh->outreq;
2060 struct fsg_bulk_cb_wrap *cbw = req->buf; 2060 struct fsg_bulk_cb_wrap *cbw = req->buf;
2061 struct fsg_common *common = fsg->common; 2061 struct fsg_common *common = fsg->common;
2062 2062
2063 /* Was this a real packet? Should it be ignored? */ 2063 /* Was this a real packet? Should it be ignored? */
2064 if (req->status || test_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags)) 2064 if (req->status || test_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags))
2065 return -EINVAL; 2065 return -EINVAL;
2066 2066
2067 /* Is the CBW valid? */ 2067 /* Is the CBW valid? */
2068 if (req->actual != USB_BULK_CB_WRAP_LEN || 2068 if (req->actual != USB_BULK_CB_WRAP_LEN ||
2069 cbw->Signature != cpu_to_le32( 2069 cbw->Signature != cpu_to_le32(
2070 USB_BULK_CB_SIG)) { 2070 USB_BULK_CB_SIG)) {
2071 DBG(fsg, "invalid CBW: len %u sig 0x%x\n", 2071 DBG(fsg, "invalid CBW: len %u sig 0x%x\n",
2072 req->actual, 2072 req->actual,
2073 le32_to_cpu(cbw->Signature)); 2073 le32_to_cpu(cbw->Signature));
2074 2074
2075 /* The Bulk-only spec says we MUST stall the IN endpoint 2075 /* The Bulk-only spec says we MUST stall the IN endpoint
2076 * (6.6.1), so it's unavoidable. It also says we must 2076 * (6.6.1), so it's unavoidable. It also says we must
2077 * retain this state until the next reset, but there's 2077 * retain this state until the next reset, but there's
2078 * no way to tell the controller driver it should ignore 2078 * no way to tell the controller driver it should ignore
2079 * Clear-Feature(HALT) requests. 2079 * Clear-Feature(HALT) requests.
2080 * 2080 *
2081 * We aren't required to halt the OUT endpoint; instead 2081 * We aren't required to halt the OUT endpoint; instead
2082 * we can simply accept and discard any data received 2082 * we can simply accept and discard any data received
2083 * until the next reset. */ 2083 * until the next reset. */
2084 wedge_bulk_in_endpoint(fsg); 2084 wedge_bulk_in_endpoint(fsg);
2085 set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags); 2085 set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2086 return -EINVAL; 2086 return -EINVAL;
2087 } 2087 }
2088 2088
2089 /* Is the CBW meaningful? */ 2089 /* Is the CBW meaningful? */
2090 if (cbw->Lun >= FSG_MAX_LUNS || cbw->Flags & ~USB_BULK_IN_FLAG || 2090 if (cbw->Lun >= FSG_MAX_LUNS || cbw->Flags & ~USB_BULK_IN_FLAG ||
2091 cbw->Length <= 0 || cbw->Length > MAX_COMMAND_SIZE) { 2091 cbw->Length <= 0 || cbw->Length > MAX_COMMAND_SIZE) {
2092 DBG(fsg, "non-meaningful CBW: lun = %u, flags = 0x%x, " 2092 DBG(fsg, "non-meaningful CBW: lun = %u, flags = 0x%x, "
2093 "cmdlen %u\n", 2093 "cmdlen %u\n",
2094 cbw->Lun, cbw->Flags, cbw->Length); 2094 cbw->Lun, cbw->Flags, cbw->Length);
2095 2095
2096 /* We can do anything we want here, so let's stall the 2096 /* We can do anything we want here, so let's stall the
2097 * bulk pipes if we are allowed to. */ 2097 * bulk pipes if we are allowed to. */
2098 if (common->can_stall) { 2098 if (common->can_stall) {
2099 fsg_set_halt(fsg, fsg->bulk_out); 2099 fsg_set_halt(fsg, fsg->bulk_out);
2100 halt_bulk_in_endpoint(fsg); 2100 halt_bulk_in_endpoint(fsg);
2101 } 2101 }
2102 return -EINVAL; 2102 return -EINVAL;
2103 } 2103 }
2104 2104
2105 /* Save the command for later */ 2105 /* Save the command for later */
2106 common->cmnd_size = cbw->Length; 2106 common->cmnd_size = cbw->Length;
2107 memcpy(common->cmnd, cbw->CDB, common->cmnd_size); 2107 memcpy(common->cmnd, cbw->CDB, common->cmnd_size);
2108 if (cbw->Flags & USB_BULK_IN_FLAG) 2108 if (cbw->Flags & USB_BULK_IN_FLAG)
2109 common->data_dir = DATA_DIR_TO_HOST; 2109 common->data_dir = DATA_DIR_TO_HOST;
2110 else 2110 else
2111 common->data_dir = DATA_DIR_FROM_HOST; 2111 common->data_dir = DATA_DIR_FROM_HOST;
2112 common->data_size = le32_to_cpu(cbw->DataTransferLength); 2112 common->data_size = le32_to_cpu(cbw->DataTransferLength);
2113 if (common->data_size == 0) 2113 if (common->data_size == 0)
2114 common->data_dir = DATA_DIR_NONE; 2114 common->data_dir = DATA_DIR_NONE;
2115 common->lun = cbw->Lun; 2115 common->lun = cbw->Lun;
2116 common->tag = cbw->Tag; 2116 common->tag = cbw->Tag;
2117 return 0; 2117 return 0;
2118 } 2118 }
2119 2119
2120 2120
2121 static int get_next_command(struct fsg_common *common) 2121 static int get_next_command(struct fsg_common *common)
2122 { 2122 {
2123 struct fsg_buffhd *bh; 2123 struct fsg_buffhd *bh;
2124 int rc = 0; 2124 int rc = 0;
2125 2125
2126 /* Wait for the next buffer to become available */ 2126 /* Wait for the next buffer to become available */
2127 bh = common->next_buffhd_to_fill; 2127 bh = common->next_buffhd_to_fill;
2128 while (bh->state != BUF_STATE_EMPTY) { 2128 while (bh->state != BUF_STATE_EMPTY) {
2129 rc = sleep_thread(common); 2129 rc = sleep_thread(common);
2130 if (rc) 2130 if (rc)
2131 return rc; 2131 return rc;
2132 } 2132 }
2133 2133
2134 /* Queue a request to read a Bulk-only CBW */ 2134 /* Queue a request to read a Bulk-only CBW */
2135 set_bulk_out_req_length(common, bh, USB_BULK_CB_WRAP_LEN); 2135 set_bulk_out_req_length(common, bh, USB_BULK_CB_WRAP_LEN);
2136 bh->outreq->short_not_ok = 1; 2136 bh->outreq->short_not_ok = 1;
2137 START_TRANSFER_OR(common, bulk_out, bh->outreq, 2137 START_TRANSFER_OR(common, bulk_out, bh->outreq,
2138 &bh->outreq_busy, &bh->state) 2138 &bh->outreq_busy, &bh->state)
2139 /* Don't know what to do if common->fsg is NULL */ 2139 /* Don't know what to do if common->fsg is NULL */
2140 return -EIO; 2140 return -EIO;
2141 2141
2142 /* We will drain the buffer in software, which means we 2142 /* We will drain the buffer in software, which means we
2143 * can reuse it for the next filling. No need to advance 2143 * can reuse it for the next filling. No need to advance
2144 * next_buffhd_to_fill. */ 2144 * next_buffhd_to_fill. */
2145 2145
2146 /* Wait for the CBW to arrive */ 2146 /* Wait for the CBW to arrive */
2147 while (bh->state != BUF_STATE_FULL) { 2147 while (bh->state != BUF_STATE_FULL) {
2148 rc = sleep_thread(common); 2148 rc = sleep_thread(common);
2149 if (rc) 2149 if (rc)
2150 return rc; 2150 return rc;
2151 } 2151 }
2152 2152
2153 rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO; 2153 rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO;
2154 bh->state = BUF_STATE_EMPTY; 2154 bh->state = BUF_STATE_EMPTY;
2155 2155
2156 return rc; 2156 return rc;
2157 } 2157 }
2158 2158
2159 2159
2160 /*-------------------------------------------------------------------------*/ 2160 /*-------------------------------------------------------------------------*/
2161 2161
2162 static int enable_endpoint(struct fsg_common *common, struct usb_ep *ep, 2162 static int enable_endpoint(struct fsg_common *common, struct usb_ep *ep,
2163 const struct usb_endpoint_descriptor *d) 2163 const struct usb_endpoint_descriptor *d)
2164 { 2164 {
2165 int rc; 2165 int rc;
2166 2166
2167 ep->driver_data = common; 2167 ep->driver_data = common;
2168 rc = usb_ep_enable(ep, d); 2168 rc = usb_ep_enable(ep, d);
2169 if (rc) 2169 if (rc)
2170 ERROR(common, "can't enable %s, result %d\n", ep->name, rc); 2170 ERROR(common, "can't enable %s, result %d\n", ep->name, rc);
2171 return rc; 2171 return rc;
2172 } 2172 }
2173 2173
2174 static int alloc_request(struct fsg_common *common, struct usb_ep *ep, 2174 static int alloc_request(struct fsg_common *common, struct usb_ep *ep,
2175 struct usb_request **preq) 2175 struct usb_request **preq)
2176 { 2176 {
2177 *preq = usb_ep_alloc_request(ep, GFP_ATOMIC); 2177 *preq = usb_ep_alloc_request(ep, GFP_ATOMIC);
2178 if (*preq) 2178 if (*preq)
2179 return 0; 2179 return 0;
2180 ERROR(common, "can't allocate request for %s\n", ep->name); 2180 ERROR(common, "can't allocate request for %s\n", ep->name);
2181 return -ENOMEM; 2181 return -ENOMEM;
2182 } 2182 }
2183 2183
2184 /* Reset interface setting and re-init endpoint state (toggle etc). */ 2184 /* Reset interface setting and re-init endpoint state (toggle etc). */
2185 static int do_set_interface(struct fsg_common *common, struct fsg_dev *new_fsg) 2185 static int do_set_interface(struct fsg_common *common, struct fsg_dev *new_fsg)
2186 { 2186 {
2187 const struct usb_endpoint_descriptor *d; 2187 const struct usb_endpoint_descriptor *d;
2188 struct fsg_dev *fsg; 2188 struct fsg_dev *fsg;
2189 int i, rc = 0; 2189 int i, rc = 0;
2190 2190
2191 if (common->running) 2191 if (common->running)
2192 DBG(common, "reset interface\n"); 2192 DBG(common, "reset interface\n");
2193 2193
2194 reset: 2194 reset:
2195 /* Deallocate the requests */ 2195 /* Deallocate the requests */
2196 if (common->fsg) { 2196 if (common->fsg) {
2197 fsg = common->fsg; 2197 fsg = common->fsg;
2198 2198
2199 for (i = 0; i < FSG_NUM_BUFFERS; ++i) { 2199 for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2200 struct fsg_buffhd *bh = &common->buffhds[i]; 2200 struct fsg_buffhd *bh = &common->buffhds[i];
2201 2201
2202 if (bh->inreq) { 2202 if (bh->inreq) {
2203 usb_ep_free_request(fsg->bulk_in, bh->inreq); 2203 usb_ep_free_request(fsg->bulk_in, bh->inreq);
2204 bh->inreq = NULL; 2204 bh->inreq = NULL;
2205 } 2205 }
2206 if (bh->outreq) { 2206 if (bh->outreq) {
2207 usb_ep_free_request(fsg->bulk_out, bh->outreq); 2207 usb_ep_free_request(fsg->bulk_out, bh->outreq);
2208 bh->outreq = NULL; 2208 bh->outreq = NULL;
2209 } 2209 }
2210 } 2210 }
2211 2211
2212 /* Disable the endpoints */ 2212 /* Disable the endpoints */
2213 if (fsg->bulk_in_enabled) { 2213 if (fsg->bulk_in_enabled) {
2214 usb_ep_disable(fsg->bulk_in); 2214 usb_ep_disable(fsg->bulk_in);
2215 fsg->bulk_in_enabled = 0; 2215 fsg->bulk_in_enabled = 0;
2216 } 2216 }
2217 if (fsg->bulk_out_enabled) { 2217 if (fsg->bulk_out_enabled) {
2218 usb_ep_disable(fsg->bulk_out); 2218 usb_ep_disable(fsg->bulk_out);
2219 fsg->bulk_out_enabled = 0; 2219 fsg->bulk_out_enabled = 0;
2220 } 2220 }
2221 2221
2222 common->fsg = NULL; 2222 common->fsg = NULL;
2223 /* wake_up(&common->fsg_wait); */ 2223 /* wake_up(&common->fsg_wait); */
2224 } 2224 }
2225 2225
2226 common->running = 0; 2226 common->running = 0;
2227 if (!new_fsg || rc) 2227 if (!new_fsg || rc)
2228 return rc; 2228 return rc;
2229 2229
2230 common->fsg = new_fsg; 2230 common->fsg = new_fsg;
2231 fsg = common->fsg; 2231 fsg = common->fsg;
2232 2232
2233 /* Enable the endpoints */ 2233 /* Enable the endpoints */
2234 d = fsg_ep_desc(common->gadget, 2234 d = fsg_ep_desc(common->gadget,
2235 &fsg_fs_bulk_in_desc, &fsg_hs_bulk_in_desc); 2235 &fsg_fs_bulk_in_desc, &fsg_hs_bulk_in_desc);
2236 rc = enable_endpoint(common, fsg->bulk_in, d); 2236 rc = enable_endpoint(common, fsg->bulk_in, d);
2237 if (rc) 2237 if (rc)
2238 goto reset; 2238 goto reset;
2239 fsg->bulk_in_enabled = 1; 2239 fsg->bulk_in_enabled = 1;
2240 2240
2241 d = fsg_ep_desc(common->gadget, 2241 d = fsg_ep_desc(common->gadget,
2242 &fsg_fs_bulk_out_desc, &fsg_hs_bulk_out_desc); 2242 &fsg_fs_bulk_out_desc, &fsg_hs_bulk_out_desc);
2243 rc = enable_endpoint(common, fsg->bulk_out, d); 2243 rc = enable_endpoint(common, fsg->bulk_out, d);
2244 if (rc) 2244 if (rc)
2245 goto reset; 2245 goto reset;
2246 fsg->bulk_out_enabled = 1; 2246 fsg->bulk_out_enabled = 1;
2247 common->bulk_out_maxpacket = 2247 common->bulk_out_maxpacket =
2248 le16_to_cpu(get_unaligned(&d->wMaxPacketSize)); 2248 le16_to_cpu(get_unaligned(&d->wMaxPacketSize));
2249 clear_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags); 2249 clear_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2250 2250
2251 /* Allocate the requests */ 2251 /* Allocate the requests */
2252 for (i = 0; i < FSG_NUM_BUFFERS; ++i) { 2252 for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2253 struct fsg_buffhd *bh = &common->buffhds[i]; 2253 struct fsg_buffhd *bh = &common->buffhds[i];
2254 2254
2255 rc = alloc_request(common, fsg->bulk_in, &bh->inreq); 2255 rc = alloc_request(common, fsg->bulk_in, &bh->inreq);
2256 if (rc) 2256 if (rc)
2257 goto reset; 2257 goto reset;
2258 rc = alloc_request(common, fsg->bulk_out, &bh->outreq); 2258 rc = alloc_request(common, fsg->bulk_out, &bh->outreq);
2259 if (rc) 2259 if (rc)
2260 goto reset; 2260 goto reset;
2261 bh->inreq->buf = bh->outreq->buf = bh->buf; 2261 bh->inreq->buf = bh->outreq->buf = bh->buf;
2262 bh->inreq->context = bh->outreq->context = bh; 2262 bh->inreq->context = bh->outreq->context = bh;
2263 bh->inreq->complete = bulk_in_complete; 2263 bh->inreq->complete = bulk_in_complete;
2264 bh->outreq->complete = bulk_out_complete; 2264 bh->outreq->complete = bulk_out_complete;
2265 } 2265 }
2266 2266
2267 common->running = 1; 2267 common->running = 1;
2268 2268
2269 return rc; 2269 return rc;
2270 } 2270 }
2271 2271
2272 2272
2273 /****************************** ALT CONFIGS ******************************/ 2273 /****************************** ALT CONFIGS ******************************/
2274 2274
2275 2275
2276 static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt) 2276 static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
2277 { 2277 {
2278 struct fsg_dev *fsg = fsg_from_func(f); 2278 struct fsg_dev *fsg = fsg_from_func(f);
2279 fsg->common->new_fsg = fsg; 2279 fsg->common->new_fsg = fsg;
2280 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE); 2280 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2281 return 0; 2281 return 0;
2282 } 2282 }
2283 2283
2284 static void fsg_disable(struct usb_function *f) 2284 static void fsg_disable(struct usb_function *f)
2285 { 2285 {
2286 struct fsg_dev *fsg = fsg_from_func(f); 2286 struct fsg_dev *fsg = fsg_from_func(f);
2287 fsg->common->new_fsg = NULL; 2287 fsg->common->new_fsg = NULL;
2288 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE); 2288 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2289 } 2289 }
2290 2290
2291 /*-------------------------------------------------------------------------*/ 2291 /*-------------------------------------------------------------------------*/
2292 2292
2293 static void handle_exception(struct fsg_common *common) 2293 static void handle_exception(struct fsg_common *common)
2294 { 2294 {
2295 int i; 2295 int i;
2296 struct fsg_buffhd *bh; 2296 struct fsg_buffhd *bh;
2297 enum fsg_state old_state; 2297 enum fsg_state old_state;
2298 struct fsg_lun *curlun; 2298 struct fsg_lun *curlun;
2299 unsigned int exception_req_tag; 2299 unsigned int exception_req_tag;
2300 2300
2301 /* Cancel all the pending transfers */ 2301 /* Cancel all the pending transfers */
2302 if (common->fsg) { 2302 if (common->fsg) {
2303 for (i = 0; i < FSG_NUM_BUFFERS; ++i) { 2303 for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2304 bh = &common->buffhds[i]; 2304 bh = &common->buffhds[i];
2305 if (bh->inreq_busy) 2305 if (bh->inreq_busy)
2306 usb_ep_dequeue(common->fsg->bulk_in, bh->inreq); 2306 usb_ep_dequeue(common->fsg->bulk_in, bh->inreq);
2307 if (bh->outreq_busy) 2307 if (bh->outreq_busy)
2308 usb_ep_dequeue(common->fsg->bulk_out, 2308 usb_ep_dequeue(common->fsg->bulk_out,
2309 bh->outreq); 2309 bh->outreq);
2310 } 2310 }
2311 2311
2312 /* Wait until everything is idle */ 2312 /* Wait until everything is idle */
2313 for (;;) { 2313 for (;;) {
2314 int num_active = 0; 2314 int num_active = 0;
2315 for (i = 0; i < FSG_NUM_BUFFERS; ++i) { 2315 for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2316 bh = &common->buffhds[i]; 2316 bh = &common->buffhds[i];
2317 num_active += bh->inreq_busy + bh->outreq_busy; 2317 num_active += bh->inreq_busy + bh->outreq_busy;
2318 } 2318 }
2319 if (num_active == 0) 2319 if (num_active == 0)
2320 break; 2320 break;
2321 if (sleep_thread(common)) 2321 if (sleep_thread(common))
2322 return; 2322 return;
2323 } 2323 }
2324 2324
2325 /* Clear out the controller's fifos */ 2325 /* Clear out the controller's fifos */
2326 if (common->fsg->bulk_in_enabled) 2326 if (common->fsg->bulk_in_enabled)
2327 usb_ep_fifo_flush(common->fsg->bulk_in); 2327 usb_ep_fifo_flush(common->fsg->bulk_in);
2328 if (common->fsg->bulk_out_enabled) 2328 if (common->fsg->bulk_out_enabled)
2329 usb_ep_fifo_flush(common->fsg->bulk_out); 2329 usb_ep_fifo_flush(common->fsg->bulk_out);
2330 } 2330 }
2331 2331
2332 /* Reset the I/O buffer states and pointers, the SCSI 2332 /* Reset the I/O buffer states and pointers, the SCSI
2333 * state, and the exception. Then invoke the handler. */ 2333 * state, and the exception. Then invoke the handler. */
2334 2334
2335 for (i = 0; i < FSG_NUM_BUFFERS; ++i) { 2335 for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2336 bh = &common->buffhds[i]; 2336 bh = &common->buffhds[i];
2337 bh->state = BUF_STATE_EMPTY; 2337 bh->state = BUF_STATE_EMPTY;
2338 } 2338 }
2339 common->next_buffhd_to_fill = &common->buffhds[0]; 2339 common->next_buffhd_to_fill = &common->buffhds[0];
2340 common->next_buffhd_to_drain = &common->buffhds[0]; 2340 common->next_buffhd_to_drain = &common->buffhds[0];
2341 exception_req_tag = common->exception_req_tag; 2341 exception_req_tag = common->exception_req_tag;
2342 old_state = common->state; 2342 old_state = common->state;
2343 2343
2344 if (old_state == FSG_STATE_ABORT_BULK_OUT) 2344 if (old_state == FSG_STATE_ABORT_BULK_OUT)
2345 common->state = FSG_STATE_STATUS_PHASE; 2345 common->state = FSG_STATE_STATUS_PHASE;
2346 else { 2346 else {
2347 for (i = 0; i < common->nluns; ++i) { 2347 for (i = 0; i < common->nluns; ++i) {
2348 curlun = &common->luns[i]; 2348 curlun = &common->luns[i];
2349 curlun->sense_data = SS_NO_SENSE; 2349 curlun->sense_data = SS_NO_SENSE;
2350 curlun->info_valid = 0; 2350 curlun->info_valid = 0;
2351 } 2351 }
2352 common->state = FSG_STATE_IDLE; 2352 common->state = FSG_STATE_IDLE;
2353 } 2353 }
2354 2354
2355 /* Carry out any extra actions required for the exception */ 2355 /* Carry out any extra actions required for the exception */
2356 switch (old_state) { 2356 switch (old_state) {
2357 case FSG_STATE_ABORT_BULK_OUT: 2357 case FSG_STATE_ABORT_BULK_OUT:
2358 send_status(common); 2358 send_status(common);
2359 2359
2360 if (common->state == FSG_STATE_STATUS_PHASE) 2360 if (common->state == FSG_STATE_STATUS_PHASE)
2361 common->state = FSG_STATE_IDLE; 2361 common->state = FSG_STATE_IDLE;
2362 break; 2362 break;
2363 2363
2364 case FSG_STATE_RESET: 2364 case FSG_STATE_RESET:
2365 /* In case we were forced against our will to halt a 2365 /* In case we were forced against our will to halt a
2366 * bulk endpoint, clear the halt now. (The SuperH UDC 2366 * bulk endpoint, clear the halt now. (The SuperH UDC
2367 * requires this.) */ 2367 * requires this.) */
2368 if (!fsg_is_set(common)) 2368 if (!fsg_is_set(common))
2369 break; 2369 break;
2370 if (test_and_clear_bit(IGNORE_BULK_OUT, 2370 if (test_and_clear_bit(IGNORE_BULK_OUT,
2371 &common->fsg->atomic_bitflags)) 2371 &common->fsg->atomic_bitflags))
2372 usb_ep_clear_halt(common->fsg->bulk_in); 2372 usb_ep_clear_halt(common->fsg->bulk_in);
2373 2373
2374 if (common->ep0_req_tag == exception_req_tag) 2374 if (common->ep0_req_tag == exception_req_tag)
2375 ep0_queue(common); /* Complete the status stage */ 2375 ep0_queue(common); /* Complete the status stage */
2376 2376
2377 break; 2377 break;
2378 2378
2379 case FSG_STATE_CONFIG_CHANGE: 2379 case FSG_STATE_CONFIG_CHANGE:
2380 do_set_interface(common, common->new_fsg); 2380 do_set_interface(common, common->new_fsg);
2381 break; 2381 break;
2382 2382
2383 case FSG_STATE_EXIT: 2383 case FSG_STATE_EXIT:
2384 case FSG_STATE_TERMINATED: 2384 case FSG_STATE_TERMINATED:
2385 do_set_interface(common, NULL); /* Free resources */ 2385 do_set_interface(common, NULL); /* Free resources */
2386 common->state = FSG_STATE_TERMINATED; /* Stop the thread */ 2386 common->state = FSG_STATE_TERMINATED; /* Stop the thread */
2387 break; 2387 break;
2388 2388
2389 case FSG_STATE_INTERFACE_CHANGE: 2389 case FSG_STATE_INTERFACE_CHANGE:
2390 case FSG_STATE_DISCONNECT: 2390 case FSG_STATE_DISCONNECT:
2391 case FSG_STATE_COMMAND_PHASE: 2391 case FSG_STATE_COMMAND_PHASE:
2392 case FSG_STATE_DATA_PHASE: 2392 case FSG_STATE_DATA_PHASE:
2393 case FSG_STATE_STATUS_PHASE: 2393 case FSG_STATE_STATUS_PHASE:
2394 case FSG_STATE_IDLE: 2394 case FSG_STATE_IDLE:
2395 break; 2395 break;
2396 } 2396 }
2397 } 2397 }
2398 2398
2399 /*-------------------------------------------------------------------------*/ 2399 /*-------------------------------------------------------------------------*/
2400 2400
2401 int fsg_main_thread(void *common_) 2401 int fsg_main_thread(void *common_)
2402 { 2402 {
2403 int ret; 2403 int ret;
2404 struct fsg_common *common = the_fsg_common; 2404 struct fsg_common *common = the_fsg_common;
2405 /* The main loop */ 2405 /* The main loop */
2406 do { 2406 do {
2407 if (exception_in_progress(common)) { 2407 if (exception_in_progress(common)) {
2408 handle_exception(common); 2408 handle_exception(common);
2409 continue; 2409 continue;
2410 } 2410 }
2411 2411
2412 if (!common->running) { 2412 if (!common->running) {
2413 ret = sleep_thread(common); 2413 ret = sleep_thread(common);
2414 if (ret) 2414 if (ret)
2415 return ret; 2415 return ret;
2416 2416
2417 continue; 2417 continue;
2418 } 2418 }
2419 2419
2420 ret = get_next_command(common); 2420 ret = get_next_command(common);
2421 if (ret) 2421 if (ret)
2422 return ret; 2422 return ret;
2423 2423
2424 if (!exception_in_progress(common)) 2424 if (!exception_in_progress(common))
2425 common->state = FSG_STATE_DATA_PHASE; 2425 common->state = FSG_STATE_DATA_PHASE;
2426 2426
2427 if (do_scsi_command(common) || finish_reply(common)) 2427 if (do_scsi_command(common) || finish_reply(common))
2428 continue; 2428 continue;
2429 2429
2430 if (!exception_in_progress(common)) 2430 if (!exception_in_progress(common))
2431 common->state = FSG_STATE_STATUS_PHASE; 2431 common->state = FSG_STATE_STATUS_PHASE;
2432 2432
2433 if (send_status(common)) 2433 if (send_status(common))
2434 continue; 2434 continue;
2435 2435
2436 if (!exception_in_progress(common)) 2436 if (!exception_in_progress(common))
2437 common->state = FSG_STATE_IDLE; 2437 common->state = FSG_STATE_IDLE;
2438 } while (0); 2438 } while (0);
2439 2439
2440 common->thread_task = NULL; 2440 common->thread_task = NULL;
2441 2441
2442 return 0; 2442 return 0;
2443 } 2443 }
2444 2444
2445 static void fsg_common_release(struct kref *ref); 2445 static void fsg_common_release(struct kref *ref);
2446 2446
2447 static struct fsg_common *fsg_common_init(struct fsg_common *common, 2447 static struct fsg_common *fsg_common_init(struct fsg_common *common,
2448 struct usb_composite_dev *cdev) 2448 struct usb_composite_dev *cdev)
2449 { 2449 {
2450 struct usb_gadget *gadget = cdev->gadget; 2450 struct usb_gadget *gadget = cdev->gadget;
2451 struct fsg_buffhd *bh; 2451 struct fsg_buffhd *bh;
2452 struct fsg_lun *curlun; 2452 struct fsg_lun *curlun;
2453 int nluns, i, rc; 2453 int nluns, i, rc;
2454 2454
2455 /* Find out how many LUNs there should be */ 2455 /* Find out how many LUNs there should be */
2456 nluns = 1; 2456 nluns = 1;
2457 if (nluns < 1 || nluns > FSG_MAX_LUNS) { 2457 if (nluns < 1 || nluns > FSG_MAX_LUNS) {
2458 printf("invalid number of LUNs: %u\n", nluns); 2458 printf("invalid number of LUNs: %u\n", nluns);
2459 return ERR_PTR(-EINVAL); 2459 return ERR_PTR(-EINVAL);
2460 } 2460 }
2461 2461
2462 /* Allocate? */ 2462 /* Allocate? */
2463 if (!common) { 2463 if (!common) {
2464 common = calloc(sizeof *common, 1); 2464 common = calloc(sizeof *common, 1);
2465 if (!common) 2465 if (!common)
2466 return ERR_PTR(-ENOMEM); 2466 return ERR_PTR(-ENOMEM);
2467 common->free_storage_on_release = 1; 2467 common->free_storage_on_release = 1;
2468 } else { 2468 } else {
2469 memset(common, 0, sizeof common); 2469 memset(common, 0, sizeof common);
2470 common->free_storage_on_release = 0; 2470 common->free_storage_on_release = 0;
2471 } 2471 }
2472 2472
2473 common->ops = NULL; 2473 common->ops = NULL;
2474 common->private_data = NULL; 2474 common->private_data = NULL;
2475 2475
2476 common->gadget = gadget; 2476 common->gadget = gadget;
2477 common->ep0 = gadget->ep0; 2477 common->ep0 = gadget->ep0;
2478 common->ep0req = cdev->req; 2478 common->ep0req = cdev->req;
2479 2479
2480 /* Maybe allocate device-global string IDs, and patch descriptors */ 2480 /* Maybe allocate device-global string IDs, and patch descriptors */
2481 if (fsg_strings[FSG_STRING_INTERFACE].id == 0) { 2481 if (fsg_strings[FSG_STRING_INTERFACE].id == 0) {
2482 rc = usb_string_id(cdev); 2482 rc = usb_string_id(cdev);
2483 if (unlikely(rc < 0)) 2483 if (unlikely(rc < 0))
2484 goto error_release; 2484 goto error_release;
2485 fsg_strings[FSG_STRING_INTERFACE].id = rc; 2485 fsg_strings[FSG_STRING_INTERFACE].id = rc;
2486 fsg_intf_desc.iInterface = rc; 2486 fsg_intf_desc.iInterface = rc;
2487 } 2487 }
2488 2488
2489 /* Create the LUNs, open their backing files, and register the 2489 /* Create the LUNs, open their backing files, and register the
2490 * LUN devices in sysfs. */ 2490 * LUN devices in sysfs. */
2491 curlun = calloc(nluns, sizeof *curlun); 2491 curlun = calloc(nluns, sizeof *curlun);
2492 if (!curlun) { 2492 if (!curlun) {
2493 rc = -ENOMEM; 2493 rc = -ENOMEM;
2494 goto error_release; 2494 goto error_release;
2495 } 2495 }
2496 common->nluns = nluns; 2496 common->nluns = nluns;
2497 2497
2498 for (i = 0; i < nluns; i++) { 2498 for (i = 0; i < nluns; i++) {
2499 common->luns[i].removable = 1; 2499 common->luns[i].removable = 1;
2500 2500
2501 rc = fsg_lun_open(&common->luns[i], ""); 2501 rc = fsg_lun_open(&common->luns[i], "");
2502 if (rc) 2502 if (rc)
2503 goto error_luns; 2503 goto error_luns;
2504 } 2504 }
2505 common->lun = 0; 2505 common->lun = 0;
2506 2506
2507 /* Data buffers cyclic list */ 2507 /* Data buffers cyclic list */
2508 bh = common->buffhds; 2508 bh = common->buffhds;
2509 2509
2510 i = FSG_NUM_BUFFERS; 2510 i = FSG_NUM_BUFFERS;
2511 goto buffhds_first_it; 2511 goto buffhds_first_it;
2512 do { 2512 do {
2513 bh->next = bh + 1; 2513 bh->next = bh + 1;
2514 ++bh; 2514 ++bh;
2515 buffhds_first_it: 2515 buffhds_first_it:
2516 bh->inreq_busy = 0; 2516 bh->inreq_busy = 0;
2517 bh->outreq_busy = 0; 2517 bh->outreq_busy = 0;
2518 bh->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, FSG_BUFLEN); 2518 bh->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, FSG_BUFLEN);
2519 if (unlikely(!bh->buf)) { 2519 if (unlikely(!bh->buf)) {
2520 rc = -ENOMEM; 2520 rc = -ENOMEM;
2521 goto error_release; 2521 goto error_release;
2522 } 2522 }
2523 } while (--i); 2523 } while (--i);
2524 bh->next = common->buffhds; 2524 bh->next = common->buffhds;
2525 2525
2526 snprintf(common->inquiry_string, sizeof common->inquiry_string, 2526 snprintf(common->inquiry_string, sizeof common->inquiry_string,
2527 "%-8s%-16s%04x", 2527 "%-8s%-16s%04x",
2528 "Linux ", 2528 "Linux ",
2529 "File-Store Gadget", 2529 "File-Store Gadget",
2530 0xffff); 2530 0xffff);
2531 2531
2532 /* Some peripheral controllers are known not to be able to 2532 /* Some peripheral controllers are known not to be able to
2533 * halt bulk endpoints correctly. If one of them is present, 2533 * halt bulk endpoints correctly. If one of them is present,
2534 * disable stalls. 2534 * disable stalls.
2535 */ 2535 */
2536 2536
2537 /* Tell the thread to start working */ 2537 /* Tell the thread to start working */
2538 common->thread_task = 2538 common->thread_task =
2539 kthread_create(fsg_main_thread, common, 2539 kthread_create(fsg_main_thread, common,
2540 OR(cfg->thread_name, "file-storage")); 2540 OR(cfg->thread_name, "file-storage"));
2541 if (IS_ERR(common->thread_task)) { 2541 if (IS_ERR(common->thread_task)) {
2542 rc = PTR_ERR(common->thread_task); 2542 rc = PTR_ERR(common->thread_task);
2543 goto error_release; 2543 goto error_release;
2544 } 2544 }
2545 2545
2546 #undef OR 2546 #undef OR
2547 /* Information */ 2547 /* Information */
2548 INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n"); 2548 INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
2549 INFO(common, "Number of LUNs=%d\n", common->nluns); 2549 INFO(common, "Number of LUNs=%d\n", common->nluns);
2550 2550
2551 return common; 2551 return common;
2552 2552
2553 error_luns: 2553 error_luns:
2554 common->nluns = i + 1; 2554 common->nluns = i + 1;
2555 error_release: 2555 error_release:
2556 common->state = FSG_STATE_TERMINATED; /* The thread is dead */ 2556 common->state = FSG_STATE_TERMINATED; /* The thread is dead */
2557 /* Call fsg_common_release() directly, ref might be not 2557 /* Call fsg_common_release() directly, ref might be not
2558 * initialised */ 2558 * initialised */
2559 fsg_common_release(&common->ref); 2559 fsg_common_release(&common->ref);
2560 return ERR_PTR(rc); 2560 return ERR_PTR(rc);
2561 } 2561 }
2562 2562
2563 static void fsg_common_release(struct kref *ref) 2563 static void fsg_common_release(struct kref *ref)
2564 { 2564 {
2565 struct fsg_common *common = container_of(ref, struct fsg_common, ref); 2565 struct fsg_common *common = container_of(ref, struct fsg_common, ref);
2566 2566
2567 /* If the thread isn't already dead, tell it to exit now */ 2567 /* If the thread isn't already dead, tell it to exit now */
2568 if (common->state != FSG_STATE_TERMINATED) { 2568 if (common->state != FSG_STATE_TERMINATED) {
2569 raise_exception(common, FSG_STATE_EXIT); 2569 raise_exception(common, FSG_STATE_EXIT);
2570 wait_for_completion(&common->thread_notifier); 2570 wait_for_completion(&common->thread_notifier);
2571 } 2571 }
2572 2572
2573 if (likely(common->luns)) { 2573 if (likely(common->luns)) {
2574 struct fsg_lun *lun = common->luns; 2574 struct fsg_lun *lun = common->luns;
2575 unsigned i = common->nluns; 2575 unsigned i = common->nluns;
2576 2576
2577 /* In error recovery common->nluns may be zero. */ 2577 /* In error recovery common->nluns may be zero. */
2578 for (; i; --i, ++lun) 2578 for (; i; --i, ++lun)
2579 fsg_lun_close(lun); 2579 fsg_lun_close(lun);
2580 2580
2581 kfree(common->luns); 2581 kfree(common->luns);
2582 } 2582 }
2583 2583
2584 { 2584 {
2585 struct fsg_buffhd *bh = common->buffhds; 2585 struct fsg_buffhd *bh = common->buffhds;
2586 unsigned i = FSG_NUM_BUFFERS; 2586 unsigned i = FSG_NUM_BUFFERS;
2587 do { 2587 do {
2588 kfree(bh->buf); 2588 kfree(bh->buf);
2589 } while (++bh, --i); 2589 } while (++bh, --i);
2590 } 2590 }
2591 2591
2592 if (common->free_storage_on_release) 2592 if (common->free_storage_on_release)
2593 kfree(common); 2593 kfree(common);
2594 } 2594 }
2595 2595
2596 2596
2597 /*-------------------------------------------------------------------------*/ 2597 /*-------------------------------------------------------------------------*/
2598 2598
2599 /** 2599 /**
2600 * usb_copy_descriptors - copy a vector of USB descriptors 2600 * usb_copy_descriptors - copy a vector of USB descriptors
2601 * @src: null-terminated vector to copy 2601 * @src: null-terminated vector to copy
2602 * Context: initialization code, which may sleep 2602 * Context: initialization code, which may sleep
2603 * 2603 *
2604 * This makes a copy of a vector of USB descriptors. Its primary use 2604 * This makes a copy of a vector of USB descriptors. Its primary use
2605 * is to support usb_function objects which can have multiple copies, 2605 * is to support usb_function objects which can have multiple copies,
2606 * each needing different descriptors. Functions may have static 2606 * each needing different descriptors. Functions may have static
2607 * tables of descriptors, which are used as templates and customized 2607 * tables of descriptors, which are used as templates and customized
2608 * with identifiers (for interfaces, strings, endpoints, and more) 2608 * with identifiers (for interfaces, strings, endpoints, and more)
2609 * as needed by a given function instance. 2609 * as needed by a given function instance.
2610 */ 2610 */
2611 struct usb_descriptor_header ** 2611 struct usb_descriptor_header **
2612 usb_copy_descriptors(struct usb_descriptor_header **src) 2612 usb_copy_descriptors(struct usb_descriptor_header **src)
2613 { 2613 {
2614 struct usb_descriptor_header **tmp; 2614 struct usb_descriptor_header **tmp;
2615 unsigned bytes; 2615 unsigned bytes;
2616 unsigned n_desc; 2616 unsigned n_desc;
2617 void *mem; 2617 void *mem;
2618 struct usb_descriptor_header **ret; 2618 struct usb_descriptor_header **ret;
2619 2619
2620 /* count descriptors and their sizes; then add vector size */ 2620 /* count descriptors and their sizes; then add vector size */
2621 for (bytes = 0, n_desc = 0, tmp = src; *tmp; tmp++, n_desc++) 2621 for (bytes = 0, n_desc = 0, tmp = src; *tmp; tmp++, n_desc++)
2622 bytes += (*tmp)->bLength; 2622 bytes += (*tmp)->bLength;
2623 bytes += (n_desc + 1) * sizeof(*tmp); 2623 bytes += (n_desc + 1) * sizeof(*tmp);
2624 2624
2625 mem = memalign(CONFIG_SYS_CACHELINE_SIZE, bytes); 2625 mem = memalign(CONFIG_SYS_CACHELINE_SIZE, bytes);
2626 if (!mem) 2626 if (!mem)
2627 return NULL; 2627 return NULL;
2628 2628
2629 /* fill in pointers starting at "tmp", 2629 /* fill in pointers starting at "tmp",
2630 * to descriptors copied starting at "mem"; 2630 * to descriptors copied starting at "mem";
2631 * and return "ret" 2631 * and return "ret"
2632 */ 2632 */
2633 tmp = mem; 2633 tmp = mem;
2634 ret = mem; 2634 ret = mem;
2635 mem += (n_desc + 1) * sizeof(*tmp); 2635 mem += (n_desc + 1) * sizeof(*tmp);
2636 while (*src) { 2636 while (*src) {
2637 memcpy(mem, *src, (*src)->bLength); 2637 memcpy(mem, *src, (*src)->bLength);
2638 *tmp = mem; 2638 *tmp = mem;
2639 tmp++; 2639 tmp++;
2640 mem += (*src)->bLength; 2640 mem += (*src)->bLength;
2641 src++; 2641 src++;
2642 } 2642 }
2643 *tmp = NULL; 2643 *tmp = NULL;
2644 2644
2645 return ret; 2645 return ret;
2646 } 2646 }
2647 2647
2648 static void fsg_unbind(struct usb_configuration *c, struct usb_function *f) 2648 static void fsg_unbind(struct usb_configuration *c, struct usb_function *f)
2649 { 2649 {
2650 struct fsg_dev *fsg = fsg_from_func(f); 2650 struct fsg_dev *fsg = fsg_from_func(f);
2651 2651
2652 DBG(fsg, "unbind\n"); 2652 DBG(fsg, "unbind\n");
2653 if (fsg->common->fsg == fsg) { 2653 if (fsg->common->fsg == fsg) {
2654 fsg->common->new_fsg = NULL; 2654 fsg->common->new_fsg = NULL;
2655 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE); 2655 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2656 } 2656 }
2657 2657
2658 free(fsg->function.descriptors); 2658 free(fsg->function.descriptors);
2659 free(fsg->function.hs_descriptors); 2659 free(fsg->function.hs_descriptors);
2660 kfree(fsg); 2660 kfree(fsg);
2661 } 2661 }
2662 2662
2663 static int fsg_bind(struct usb_configuration *c, struct usb_function *f) 2663 static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
2664 { 2664 {
2665 struct fsg_dev *fsg = fsg_from_func(f); 2665 struct fsg_dev *fsg = fsg_from_func(f);
2666 struct usb_gadget *gadget = c->cdev->gadget; 2666 struct usb_gadget *gadget = c->cdev->gadget;
2667 int i; 2667 int i;
2668 struct usb_ep *ep; 2668 struct usb_ep *ep;
2669 fsg->gadget = gadget; 2669 fsg->gadget = gadget;
2670 2670
2671 /* New interface */ 2671 /* New interface */
2672 i = usb_interface_id(c, f); 2672 i = usb_interface_id(c, f);
2673 if (i < 0) 2673 if (i < 0)
2674 return i; 2674 return i;
2675 fsg_intf_desc.bInterfaceNumber = i; 2675 fsg_intf_desc.bInterfaceNumber = i;
2676 fsg->interface_number = i; 2676 fsg->interface_number = i;
2677 2677
2678 /* Find all the endpoints we will use */ 2678 /* Find all the endpoints we will use */
2679 ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_in_desc); 2679 ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_in_desc);
2680 if (!ep) 2680 if (!ep)
2681 goto autoconf_fail; 2681 goto autoconf_fail;
2682 ep->driver_data = fsg->common; /* claim the endpoint */ 2682 ep->driver_data = fsg->common; /* claim the endpoint */
2683 fsg->bulk_in = ep; 2683 fsg->bulk_in = ep;
2684 2684
2685 ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_out_desc); 2685 ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_out_desc);
2686 if (!ep) 2686 if (!ep)
2687 goto autoconf_fail; 2687 goto autoconf_fail;
2688 ep->driver_data = fsg->common; /* claim the endpoint */ 2688 ep->driver_data = fsg->common; /* claim the endpoint */
2689 fsg->bulk_out = ep; 2689 fsg->bulk_out = ep;
2690 2690
2691 /* Copy descriptors */ 2691 /* Copy descriptors */
2692 f->descriptors = usb_copy_descriptors(fsg_fs_function); 2692 f->descriptors = usb_copy_descriptors(fsg_fs_function);
2693 if (unlikely(!f->descriptors)) 2693 if (unlikely(!f->descriptors))
2694 return -ENOMEM; 2694 return -ENOMEM;
2695 2695
2696 if (gadget_is_dualspeed(gadget)) { 2696 if (gadget_is_dualspeed(gadget)) {
2697 /* Assume endpoint addresses are the same for both speeds */ 2697 /* Assume endpoint addresses are the same for both speeds */
2698 fsg_hs_bulk_in_desc.bEndpointAddress = 2698 fsg_hs_bulk_in_desc.bEndpointAddress =
2699 fsg_fs_bulk_in_desc.bEndpointAddress; 2699 fsg_fs_bulk_in_desc.bEndpointAddress;
2700 fsg_hs_bulk_out_desc.bEndpointAddress = 2700 fsg_hs_bulk_out_desc.bEndpointAddress =
2701 fsg_fs_bulk_out_desc.bEndpointAddress; 2701 fsg_fs_bulk_out_desc.bEndpointAddress;
2702 f->hs_descriptors = usb_copy_descriptors(fsg_hs_function); 2702 f->hs_descriptors = usb_copy_descriptors(fsg_hs_function);
2703 if (unlikely(!f->hs_descriptors)) { 2703 if (unlikely(!f->hs_descriptors)) {
2704 free(f->descriptors); 2704 free(f->descriptors);
2705 return -ENOMEM; 2705 return -ENOMEM;
2706 } 2706 }
2707 } 2707 }
2708 return 0; 2708 return 0;
2709 2709
2710 autoconf_fail: 2710 autoconf_fail:
2711 ERROR(fsg, "unable to autoconfigure all endpoints\n"); 2711 ERROR(fsg, "unable to autoconfigure all endpoints\n");
2712 return -ENOTSUPP; 2712 return -ENOTSUPP;
2713 } 2713 }
2714 2714
2715 2715
2716 /****************************** ADD FUNCTION ******************************/ 2716 /****************************** ADD FUNCTION ******************************/
2717 2717
2718 static struct usb_gadget_strings *fsg_strings_array[] = { 2718 static struct usb_gadget_strings *fsg_strings_array[] = {
2719 &fsg_stringtab, 2719 &fsg_stringtab,
2720 NULL, 2720 NULL,
2721 }; 2721 };
2722 2722
2723 static int fsg_bind_config(struct usb_composite_dev *cdev, 2723 static int fsg_bind_config(struct usb_composite_dev *cdev,
2724 struct usb_configuration *c, 2724 struct usb_configuration *c,
2725 struct fsg_common *common) 2725 struct fsg_common *common)
2726 { 2726 {
2727 struct fsg_dev *fsg; 2727 struct fsg_dev *fsg;
2728 int rc; 2728 int rc;
2729 2729
2730 fsg = calloc(1, sizeof *fsg); 2730 fsg = calloc(1, sizeof *fsg);
2731 if (!fsg) 2731 if (!fsg)
2732 return -ENOMEM; 2732 return -ENOMEM;
2733 fsg->function.name = FSG_DRIVER_DESC; 2733 fsg->function.name = FSG_DRIVER_DESC;
2734 fsg->function.strings = fsg_strings_array; 2734 fsg->function.strings = fsg_strings_array;
2735 fsg->function.bind = fsg_bind; 2735 fsg->function.bind = fsg_bind;
2736 fsg->function.unbind = fsg_unbind; 2736 fsg->function.unbind = fsg_unbind;
2737 fsg->function.setup = fsg_setup; 2737 fsg->function.setup = fsg_setup;
2738 fsg->function.set_alt = fsg_set_alt; 2738 fsg->function.set_alt = fsg_set_alt;
2739 fsg->function.disable = fsg_disable; 2739 fsg->function.disable = fsg_disable;
2740 2740
2741 fsg->common = common; 2741 fsg->common = common;
2742 common->fsg = fsg; 2742 common->fsg = fsg;
2743 /* Our caller holds a reference to common structure so we 2743 /* Our caller holds a reference to common structure so we
2744 * don't have to be worry about it being freed until we return 2744 * don't have to be worry about it being freed until we return
2745 * from this function. So instead of incrementing counter now 2745 * from this function. So instead of incrementing counter now
2746 * and decrement in error recovery we increment it only when 2746 * and decrement in error recovery we increment it only when
2747 * call to usb_add_function() was successful. */ 2747 * call to usb_add_function() was successful. */
2748 2748
2749 rc = usb_add_function(c, &fsg->function); 2749 rc = usb_add_function(c, &fsg->function);
2750 2750
2751 if (rc) 2751 if (rc)
2752 kfree(fsg); 2752 kfree(fsg);
2753 2753
2754 return rc; 2754 return rc;
2755 } 2755 }
2756 2756
2757 int fsg_add(struct usb_configuration *c) 2757 int fsg_add(struct usb_configuration *c)
2758 { 2758 {
2759 struct fsg_common *fsg_common; 2759 struct fsg_common *fsg_common;
2760 2760
2761 fsg_common = fsg_common_init(NULL, c->cdev); 2761 fsg_common = fsg_common_init(NULL, c->cdev);
2762 2762
2763 fsg_common->vendor_name = 0; 2763 fsg_common->vendor_name = 0;
2764 fsg_common->product_name = 0; 2764 fsg_common->product_name = 0;
2765 fsg_common->release = 0xffff; 2765 fsg_common->release = 0xffff;
2766 2766
2767 fsg_common->ops = NULL; 2767 fsg_common->ops = NULL;
2768 fsg_common->private_data = NULL; 2768 fsg_common->private_data = NULL;
2769 2769
2770 the_fsg_common = fsg_common; 2770 the_fsg_common = fsg_common;
2771 2771
2772 return fsg_bind_config(c->cdev, c, fsg_common); 2772 return fsg_bind_config(c->cdev, c, fsg_common);
2773 } 2773 }
2774 2774
2775 int fsg_init(struct ums *ums_dev) 2775 int fsg_init(struct ums *ums_dev)
2776 { 2776 {
2777 ums = ums_dev; 2777 ums = ums_dev;
2778 2778
2779 return 0; 2779 return 0;
2780 } 2780 }
2781 2781
drivers/usb/gadget/g_dnl.c
1 /* 1 /*
2 * g_dnl.c -- USB Downloader Gadget 2 * g_dnl.c -- USB Downloader Gadget
3 * 3 *
4 * Copyright (C) 2012 Samsung Electronics 4 * Copyright (C) 2012 Samsung Electronics
5 * Lukasz Majewski <l.majewski@samsung.com> 5 * Lukasz Majewski <l.majewski@samsung.com>
6 * 6 *
7 * SPDX-License-Identifier: GPL-2.0+ 7 * SPDX-License-Identifier: GPL-2.0+
8 */ 8 */
9 9
10 #include <common.h> 10 #include <common.h>
11 #include <malloc.h> 11 #include <malloc.h>
12 12
13 #include <mmc.h> 13 #include <mmc.h>
14 #include <part.h> 14 #include <part.h>
15 15
16 #include <g_dnl.h> 16 #include <g_dnl.h>
17 #include <usb_mass_storage.h> 17 #include <usb_mass_storage.h>
18 #include <dfu.h> 18 #include <dfu.h>
19 #include <thor.h> 19 #include <thor.h>
20 20
21 #include "gadget_chips.h" 21 #include "gadget_chips.h"
22 #include "composite.c" 22 #include "composite.c"
23 23
24 /* 24 /*
25 * One needs to define the following: 25 * One needs to define the following:
26 * CONFIG_G_DNL_VENDOR_NUM 26 * CONFIG_G_DNL_VENDOR_NUM
27 * CONFIG_G_DNL_PRODUCT_NUM 27 * CONFIG_G_DNL_PRODUCT_NUM
28 * CONFIG_G_DNL_MANUFACTURER 28 * CONFIG_G_DNL_MANUFACTURER
29 * at e.g. ./include/configs/<board>.h 29 * at e.g. ./include/configs/<board>.h
30 */ 30 */
31 31
32 #define STRING_MANUFACTURER 25 32 #define STRING_MANUFACTURER 25
33 #define STRING_PRODUCT 2 33 #define STRING_PRODUCT 2
34 /* Index of String Descriptor describing this configuration */ 34 /* Index of String Descriptor describing this configuration */
35 #define STRING_USBDOWN 2 35 #define STRING_USBDOWN 2
36 /* Index of String serial */ 36 /* Index of String serial */
37 #define STRING_SERIAL 3 37 #define STRING_SERIAL 3
38 #define MAX_STRING_SERIAL 32 38 #define MAX_STRING_SERIAL 32
39 /* Number of supported configurations */ 39 /* Number of supported configurations */
40 #define CONFIGURATION_NUMBER 1 40 #define CONFIGURATION_NUMBER 1
41 41
42 #define DRIVER_VERSION "usb_dnl 2.0" 42 #define DRIVER_VERSION "usb_dnl 2.0"
43 43
44 static const char shortname[] = "usb_dnl_"; 44 static const char shortname[] = "usb_dnl_";
45 static const char product[] = "USB download gadget"; 45 static const char product[] = "USB download gadget";
46 static char g_dnl_serial[MAX_STRING_SERIAL]; 46 static char g_dnl_serial[MAX_STRING_SERIAL];
47 static const char manufacturer[] = CONFIG_G_DNL_MANUFACTURER; 47 static const char manufacturer[] = CONFIG_G_DNL_MANUFACTURER;
48 48
49 void g_dnl_set_serialnumber(char *s) 49 void g_dnl_set_serialnumber(char *s)
50 { 50 {
51 memset(g_dnl_serial, 0, MAX_STRING_SERIAL); 51 memset(g_dnl_serial, 0, MAX_STRING_SERIAL);
52 if (strlen(s) < MAX_STRING_SERIAL) 52 if (strlen(s) < MAX_STRING_SERIAL)
53 strncpy(g_dnl_serial, s, strlen(s)); 53 strncpy(g_dnl_serial, s, strlen(s));
54 } 54 }
55 55
56 static struct usb_device_descriptor device_desc = { 56 static struct usb_device_descriptor device_desc = {
57 .bLength = sizeof device_desc, 57 .bLength = sizeof device_desc,
58 .bDescriptorType = USB_DT_DEVICE, 58 .bDescriptorType = USB_DT_DEVICE,
59 59
60 .bcdUSB = __constant_cpu_to_le16(0x0200), 60 .bcdUSB = __constant_cpu_to_le16(0x0200),
61 .bDeviceClass = USB_CLASS_COMM, 61 .bDeviceClass = USB_CLASS_COMM,
62 .bDeviceSubClass = 0x02, /*0x02:CDC-modem , 0x00:CDC-serial*/ 62 .bDeviceSubClass = 0x02, /*0x02:CDC-modem , 0x00:CDC-serial*/
63 63
64 .idVendor = __constant_cpu_to_le16(CONFIG_G_DNL_VENDOR_NUM), 64 .idVendor = __constant_cpu_to_le16(CONFIG_G_DNL_VENDOR_NUM),
65 .idProduct = __constant_cpu_to_le16(CONFIG_G_DNL_PRODUCT_NUM), 65 .idProduct = __constant_cpu_to_le16(CONFIG_G_DNL_PRODUCT_NUM),
66 .iProduct = STRING_PRODUCT, 66 .iProduct = STRING_PRODUCT,
67 .iSerialNumber = STRING_SERIAL, 67 .iSerialNumber = STRING_SERIAL,
68 .bNumConfigurations = 1, 68 .bNumConfigurations = 1,
69 }; 69 };
70 70
71 /* 71 /*
72 * static strings, in UTF-8 72 * static strings, in UTF-8
73 * IDs for those strings are assigned dynamically at g_dnl_bind() 73 * IDs for those strings are assigned dynamically at g_dnl_bind()
74 */ 74 */
75 static struct usb_string g_dnl_string_defs[] = { 75 static struct usb_string g_dnl_string_defs[] = {
76 {.s = manufacturer}, 76 {.s = manufacturer},
77 {.s = product}, 77 {.s = product},
78 {.s = g_dnl_serial}, 78 {.s = g_dnl_serial},
79 { } /* end of list */ 79 { } /* end of list */
80 }; 80 };
81 81
82 static struct usb_gadget_strings g_dnl_string_tab = { 82 static struct usb_gadget_strings g_dnl_string_tab = {
83 .language = 0x0409, /* en-us */ 83 .language = 0x0409, /* en-us */
84 .strings = g_dnl_string_defs, 84 .strings = g_dnl_string_defs,
85 }; 85 };
86 86
87 static struct usb_gadget_strings *g_dnl_composite_strings[] = { 87 static struct usb_gadget_strings *g_dnl_composite_strings[] = {
88 &g_dnl_string_tab, 88 &g_dnl_string_tab,
89 NULL, 89 NULL,
90 }; 90 };
91 91
92 static int g_dnl_unbind(struct usb_composite_dev *cdev) 92 static int g_dnl_unbind(struct usb_composite_dev *cdev)
93 { 93 {
94 struct usb_gadget *gadget = cdev->gadget; 94 struct usb_gadget *gadget = cdev->gadget;
95 95
96 free(cdev->config); 96 free(cdev->config);
97 cdev->config = NULL; 97 cdev->config = NULL;
98 debug("%s: calling usb_gadget_disconnect for " 98 debug("%s: calling usb_gadget_disconnect for "
99 "controller '%s'\n", shortname, gadget->name); 99 "controller '%s'\n", shortname, gadget->name);
100 usb_gadget_disconnect(gadget); 100 usb_gadget_disconnect(gadget);
101 101
102 return 0; 102 return 0;
103 } 103 }
104 104
105 static int g_dnl_do_config(struct usb_configuration *c) 105 static int g_dnl_do_config(struct usb_configuration *c)
106 { 106 {
107 const char *s = c->cdev->driver->name; 107 const char *s = c->cdev->driver->name;
108 int ret = -1; 108 int ret = -1;
109 109
110 debug("%s: configuration: 0x%p composite dev: 0x%p\n", 110 debug("%s: configuration: 0x%p composite dev: 0x%p\n",
111 __func__, c, c->cdev); 111 __func__, c, c->cdev);
112 112
113 printf("GADGET DRIVER: %s\n", s); 113 printf("GADGET DRIVER: %s\n", s);
114 if (!strcmp(s, "usb_dnl_dfu")) 114 if (!strcmp(s, "usb_dnl_dfu"))
115 ret = dfu_add(c); 115 ret = dfu_add(c);
116 else if (!strcmp(s, "usb_dnl_ums")) 116 else if (!strcmp(s, "usb_dnl_ums"))
117 ret = fsg_add(c); 117 ret = fsg_add(c);
118 else if (!strcmp(s, "usb_dnl_thor")) 118 else if (!strcmp(s, "usb_dnl_thor"))
119 ret = thor_add(c); 119 ret = thor_add(c);
120 120
121 return ret; 121 return ret;
122 } 122 }
123 123
124 static int g_dnl_config_register(struct usb_composite_dev *cdev) 124 static int g_dnl_config_register(struct usb_composite_dev *cdev)
125 { 125 {
126 struct usb_configuration *config; 126 struct usb_configuration *config;
127 const char *name = "usb_dnload"; 127 const char *name = "usb_dnload";
128 128
129 config = memalign(CONFIG_SYS_CACHELINE_SIZE, sizeof(*config)); 129 config = memalign(CONFIG_SYS_CACHELINE_SIZE, sizeof(*config));
130 if (!config) 130 if (!config)
131 return -ENOMEM; 131 return -ENOMEM;
132 132
133 memset(config, 0, sizeof(*config)); 133 memset(config, 0, sizeof(*config));
134 134
135 config->label = name; 135 config->label = name;
136 config->bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER; 136 config->bmAttributes = USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER;
137 config->bConfigurationValue = CONFIGURATION_NUMBER; 137 config->bConfigurationValue = CONFIGURATION_NUMBER;
138 config->iConfiguration = STRING_USBDOWN; 138 config->iConfiguration = STRING_USBDOWN;
139 config->bind = g_dnl_do_config; 139 config->bind = g_dnl_do_config;
140 140
141 return usb_add_config(cdev, config); 141 return usb_add_config(cdev, config);
142 } 142 }
143 143
144 __weak 144 __weak
145 int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name) 145 int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
146 { 146 {
147 return 0; 147 return 0;
148 } 148 }
149 149
150 __weak int g_dnl_get_board_bcd_device_number(int gcnum) 150 __weak int g_dnl_get_board_bcd_device_number(int gcnum)
151 { 151 {
152 return gcnum; 152 return gcnum;
153 } 153 }
154 154
155 __weak int g_dnl_board_usb_cable_connected(void)
156 {
157 return -EOPNOTSUPP;
158 }
159
155 static int g_dnl_get_bcd_device_number(struct usb_composite_dev *cdev) 160 static int g_dnl_get_bcd_device_number(struct usb_composite_dev *cdev)
156 { 161 {
157 struct usb_gadget *gadget = cdev->gadget; 162 struct usb_gadget *gadget = cdev->gadget;
158 int gcnum; 163 int gcnum;
159 164
160 gcnum = usb_gadget_controller_number(gadget); 165 gcnum = usb_gadget_controller_number(gadget);
161 if (gcnum > 0) 166 if (gcnum > 0)
162 gcnum += 0x200; 167 gcnum += 0x200;
163 168
164 return g_dnl_get_board_bcd_device_number(gcnum); 169 return g_dnl_get_board_bcd_device_number(gcnum);
165 } 170 }
166 171
167 static int g_dnl_bind(struct usb_composite_dev *cdev) 172 static int g_dnl_bind(struct usb_composite_dev *cdev)
168 { 173 {
169 struct usb_gadget *gadget = cdev->gadget; 174 struct usb_gadget *gadget = cdev->gadget;
170 int id, ret; 175 int id, ret;
171 int gcnum; 176 int gcnum;
172 177
173 debug("%s: gadget: 0x%p cdev: 0x%p\n", __func__, gadget, cdev); 178 debug("%s: gadget: 0x%p cdev: 0x%p\n", __func__, gadget, cdev);
174 179
175 id = usb_string_id(cdev); 180 id = usb_string_id(cdev);
176 181
177 if (id < 0) 182 if (id < 0)
178 return id; 183 return id;
179 g_dnl_string_defs[0].id = id; 184 g_dnl_string_defs[0].id = id;
180 device_desc.iManufacturer = id; 185 device_desc.iManufacturer = id;
181 186
182 id = usb_string_id(cdev); 187 id = usb_string_id(cdev);
183 if (id < 0) 188 if (id < 0)
184 return id; 189 return id;
185 190
186 g_dnl_string_defs[1].id = id; 191 g_dnl_string_defs[1].id = id;
187 device_desc.iProduct = id; 192 device_desc.iProduct = id;
188 193
189 id = usb_string_id(cdev); 194 id = usb_string_id(cdev);
190 if (id < 0) 195 if (id < 0)
191 return id; 196 return id;
192 197
193 g_dnl_string_defs[2].id = id; 198 g_dnl_string_defs[2].id = id;
194 device_desc.iSerialNumber = id; 199 device_desc.iSerialNumber = id;
195 200
196 g_dnl_bind_fixup(&device_desc, cdev->driver->name); 201 g_dnl_bind_fixup(&device_desc, cdev->driver->name);
197 ret = g_dnl_config_register(cdev); 202 ret = g_dnl_config_register(cdev);
198 if (ret) 203 if (ret)
199 goto error; 204 goto error;
200 205
201 gcnum = g_dnl_get_bcd_device_number(cdev); 206 gcnum = g_dnl_get_bcd_device_number(cdev);
202 if (gcnum >= 0) 207 if (gcnum >= 0)
203 device_desc.bcdDevice = cpu_to_le16(gcnum); 208 device_desc.bcdDevice = cpu_to_le16(gcnum);
204 else { 209 else {
205 debug("%s: controller '%s' not recognized\n", 210 debug("%s: controller '%s' not recognized\n",
206 shortname, gadget->name); 211 shortname, gadget->name);
207 device_desc.bcdDevice = __constant_cpu_to_le16(0x9999); 212 device_desc.bcdDevice = __constant_cpu_to_le16(0x9999);
208 } 213 }
209 214
210 debug("%s: calling usb_gadget_connect for " 215 debug("%s: calling usb_gadget_connect for "
211 "controller '%s'\n", shortname, gadget->name); 216 "controller '%s'\n", shortname, gadget->name);
212 usb_gadget_connect(gadget); 217 usb_gadget_connect(gadget);
213 218
214 return 0; 219 return 0;
215 220
216 error: 221 error:
217 g_dnl_unbind(cdev); 222 g_dnl_unbind(cdev);
218 return -ENOMEM; 223 return -ENOMEM;
219 } 224 }
220 225
221 static struct usb_composite_driver g_dnl_driver = { 226 static struct usb_composite_driver g_dnl_driver = {
222 .name = NULL, 227 .name = NULL,
223 .dev = &device_desc, 228 .dev = &device_desc,
224 .strings = g_dnl_composite_strings, 229 .strings = g_dnl_composite_strings,
225 230
226 .bind = g_dnl_bind, 231 .bind = g_dnl_bind,
227 .unbind = g_dnl_unbind, 232 .unbind = g_dnl_unbind,
228 }; 233 };
229 234
230 int g_dnl_register(const char *type) 235 int g_dnl_register(const char *type)
231 { 236 {
232 /* The largest function name is 4 */ 237 /* The largest function name is 4 */
233 static char name[sizeof(shortname) + 4]; 238 static char name[sizeof(shortname) + 4];
234 int ret; 239 int ret;
235 240
236 if (!strcmp(type, "dfu")) { 241 if (!strcmp(type, "dfu")) {
237 strcpy(name, shortname); 242 strcpy(name, shortname);
238 strcat(name, type); 243 strcat(name, type);
239 } else if (!strcmp(type, "ums")) { 244 } else if (!strcmp(type, "ums")) {
240 strcpy(name, shortname); 245 strcpy(name, shortname);
241 strcat(name, type); 246 strcat(name, type);
242 } else if (!strcmp(type, "thor")) { 247 } else if (!strcmp(type, "thor")) {
243 strcpy(name, shortname); 248 strcpy(name, shortname);
244 strcat(name, type); 249 strcat(name, type);
245 } else { 250 } else {
246 printf("%s: unknown command: %s\n", __func__, type); 251 printf("%s: unknown command: %s\n", __func__, type);
247 return -EINVAL; 252 return -EINVAL;
248 } 253 }
249 254
250 g_dnl_driver.name = name; 255 g_dnl_driver.name = name;
251 256
252 debug("%s: g_dnl_driver.name: %s\n", __func__, g_dnl_driver.name); 257 debug("%s: g_dnl_driver.name: %s\n", __func__, g_dnl_driver.name);
253 ret = usb_composite_register(&g_dnl_driver); 258 ret = usb_composite_register(&g_dnl_driver);
254 259
255 if (ret) { 260 if (ret) {
256 printf("%s: failed!, error: %d\n", __func__, ret); 261 printf("%s: failed!, error: %d\n", __func__, ret);
257 return ret; 262 return ret;
258 } 263 }
259 264
260 return 0; 265 return 0;
261 } 266 }
262 267
263 void g_dnl_unregister(void) 268 void g_dnl_unregister(void)
264 { 269 {
265 usb_composite_unregister(&g_dnl_driver); 270 usb_composite_unregister(&g_dnl_driver);
266 } 271 }
267 272
include/configs/exynos4-dt.h
1 /* 1 /*
2 * Copyright (C) 2014 Samsung Electronics 2 * Copyright (C) 2014 Samsung Electronics
3 * 3 *
4 * Configuration settings for the SAMSUNG EXYNOS5 board. 4 * Configuration settings for the SAMSUNG EXYNOS5 board.
5 * 5 *
6 * SPDX-License-Identifier: GPL-2.0+ 6 * SPDX-License-Identifier: GPL-2.0+
7 */ 7 */
8 8
9 #ifndef __CONFIG_H 9 #ifndef __CONFIG_H
10 #define __CONFIG_H 10 #define __CONFIG_H
11 11
12 /* High Level Configuration Options */ 12 /* High Level Configuration Options */
13 #define CONFIG_SAMSUNG /* in a SAMSUNG core */ 13 #define CONFIG_SAMSUNG /* in a SAMSUNG core */
14 #define CONFIG_S5P /* S5P Family */ 14 #define CONFIG_S5P /* S5P Family */
15 #define CONFIG_EXYNOS4 /* which is in a Exynos4 Family */ 15 #define CONFIG_EXYNOS4 /* which is in a Exynos4 Family */
16 16
17 #include <asm/arch/cpu.h> /* get chip and board defs */ 17 #include <asm/arch/cpu.h> /* get chip and board defs */
18 18
19 #define CONFIG_ARCH_CPU_INIT 19 #define CONFIG_ARCH_CPU_INIT
20 #define CONFIG_DISPLAY_CPUINFO 20 #define CONFIG_DISPLAY_CPUINFO
21 #define CONFIG_DISPLAY_BOARDINFO 21 #define CONFIG_DISPLAY_BOARDINFO
22 #define CONFIG_BOARD_COMMON 22 #define CONFIG_BOARD_COMMON
23 23
24 /* Enable fdt support */ 24 /* Enable fdt support */
25 #define CONFIG_OF_CONTROL 25 #define CONFIG_OF_CONTROL
26 #define CONFIG_OF_SEPARATE 26 #define CONFIG_OF_SEPARATE
27 27
28 #define CONFIG_SYS_CACHELINE_SIZE 32 28 #define CONFIG_SYS_CACHELINE_SIZE 32
29 29
30 /* input clock of PLL: EXYNOS4 boards have 24MHz input clock */ 30 /* input clock of PLL: EXYNOS4 boards have 24MHz input clock */
31 #define CONFIG_SYS_CLK_FREQ 24000000 31 #define CONFIG_SYS_CLK_FREQ 24000000
32 32
33 #define CONFIG_SETUP_MEMORY_TAGS 33 #define CONFIG_SETUP_MEMORY_TAGS
34 #define CONFIG_CMDLINE_TAG 34 #define CONFIG_CMDLINE_TAG
35 #define CONFIG_REVISION_TAG 35 #define CONFIG_REVISION_TAG
36 #define CONFIG_INITRD_TAG 36 #define CONFIG_INITRD_TAG
37 #define CONFIG_CMDLINE_EDITING 37 #define CONFIG_CMDLINE_EDITING
38 38
39 #include <linux/sizes.h> 39 #include <linux/sizes.h>
40 40
41 /* SD/MMC configuration */ 41 /* SD/MMC configuration */
42 #define CONFIG_GENERIC_MMC 42 #define CONFIG_GENERIC_MMC
43 #define CONFIG_MMC 43 #define CONFIG_MMC
44 #define CONFIG_S5P_SDHCI 44 #define CONFIG_S5P_SDHCI
45 #define CONFIG_SDHCI 45 #define CONFIG_SDHCI
46 #define CONFIG_MMC_SDMA 46 #define CONFIG_MMC_SDMA
47 #define CONFIG_MMC_DEFAULT_DEV 0 47 #define CONFIG_MMC_DEFAULT_DEV 0
48 48
49 /* PWM */ 49 /* PWM */
50 #define CONFIG_PWM 50 #define CONFIG_PWM
51 51
52 #define CONFIG_BOARD_EARLY_INIT_F 52 #define CONFIG_BOARD_EARLY_INIT_F
53 #define CONFIG_SKIP_LOWLEVEL_INIT 53 #define CONFIG_SKIP_LOWLEVEL_INIT
54 54
55 /* allow to overwrite serial and ethaddr */ 55 /* allow to overwrite serial and ethaddr */
56 #define CONFIG_ENV_OVERWRITE 56 #define CONFIG_ENV_OVERWRITE
57 57
58 /* Command definition*/ 58 /* Command definition*/
59 #include <config_cmd_default.h> 59 #include <config_cmd_default.h>
60 60
61 #undef CONFIG_CMD_FPGA 61 #undef CONFIG_CMD_FPGA
62 #undef CONFIG_CMD_MISC 62 #undef CONFIG_CMD_MISC
63 #undef CONFIG_CMD_NET 63 #undef CONFIG_CMD_NET
64 #undef CONFIG_CMD_NFS 64 #undef CONFIG_CMD_NFS
65 #undef CONFIG_CMD_XIMG 65 #undef CONFIG_CMD_XIMG
66 #undef CONFIG_CMD_CACHE 66 #undef CONFIG_CMD_CACHE
67 #undef CONFIG_CMD_ONENAND 67 #undef CONFIG_CMD_ONENAND
68 #undef CONFIG_CMD_MTDPARTS 68 #undef CONFIG_CMD_MTDPARTS
69 #define CONFIG_CMD_CACHE 69 #define CONFIG_CMD_CACHE
70 #define CONFIG_CMD_MMC 70 #define CONFIG_CMD_MMC
71 #define CONFIG_CMD_DFU 71 #define CONFIG_CMD_DFU
72 #define CONFIG_CMD_GPT 72 #define CONFIG_CMD_GPT
73 #define CONFIG_CMD_PMIC 73 #define CONFIG_CMD_PMIC
74 #define CONFIG_CMD_SETEXPR 74 #define CONFIG_CMD_SETEXPR
75 75
76 #define CONFIG_BOOTDELAY 3 76 #define CONFIG_BOOTDELAY 3
77 #define CONFIG_ZERO_BOOTDELAY_CHECK 77 #define CONFIG_ZERO_BOOTDELAY_CHECK
78 78
79 /* FAT */ 79 /* FAT */
80 #define CONFIG_CMD_FAT 80 #define CONFIG_CMD_FAT
81 #define CONFIG_FAT_WRITE 81 #define CONFIG_FAT_WRITE
82 82
83 /* EXT4 */ 83 /* EXT4 */
84 #define CONFIG_CMD_EXT4 84 #define CONFIG_CMD_EXT4
85 #define CONFIG_CMD_EXT4_WRITE 85 #define CONFIG_CMD_EXT4_WRITE
86 86
87 /* USB Composite download gadget - g_dnl */ 87 /* USB Composite download gadget - g_dnl */
88 #define CONFIG_USBDOWNLOAD_GADGET 88 #define CONFIG_USBDOWNLOAD_GADGET
89 89
90 /* TIZEN THOR downloader support */ 90 /* TIZEN THOR downloader support */
91 #define CONFIG_CMD_THOR_DOWNLOAD 91 #define CONFIG_CMD_THOR_DOWNLOAD
92 #define CONFIG_THOR_FUNCTION 92 #define CONFIG_THOR_FUNCTION
93 93
94 #define CONFIG_DFU_FUNCTION 94 #define CONFIG_DFU_FUNCTION
95 #define CONFIG_DFU_MMC 95 #define CONFIG_DFU_MMC
96 #define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_32M 96 #define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_32M
97 #define DFU_DEFAULT_POLL_TIMEOUT 300 97 #define DFU_DEFAULT_POLL_TIMEOUT 300
98 98
99 /* USB Samsung's IDs */ 99 /* USB Samsung's IDs */
100 #define CONFIG_G_DNL_VENDOR_NUM 0x04E8 100 #define CONFIG_G_DNL_VENDOR_NUM 0x04E8
101 #define CONFIG_G_DNL_PRODUCT_NUM 0x6601 101 #define CONFIG_G_DNL_PRODUCT_NUM 0x6601
102 #define CONFIG_G_DNL_THOR_VENDOR_NUM CONFIG_G_DNL_VENDOR_NUM 102 #define CONFIG_G_DNL_THOR_VENDOR_NUM CONFIG_G_DNL_VENDOR_NUM
103 #define CONFIG_G_DNL_THOR_PRODUCT_NUM 0x685D 103 #define CONFIG_G_DNL_THOR_PRODUCT_NUM 0x685D
104 #define CONFIG_G_DNL_MANUFACTURER "Samsung" 104 #define CONFIG_G_DNL_MANUFACTURER "Samsung"
105 105
106 /* Miscellaneous configurable options */ 106 /* Miscellaneous configurable options */
107 #define CONFIG_SYS_LONGHELP /* undef to save memory */ 107 #define CONFIG_SYS_LONGHELP /* undef to save memory */
108 #define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ 108 #define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
109 #define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ 109 #define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
110 #define CONFIG_SYS_PBSIZE 384 /* Print Buffer Size */ 110 #define CONFIG_SYS_PBSIZE 384 /* Print Buffer Size */
111 #define CONFIG_SYS_MAXARGS 16 /* max number of command args */ 111 #define CONFIG_SYS_MAXARGS 16 /* max number of command args */
112 /* Boot Argument Buffer Size */ 112 /* Boot Argument Buffer Size */
113 #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE 113 #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
114 114
115 /* FLASH and environment organization */ 115 /* FLASH and environment organization */
116 #define CONFIG_SYS_NO_FLASH 116 #define CONFIG_SYS_NO_FLASH
117 #undef CONFIG_CMD_IMLS 117 #undef CONFIG_CMD_IMLS
118 118
119 #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */ 119 #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
120 120
121 #define CONFIG_DOS_PARTITION 121 #define CONFIG_DOS_PARTITION
122 #define CONFIG_EFI_PARTITION 122 #define CONFIG_EFI_PARTITION
123 #define CONFIG_CMD_PART 123 #define CONFIG_CMD_PART
124 #define CONFIG_PARTITION_UUIDS 124 #define CONFIG_PARTITION_UUIDS
125 125
126 #define CONFIG_USB_GADGET 126 #define CONFIG_USB_GADGET
127 #define CONFIG_USB_GADGET_S3C_UDC_OTG 127 #define CONFIG_USB_GADGET_S3C_UDC_OTG
128 #define CONFIG_USB_GADGET_DUALSPEED 128 #define CONFIG_USB_GADGET_DUALSPEED
129 #define CONFIG_USB_GADGET_VBUS_DRAW 2 129 #define CONFIG_USB_GADGET_VBUS_DRAW 2
130 #define CONFIG_USB_CABLE_CHECK
131 130
132 #define CONFIG_CMD_USB_MASS_STORAGE 131 #define CONFIG_CMD_USB_MASS_STORAGE
133 #define CONFIG_USB_GADGET_MASS_STORAGE 132 #define CONFIG_USB_GADGET_MASS_STORAGE
134 133
135 /* Enable devicetree support */ 134 /* Enable devicetree support */
136 #define CONFIG_OF_LIBFDT 135 #define CONFIG_OF_LIBFDT
137 136
138 #endif /* __CONFIG_H */ 137 #endif /* __CONFIG_H */
139 138
1 /* 1 /*
2 * Copyright (C) 2012 Samsung Electronics 2 * Copyright (C) 2012 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com> 3 * Lukasz Majewski <l.majewski@samsung.com>
4 * 4 *
5 * SPDX-License-Identifier: GPL-2.0+ 5 * SPDX-License-Identifier: GPL-2.0+
6 */ 6 */
7 7
8 #ifndef __G_DOWNLOAD_H_ 8 #ifndef __G_DOWNLOAD_H_
9 #define __G_DOWNLOAD_H_ 9 #define __G_DOWNLOAD_H_
10 10
11 #include <linux/usb/ch9.h> 11 #include <linux/usb/ch9.h>
12 #include <linux/usb/gadget.h> 12 #include <linux/usb/gadget.h>
13 int g_dnl_bind_fixup(struct usb_device_descriptor *, const char *); 13 int g_dnl_bind_fixup(struct usb_device_descriptor *, const char *);
14 int g_dnl_board_usb_cable_connected(void);
14 int g_dnl_register(const char *s); 15 int g_dnl_register(const char *s);
15 void g_dnl_unregister(void); 16 void g_dnl_unregister(void);
16 void g_dnl_set_serialnumber(char *); 17 void g_dnl_set_serialnumber(char *);
17 18
18 #endif /* __G_DOWNLOAD_H_ */ 19 #endif /* __G_DOWNLOAD_H_ */
19 20
1 /* 1 /*
2 * (C) Copyright 2001 2 * (C) Copyright 2001
3 * Denis Peter, MPL AG Switzerland 3 * Denis Peter, MPL AG Switzerland
4 * 4 *
5 * SPDX-License-Identifier: GPL-2.0+ 5 * SPDX-License-Identifier: GPL-2.0+
6 * Note: Part of this code has been derived from linux 6 * Note: Part of this code has been derived from linux
7 * 7 *
8 */ 8 */
9 #ifndef _USB_H_ 9 #ifndef _USB_H_
10 #define _USB_H_ 10 #define _USB_H_
11 11
12 #include <usb_defs.h> 12 #include <usb_defs.h>
13 #include <linux/usb/ch9.h> 13 #include <linux/usb/ch9.h>
14 14
15 /* 15 /*
16 * The EHCI spec says that we must align to at least 32 bytes. However, 16 * The EHCI spec says that we must align to at least 32 bytes. However,
17 * some platforms require larger alignment. 17 * some platforms require larger alignment.
18 */ 18 */
19 #if ARCH_DMA_MINALIGN > 32 19 #if ARCH_DMA_MINALIGN > 32
20 #define USB_DMA_MINALIGN ARCH_DMA_MINALIGN 20 #define USB_DMA_MINALIGN ARCH_DMA_MINALIGN
21 #else 21 #else
22 #define USB_DMA_MINALIGN 32 22 #define USB_DMA_MINALIGN 32
23 #endif 23 #endif
24 24
25 /* Everything is aribtrary */ 25 /* Everything is aribtrary */
26 #define USB_ALTSETTINGALLOC 4 26 #define USB_ALTSETTINGALLOC 4
27 #define USB_MAXALTSETTING 128 /* Hard limit */ 27 #define USB_MAXALTSETTING 128 /* Hard limit */
28 28
29 #define USB_MAX_DEVICE 32 29 #define USB_MAX_DEVICE 32
30 #define USB_MAXCONFIG 8 30 #define USB_MAXCONFIG 8
31 #define USB_MAXINTERFACES 8 31 #define USB_MAXINTERFACES 8
32 #define USB_MAXENDPOINTS 16 32 #define USB_MAXENDPOINTS 16
33 #define USB_MAXCHILDREN 8 /* This is arbitrary */ 33 #define USB_MAXCHILDREN 8 /* This is arbitrary */
34 #define USB_MAX_HUB 16 34 #define USB_MAX_HUB 16
35 35
36 #define USB_CNTL_TIMEOUT 100 /* 100ms timeout */ 36 #define USB_CNTL_TIMEOUT 100 /* 100ms timeout */
37 37
38 /* 38 /*
39 * This is the timeout to allow for submitting an urb in ms. We allow more 39 * This is the timeout to allow for submitting an urb in ms. We allow more
40 * time for a BULK device to react - some are slow. 40 * time for a BULK device to react - some are slow.
41 */ 41 */
42 #define USB_TIMEOUT_MS(pipe) (usb_pipebulk(pipe) ? 5000 : 1000) 42 #define USB_TIMEOUT_MS(pipe) (usb_pipebulk(pipe) ? 5000 : 1000)
43 43
44 /* device request (setup) */ 44 /* device request (setup) */
45 struct devrequest { 45 struct devrequest {
46 unsigned char requesttype; 46 unsigned char requesttype;
47 unsigned char request; 47 unsigned char request;
48 unsigned short value; 48 unsigned short value;
49 unsigned short index; 49 unsigned short index;
50 unsigned short length; 50 unsigned short length;
51 } __attribute__ ((packed)); 51 } __attribute__ ((packed));
52 52
53 /* Interface */ 53 /* Interface */
54 struct usb_interface { 54 struct usb_interface {
55 struct usb_interface_descriptor desc; 55 struct usb_interface_descriptor desc;
56 56
57 unsigned char no_of_ep; 57 unsigned char no_of_ep;
58 unsigned char num_altsetting; 58 unsigned char num_altsetting;
59 unsigned char act_altsetting; 59 unsigned char act_altsetting;
60 60
61 struct usb_endpoint_descriptor ep_desc[USB_MAXENDPOINTS]; 61 struct usb_endpoint_descriptor ep_desc[USB_MAXENDPOINTS];
62 /* 62 /*
63 * Super Speed Device will have Super Speed Endpoint 63 * Super Speed Device will have Super Speed Endpoint
64 * Companion Descriptor (section 9.6.7 of usb 3.0 spec) 64 * Companion Descriptor (section 9.6.7 of usb 3.0 spec)
65 * Revision 1.0 June 6th 2011 65 * Revision 1.0 June 6th 2011
66 */ 66 */
67 struct usb_ss_ep_comp_descriptor ss_ep_comp_desc[USB_MAXENDPOINTS]; 67 struct usb_ss_ep_comp_descriptor ss_ep_comp_desc[USB_MAXENDPOINTS];
68 } __attribute__ ((packed)); 68 } __attribute__ ((packed));
69 69
70 /* Configuration information.. */ 70 /* Configuration information.. */
71 struct usb_config { 71 struct usb_config {
72 struct usb_config_descriptor desc; 72 struct usb_config_descriptor desc;
73 73
74 unsigned char no_of_if; /* number of interfaces */ 74 unsigned char no_of_if; /* number of interfaces */
75 struct usb_interface if_desc[USB_MAXINTERFACES]; 75 struct usb_interface if_desc[USB_MAXINTERFACES];
76 } __attribute__ ((packed)); 76 } __attribute__ ((packed));
77 77
78 enum { 78 enum {
79 /* Maximum packet size; encoded as 0,1,2,3 = 8,16,32,64 */ 79 /* Maximum packet size; encoded as 0,1,2,3 = 8,16,32,64 */
80 PACKET_SIZE_8 = 0, 80 PACKET_SIZE_8 = 0,
81 PACKET_SIZE_16 = 1, 81 PACKET_SIZE_16 = 1,
82 PACKET_SIZE_32 = 2, 82 PACKET_SIZE_32 = 2,
83 PACKET_SIZE_64 = 3, 83 PACKET_SIZE_64 = 3,
84 }; 84 };
85 85
86 struct usb_device { 86 struct usb_device {
87 int devnum; /* Device number on USB bus */ 87 int devnum; /* Device number on USB bus */
88 int speed; /* full/low/high */ 88 int speed; /* full/low/high */
89 char mf[32]; /* manufacturer */ 89 char mf[32]; /* manufacturer */
90 char prod[32]; /* product */ 90 char prod[32]; /* product */
91 char serial[32]; /* serial number */ 91 char serial[32]; /* serial number */
92 92
93 /* Maximum packet size; one of: PACKET_SIZE_* */ 93 /* Maximum packet size; one of: PACKET_SIZE_* */
94 int maxpacketsize; 94 int maxpacketsize;
95 /* one bit for each endpoint ([0] = IN, [1] = OUT) */ 95 /* one bit for each endpoint ([0] = IN, [1] = OUT) */
96 unsigned int toggle[2]; 96 unsigned int toggle[2];
97 /* endpoint halts; one bit per endpoint # & direction; 97 /* endpoint halts; one bit per endpoint # & direction;
98 * [0] = IN, [1] = OUT 98 * [0] = IN, [1] = OUT
99 */ 99 */
100 unsigned int halted[2]; 100 unsigned int halted[2];
101 int epmaxpacketin[16]; /* INput endpoint specific maximums */ 101 int epmaxpacketin[16]; /* INput endpoint specific maximums */
102 int epmaxpacketout[16]; /* OUTput endpoint specific maximums */ 102 int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
103 103
104 int configno; /* selected config number */ 104 int configno; /* selected config number */
105 /* Device Descriptor */ 105 /* Device Descriptor */
106 struct usb_device_descriptor descriptor 106 struct usb_device_descriptor descriptor
107 __attribute__((aligned(ARCH_DMA_MINALIGN))); 107 __attribute__((aligned(ARCH_DMA_MINALIGN)));
108 struct usb_config config; /* config descriptor */ 108 struct usb_config config; /* config descriptor */
109 109
110 int have_langid; /* whether string_langid is valid yet */ 110 int have_langid; /* whether string_langid is valid yet */
111 int string_langid; /* language ID for strings */ 111 int string_langid; /* language ID for strings */
112 int (*irq_handle)(struct usb_device *dev); 112 int (*irq_handle)(struct usb_device *dev);
113 unsigned long irq_status; 113 unsigned long irq_status;
114 int irq_act_len; /* transfered bytes */ 114 int irq_act_len; /* transfered bytes */
115 void *privptr; 115 void *privptr;
116 /* 116 /*
117 * Child devices - if this is a hub device 117 * Child devices - if this is a hub device
118 * Each instance needs its own set of data structures. 118 * Each instance needs its own set of data structures.
119 */ 119 */
120 unsigned long status; 120 unsigned long status;
121 int act_len; /* transfered bytes */ 121 int act_len; /* transfered bytes */
122 int maxchild; /* Number of ports if hub */ 122 int maxchild; /* Number of ports if hub */
123 int portnr; 123 int portnr;
124 struct usb_device *parent; 124 struct usb_device *parent;
125 struct usb_device *children[USB_MAXCHILDREN]; 125 struct usb_device *children[USB_MAXCHILDREN];
126 126
127 void *controller; /* hardware controller private data */ 127 void *controller; /* hardware controller private data */
128 /* slot_id - for xHCI enabled devices */ 128 /* slot_id - for xHCI enabled devices */
129 unsigned int slot_id; 129 unsigned int slot_id;
130 }; 130 };
131 131
132 /* 132 /*
133 * You can initialize platform's USB host or device 133 * You can initialize platform's USB host or device
134 * ports by passing this enum as an argument to 134 * ports by passing this enum as an argument to
135 * board_usb_init(). 135 * board_usb_init().
136 */ 136 */
137 enum usb_init_type { 137 enum usb_init_type {
138 USB_INIT_HOST, 138 USB_INIT_HOST,
139 USB_INIT_DEVICE 139 USB_INIT_DEVICE
140 }; 140 };
141 141
142 /********************************************************************** 142 /**********************************************************************
143 * this is how the lowlevel part communicate with the outer world 143 * this is how the lowlevel part communicate with the outer world
144 */ 144 */
145 145
146 #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \ 146 #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \
147 defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \ 147 defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \
148 defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \ 148 defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
149 defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \ 149 defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
150 defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \ 150 defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \
151 defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) || \ 151 defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) || \
152 defined(CONFIG_USB_MUSB_DSPS) || defined(CONFIG_USB_MUSB_AM35X) || \ 152 defined(CONFIG_USB_MUSB_DSPS) || defined(CONFIG_USB_MUSB_AM35X) || \
153 defined(CONFIG_USB_MUSB_OMAP2PLUS) || defined(CONFIG_USB_XHCI) 153 defined(CONFIG_USB_MUSB_OMAP2PLUS) || defined(CONFIG_USB_XHCI)
154 154
155 int usb_lowlevel_init(int index, enum usb_init_type init, void **controller); 155 int usb_lowlevel_init(int index, enum usb_init_type init, void **controller);
156 int usb_lowlevel_stop(int index); 156 int usb_lowlevel_stop(int index);
157 157
158 int submit_bulk_msg(struct usb_device *dev, unsigned long pipe, 158 int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
159 void *buffer, int transfer_len); 159 void *buffer, int transfer_len);
160 int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer, 160 int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
161 int transfer_len, struct devrequest *setup); 161 int transfer_len, struct devrequest *setup);
162 int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer, 162 int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
163 int transfer_len, int interval); 163 int transfer_len, int interval);
164 164
165 /* Defines */ 165 /* Defines */
166 #define USB_UHCI_VEND_ID 0x8086 166 #define USB_UHCI_VEND_ID 0x8086
167 #define USB_UHCI_DEV_ID 0x7112 167 #define USB_UHCI_DEV_ID 0x7112
168 168
169 /* 169 /*
170 * PXA25x can only act as USB device. There are drivers 170 * PXA25x can only act as USB device. There are drivers
171 * which works with USB CDC gadgets implementations. 171 * which works with USB CDC gadgets implementations.
172 * Some of them have common routines which can be used 172 * Some of them have common routines which can be used
173 * in boards init functions e.g. udc_disconnect() used for 173 * in boards init functions e.g. udc_disconnect() used for
174 * forced device disconnection from host. 174 * forced device disconnection from host.
175 */ 175 */
176 #elif defined(CONFIG_USB_GADGET_PXA2XX) 176 #elif defined(CONFIG_USB_GADGET_PXA2XX)
177 177
178 extern void udc_disconnect(void); 178 extern void udc_disconnect(void);
179 179
180 #endif 180 #endif
181 181
182 /* 182 /*
183 * board-specific hardware initialization, called by 183 * board-specific hardware initialization, called by
184 * usb drivers and u-boot commands 184 * usb drivers and u-boot commands
185 * 185 *
186 * @param index USB controller number 186 * @param index USB controller number
187 * @param init initializes controller as USB host or device 187 * @param init initializes controller as USB host or device
188 */ 188 */
189 int board_usb_init(int index, enum usb_init_type init); 189 int board_usb_init(int index, enum usb_init_type init);
190 190
191 /* 191 /*
192 * can be used to clean up after failed USB initialization attempt 192 * can be used to clean up after failed USB initialization attempt
193 * vide: board_usb_init() 193 * vide: board_usb_init()
194 * 194 *
195 * @param index USB controller number for selective cleanup 195 * @param index USB controller number for selective cleanup
196 * @param init usb_init_type passed to board_usb_init() 196 * @param init usb_init_type passed to board_usb_init()
197 */ 197 */
198 int board_usb_cleanup(int index, enum usb_init_type init); 198 int board_usb_cleanup(int index, enum usb_init_type init);
199 199
200 /*
201 * If CONFIG_USB_CABLE_CHECK is set then this function
202 * should be defined in board file.
203 *
204 * @return 1 if cable is connected and 0 otherwise.
205 */
206 #ifdef CONFIG_USB_CABLE_CHECK
207 int usb_cable_connected(void);
208 #endif
209
210 #ifdef CONFIG_USB_STORAGE 200 #ifdef CONFIG_USB_STORAGE
211 201
212 #define USB_MAX_STOR_DEV 5 202 #define USB_MAX_STOR_DEV 5
213 block_dev_desc_t *usb_stor_get_dev(int index); 203 block_dev_desc_t *usb_stor_get_dev(int index);
214 int usb_stor_scan(int mode); 204 int usb_stor_scan(int mode);
215 int usb_stor_info(void); 205 int usb_stor_info(void);
216 206
217 #endif 207 #endif
218 208
219 #ifdef CONFIG_USB_HOST_ETHER 209 #ifdef CONFIG_USB_HOST_ETHER
220 210
221 #define USB_MAX_ETH_DEV 5 211 #define USB_MAX_ETH_DEV 5
222 int usb_host_eth_scan(int mode); 212 int usb_host_eth_scan(int mode);
223 213
224 #endif 214 #endif
225 215
226 #ifdef CONFIG_USB_KEYBOARD 216 #ifdef CONFIG_USB_KEYBOARD
227 217
228 int drv_usb_kbd_init(void); 218 int drv_usb_kbd_init(void);
229 int usb_kbd_deregister(void); 219 int usb_kbd_deregister(void);
230 220
231 #endif 221 #endif
232 /* routines */ 222 /* routines */
233 int usb_init(void); /* initialize the USB Controller */ 223 int usb_init(void); /* initialize the USB Controller */
234 int usb_stop(void); /* stop the USB Controller */ 224 int usb_stop(void); /* stop the USB Controller */
235 225
236 226
237 int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol); 227 int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol);
238 int usb_set_idle(struct usb_device *dev, int ifnum, int duration, 228 int usb_set_idle(struct usb_device *dev, int ifnum, int duration,
239 int report_id); 229 int report_id);
240 struct usb_device *usb_get_dev_index(int index); 230 struct usb_device *usb_get_dev_index(int index);
241 int usb_control_msg(struct usb_device *dev, unsigned int pipe, 231 int usb_control_msg(struct usb_device *dev, unsigned int pipe,
242 unsigned char request, unsigned char requesttype, 232 unsigned char request, unsigned char requesttype,
243 unsigned short value, unsigned short index, 233 unsigned short value, unsigned short index,
244 void *data, unsigned short size, int timeout); 234 void *data, unsigned short size, int timeout);
245 int usb_bulk_msg(struct usb_device *dev, unsigned int pipe, 235 int usb_bulk_msg(struct usb_device *dev, unsigned int pipe,
246 void *data, int len, int *actual_length, int timeout); 236 void *data, int len, int *actual_length, int timeout);
247 int usb_submit_int_msg(struct usb_device *dev, unsigned long pipe, 237 int usb_submit_int_msg(struct usb_device *dev, unsigned long pipe,
248 void *buffer, int transfer_len, int interval); 238 void *buffer, int transfer_len, int interval);
249 int usb_disable_asynch(int disable); 239 int usb_disable_asynch(int disable);
250 int usb_maxpacket(struct usb_device *dev, unsigned long pipe); 240 int usb_maxpacket(struct usb_device *dev, unsigned long pipe);
251 int usb_get_configuration_no(struct usb_device *dev, unsigned char *buffer, 241 int usb_get_configuration_no(struct usb_device *dev, unsigned char *buffer,
252 int cfgno); 242 int cfgno);
253 int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type, 243 int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type,
254 unsigned char id, void *buf, int size); 244 unsigned char id, void *buf, int size);
255 int usb_get_class_descriptor(struct usb_device *dev, int ifnum, 245 int usb_get_class_descriptor(struct usb_device *dev, int ifnum,
256 unsigned char type, unsigned char id, void *buf, 246 unsigned char type, unsigned char id, void *buf,
257 int size); 247 int size);
258 int usb_clear_halt(struct usb_device *dev, int pipe); 248 int usb_clear_halt(struct usb_device *dev, int pipe);
259 int usb_string(struct usb_device *dev, int index, char *buf, size_t size); 249 int usb_string(struct usb_device *dev, int index, char *buf, size_t size);
260 int usb_set_interface(struct usb_device *dev, int interface, int alternate); 250 int usb_set_interface(struct usb_device *dev, int interface, int alternate);
261 251
262 /* big endian -> little endian conversion */ 252 /* big endian -> little endian conversion */
263 /* some CPUs are already little endian e.g. the ARM920T */ 253 /* some CPUs are already little endian e.g. the ARM920T */
264 #define __swap_16(x) \ 254 #define __swap_16(x) \
265 ({ unsigned short x_ = (unsigned short)x; \ 255 ({ unsigned short x_ = (unsigned short)x; \
266 (unsigned short)( \ 256 (unsigned short)( \
267 ((x_ & 0x00FFU) << 8) | ((x_ & 0xFF00U) >> 8)); \ 257 ((x_ & 0x00FFU) << 8) | ((x_ & 0xFF00U) >> 8)); \
268 }) 258 })
269 #define __swap_32(x) \ 259 #define __swap_32(x) \
270 ({ unsigned long x_ = (unsigned long)x; \ 260 ({ unsigned long x_ = (unsigned long)x; \
271 (unsigned long)( \ 261 (unsigned long)( \
272 ((x_ & 0x000000FFUL) << 24) | \ 262 ((x_ & 0x000000FFUL) << 24) | \
273 ((x_ & 0x0000FF00UL) << 8) | \ 263 ((x_ & 0x0000FF00UL) << 8) | \
274 ((x_ & 0x00FF0000UL) >> 8) | \ 264 ((x_ & 0x00FF0000UL) >> 8) | \
275 ((x_ & 0xFF000000UL) >> 24)); \ 265 ((x_ & 0xFF000000UL) >> 24)); \
276 }) 266 })
277 267
278 #ifdef __LITTLE_ENDIAN 268 #ifdef __LITTLE_ENDIAN
279 # define swap_16(x) (x) 269 # define swap_16(x) (x)
280 # define swap_32(x) (x) 270 # define swap_32(x) (x)
281 #else 271 #else
282 # define swap_16(x) __swap_16(x) 272 # define swap_16(x) __swap_16(x)
283 # define swap_32(x) __swap_32(x) 273 # define swap_32(x) __swap_32(x)
284 #endif 274 #endif
285 275
286 /* 276 /*
287 * Calling this entity a "pipe" is glorifying it. A USB pipe 277 * Calling this entity a "pipe" is glorifying it. A USB pipe
288 * is something embarrassingly simple: it basically consists 278 * is something embarrassingly simple: it basically consists
289 * of the following information: 279 * of the following information:
290 * - device number (7 bits) 280 * - device number (7 bits)
291 * - endpoint number (4 bits) 281 * - endpoint number (4 bits)
292 * - current Data0/1 state (1 bit) 282 * - current Data0/1 state (1 bit)
293 * - direction (1 bit) 283 * - direction (1 bit)
294 * - speed (2 bits) 284 * - speed (2 bits)
295 * - max packet size (2 bits: 8, 16, 32 or 64) 285 * - max packet size (2 bits: 8, 16, 32 or 64)
296 * - pipe type (2 bits: control, interrupt, bulk, isochronous) 286 * - pipe type (2 bits: control, interrupt, bulk, isochronous)
297 * 287 *
298 * That's 18 bits. Really. Nothing more. And the USB people have 288 * That's 18 bits. Really. Nothing more. And the USB people have
299 * documented these eighteen bits as some kind of glorious 289 * documented these eighteen bits as some kind of glorious
300 * virtual data structure. 290 * virtual data structure.
301 * 291 *
302 * Let's not fall in that trap. We'll just encode it as a simple 292 * Let's not fall in that trap. We'll just encode it as a simple
303 * unsigned int. The encoding is: 293 * unsigned int. The encoding is:
304 * 294 *
305 * - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64) 295 * - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64)
306 * - direction: bit 7 (0 = Host-to-Device [Out], 296 * - direction: bit 7 (0 = Host-to-Device [Out],
307 * (1 = Device-to-Host [In]) 297 * (1 = Device-to-Host [In])
308 * - device: bits 8-14 298 * - device: bits 8-14
309 * - endpoint: bits 15-18 299 * - endpoint: bits 15-18
310 * - Data0/1: bit 19 300 * - Data0/1: bit 19
311 * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, 301 * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt,
312 * 10 = control, 11 = bulk) 302 * 10 = control, 11 = bulk)
313 * 303 *
314 * Why? Because it's arbitrary, and whatever encoding we select is really 304 * Why? Because it's arbitrary, and whatever encoding we select is really
315 * up to us. This one happens to share a lot of bit positions with the UHCI 305 * up to us. This one happens to share a lot of bit positions with the UHCI
316 * specification, so that much of the uhci driver can just mask the bits 306 * specification, so that much of the uhci driver can just mask the bits
317 * appropriately. 307 * appropriately.
318 */ 308 */
319 /* Create various pipes... */ 309 /* Create various pipes... */
320 #define create_pipe(dev,endpoint) \ 310 #define create_pipe(dev,endpoint) \
321 (((dev)->devnum << 8) | ((endpoint) << 15) | \ 311 (((dev)->devnum << 8) | ((endpoint) << 15) | \
322 (dev)->maxpacketsize) 312 (dev)->maxpacketsize)
323 #define default_pipe(dev) ((dev)->speed << 26) 313 #define default_pipe(dev) ((dev)->speed << 26)
324 314
325 #define usb_sndctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \ 315 #define usb_sndctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \
326 create_pipe(dev, endpoint)) 316 create_pipe(dev, endpoint))
327 #define usb_rcvctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \ 317 #define usb_rcvctrlpipe(dev, endpoint) ((PIPE_CONTROL << 30) | \
328 create_pipe(dev, endpoint) | \ 318 create_pipe(dev, endpoint) | \
329 USB_DIR_IN) 319 USB_DIR_IN)
330 #define usb_sndisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \ 320 #define usb_sndisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \
331 create_pipe(dev, endpoint)) 321 create_pipe(dev, endpoint))
332 #define usb_rcvisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \ 322 #define usb_rcvisocpipe(dev, endpoint) ((PIPE_ISOCHRONOUS << 30) | \
333 create_pipe(dev, endpoint) | \ 323 create_pipe(dev, endpoint) | \
334 USB_DIR_IN) 324 USB_DIR_IN)
335 #define usb_sndbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \ 325 #define usb_sndbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \
336 create_pipe(dev, endpoint)) 326 create_pipe(dev, endpoint))
337 #define usb_rcvbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \ 327 #define usb_rcvbulkpipe(dev, endpoint) ((PIPE_BULK << 30) | \
338 create_pipe(dev, endpoint) | \ 328 create_pipe(dev, endpoint) | \
339 USB_DIR_IN) 329 USB_DIR_IN)
340 #define usb_sndintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \ 330 #define usb_sndintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \
341 create_pipe(dev, endpoint)) 331 create_pipe(dev, endpoint))
342 #define usb_rcvintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \ 332 #define usb_rcvintpipe(dev, endpoint) ((PIPE_INTERRUPT << 30) | \
343 create_pipe(dev, endpoint) | \ 333 create_pipe(dev, endpoint) | \
344 USB_DIR_IN) 334 USB_DIR_IN)
345 #define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | \ 335 #define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | \
346 default_pipe(dev)) 336 default_pipe(dev))
347 #define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | \ 337 #define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | \
348 default_pipe(dev) | \ 338 default_pipe(dev) | \
349 USB_DIR_IN) 339 USB_DIR_IN)
350 340
351 /* The D0/D1 toggle bits */ 341 /* The D0/D1 toggle bits */
352 #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1) 342 #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1)
353 #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << ep)) 343 #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << ep))
354 #define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = \ 344 #define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = \
355 ((dev)->toggle[out] & \ 345 ((dev)->toggle[out] & \
356 ~(1 << ep)) | ((bit) << ep)) 346 ~(1 << ep)) | ((bit) << ep))
357 347
358 /* Endpoint halt control/status */ 348 /* Endpoint halt control/status */
359 #define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1) 349 #define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1)
360 #define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep))) 350 #define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
361 #define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep))) 351 #define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep)))
362 #define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep))) 352 #define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep)))
363 353
364 #define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : \ 354 #define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : \
365 USB_PID_OUT) 355 USB_PID_OUT)
366 356
367 #define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1) 357 #define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1)
368 #define usb_pipein(pipe) (((pipe) >> 7) & 1) 358 #define usb_pipein(pipe) (((pipe) >> 7) & 1)
369 #define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f) 359 #define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
370 #define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff) 360 #define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff)
371 #define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf) 361 #define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
372 #define usb_pipedata(pipe) (((pipe) >> 19) & 1) 362 #define usb_pipedata(pipe) (((pipe) >> 19) & 1)
373 #define usb_pipetype(pipe) (((pipe) >> 30) & 3) 363 #define usb_pipetype(pipe) (((pipe) >> 30) & 3)
374 #define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS) 364 #define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
375 #define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT) 365 #define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
376 #define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL) 366 #define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
377 #define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK) 367 #define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
378 368
379 #define usb_pipe_ep_index(pipe) \ 369 #define usb_pipe_ep_index(pipe) \
380 usb_pipecontrol(pipe) ? (usb_pipeendpoint(pipe) * 2) : \ 370 usb_pipecontrol(pipe) ? (usb_pipeendpoint(pipe) * 2) : \
381 ((usb_pipeendpoint(pipe) * 2) - \ 371 ((usb_pipeendpoint(pipe) * 2) - \
382 (usb_pipein(pipe) ? 0 : 1)) 372 (usb_pipein(pipe) ? 0 : 1))
383 373
384 /************************************************************************* 374 /*************************************************************************
385 * Hub Stuff 375 * Hub Stuff
386 */ 376 */
387 struct usb_port_status { 377 struct usb_port_status {
388 unsigned short wPortStatus; 378 unsigned short wPortStatus;
389 unsigned short wPortChange; 379 unsigned short wPortChange;
390 } __attribute__ ((packed)); 380 } __attribute__ ((packed));
391 381
392 struct usb_hub_status { 382 struct usb_hub_status {
393 unsigned short wHubStatus; 383 unsigned short wHubStatus;
394 unsigned short wHubChange; 384 unsigned short wHubChange;
395 } __attribute__ ((packed)); 385 } __attribute__ ((packed));
396 386
397 387
398 /* Hub descriptor */ 388 /* Hub descriptor */
399 struct usb_hub_descriptor { 389 struct usb_hub_descriptor {
400 unsigned char bLength; 390 unsigned char bLength;
401 unsigned char bDescriptorType; 391 unsigned char bDescriptorType;
402 unsigned char bNbrPorts; 392 unsigned char bNbrPorts;
403 unsigned short wHubCharacteristics; 393 unsigned short wHubCharacteristics;
404 unsigned char bPwrOn2PwrGood; 394 unsigned char bPwrOn2PwrGood;
405 unsigned char bHubContrCurrent; 395 unsigned char bHubContrCurrent;
406 unsigned char DeviceRemovable[(USB_MAXCHILDREN+1+7)/8]; 396 unsigned char DeviceRemovable[(USB_MAXCHILDREN+1+7)/8];
407 unsigned char PortPowerCtrlMask[(USB_MAXCHILDREN+1+7)/8]; 397 unsigned char PortPowerCtrlMask[(USB_MAXCHILDREN+1+7)/8];
408 /* DeviceRemovable and PortPwrCtrlMask want to be variable-length 398 /* DeviceRemovable and PortPwrCtrlMask want to be variable-length
409 bitmaps that hold max 255 entries. (bit0 is ignored) */ 399 bitmaps that hold max 255 entries. (bit0 is ignored) */
410 } __attribute__ ((packed)); 400 } __attribute__ ((packed));
411 401
412 402
413 struct usb_hub_device { 403 struct usb_hub_device {
414 struct usb_device *pusb_dev; 404 struct usb_device *pusb_dev;
415 struct usb_hub_descriptor desc; 405 struct usb_hub_descriptor desc;
416 }; 406 };
417 407
418 int usb_hub_probe(struct usb_device *dev, int ifnum); 408 int usb_hub_probe(struct usb_device *dev, int ifnum);
419 void usb_hub_reset(void); 409 void usb_hub_reset(void);
420 int hub_port_reset(struct usb_device *dev, int port, 410 int hub_port_reset(struct usb_device *dev, int port,
421 unsigned short *portstat); 411 unsigned short *portstat);
422 412
423 struct usb_device *usb_alloc_new_device(void *controller); 413 struct usb_device *usb_alloc_new_device(void *controller);
424 414
425 int usb_new_device(struct usb_device *dev); 415 int usb_new_device(struct usb_device *dev);
426 void usb_free_device(void); 416 void usb_free_device(void);
427 int usb_alloc_device(struct usb_device *dev); 417 int usb_alloc_device(struct usb_device *dev);
428 418
429 #endif /*_USB_H_ */ 419 #endif /*_USB_H_ */
430 420