| U-Boot FDT Overlay usage |
| ============================================= |
| |
| Overlays Syntax |
| --------------- |
| |
| Overlays require slightly different syntax compared to traditional overlays. |
| Please refer to dt-object-internal.txt in the dtc sources for information |
| regarding the internal format of overlays: |
| https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/dt-object-internal.txt |
| |
| Building Overlays |
| ----------------- |
| |
| In a nutshell overlays provides a means to manipulate a symbol a previous dtb |
| or overlay has defined. It requires both the base and all the overlays |
| to be compiled with the -@ command line switch so that symbol information is |
| included. |
| |
| Note support for -@ option can only be found in dtc version 1.4.4 or newer. |
| Only version 4.14 or higher of the Linux kernel includes a built in version |
| of dtc that meets this requirement. |
| |
| Building an overlay follows the same process as building a traditional dtb. |
| |
| For example: |
| |
| base.dts |
| -------- |
| |
| /dts-v1/; |
| / { |
| foo: foonode { |
| foo-property; |
| }; |
| }; |
| |
| $ dtc -@ -I dts -O dtb -o base.dtb base.dts |
| |
| bar.dts |
| ------- |
| |
| /dts-v1/; |
| /plugin/; |
| / { |
| fragment@1 { |
| target = <&foo>; |
| __overlay__ { |
| overlay-1-property; |
| bar: barnode { |
| bar-property; |
| }; |
| }; |
| }; |
| }; |
| |
| $ dtc -@ -I dts -O dtb -o bar.dtb bar.dts |
| |
| Ways to Utilize Overlays in U-boot |
| ---------------------------------- |
| |
| There are two ways to apply overlays in U-boot. |
| 1. Include and define overlays within a FIT image and have overlays |
| automatically applied. |
| |
| 2. Manually load and apply overlays |
| |
| The remainder of this document will discuss using overlays via the manual |
| approach. For information on using overlays as part of a FIT image please see: |
| doc/uImage.FIT/overlay-fdt-boot.txt |
| |
| Manually Loading and Applying Overlays |
| -------------------------------------- |
| |
| 1. Figure out where to place both the base device tree blob and the |
| overlay. Make sure you have enough space to grow the base tree without |
| overlapping anything. |
| |
| => setenv fdtaddr 0x87f00000 |
| => setenv fdtovaddr 0x87fc0000 |
| |
| 2. Load the base blob and overlay blobs |
| |
| => load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/base.dtb |
| => load ${devtype} ${bootpart} ${fdtovaddr} ${bootdir}/overlay.dtb |
| |
| 3. Set it as the working fdt tree. |
| |
| => fdtaddr $fdtaddr |
| |
| 4. Grow it enough so it can 'fit' all the applied overlays |
| |
| => fdt resize 8192 |
| |
| 5. You are now ready to apply the overlay. |
| |
| => fdt apply $fdtovaddr |
| |
| 6. Boot system like you would do with a traditional dtb. |
| |
| For bootm: |
| |
| => bootm ${kerneladdr} - ${fdtaddr} |
| |
| For bootz: |
| |
| => bootz ${kerneladdr} - ${fdtaddr} |
| |
| Please note that in case of an error, both the base and overlays are going |
| to be invalidated, so keep copies to avoid reloading. |
| |
| Pantelis Antoniou |
| pantelis.antoniou@konsulko.com |
| 11/7/2017 |