of: change overlay apply input data from unflattened to FDT
authorFrank Rowand <frank.rowand@sony.com>
Mon, 12 Feb 2018 08:19:42 +0000 (00:19 -0800)
committerFrank Rowand <frowand.list@gmail.com>
Sun, 4 Mar 2018 08:29:24 +0000 (00:29 -0800)
commit39a751a4cb7e4798f0ce1169ec92de4a1aae39e3
tree6946dd93cc2f4bdbe1a3c1b6ae64aa6b566be114
parent581e929018ce078d0ce0b02780de2f61e858903b
of: change overlay apply input data from unflattened to FDT

Move duplicating and unflattening of an overlay flattened devicetree
(FDT) into the overlay application code.  To accomplish this,
of_overlay_apply() is replaced by of_overlay_fdt_apply().

The copy of the FDT (aka "duplicate FDT") now belongs to devicetree
code, which is thus responsible for freeing the duplicate FDT.  The
caller of of_overlay_fdt_apply() remains responsible for freeing the
original FDT.

The unflattened devicetree now belongs to devicetree code, which is
thus responsible for freeing the unflattened devicetree.

These ownership changes prevent early freeing of the duplicated FDT
or the unflattened devicetree, which could result in use after free
errors.

of_overlay_fdt_apply() is a private function for the anticipated
overlay loader.

Update unittest.c to use of_overlay_fdt_apply() instead of
of_overlay_apply().

Move overlay fragments from artificial locations in
drivers/of/unittest-data/tests-overlay.dtsi into one devicetree
source file per overlay.  This led to changes in
drivers/of/unitest-data/Makefile and drivers/of/unitest.c.

  - Add overlay directives to the overlay devicetree source files so
    that dtc will compile them as true overlays into one FDT data
    chunk per overlay.

  - Set CFLAGS for drivers/of/unittest-data/testcases.dts so that
    symbols will be generated for overlay resolution of overlays
    that are no longer artificially contained in testcases.dts

  - Unflatten and apply each unittest overlay FDT using
    of_overlay_fdt_apply().

  - Enable the of_resolve_phandles() check for whether the unflattened
    overlay is detached.  This check was previously disabled because the
    overlays from tests-overlay.dtsi were not unflattened into detached
    trees.

  - Other changes to unittest.c infrastructure to manage multiple test
    FDTs built into the kernel image (access by name instead of
    arbitrary number).

  - of_unittest_overlay_high_level(): previously unused code to add
    properties from the overlay_base devicetree to the live tree
    was triggered by the restructuring of tests-overlay.dtsi and thus
    testcases.dts.  This exposed two bugs: (1) the need to dup a
    property before adding it, and (2) property 'name' is
    auto-generated in the unflatten code and thus will be a duplicate
    in the __symbols__ node - do not treat this duplicate as an error.

Signed-off-by: Frank Rowand <frank.rowand@sony.com>
22 files changed:
drivers/of/Kconfig
drivers/of/overlay.c
drivers/of/resolver.c
drivers/of/unittest-data/Makefile
drivers/of/unittest-data/overlay_0.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_1.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_10.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_11.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_12.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_13.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_15.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_2.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_3.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_4.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_5.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_6.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_7.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_8.dts [new file with mode: 0644]
drivers/of/unittest-data/overlay_9.dts [new file with mode: 0644]
drivers/of/unittest-data/tests-overlay.dtsi
drivers/of/unittest.c
include/linux/of.h