blob: 3332d51b365e3254f06ec862dbf44f42b65212ec [file] [log] [blame]
Tom Rinic8fff5d2021-09-11 08:57:31 -04001.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2.. sectionauthor:: Tom Rini <trini@konsulko.com>
3
Bryan Brattlof0820e112022-12-19 14:29:49 -06004AM335x Generation
5=================
6
Tom Rini5d4dbf12013-07-08 12:15:18 -04007Summary
Bryan Brattlof0820e112022-12-19 14:29:49 -06008-------
Tom Rini5d4dbf12013-07-08 12:15:18 -04009
Tom Rinib8292242021-09-11 08:57:32 -040010This document covers various features of the `am335x_evm` default
11configuration, some of the related defconfigs, and how to enable hardware
12features not present by default in the defconfigs.
Tom Rini5d4dbf12013-07-08 12:15:18 -040013
14Hardware
Tom Rinic8fff5d2021-09-11 08:57:31 -040015--------
Tom Rini5d4dbf12013-07-08 12:15:18 -040016
17The binary produced by this board supports, based on parsing of the EEPROM
18documented in TI's reference designs:
Tom Rinic8fff5d2021-09-11 08:57:31 -040019* AM335x GP EVM
20* AM335x EVM SK
Tom Rinib8292242021-09-11 08:57:32 -040021* The Beaglebone family of designs
Tom Rinid7ccfc52013-08-20 08:53:50 -040022
23Customization
Tom Rinic8fff5d2021-09-11 08:57:31 -040024-------------
Tom Rinid7ccfc52013-08-20 08:53:50 -040025
26Given that all of the above boards are reference platforms (and the
27Beaglebone platforms are OSHA), it is likely that this platform code and
28configuration will be used as the basis of a custom platform. It is
29worth noting that aside from things such as NAND or MMC only being
30required if a custom platform makes use of these blocks, the following
31are required, depending on design:
32
Tom Rinic8fff5d2021-09-11 08:57:31 -040033* GPIO is only required if DDR3 power is controlled in a way similar to EVM SK
34* SPI is only required for SPI flash, or exposing the SPI bus.
Tom Rinid7ccfc52013-08-20 08:53:50 -040035
36The following blocks are required:
Tom Rinic8fff5d2021-09-11 08:57:31 -040037
38* I2C, to talk with the PMIC and ensure that we do not run afoul of
Tom Rinid7ccfc52013-08-20 08:53:50 -040039 errata 1.0.24.
40
Tom Rinib8292242021-09-11 08:57:32 -040041When removing options as part of customization, note that you will likely need
42to look at both `include/configs/am335x_evm.h`,
43`include/configs/ti_am335x_common.h` and `include/configs/am335x_evm.h` as the
44migration to Kconfig is not yet complete.
Tom Rinid7ccfc52013-08-20 08:53:50 -040045
Tom Rini97559b52013-07-17 12:24:30 -040046NAND
Tom Rinic8fff5d2021-09-11 08:57:31 -040047----
Tom Rini97559b52013-07-17 12:24:30 -040048
49The AM335x GP EVM ships with a 256MiB NAND available in most profiles. In
50this example to program the NAND we assume that an SD card has been
51inserted with the files to write in the first SD slot and that mtdparts
pekon gupta32f4d722013-11-19 11:02:18 +053052have been configured correctly for the board. All images are first loaded
53into memory, then written to NAND.
Tom Rini97559b52013-07-17 12:24:30 -040054
pekon gupta32f4d722013-11-19 11:02:18 +053055Step-1: Building u-boot for NAND boot
56 Set following CONFIGxx options for NAND device.
57 CONFIG_SYS_NAND_PAGE_SIZE number of main bytes in NAND page
58 CONFIG_SYS_NAND_OOBSIZE number of OOB bytes in NAND page
59 CONFIG_SYS_NAND_BLOCK_SIZE number of bytes in NAND erase-block
Tom Rini4e590942022-11-12 17:36:51 -050060 CFG_SYS_NAND_ECCPOS ECC map for NAND page
pekon gupta32f4d722013-11-19 11:02:18 +053061 CONFIG_NAND_OMAP_ECCSCHEME (refer doc/README.nand)
62
63Step-2: Flashing NAND via MMC/SD
Tom Rinic8fff5d2021-09-11 08:57:31 -040064
65.. code-block:: text
66
pekon gupta32f4d722013-11-19 11:02:18 +053067 # select BOOTSEL to MMC/SD boot and boot from MMC/SD card
68 U-Boot # mmc rescan
69 # erase flash
70 U-Boot # nand erase.chip
71 U-Boot # env default -f -a
72 U-Boot # saveenv
73 # flash MLO. Redundant copies of MLO are kept for failsafe
74 U-Boot # load mmc 0 0x82000000 MLO
75 U-Boot # nand write 0x82000000 0x00000 0x20000
76 U-Boot # nand write 0x82000000 0x20000 0x20000
77 U-Boot # nand write 0x82000000 0x40000 0x20000
78 U-Boot # nand write 0x82000000 0x60000 0x20000
79 # flash u-boot.img
80 U-Boot # load mmc 0 0x82000000 u-boot.img
81 U-Boot # nand write 0x82000000 0x80000 0x60000
82 # flash kernel image
83 U-Boot # load mmc 0 0x82000000 uImage
84 U-Boot # nand write 0x82000000 ${nandsrcaddr} ${nandimgsize}
85 # flash filesystem image
86 U-Boot # load mmc 0 0x82000000 filesystem.img
87 U-Boot # nand write 0x82000000 ${loadaddress} 0x300000
88
89Step-3: Set BOOTSEL pin to select NAND boot, and POR the device.
90 The device should boot from images flashed on NAND device.
Tom Rini5d4dbf12013-07-08 12:15:18 -040091
Tom Rini486da222013-07-18 15:13:05 -040092
Tom Rini5d4dbf12013-07-08 12:15:18 -040093Falcon Mode
Tom Rinic8fff5d2021-09-11 08:57:31 -040094-----------
Tom Rini5d4dbf12013-07-08 12:15:18 -040095
96The default build includes "Falcon Mode" (see doc/README.falcon) via NAND,
97eMMC (or raw SD cards) and FAT SD cards. Our default behavior currently is
98to read a 'c' on the console while in SPL at any point prior to loading the
99OS payload (so as soon as possible) to opt to booting full U-Boot. Also
100note that while one can program Falcon Mode "in place" great care needs to
101be taken by the user to not 'brick' their setup. As these are all eval
102boards with multiple boot methods, recovery should not be an issue in this
103worst-case however.
104
105Falcon Mode: eMMC
Tom Rinic8fff5d2021-09-11 08:57:31 -0400106-----------------
Tom Rini5d4dbf12013-07-08 12:15:18 -0400107
108The recommended layout in this case is:
109
Tom Rinic8fff5d2021-09-11 08:57:31 -0400110.. code-block:: text
111
112 MMC BLOCKS |--------------------------------| LOCATION IN BYTES
113 0x0000 - 0x007F : MBR or GPT table : 0x000000 - 0x020000
114 0x0080 - 0x00FF : ARGS or FDT file : 0x010000 - 0x020000
115 0x0100 - 0x01FF : SPL.backup1 (first copy used) : 0x020000 - 0x040000
116 0x0200 - 0x02FF : SPL.backup2 (second copy used) : 0x040000 - 0x060000
117 0x0300 - 0x06FF : U-Boot : 0x060000 - 0x0e0000
118 0x0700 - 0x08FF : U-Boot Env + Redundant : 0x0e0000 - 0x120000
119 0x0900 - 0x28FF : Kernel : 0x120000 - 0x520000
Tom Rini5d4dbf12013-07-08 12:15:18 -0400120
121Note that when we run 'spl export' it will prepare to boot the kernel.
122This includes relocation of the uImage from where we loaded it to the entry
123point defined in the header. As these locations overlap by default, it
124would leave us with an image that if written to MMC will not boot, so
125instead of using the loadaddr variable we use 0x81000000 in the following
126example. In this example we are loading from the network, for simplicity,
127and assume a valid partition table already exists and 'mmc dev' has already
128been run to select the correct device. Also note that if you previously
129had a FAT partition (such as on a Beaglebone Black) it is not enough to
130write garbage into the area, you must delete it from the partition table
131first.
132
Tom Rinic8fff5d2021-09-11 08:57:31 -0400133.. code-block:: text
134
135 # Ensure we are able to talk with this mmc device
136 U-Boot # mmc rescan
137 U-Boot # tftp 81000000 am335x/MLO
138 # Write to two of the backup locations ROM uses
139 U-Boot # mmc write 81000000 100 100
140 U-Boot # mmc write 81000000 200 100
141 # Write U-Boot to the location set in the config
142 U-Boot # tftp 81000000 am335x/u-boot.img
143 U-Boot # mmc write 81000000 300 400
144 # Load kernel and device tree into memory, perform export
145 U-Boot # tftp 81000000 am335x/uImage
146 U-Boot # run findfdt
147 U-Boot # tftp ${fdtaddr} am335x/${fdtfile}
148 U-Boot # run mmcargs
149 U-Boot # spl export fdt 81000000 - ${fdtaddr}
150 # Write the updated device tree to MMC
151 U-Boot # mmc write ${fdtaddr} 80 80
152 # Write the uImage to MMC
153 U-Boot # mmc write 81000000 900 2000
Tom Rini5d4dbf12013-07-08 12:15:18 -0400154
155Falcon Mode: FAT SD cards
Tom Rinic8fff5d2021-09-11 08:57:31 -0400156-------------------------
Tom Rini5d4dbf12013-07-08 12:15:18 -0400157
158In this case the additional file is written to the filesystem. In this
159example we assume that the uImage and device tree to be used are already on
160the FAT filesystem (only the uImage MUST be for this to function
161afterwards) along with a Falcon Mode aware MLO and the FAT partition has
162already been created and marked bootable:
163
Tom Rinic8fff5d2021-09-11 08:57:31 -0400164.. code-block:: text
165
166 U-Boot # mmc rescan
167 # Load kernel and device tree into memory, perform export
168 U-Boot # load mmc 0:1 ${loadaddr} uImage
169 U-Boot # run findfdt
170 U-Boot # load mmc 0:1 ${fdtaddr} ${fdtfile}
171 U-Boot # run mmcargs
172 U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
Tom Rini5d4dbf12013-07-08 12:15:18 -0400173
174This will print a number of lines and then end with something like:
Tom Rinic8fff5d2021-09-11 08:57:31 -0400175
176.. code-block:: text
177
178 Using Device Tree in place at 80f80000, end 80f85928
179 Using Device Tree in place at 80f80000, end 80f88928
180
Tom Rini5d4dbf12013-07-08 12:15:18 -0400181So then you:
182
Tom Rinic8fff5d2021-09-11 08:57:31 -0400183.. code-block:: text
184
185 U-Boot # fatwrite mmc 0:1 0x80f80000 args 8928
Tom Rini5d4dbf12013-07-08 12:15:18 -0400186
187Falcon Mode: NAND
Tom Rinic8fff5d2021-09-11 08:57:31 -0400188-----------------
Tom Rini5d4dbf12013-07-08 12:15:18 -0400189
190In this case the additional data is written to another partition of the
191NAND. In this example we assume that the uImage and device tree to be are
Jeremiah Mahlerfa840b02015-01-06 16:40:28 -0800192already located on the NAND somewhere (such as filesystem or mtd partition)
Tom Rini5d4dbf12013-07-08 12:15:18 -0400193along with a Falcon Mode aware MLO written to the correct locations for
194booting and mtdparts have been configured correctly for the board:
195
Tom Rinic8fff5d2021-09-11 08:57:31 -0400196.. code-block:: text
197
198 U-Boot # nand read ${loadaddr} kernel
199 U-Boot # load nand rootfs ${fdtaddr} /boot/am335x-evm.dtb
200 U-Boot # run nandargs
201 U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
202 U-Boot # nand erase.part u-boot-spl-os
203 U-Boot # nand write ${fdtaddr} u-boot-spl-os
Miquel Raynalc631cf82023-08-07 08:42:41 +0200204
205USB device
206----------
207
208The platform code for am33xx based designs is legacy in the sense that
209it is not fully compliant with the driver model in its management of the
210various resources. This is particularly true for the USB Ethernet gadget
211which will automatically be bound to the first USB Device Controller
212(UDC). This make the USB Ethernet gadget work out of the box on common
213boards like the Beagle Bone Blacks and by default will prevents other
214gadgets to be used.
215
216The output of the 'dm tree' command shows which driver is bound to which
217device, so the user can easily configure their platform differently from
218the command line:
219
220.. code-block:: text
221
222 => dm tree
223 Class Index Probed Driver Name
224 -----------------------------------------------------------
225 [...]
226 misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
227 usb 0 [ + ] ti-musb-peripheral | | |-- usb@47401000
228 ethernet 1 [ + ] usb_ether | | | `-- usb_ether
229 bootdev 3 [ ] eth_bootdev | | | `-- usb_ether.bootdev
230 usb 0 [ ] ti-musb-host | | `-- usb@47401800
231
232Typically here any network command performed using the usb_ether
233interface would work, while using other gadgets would fail:
234
235.. code-block:: text
236
237 => fastboot usb 0
238 All UDC in use (1 available), use the unbind command
239 g_dnl_register: failed!, error: -19
240 exit not allowed from main input shell.
241
242As hinted by the primary error message, the only controller available
243(usb@47401000) is currently bound to the usb_ether driver, which makes
244it impossible for the fastboot command to bind with this device (at
245least from a bootloader point of view). The solution here would be to
246use the unbind command specifying the class and index parameters (as
247shown above in the 'dm tree' output) to target the driver to unbind:
248
249.. code-block:: text
250
251 => unbind ethernet 1
252
253The output of the 'dm tree' command now shows the availability of the
254first USB device controller, the fastboot gadget will now be able to
255bind with it:
256
257.. code-block:: text
258
259 => dm tree
260 Class Index Probed Driver Name
261 -----------------------------------------------------------
262 [...]
263 misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
264 usb 0 [ ] ti-musb-peripheral | | |-- usb@47401000
265 usb 0 [ ] ti-musb-host | | `-- usb@47401800