dtoc: Move the fdt library selection into fdt_select

Rather than have dtc worry about which fdt library to use, move this into
a helper file. Add a function which creates a new Fdt object and scans it,
regardless of the implementation.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2016-07-25 18:59:02 -06:00
parent 5859311545
commit ba48258566
2 changed files with 26 additions and 15 deletions

View File

@ -12,23 +12,12 @@ import os
import struct import struct
import sys import sys
import fdt_util
# Bring in the patman libraries # Bring in the patman libraries
our_path = os.path.dirname(os.path.realpath(__file__)) our_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(our_path, '../patman')) sys.path.append(os.path.join(our_path, '../patman'))
# Bring in either the normal fdt library (which relies on libfdt) or the import fdt_select
# fallback one (which uses fdtget and is slower). Both provide the same import fdt_util
# interfface for this file to use.
try:
from fdt import Fdt
import fdt
have_libfdt = True
except ImportError:
have_libfdt = False
from fdt_fallback import Fdt
import fdt_fallback as fdt
# When we see these properties we ignore them - i.e. do not create a structure member # When we see these properties we ignore them - i.e. do not create a structure member
PROP_IGNORE_LIST = [ PROP_IGNORE_LIST = [
@ -177,8 +166,7 @@ class DtbPlatdata:
Once this is done, self.fdt.GetRoot() can be called to obtain the Once this is done, self.fdt.GetRoot() can be called to obtain the
device tree root node, and progress from there. device tree root node, and progress from there.
""" """
self.fdt = Fdt(self._dtb_fname) self.fdt = fdt_select.FdtScan(self._dtb_fname)
self.fdt.Scan()
def ScanTree(self): def ScanTree(self):
"""Scan the device tree for useful information """Scan the device tree for useful information

23
tools/dtoc/fdt_select.py Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/python
#
# Copyright (C) 2016 Google, Inc
# Written by Simon Glass <sjg@chromium.org>
#
# SPDX-License-Identifier: GPL-2.0+
#
# 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.
try:
import fdt
have_libfdt = True
except ImportError:
have_libfdt = False
import fdt_fallback as fdt
def FdtScan(fname):
"""Returns a new Fdt object from the implementation we are using"""
dtb = fdt.Fdt(fname)
dtb.Scan()
return dtb