Note: This v3 series adds a test and fixes a few bugs found in generation of of-platdata.
This series provides a way to compile in the contents of a device tree as C code into U-Boot, implementing an idea that Tom Rini came up with. It is intended to deal with extremely tight environments where there is not enough space for the ~3KB device tree code overhead. Examples include SPL where there is only 16KB of available RAM yet a full MMC stack is required. To provide a reasonable test environment, SPL support is added to sandbox, through a new 'sandbox_spl' target. A new tool 'dtoc' converts device tree data to C code (and structure definitions). To check its effectiveness for a real application, the v2 series includes support for enabling of-platdata for a rockchip board (firefly-rk3288). The results are as follows: Code Data u-boot-spl.bin size of-platdata disabled 23159 1624 28864 of-platdata enabled 19093 2616 21761 Overall the saving is 7103 bytes, about 7KB. Approximately 4KB of this comes from removing the device tree data from SPL although this is offset by the size of the of-platdata itself (around 1KB). On top of this effective 3KB reduction, another ~3KB reduction comes from dropping libfdt and a further 1KB from dropping unused setup and driver-model code. Clearly this approach does have value. Looked at with a favourable light it provides the best of both worlds: configuration using standard device tree bindings without the run-time overhead. Looking under the hood shows a less rosy picture. Effectively we end up with a new set of C structures which must be handled by the driver. This series suggests a suitable approach for dealing with this (see of-plat.txt) which is workable. However there are a number of serious caveats. See that file for details. Thsi feature should be used sparingly. Rockchip is to some extent an unusual case: lots of features (leading to a large SPL device tree size of 4KB), no MMC stack available to SPL from the internal ROM* and a very limited maximum SPL code size. Most SoCs will not benefit from this. However, for an SoC with very small SRAM where only a few drivers are needed in SPL (such as serial and MMC) then of-platdata could provide a useful benefit, without a significant increase in complexity. With the v3 series this feature is ready for use. It is available at u-boot-dm/dt-working. The dtoc tool might be better renamed fdttoc (which is clumsy) or fdt2c. Ideas welcome. Summary of changes in this series: - New sandbox_spl board - Generation of C code from device tree (dtoc tool) - Conversion of some core driver-model uclasses to support of-platdata - Conversion of firefly-rk3288 to use of-platdata - Some minor additions to the test/py framework * Note that the rockchip internal ROM does include an MMC stack but it only permits loading of data in its own format, outside control of U-Boot. Changes in v3: - Rebase to master - Print out the of-platdata contents for testing - Update to the new clock API - Update comments a little - Add GetEmpty() to obtain an empty/zero value of a given type - Process the structs in a first pass, to correct bugs in widening - Fix handling of boolean value (no impact, but it is more correct) - Enhance widening to handle array size changes - Don't try to expand when there is no of-platdata - Add new patch to avoid bringing in the eeprom emulator in SPL - Rebase to master - Rebase to master - Add new patch to handle testing with the sandbox_spl board - Add new patch to note which console produced unexpected output - Add new patch to provide a way to get early console output - Add new patch to start sandbox SPL when enabled - Add new patch to test of-platdata - Add a test for of-platdata Changes in v2: - Add a comment to the effect that 64-bit machines are not supported - Add support for rockchip - Various minor enhancements to the v1 implementation Simon Glass (62): sandbox: Don't print a warning for CONFIG_I2C_COMPAT README: Remove CONFIG_SYS_MALLOC_F_LEN comment spl: Drop include of i2c.h Makefile: Allow the SPL final link rule to be overridden sandbox: Allow chaining from SPL to U-Boot proper sandbox: Support building an SPL image sandbox: Correct header file order in cpu.c sandbox: Add some missing headers in cpu.c sandbox: Don't use PCI in SPL sandbox: Don't include the main loop in SPL sandbox: Add basic SPL implementation sandbox: Don't use IDE and iotrace in SPL sandbox: serial: Don't sync video in SPL sandbox: Add a new sandbox_spl board sandbox: Add a test device that uses of-platdata dm: spl: Don't set up device tree with of-platdata dm: Makefile: Build of-platdata before SPL dm: core: Don't use device tree with of-platdata dm: regmap: Add a dummy implementation for of-platdata dm: syscon: Add support for of-platdata dm: sandbox: Add a simple driver to test of-platdata dm: Add a header that provides access to the of-platdata structs dm: clk: Add support for of-platdata dm: serial: Add support for of-platdata dm: Don't include fdtdec functions when of-platdata is enabled dm: Add an option to enable the of-platdata feature dm: Add a README for of-platdata dm: Add a library to provide simple device-tree access dm: Add a tool to generate C code from a device tree dm: Makefile: Build of-platdata files when the feature is enabled dm: Add a more efficient libfdt library Only build the libfdt python module if 'swig' is available tiny-printf: Support assert() dm: spl: Bind in all devices in SPL with of-platdata dm: core: Rename DM_NAME_ALLOCED to DM_FLAG_NAME_ALLOCED dtoc: Ignore the u-boot,dm-pre-reloc property dm: Don't attach the device tree to SPL with of-platdata dm: core: Expand platdata for of-platdata devices sandbox: Don't bring in the eeprom emulator in SPL dm: sandbox: Enable of-platdata for sandbox_spl dm: core: Move regmap allocation into a separate function dm: core: Add an implementation of regmap_init_mem_platdata() dm: serial: ns16550: Update to support of-platdata rockchip: serial: Add an of-platdata driver for rockchip rockchip: Update the sdram-channel property to support of-platdata rockchip: mmc: Move all DT decoding to ofdata_to_platdata() rockchip: mmc: Update the driver to support of-platdata rockchip: clk: Move all DT decoding to ofdata_to_platdata() rockchip: clk: Update the rk3288 driver to support of-platdata rockchip: pinctrl: Update the rk3288 driver to support of-platdata rockchip: Move the MMC setup check earlier rockchip: Don't use spl_boot_device() with of-platdata rockchip: syscon: Update to work with of-platdata rockchip: sdram: Move all DT decoding to ofdata_to_platdata() rockchip: sdram: Update the driver to support of-platdata rockchip: Use of-platdata for firefly-rk3288 test/py: Handle testing with the sandbox_spl board test/py: Note which console produced unexpected output test/py: Provide a way to get early console output test/py: Start sandbox SPL when enabled dm: Add a test for of-platdata dm: Update the of-platdata README for the new features Makefile | 5 +- README | 3 - arch/arm/dts/rk3288-firefly.dts | 3 +- arch/arm/include/asm/arch-rockchip/sdram.h | 14 +- arch/arm/mach-rockchip/rk3288-board-spl.c | 25 +- arch/arm/mach-rockchip/rk3288/sdram_rk3288.c | 130 +++++++-- arch/arm/mach-rockchip/rk3288/syscon_rk3288.c | 38 +++ arch/sandbox/Kconfig | 7 +- arch/sandbox/config.mk | 5 + arch/sandbox/cpu/Makefile | 1 + arch/sandbox/cpu/cpu.c | 6 +- arch/sandbox/cpu/os.c | 51 ++++ arch/sandbox/cpu/spl.c | 68 +++++ arch/sandbox/cpu/start.c | 2 + arch/sandbox/cpu/u-boot-spl.lds | 24 ++ arch/sandbox/dts/sandbox.dts | 31 ++ arch/sandbox/include/asm/spl.h | 23 ++ arch/sandbox/lib/Makefile | 2 + board/sandbox/MAINTAINERS | 7 + common/spl/spl.c | 6 +- configs/firefly-rk3288_defconfig | 3 + configs/sandbox_spl_defconfig | 183 ++++++++++++ doc/driver-model/of-plat.txt | 310 ++++++++++++++++++++ drivers/clk/clk-uclass.c | 22 +- drivers/clk/clk_fixed_rate.c | 2 + drivers/clk/clk_rk3288.c | 33 ++- drivers/core/device-remove.c | 2 +- drivers/core/device.c | 47 ++- drivers/core/lists.c | 2 +- drivers/core/regmap.c | 57 +++- drivers/core/root.c | 4 +- drivers/core/syscon-uclass.c | 13 + drivers/misc/Makefile | 7 + drivers/misc/spltest_sandbox.c | 53 ++++ drivers/mmc/rockchip_dw_mmc.c | 59 ++-- drivers/pinctrl/rockchip/pinctrl_rk3288.c | 8 +- drivers/serial/Kconfig | 9 + drivers/serial/Makefile | 3 + drivers/serial/ns16550.c | 4 +- drivers/serial/sandbox.c | 2 + drivers/serial/serial-uclass.c | 8 +- drivers/serial/serial_rockchip.c | 43 +++ dts/Kconfig | 21 ++ include/clk.h | 4 + include/configs/sandbox.h | 4 + include/configs/sandbox_spl.h | 20 ++ include/dm/device.h | 6 +- include/dm/platdata.h | 5 + include/dt-structs.h | 19 ++ include/os.h | 25 ++ include/regmap.h | 16 ++ include/syscon.h | 11 + lib/Makefile | 5 +- lib/libfdt/libfdt.swig | 89 ++++++ lib/libfdt/setup.py | 38 +++ lib/libfdt/test_libfdt.py | 14 + lib/tiny-printf.c | 9 + scripts/Makefile.host | 9 +- scripts/Makefile.spl | 47 ++- test/py/conftest.py | 2 +- test/py/tests/test_ofplatdata.py | 42 +++ test/py/u_boot_console_base.py | 12 +- test/py/u_boot_console_sandbox.py | 6 +- test/py/u_boot_spawn.py | 13 + tools/Makefile | 14 + tools/dtoc/.gitignore | 1 + tools/dtoc/dtoc | 1 + tools/dtoc/dtoc.py | 394 ++++++++++++++++++++++++++ tools/dtoc/fdt.py | 180 ++++++++++++ tools/dtoc/fdt_fallback.py | 207 ++++++++++++++ tools/dtoc/fdt_util.py | 86 ++++++ 71 files changed, 2495 insertions(+), 130 deletions(-) create mode 100644 arch/sandbox/cpu/spl.c create mode 100644 arch/sandbox/cpu/u-boot-spl.lds create mode 100644 arch/sandbox/include/asm/spl.h create mode 100644 configs/sandbox_spl_defconfig create mode 100644 doc/driver-model/of-plat.txt create mode 100644 drivers/misc/spltest_sandbox.c create mode 100644 drivers/serial/serial_rockchip.c create mode 100644 include/configs/sandbox_spl.h create mode 100644 include/dt-structs.h create mode 100644 lib/libfdt/libfdt.swig create mode 100644 lib/libfdt/setup.py create mode 100644 lib/libfdt/test_libfdt.py create mode 100644 test/py/tests/test_ofplatdata.py create mode 100644 tools/dtoc/.gitignore create mode 120000 tools/dtoc/dtoc create mode 100755 tools/dtoc/dtoc.py create mode 100644 tools/dtoc/fdt.py create mode 100644 tools/dtoc/fdt_fallback.py create mode 100644 tools/dtoc/fdt_util.py -- 2.8.0.rc3.226.g39d4020 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot