diff --git a/tools/dtoc/fdt_select.py b/tools/dtoc/fdt_select.py
index 18a36d88a0250cc79efc3b9a36e700b77b58b6bb..ea78c527fc1e0faa02d28420a7bb1dbe1175199c 100644
--- a/tools/dtoc/fdt_select.py
+++ b/tools/dtoc/fdt_select.py
@@ -6,6 +6,8 @@
 # SPDX-License-Identifier:      GPL-2.0+
 #
 
+import fdt_fallback
+
 # Bring in either the normal fdt library (which relies on libfdt) or the
 # fallback one (which uses fdtget and is slower). Both provide the same
 # interface for this file to use.
@@ -14,13 +16,21 @@ try:
     have_libfdt = True
 except ImportError:
     have_libfdt = False
-    import fdt_fallback
 
-def FdtScan(fname):
+force_fallback = False
+
+def FdtScan(fname, _force_fallback=False):
     """Returns a new Fdt object from the implementation we are using"""
-    if have_libfdt:
+    if have_libfdt and not force_fallback and not _force_fallback:
         dtb = fdt_normal.FdtNormal(fname)
     else:
         dtb = fdt_fallback.FdtFallback(fname)
     dtb.Scan()
     return dtb
+
+def UseFallback(fallback):
+    global force_fallback
+
+    old_val = force_fallback
+    force_fallback = fallback
+    return old_val