From: Simon Glass Date: Wed, 3 Feb 2021 13:01:01 +0000 (-0700) Subject: dtoc: Track nodes which are actually used X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=b9319c4f9b103b6c5b10e8592471a29bd9645caf;p=u-boot.git dtoc: Track nodes which are actually used Mark all nodes that are actually used, so we can perform extra checks on them. Signed-off-by: Simon Glass --- diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py index ad71f703e5..28669f3121 100644 --- a/tools/dtoc/dtb_platdata.py +++ b/tools/dtoc/dtb_platdata.py @@ -650,6 +650,9 @@ class DtbPlatdata(): def process_nodes(self, need_drivers): nodes_to_output = list(self._valid_nodes) + # Figure out which drivers we actually use + self._scan.mark_used(nodes_to_output) + for node in nodes_to_output: node.dev_ref = 'DM_DEVICE_REF(%s)' % node.var_name driver = self._scan.get_driver(node.struct_name) diff --git a/tools/dtoc/src_scan.py b/tools/dtoc/src_scan.py index 504dac008d..1a02d41063 100644 --- a/tools/dtoc/src_scan.py +++ b/tools/dtoc/src_scan.py @@ -66,6 +66,7 @@ class Driver: e.g. 'pci_child_priv' child_plat (str): struct name of the per_child_plat_auto member, e.g. 'pci_child_plat' + used (bool): True if the driver is used by the structs being output """ def __init__(self, name, fname): self.name = name @@ -76,17 +77,19 @@ class Driver: self.plat = '' self.child_priv = '' self.child_plat = '' + self.used = False def __eq__(self, other): return (self.name == other.name and self.uclass_id == other.uclass_id and self.compat == other.compat and self.priv == other.priv and - self.plat == other.plat) + self.plat == other.plat and + self.used == other.used) def __repr__(self): - return ("Driver(name='%s', uclass_id='%s', compat=%s, priv=%s)" % - (self.name, self.uclass_id, self.compat, self.priv)) + return ("Driver(name='%s', used=%s, uclass_id='%s', compat=%s, priv=%s)" % + (self.name, self.used, self.uclass_id, self.compat, self.priv)) class UclassDriver: @@ -596,3 +599,19 @@ class Scanner: self.scan_driver(fname) else: self.scan_driver(self._basedir + '/' + fname) + + def mark_used(self, nodes): + """Mark the drivers associated with a list of nodes as 'used' + + This takes a list of nodes, finds the driver for each one and marks it + as used. + + Args: + nodes (list of None): Nodes that are in use + """ + # Figure out which drivers we actually use + for node in nodes: + struct_name, _ = self.get_normalized_compat_name(node) + driver = self._drivers.get(struct_name) + if driver: + driver.used = True diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py index 3e98e36312..d90ece205d 100755 --- a/tools/dtoc/test_dtoc.py +++ b/tools/dtoc/test_dtoc.py @@ -1029,3 +1029,14 @@ U_BOOT_DRVINFO(spl_test2) = { plat.process_nodes(True) self.assertIn("Cannot parse/find driver for 'sandbox_pmic", str(exc.exception)) + + def test_process_nodes_used(self): + """Test processing nodes to add various info""" + plat, scan = self.setup_process_test() + plat.process_nodes(True) + + pmic = scan._drivers['sandbox_pmic'] + self.assertTrue(pmic.used) + + gpio = scan._drivers['sandbox_gpio'] + self.assertFalse(gpio.used) diff --git a/tools/dtoc/test_src_scan.py b/tools/dtoc/test_src_scan.py index a7eba3005e..ebdc12abc8 100644 --- a/tools/dtoc/test_src_scan.py +++ b/tools/dtoc/test_src_scan.py @@ -98,7 +98,7 @@ class TestSrcScan(unittest.TestCase): drv3.uclass_id = i2c drv3.compat = compat self.assertEqual( - "Driver(name='fred', uclass_id='I2C_UCLASS', " + "Driver(name='fred', used=False, uclass_id='I2C_UCLASS', " "compat={'rockchip,rk3288-grf': 'ROCKCHIP_SYSCON_GRF', " "'rockchip,rk3288-srf': None}, priv=)", str(drv1)) self.assertEqual(drv1, drv3)