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