| 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 |