12dabac13SMasahiro Yamada/* 22dabac13SMasahiro Yamada * Copyright (c) 2014 The Chromium OS Authors. 32dabac13SMasahiro Yamada * 42dabac13SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 52dabac13SMasahiro Yamada */ 62dabac13SMasahiro Yamada 72dabac13SMasahiro YamadaNative Execution of U-Boot 82dabac13SMasahiro Yamada========================== 92dabac13SMasahiro Yamada 102dabac13SMasahiro YamadaThe 'sandbox' architecture is designed to allow U-Boot to run under Linux on 112dabac13SMasahiro Yamadaalmost any hardware. To achieve this it builds U-Boot (so far as possible) 122dabac13SMasahiro Yamadaas a normal C application with a main() and normal C libraries. 132dabac13SMasahiro Yamada 142dabac13SMasahiro YamadaAll of U-Boot's architecture-specific code therefore cannot be built as part 152dabac13SMasahiro Yamadaof the sandbox U-Boot. The purpose of running U-Boot under Linux is to test 162dabac13SMasahiro Yamadaall the generic code, not specific to any one architecture. The idea is to 172dabac13SMasahiro Yamadacreate unit tests which we can run to test this upper level code. 182dabac13SMasahiro Yamada 192dabac13SMasahiro YamadaCONFIG_SANDBOX is defined when building a native board. 202dabac13SMasahiro Yamada 219b250ac4SSimon GlassThe board name is 'sandbox' but the vendor name is unset, so there is a 229b250ac4SSimon Glasssingle board in board/sandbox. 232dabac13SMasahiro Yamada 242dabac13SMasahiro YamadaCONFIG_SANDBOX_BIG_ENDIAN should be defined when running on big-endian 252dabac13SMasahiro Yamadamachines. 262dabac13SMasahiro Yamada 27c6b89f31SMario SixThere are two versions of the sandbox: One using 32-bit-wide integers, and one 28c6b89f31SMario Sixusing 64-bit-wide integers. The 32-bit version can be build and run on either 29c6b89f31SMario Six32 or 64-bit hosts by either selecting or deselecting CONFIG_SANDBOX_32BIT; by 30c6b89f31SMario Sixdefault, the sandbox it built for a 32-bit host. The sandbox using 64-bit-wide 31c6b89f31SMario Sixintegers can only be built on 64-bit hosts. 32226b50bbSBin Meng 332dabac13SMasahiro YamadaNote that standalone/API support is not available at present. 342dabac13SMasahiro Yamada 352dabac13SMasahiro Yamada 362dabac13SMasahiro YamadaBasic Operation 372dabac13SMasahiro Yamada--------------- 382dabac13SMasahiro Yamada 392dabac13SMasahiro YamadaTo run sandbox U-Boot use something like: 402dabac13SMasahiro Yamada 416b1978f8SJagannadha Sutradharudu Teki make sandbox_defconfig all 422dabac13SMasahiro Yamada ./u-boot 432dabac13SMasahiro Yamada 442dabac13SMasahiro YamadaNote: 452dabac13SMasahiro Yamada If you get errors about 'sdl-config: Command not found' you may need to 462dabac13SMasahiro Yamada install libsdl1.2-dev or similar to get SDL support. Alternatively you can 472dabac13SMasahiro Yamada build sandbox without SDL (i.e. no display/keyboard support) by removing 482dabac13SMasahiro Yamada the CONFIG_SANDBOX_SDL line in include/configs/sandbox.h or using: 492dabac13SMasahiro Yamada 506b1978f8SJagannadha Sutradharudu Teki make sandbox_defconfig all NO_SDL=1 512dabac13SMasahiro Yamada ./u-boot 522dabac13SMasahiro Yamada 532dabac13SMasahiro YamadaU-Boot will start on your computer, showing a sandbox emulation of the serial 542dabac13SMasahiro Yamadaconsole: 552dabac13SMasahiro Yamada 562dabac13SMasahiro Yamada 572dabac13SMasahiro YamadaU-Boot 2014.04 (Mar 20 2014 - 19:06:00) 582dabac13SMasahiro Yamada 592dabac13SMasahiro YamadaDRAM: 128 MiB 602dabac13SMasahiro YamadaUsing default environment 612dabac13SMasahiro Yamada 622dabac13SMasahiro YamadaIn: serial 632dabac13SMasahiro YamadaOut: lcd 642dabac13SMasahiro YamadaErr: lcd 652dabac13SMasahiro Yamada=> 662dabac13SMasahiro Yamada 672dabac13SMasahiro YamadaYou can issue commands as your would normally. If the command you want is 682dabac13SMasahiro Yamadanot supported you can add it to include/configs/sandbox.h. 692dabac13SMasahiro Yamada 702dabac13SMasahiro YamadaTo exit, type 'reset' or press Ctrl-C. 712dabac13SMasahiro Yamada 722dabac13SMasahiro Yamada 732dabac13SMasahiro YamadaConsole / LCD support 742dabac13SMasahiro Yamada--------------------- 752dabac13SMasahiro Yamada 762dabac13SMasahiro YamadaAssuming that CONFIG_SANDBOX_SDL is defined when building, you can run the 772dabac13SMasahiro Yamadasandbox with LCD and keyboard emulation, using something like: 782dabac13SMasahiro Yamada 792dabac13SMasahiro Yamada ./u-boot -d u-boot.dtb -l 802dabac13SMasahiro Yamada 812dabac13SMasahiro YamadaThis will start U-Boot with a window showing the contents of the LCD. If 822dabac13SMasahiro Yamadathat window has the focus then you will be able to type commands as you 832dabac13SMasahiro Yamadawould on the console. You can adjust the display settings in the device 842dabac13SMasahiro Yamadatree file - see arch/sandbox/dts/sandbox.dts. 852dabac13SMasahiro Yamada 862dabac13SMasahiro Yamada 872dabac13SMasahiro YamadaCommand-line Options 882dabac13SMasahiro Yamada-------------------- 892dabac13SMasahiro Yamada 902dabac13SMasahiro YamadaVarious options are available, mostly for test purposes. Use -h to see 912dabac13SMasahiro Yamadaavailable options. Some of these are described below. 922dabac13SMasahiro Yamada 932dabac13SMasahiro YamadaThe terminal is normally in what is called 'raw-with-sigs' mode. This means 942dabac13SMasahiro Yamadathat you can use arrow keys for command editing and history, but if you 952dabac13SMasahiro Yamadapress Ctrl-C, U-Boot will exit instead of handling this as a keypress. 962dabac13SMasahiro Yamada 972dabac13SMasahiro YamadaOther options are 'raw' (so Ctrl-C is handled within U-Boot) and 'cooked' 982dabac13SMasahiro Yamada(where the terminal is in cooked mode and cursor keys will not work, Ctrl-C 992dabac13SMasahiro Yamadawill exit). 1002dabac13SMasahiro Yamada 1012dabac13SMasahiro YamadaAs mentioned above, -l causes the LCD emulation window to be shown. 1022dabac13SMasahiro Yamada 1032dabac13SMasahiro YamadaA device tree binary file can be provided with -d. If you edit the source 1042dabac13SMasahiro Yamada(it is stored at arch/sandbox/dts/sandbox.dts) you must rebuild U-Boot to 1052dabac13SMasahiro Yamadarecreate the binary file. 1062dabac13SMasahiro Yamada 1072dabac13SMasahiro YamadaTo execute commands directly, use the -c option. You can specify a single 1082dabac13SMasahiro Yamadacommand, or multiple commands separated by a semicolon, as is normal in 109*1f154a63STrevor WoernerU-Boot. Be careful with quoting as the shell will normally process and 110*1f154a63STrevor Woernerswallow quotes. When -c is used, U-Boot exits after the command is complete, 1112dabac13SMasahiro Yamadabut you can force it to go to interactive mode instead with -i. 1122dabac13SMasahiro Yamada 1132dabac13SMasahiro Yamada 1142dabac13SMasahiro YamadaMemory Emulation 1152dabac13SMasahiro Yamada---------------- 1162dabac13SMasahiro Yamada 1172dabac13SMasahiro YamadaMemory emulation is supported, with the size set by CONFIG_SYS_SDRAM_SIZE. 1182dabac13SMasahiro YamadaThe -m option can be used to read memory from a file on start-up and write 1192dabac13SMasahiro Yamadait when shutting down. This allows preserving of memory contents across 1202dabac13SMasahiro Yamadatest runs. You can tell U-Boot to remove the memory file after it is read 1212dabac13SMasahiro Yamada(on start-up) with the --rm_memory option. 1222dabac13SMasahiro Yamada 1232dabac13SMasahiro YamadaTo access U-Boot's emulated memory within the code, use map_sysmem(). This 1242dabac13SMasahiro Yamadafunction is used throughout U-Boot to ensure that emulated memory is used 1252dabac13SMasahiro Yamadarather than the U-Boot application memory. This provides memory starting 1262dabac13SMasahiro Yamadaat 0 and extending to the size of the emulation. 1272dabac13SMasahiro Yamada 1282dabac13SMasahiro Yamada 1292dabac13SMasahiro YamadaStoring State 1302dabac13SMasahiro Yamada------------- 1312dabac13SMasahiro Yamada 1322dabac13SMasahiro YamadaWith sandbox you can write drivers which emulate the operation of drivers on 1332dabac13SMasahiro Yamadareal devices. Some of these drivers may want to record state which is 1342dabac13SMasahiro Yamadapreserved across U-Boot runs. This is particularly useful for testing. For 1352dabac13SMasahiro Yamadaexample, the contents of a SPI flash chip should not disappear just because 1362dabac13SMasahiro YamadaU-Boot exits. 1372dabac13SMasahiro Yamada 1382dabac13SMasahiro YamadaState is stored in a device tree file in a simple format which is driver- 1392dabac13SMasahiro Yamadaspecific. You then use the -s option to specify the state file. Use -r to 1402dabac13SMasahiro Yamadamake U-Boot read the state on start-up (otherwise it starts empty) and -w 1412dabac13SMasahiro Yamadato write it on exit (otherwise the stored state is left unchanged and any 1422dabac13SMasahiro Yamadachanges U-Boot made will be lost). You can also use -n to tell U-Boot to 1432dabac13SMasahiro Yamadaignore any problems with missing state. This is useful when first running 1442dabac13SMasahiro Yamadasince the state file will be empty. 1452dabac13SMasahiro Yamada 1462dabac13SMasahiro YamadaThe device tree file has one node for each driver - the driver can store 1472dabac13SMasahiro Yamadawhatever properties it likes in there. See 'Writing Sandbox Drivers' below 1482dabac13SMasahiro Yamadafor more details on how to get drivers to read and write their state. 1492dabac13SMasahiro Yamada 1502dabac13SMasahiro Yamada 1512dabac13SMasahiro YamadaRunning and Booting 1522dabac13SMasahiro Yamada------------------- 1532dabac13SMasahiro Yamada 1542dabac13SMasahiro YamadaSince there is no machine architecture, sandbox U-Boot cannot actually boot 1552dabac13SMasahiro Yamadaa kernel, but it does support the bootm command. Filesystems, memory 1562dabac13SMasahiro Yamadacommands, hashing, FIT images, verified boot and many other features are 1572dabac13SMasahiro Yamadasupported. 1582dabac13SMasahiro Yamada 1592dabac13SMasahiro YamadaWhen 'bootm' runs a kernel, sandbox will exit, as U-Boot does on a real 1602dabac13SMasahiro Yamadamachine. Of course in this case, no kernel is run. 1612dabac13SMasahiro Yamada 1622dabac13SMasahiro YamadaIt is also possible to tell U-Boot that it has jumped from a temporary 1632dabac13SMasahiro Yamadaprevious U-Boot binary, with the -j option. That binary is automatically 1642dabac13SMasahiro Yamadaremoved by the U-Boot that gets the -j option. This allows you to write 1652dabac13SMasahiro Yamadatests which emulate the action of chain-loading U-Boot, typically used in 1662dabac13SMasahiro Yamadaa situation where a second 'updatable' U-Boot is stored on your board. It 1672dabac13SMasahiro Yamadais very risky to overwrite or upgrade the only U-Boot on a board, since a 1682dabac13SMasahiro Yamadapower or other failure will brick the board and require return to the 1692dabac13SMasahiro Yamadamanufacturer in the case of a consumer device. 1702dabac13SMasahiro Yamada 1712dabac13SMasahiro Yamada 1722dabac13SMasahiro YamadaSupported Drivers 1732dabac13SMasahiro Yamada----------------- 1742dabac13SMasahiro Yamada 1752dabac13SMasahiro YamadaU-Boot sandbox supports these emulations: 1762dabac13SMasahiro Yamada 1772dabac13SMasahiro Yamada- Block devices 1782dabac13SMasahiro Yamada- Chrome OS EC 1792dabac13SMasahiro Yamada- GPIO 1802dabac13SMasahiro Yamada- Host filesystem (access files on the host from within U-Boot) 1813ea143abSJoe Hershberger- I2C 1822dabac13SMasahiro Yamada- Keyboard (Chrome OS) 1832dabac13SMasahiro Yamada- LCD 1843ea143abSJoe Hershberger- Network 1852dabac13SMasahiro Yamada- Serial (for console only) 1862dabac13SMasahiro Yamada- Sound (incomplete - see sandbox_sdl_sound_init() for details) 1872dabac13SMasahiro Yamada- SPI 1882dabac13SMasahiro Yamada- SPI flash 1892dabac13SMasahiro Yamada- TPM (Trusted Platform Module) 1902dabac13SMasahiro Yamada 191*1f154a63STrevor WoernerA wide range of commands are implemented. Filesystems which use a block 1922dabac13SMasahiro Yamadadevice are supported. 1932dabac13SMasahiro Yamada 19489b199c3SSimon GlassAlso sandbox supports driver model (CONFIG_DM) and associated commands. 1952dabac13SMasahiro Yamada 1962dabac13SMasahiro Yamada 197a346ca79SJoe HershbergerLinux RAW Networking Bridge 198a346ca79SJoe Hershberger--------------------------- 199a346ca79SJoe Hershberger 200a346ca79SJoe HershbergerThe sandbox_eth_raw driver bridges traffic between the bottom of the network 201a346ca79SJoe Hershbergerstack and the RAW sockets API in Linux. This allows much of the U-Boot network 202a346ca79SJoe Hershbergerfunctionality to be tested in sandbox against real network traffic. 203a346ca79SJoe Hershberger 204a346ca79SJoe HershbergerFor Ethernet network adapters, the bridge utilizes the RAW AF_PACKET API. This 205a346ca79SJoe Hershbergeris needed to get access to the lowest level of the network stack in Linux. This 206a346ca79SJoe Hershbergermeans that all of the Ethernet frame is included. This allows the U-Boot network 207a346ca79SJoe Hershbergerstack to be fully used. In other words, nothing about the Linux network stack is 208a346ca79SJoe Hershbergerinvolved in forming the packets that end up on the wire. To receive the 209a346ca79SJoe Hershbergerresponses to packets sent from U-Boot the network interface has to be set to 210a346ca79SJoe Hershbergerpromiscuous mode so that the network card won't filter out packets not destined 211a346ca79SJoe Hershbergerfor its configured (on Linux) MAC address. 212a346ca79SJoe Hershberger 213a346ca79SJoe HershbergerThe RAW sockets Ethernet API requires elevated privileges in Linux. You can 214a346ca79SJoe Hershbergereither run as root, or you can add the capability needed like so: 215a346ca79SJoe Hershberger 216a346ca79SJoe Hershbergersudo /sbin/setcap "CAP_NET_RAW+ep" /path/to/u-boot 217a346ca79SJoe Hershberger 218a346ca79SJoe HershbergerThe default device tree for sandbox includes an entry for eth0 on the sandbox 219a346ca79SJoe Hershbergerhost machine whose alias is "eth1". The following are a few examples of network 220a346ca79SJoe Hershbergeroperations being tested on the eth0 interface. 221a346ca79SJoe Hershberger 222a346ca79SJoe Hershbergersudo /path/to/u-boot -D 223a346ca79SJoe Hershberger 224a346ca79SJoe HershbergerDHCP 225a346ca79SJoe Hershberger.... 226a346ca79SJoe Hershberger 227a346ca79SJoe Hershbergerset autoload no 228a346ca79SJoe Hershbergerset ethact eth1 229a346ca79SJoe Hershbergerdhcp 230a346ca79SJoe Hershberger 231a346ca79SJoe HershbergerPING 232a346ca79SJoe Hershberger.... 233a346ca79SJoe Hershberger 234a346ca79SJoe Hershbergerset autoload no 235a346ca79SJoe Hershbergerset ethact eth1 236a346ca79SJoe Hershbergerdhcp 237a346ca79SJoe Hershbergerping $gatewayip 238a346ca79SJoe Hershberger 239a346ca79SJoe HershbergerTFTP 240a346ca79SJoe Hershberger.... 241a346ca79SJoe Hershberger 242a346ca79SJoe Hershbergerset autoload no 243a346ca79SJoe Hershbergerset ethact eth1 244a346ca79SJoe Hershbergerdhcp 245a346ca79SJoe Hershbergerset serverip WWW.XXX.YYY.ZZZ 246a346ca79SJoe Hershbergertftpboot u-boot.bin 247a346ca79SJoe Hershberger 248*1f154a63STrevor WoernerThe bridge also supports (to a lesser extent) the localhost interface, 'lo'. 24922f68524SJoe Hershberger 25022f68524SJoe HershbergerThe 'lo' interface cannot use the RAW AF_PACKET API because the lo interface 25122f68524SJoe Hershbergerdoesn't support Ethernet-level traffic. It is a higher-level interface that is 25222f68524SJoe Hershbergerexpected only to be used at the AF_INET level of the API. As such, the most raw 25322f68524SJoe Hershbergerwe can get on that interface is the RAW AF_INET API on UDP. This allows us to 25422f68524SJoe Hershbergerset the IP_HDRINCL option to include everything except the Ethernet header in 25522f68524SJoe Hershbergerthe packets we send and receive. 25622f68524SJoe Hershberger 25722f68524SJoe HershbergerBecause only UDP is supported, ICMP traffic will not work, so expect that ping 25822f68524SJoe Hershbergercommands will time out. 25922f68524SJoe Hershberger 26022f68524SJoe HershbergerThe default device tree for sandbox includes an entry for lo on the sandbox 26122f68524SJoe Hershbergerhost machine whose alias is "eth5". The following is an example of a network 26222f68524SJoe Hershbergeroperation being tested on the lo interface. 26322f68524SJoe Hershberger 26422f68524SJoe HershbergerTFTP 26522f68524SJoe Hershberger.... 26622f68524SJoe Hershberger 26722f68524SJoe Hershbergerset ethact eth5 26822f68524SJoe Hershbergertftpboot u-boot.bin 26922f68524SJoe Hershberger 270a346ca79SJoe Hershberger 2712dabac13SMasahiro YamadaSPI Emulation 2722dabac13SMasahiro Yamada------------- 2732dabac13SMasahiro Yamada 2742dabac13SMasahiro YamadaSandbox supports SPI and SPI flash emulation. 2752dabac13SMasahiro Yamada 2762dabac13SMasahiro YamadaThis is controlled by the spi_sf argument, the format of which is: 2772dabac13SMasahiro Yamada 2782dabac13SMasahiro Yamada bus:cs:device:file 2792dabac13SMasahiro Yamada 2802dabac13SMasahiro Yamada bus - SPI bus number 2812dabac13SMasahiro Yamada cs - SPI chip select number 2822dabac13SMasahiro Yamada device - SPI device emulation name 2832dabac13SMasahiro Yamada file - File on disk containing the data 2842dabac13SMasahiro Yamada 2852dabac13SMasahiro YamadaFor example: 2862dabac13SMasahiro Yamada 2872dabac13SMasahiro Yamada dd if=/dev/zero of=spi.bin bs=1M count=4 2882dabac13SMasahiro Yamada ./u-boot --spi_sf 0:0:M25P16:spi.bin 2892dabac13SMasahiro Yamada 2902dabac13SMasahiro YamadaWith this setup you can issue SPI flash commands as normal: 2912dabac13SMasahiro Yamada 2922dabac13SMasahiro Yamada=>sf probe 2932dabac13SMasahiro YamadaSF: Detected M25P16 with page size 64 KiB, total 2 MiB 2942dabac13SMasahiro Yamada=>sf read 0 0 10000 2952dabac13SMasahiro YamadaSF: 65536 bytes @ 0x0 Read: OK 2962dabac13SMasahiro Yamada=> 2972dabac13SMasahiro Yamada 2982dabac13SMasahiro YamadaSince this is a full SPI emulation (rather than just flash), you can 2992dabac13SMasahiro Yamadaalso use low-level SPI commands: 3002dabac13SMasahiro Yamada 3012dabac13SMasahiro Yamada=>sspi 0:0 32 9f 3022dabac13SMasahiro YamadaFF202015 3032dabac13SMasahiro Yamada 3042dabac13SMasahiro YamadaThis is issuing a READ_ID command and getting back 20 (ST Micro) part 3052dabac13SMasahiro Yamada0x2015 (the M25P16). 3062dabac13SMasahiro Yamada 3072dabac13SMasahiro YamadaDrivers are connected to a particular bus/cs using sandbox's state 3082dabac13SMasahiro Yamadastructure (see the 'spi' member). A set of operations must be provided 3092dabac13SMasahiro Yamadafor each driver. 3102dabac13SMasahiro Yamada 3112dabac13SMasahiro Yamada 3122dabac13SMasahiro YamadaConfiguration settings for the curious are: 3132dabac13SMasahiro Yamada 3142dabac13SMasahiro YamadaCONFIG_SANDBOX_SPI_MAX_BUS 3152dabac13SMasahiro Yamada The maximum number of SPI buses supported by the driver (default 1). 3162dabac13SMasahiro Yamada 3172dabac13SMasahiro YamadaCONFIG_SANDBOX_SPI_MAX_CS 3182dabac13SMasahiro Yamada The maximum number of chip selects supported by the driver 3192dabac13SMasahiro Yamada (default 10). 3202dabac13SMasahiro Yamada 3212dabac13SMasahiro YamadaCONFIG_SPI_IDLE_VAL 3222dabac13SMasahiro Yamada The idle value on the SPI bus 3232dabac13SMasahiro Yamada 3242dabac13SMasahiro Yamada 3252945eb73SStefan BrünsBlock Device Emulation 3262945eb73SStefan Brüns---------------------- 3272945eb73SStefan Brüns 3282945eb73SStefan BrünsU-Boot can use raw disk images for block device emulation. To e.g. list 3292945eb73SStefan Brünsthe contents of the root directory on the second partion of the image 3302945eb73SStefan Brüns"disk.raw", you can use the following commands: 3312945eb73SStefan Brüns 3322945eb73SStefan Brüns=>host bind 0 ./disk.raw 3332945eb73SStefan Brüns=>ls host 0:2 3342945eb73SStefan Brüns 3352945eb73SStefan BrünsA disk image can be created using the following commands: 3362945eb73SStefan Brüns 3372945eb73SStefan Brüns$> truncate -s 1200M ./disk.raw 3386b20c347SAlison Chaiken$> echo -e "label: gpt\n,64M,U\n,,L" | /usr/sbin/sgdisk ./disk.raw 3392945eb73SStefan Brüns$> lodev=`sudo losetup -P -f --show ./disk.raw` 3402945eb73SStefan Brüns$> sudo mkfs.vfat -n EFI -v ${lodev}p1 3412945eb73SStefan Brüns$> sudo mkfs.ext4 -L ROOT -v ${lodev}p2 3422945eb73SStefan Brüns 343bf6d76b8SAlison Chaikenor utilize the device described in test/py/make_test_disk.py: 344bf6d76b8SAlison Chaiken 345bf6d76b8SAlison Chaiken #!/usr/bin/python 346bf6d76b8SAlison Chaiken import make_test_disk 347bf6d76b8SAlison Chaiken make_test_disk.makeDisk() 3482945eb73SStefan Brüns 3492dabac13SMasahiro YamadaWriting Sandbox Drivers 3502dabac13SMasahiro Yamada----------------------- 3512dabac13SMasahiro Yamada 3522dabac13SMasahiro YamadaGenerally you should put your driver in a file containing the word 'sandbox' 3532dabac13SMasahiro Yamadaand put it in the same directory as other drivers of its type. You can then 3542dabac13SMasahiro Yamadaimplement the same hooks as the other drivers. 3552dabac13SMasahiro Yamada 3562dabac13SMasahiro YamadaTo access U-Boot's emulated memory, use map_sysmem() as mentioned above. 3572dabac13SMasahiro Yamada 3582dabac13SMasahiro YamadaIf your driver needs to store configuration or state (such as SPI flash 3592dabac13SMasahiro Yamadacontents or emulated chip registers), you can use the device tree as 3602dabac13SMasahiro Yamadadescribed above. Define handlers for this with the SANDBOX_STATE_IO macro. 3612dabac13SMasahiro YamadaSee arch/sandbox/include/asm/state.h for documentation. In short you provide 3622dabac13SMasahiro Yamadaa node name, compatible string and functions to read and write the state. 3632dabac13SMasahiro YamadaSince writing the state can expand the device tree, you may need to use 3642dabac13SMasahiro Yamadastate_setprop() which does this automatically and avoids running out of 3652dabac13SMasahiro Yamadaspace. See existing code for examples. 3662dabac13SMasahiro Yamada 3672dabac13SMasahiro Yamada 3682dabac13SMasahiro YamadaTesting 3692dabac13SMasahiro Yamada------- 3702dabac13SMasahiro Yamada 3712dabac13SMasahiro YamadaU-Boot sandbox can be used to run various tests, mostly in the test/ 3722dabac13SMasahiro Yamadadirectory. These include: 3732dabac13SMasahiro Yamada 3742dabac13SMasahiro Yamada command_ut 3752dabac13SMasahiro Yamada - Unit tests for command parsing and handling 3762dabac13SMasahiro Yamada compression 3772dabac13SMasahiro Yamada - Unit tests for U-Boot's compression algorithms, useful for 3782dabac13SMasahiro Yamada security checking. It supports gzip, bzip2, lzma and lzo. 3792dabac13SMasahiro Yamada driver model 3807b3dc45eSJagan Teki - Run this pytest 3817b3dc45eSJagan Teki ./test/py/test.py --bd sandbox --build -k ut_dm -v 3822dabac13SMasahiro Yamada image 3832dabac13SMasahiro Yamada - Unit tests for images: 3842dabac13SMasahiro Yamada test/image/test-imagetools.sh - multi-file images 3852dabac13SMasahiro Yamada test/image/test-fit.py - FIT images 3862dabac13SMasahiro Yamada tracing 3872dabac13SMasahiro Yamada - test/trace/test-trace.sh tests the tracing system (see README.trace) 3882dabac13SMasahiro Yamada verified boot 3892dabac13SMasahiro Yamada - See test/vboot/vboot_test.sh for this 3902dabac13SMasahiro Yamada 3912dabac13SMasahiro YamadaIf you change or enhance any of the above subsystems, you shold write or 3922dabac13SMasahiro Yamadaexpand a test and include it with your patch series submission. Test 3932dabac13SMasahiro Yamadacoverage in U-Boot is limited, as we need to work to improve it. 3942dabac13SMasahiro Yamada 3952dabac13SMasahiro YamadaNote that many of these tests are implemented as commands which you can 3962dabac13SMasahiro Yamadarun natively on your board if desired (and enabled). 3972dabac13SMasahiro Yamada 3982dabac13SMasahiro YamadaIt would be useful to have a central script to run all of these. 3992dabac13SMasahiro Yamada 4002dabac13SMasahiro Yamada-- 4012dabac13SMasahiro YamadaSimon Glass <sjg@chromium.org> 4022dabac13SMasahiro YamadaUpdated 22-Mar-14 403