1 U-Boot FDT Overlay usage 2 ============================================= 3 4 Overlays Syntax 5 --------------- 6 7 Overlays require slightly different syntax compared to traditional overlays. 8 Please refer to dt-object-internal.txt in the dtc sources for information 9 regarding the internal format of overlays: 10 https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/dt-object-internal.txt 11 12 Building Overlays 13 ----------------- 14 15 In a nutshell overlays provides a means to manipulate a symbol a previous dtb 16 or overlay has defined. It requires both the base and all the overlays 17 to be compiled with the -@ command line switch so that symbol information is 18 included. 19 20 Note support for -@ option can only be found in dtc version 1.4.4 or newer. 21 Only version 4.14 or higher of the Linux kernel includes a built in version 22 of dtc that meets this requirement. 23 24 Building an overlay follows the same process as building a traditional dtb. 25 26 For example: 27 28 base.dts 29 -------- 30 31 /dts-v1/; 32 / { 33 foo: foonode { 34 foo-property; 35 }; 36 }; 37 38 $ dtc -@ -I dts -O dtb -o base.dtb base.dts 39 40 bar.dts 41 ------- 42 43 /dts-v1/; 44 /plugin/; 45 / { 46 fragment@1 { 47 target = <&foo>; 48 __overlay__ { 49 overlay-1-property; 50 bar: barnode { 51 bar-property; 52 }; 53 }; 54 }; 55 }; 56 57 $ dtc -@ -I dts -O dtb -o bar.dtb bar.dts 58 59 Ways to Utilize Overlays in U-boot 60 ---------------------------------- 61 62 There are two ways to apply overlays in U-boot. 63 1. Include and define overlays within a FIT image and have overlays 64 automatically applied. 65 66 2. Manually load and apply overlays 67 68 The remainder of this document will discuss using overlays via the manual 69 approach. For information on using overlays as part of a FIT image please see: 70 doc/uImage.FIT/overlay-fdt-boot.txt 71 72 Manually Loading and Applying Overlays 73 -------------------------------------- 74 75 1. Figure out where to place both the base device tree blob and the 76 overlay. Make sure you have enough space to grow the base tree without 77 overlapping anything. 78 79 => setenv fdtaddr 0x87f00000 80 => setenv fdtovaddr 0x87fc0000 81 82 2. Load the base blob and overlay blobs 83 84 => load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/base.dtb 85 => load ${devtype} ${bootpart} ${fdtovaddr} ${bootdir}/overlay.dtb 86 87 3. Set it as the working fdt tree. 88 89 => fdtaddr $fdtaddr 90 91 4. Grow it enough so it can 'fit' all the applied overlays 92 93 => fdt resize 8192 94 95 5. You are now ready to apply the overlay. 96 97 => fdt apply $fdtovaddr 98 99 6. Boot system like you would do with a traditional dtb. 100 101 For bootm: 102 103 => bootm ${kerneladdr} - ${fdtaddr} 104 105 For bootz: 106 107 => bootz ${kerneladdr} - ${fdtaddr} 108 109 Please note that in case of an error, both the base and overlays are going 110 to be invalidated, so keep copies to avoid reloading. 111 112 Pantelis Antoniou 113 pantelis.antoniou (a] konsulko.com 114 11/7/2017 115