mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-30 02:51:33 +00:00
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 <sjg@chromium.org>
This commit is contained in:
parent
fd471e2ce1
commit
b9319c4f9b
4 changed files with 37 additions and 4 deletions
|
@ -650,6 +650,9 @@ class DtbPlatdata():
|
||||||
def process_nodes(self, need_drivers):
|
def process_nodes(self, need_drivers):
|
||||||
nodes_to_output = list(self._valid_nodes)
|
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:
|
for node in nodes_to_output:
|
||||||
node.dev_ref = 'DM_DEVICE_REF(%s)' % node.var_name
|
node.dev_ref = 'DM_DEVICE_REF(%s)' % node.var_name
|
||||||
driver = self._scan.get_driver(node.struct_name)
|
driver = self._scan.get_driver(node.struct_name)
|
||||||
|
|
|
@ -66,6 +66,7 @@ class Driver:
|
||||||
e.g. 'pci_child_priv'
|
e.g. 'pci_child_priv'
|
||||||
child_plat (str): struct name of the per_child_plat_auto member,
|
child_plat (str): struct name of the per_child_plat_auto member,
|
||||||
e.g. 'pci_child_plat'
|
e.g. 'pci_child_plat'
|
||||||
|
used (bool): True if the driver is used by the structs being output
|
||||||
"""
|
"""
|
||||||
def __init__(self, name, fname):
|
def __init__(self, name, fname):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -76,17 +77,19 @@ class Driver:
|
||||||
self.plat = ''
|
self.plat = ''
|
||||||
self.child_priv = ''
|
self.child_priv = ''
|
||||||
self.child_plat = ''
|
self.child_plat = ''
|
||||||
|
self.used = False
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return (self.name == other.name and
|
return (self.name == other.name and
|
||||||
self.uclass_id == other.uclass_id and
|
self.uclass_id == other.uclass_id and
|
||||||
self.compat == other.compat and
|
self.compat == other.compat and
|
||||||
self.priv == other.priv and
|
self.priv == other.priv and
|
||||||
self.plat == other.plat)
|
self.plat == other.plat and
|
||||||
|
self.used == other.used)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return ("Driver(name='%s', uclass_id='%s', compat=%s, priv=%s)" %
|
return ("Driver(name='%s', used=%s, uclass_id='%s', compat=%s, priv=%s)" %
|
||||||
(self.name, self.uclass_id, self.compat, self.priv))
|
(self.name, self.used, self.uclass_id, self.compat, self.priv))
|
||||||
|
|
||||||
|
|
||||||
class UclassDriver:
|
class UclassDriver:
|
||||||
|
@ -596,3 +599,19 @@ class Scanner:
|
||||||
self.scan_driver(fname)
|
self.scan_driver(fname)
|
||||||
else:
|
else:
|
||||||
self.scan_driver(self._basedir + '/' + fname)
|
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
|
||||||
|
|
|
@ -1029,3 +1029,14 @@ U_BOOT_DRVINFO(spl_test2) = {
|
||||||
plat.process_nodes(True)
|
plat.process_nodes(True)
|
||||||
self.assertIn("Cannot parse/find driver for 'sandbox_pmic",
|
self.assertIn("Cannot parse/find driver for 'sandbox_pmic",
|
||||||
str(exc.exception))
|
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)
|
||||||
|
|
|
@ -98,7 +98,7 @@ class TestSrcScan(unittest.TestCase):
|
||||||
drv3.uclass_id = i2c
|
drv3.uclass_id = i2c
|
||||||
drv3.compat = compat
|
drv3.compat = compat
|
||||||
self.assertEqual(
|
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', "
|
"compat={'rockchip,rk3288-grf': 'ROCKCHIP_SYSCON_GRF', "
|
||||||
"'rockchip,rk3288-srf': None}, priv=)", str(drv1))
|
"'rockchip,rk3288-srf': None}, priv=)", str(drv1))
|
||||||
self.assertEqual(drv1, drv3)
|
self.assertEqual(drv1, drv3)
|
||||||
|
|
Loading…
Add table
Reference in a new issue