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