
On Tue, 2017-07-11 at 21:29 -0600, Simon Glass wrote:
This moves four entire boards to use a live device tree as an example of the impact.
Nyan-big was chosen because I can easily and boot U-Boot without any media swapping, etc. Beaver is enabled as well since it failed to boot with serial v1 due to a disabled console node. Jetson-TK1 is chosen because I found some USB problems in the v2 patches. Jetson-TX1 is added because Stephen Warren found some problems with PCI.
Total code size impact on this board is approximately 9KB on U-Boot and 64 bytes on SPL:
27: dm: tegra: nyan-big: Move to livetree arm: (for 1/1 boards) all +9264.0 bss -16.0 data +44.0 rodata +92.0 spl/u-boot-spl:all +326.0 spl/u-boot-spl:rodata +262.0 spl/u-boot-spl:text +64.0 text +9144.0
Tegra does not use Thumb2, which would likely reduce the code size by about 25%, indicating a code-size impact of perhaps 7KB.
Boot time is affected slightly. For nyan-big the times with flat tree are:
2,108 dm_r 7,924 dm_spl 120,724 dm_f 171,816 lcd
With the livetree:
721 dm_r 3,764 of_live 7,990 dm_spl 120,736 dm_f 168,215 lcd
As expected the spl and pre-relocation times are not affected. In the post-relocation case, the live tree must be built, which here takes about 3.8ms. Driver-model device creation takes a bit of 1ms less time with the livetree, so all up the cost is about 2.4ms. After DM init there appears to be a slight reduction in the time taken to set up devices (from 327ms to 319ms) so overall the live tree does not appear to be any slower. This is because pre-parsing the device tree makes reading it later faster.
The use of livetree is controlled by a the CONFIG_OF_LIVE option. When enabled, U-Boot builds a livetree immediately after relocation and uses it from then on.
This series is available at u-boot-dm/livet-working
Changes in v4:
- Add new patch to add ofnode_read_resource()
- Add new patch to fix up ofnode_get_addr_index() for 64-bit values
- Update to use ofnode_read_resource()
- Drop fdtdec.h header
- Update to deal with rename of ofnode_read_prop()
- Rebase to master
- Drop changes already applied
- Fix PCI and i2c init problems on jetson-tx1
Could you elaborate a little bit more on this as from the actual patch set I don't seem to be able to figure out how/what exactly you did in that respect.
Other than that it at least works for me on my Beaver and Jetson TK1 so you may add the following to the whole series:
Tested-by: Marcel Ziswiler marcel.ziswiler@toradex.com Tested-on: Beaver, Jetson-TK1
Changes in v3:
- Update commit message, enable for all tegra124 boards not just
nyan-big
- Add new patch to convert tegra PCI to device tree
- Enable livetree for jetson-tk1 also
Changes in v2:
- Enable livetree for beaver also
- Add timing information
Simon Glass (20): dm: core: Add ofnode_read_resource() dm: core: Fix up ofnode_get_addr_index() for 64-bit values tegra: spl: Enable debug UART tegra: tegra124: Add a PMC syscon driver dm: tegra: Convert USB setup to livetree dm: tegra: Convert clock_decode_periph_id() to support livetree dm: video: tegra124: Convert to livetree tegra: dts: Move stdout-path to /chosen dm: tegra: gpio: Convert to support livetree dm: tegra: usb: Convert to livetree dm: tegra: spi: Convert to livetree dm: tegra: i2c: Convert to livetree dm: tegra: pwm: Convert to livetree dm: tegra: mmc: Convert to livetree dm: tegra: pci: Convert to livetree power: Add a regulator driver for the as3722 PMIC power: Add a GPIO driver for the as3722 PMIC dm: power: Convert as3722 to driver model fdtdec: Drop old compatible values dm: tegra: Move nyan-big, jetson-tk1/tx1, beaver to livetree
arch/arm/dts/tegra124-nyan-big.dts | 5 +- arch/arm/include/asm/arch-tegra/clock.h | 2 +- arch/arm/include/asm/arch-tegra/tegra.h | 5 + arch/arm/include/asm/arch-tegra/xusb-padctl.h | 2 +- arch/arm/mach-tegra/Kconfig | 2 + arch/arm/mach-tegra/board2.c | 8 +- arch/arm/mach-tegra/clock.c | 5 +- arch/arm/mach-tegra/spl.c | 4 + arch/arm/mach-tegra/tegra124/Makefile | 1 + arch/arm/mach-tegra/tegra124/pmc.c | 19 ++ arch/arm/mach-tegra/tegra124/xusb-padctl.c | 36 +++- arch/arm/mach-tegra/tegra210/xusb-padctl.c | 42 +++- arch/arm/mach-tegra/xusb-padctl-common.c | 60 +++--- arch/arm/mach-tegra/xusb-padctl-common.h | 8 +- arch/arm/mach-tegra/xusb-padctl-dummy.c | 2 +- board/cei/cei-tk1-som/cei-tk1-som.c | 2 + board/nvidia/jetson-tk1/jetson-tk1.c | 2 + board/nvidia/nyan-big/nyan-big.c | 22 +- board/toradex/apalis-tk1/apalis-tk1.c | 6 + configs/apalis-tk1_defconfig | 3 + configs/beaver_defconfig | 1 + configs/cei-tk1-som_defconfig | 3 + configs/jetson-tk1_defconfig | 4 + configs/nyan-big_defconfig | 2 + configs/p2371-2180_defconfig | 1 + drivers/core/ofnode.c | 30 ++- drivers/core/read.c | 5 + drivers/core/read_extra.c | 25 +-- drivers/gpio/tegra_gpio.c | 10 +- drivers/i2c/tegra_i2c.c | 7 +- drivers/mmc/tegra_mmc.c | 17 +- drivers/pci/pci_tegra.c | 53 +++-- drivers/power/pmic/Makefile | 2 +- drivers/power/pmic/as3722.c | 292 +++++++++-------
drivers/power/pmic/as3722_gpio.c | 120 +++++++++++ drivers/power/regulator/Kconfig | 9 + drivers/power/regulator/Makefile | 1 + drivers/power/regulator/as3722_regulator.c | 149 +++++++++++++ drivers/pwm/tegra_pwm.c | 2 +- drivers/spi/tegra114_spi.c | 15 +- drivers/spi/tegra20_sflash.c | 2 +- drivers/spi/tegra20_slink.c | 2 +- drivers/spi/tegra210_qspi.c | 2 +- drivers/usb/host/ehci-tegra.c | 36 ++-- drivers/video/tegra124/display.c | 8 +- drivers/video/tegra124/dp.c | 3 +- drivers/video/tegra124/sor.c | 25 +-- include/dm/ofnode.h | 4 + include/dm/read.h | 26 ++- include/fdtdec.h | 6 - include/power/as3722.h | 27 ++- lib/fdtdec.c | 6 - 52 files changed, 698 insertions(+), 433 deletions(-) create mode 100644 arch/arm/mach-tegra/tegra124/pmc.c create mode 100644 drivers/power/pmic/as3722_gpio.c create mode 100644 drivers/power/regulator/as3722_regulator.c