binman: Move state logic into the state module

Rather than reaching into this module from control, move the code that
needs this info into state.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/tools/binman/control.py b/tools/binman/control.py
index 00dcb8a..fd8b779 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -121,8 +121,6 @@
                     outfd.write(infd.read())
             dtb = fdt.FdtScan(fname)
 
-            # Note the file so that GetFdt() can find it
-            state.fdt_files['u-boot.dtb'] = dtb
             node = _FindBinmanNode(dtb)
             if not node:
                 raise ValueError("Device tree '%s' does not have a 'binman' "
@@ -139,6 +137,8 @@
                 if skip:
                     print 'Skipping images: %s\n' % ', '.join(skip)
 
+            state.Prepare(dtb)
+
             # Prepare the device tree by making sure that any missing
             # properties are added (e.g. 'pos' and 'size'). The values of these
             # may not be correct yet, but we add placeholders so that the
@@ -151,9 +151,10 @@
                     image.AddMissingProperties()
                 image.ProcessFdt(dtb)
 
-            dtb.Sync(auto_resize=True)
-            dtb.Pack()
-            dtb.Flush()
+            for dtb_item in state.GetFdts():
+                dtb_item.Sync(auto_resize=True)
+                dtb_item.Pack()
+                dtb_item.Flush()
 
             for image in images.values():
                 # Perform all steps for this image, including checking and
@@ -168,14 +169,18 @@
                 image.SetImagePos()
                 if options.update_fdt:
                     image.SetCalculatedProperties()
-                    dtb.Sync()
+                    for dtb_item in state.GetFdts():
+                        dtb_item.Sync()
                 image.ProcessEntryContents()
                 image.WriteSymbols()
                 image.BuildImage()
                 if options.map:
                     image.WriteMap()
-            with open(fname, 'wb') as outfd:
-                outfd.write(dtb.GetContents())
+
+            # Write the updated FDTs to our output files
+            for dtb_item in state.GetFdts():
+                tools.WriteFile(dtb_item._fname, dtb_item.GetContents())
+
         finally:
             tools.FinaliseOutputDir()
     finally: