summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/driver-model/of-plat.rst3
-rw-r--r--tools/dtoc/src_scan.py16
-rw-r--r--tools/dtoc/test/dtoc_test_scan_drivers.cxx4
3 files changed, 11 insertions, 12 deletions
diff --git a/doc/driver-model/of-plat.rst b/doc/driver-model/of-plat.rst
index 4ef2fe699a..a5a6e46e3e 100644
--- a/doc/driver-model/of-plat.rst
+++ b/doc/driver-model/of-plat.rst
@@ -183,7 +183,8 @@ each 'compatible' string.
In order to make this a bit more flexible DM_DRIVER_ALIAS macro can be
used to declare an alias for a driver name, typically a 'compatible' string.
-This macro produces no code, but it is by dtoc tool.
+This macro produces no code, but it is by dtoc tool. It must be located in the
+same file as its associated driver, ideally just after it.
The parent_idx is the index of the parent driver_info structure within its
linker list (instantiated by the U_BOOT_DRVINFO() macro). This is used to support
diff --git a/tools/dtoc/src_scan.py b/tools/dtoc/src_scan.py
index 206b2b3758..9d161a2cbc 100644
--- a/tools/dtoc/src_scan.py
+++ b/tools/dtoc/src_scan.py
@@ -387,6 +387,7 @@ class Scanner:
in the file
_of_match - updated with each compatible string found in the file
_compat_to_driver - Maps compatible string to Driver
+ _driver_aliases - Maps alias names to driver name
Args:
fname (str): Filename being parsed (used for warnings)
@@ -438,6 +439,7 @@ class Scanner:
re_phase = re.compile('^\s*DM_PHASE\((.*)\).*$')
re_hdr = re.compile('^\s*DM_HEADER\((.*)\).*$')
+ re_alias = re.compile(r'DM_DRIVER_ALIAS\(\s*(\w+)\s*,\s*(\w+)\s*\)')
# Matches the struct name for priv, plat
re_priv = self._get_re_for_member('priv_auto')
@@ -522,8 +524,11 @@ class Scanner:
driver = Driver(driver_name, fname)
else:
ids_m = re_ids.search(line)
+ m_alias = re_alias.match(line)
if ids_m:
ids_name = ids_m.group(1)
+ elif m_alias:
+ self._driver_aliases[m_alias[2]] = m_alias[1]
# Make the updates based on what we found
self._drivers.update(drivers)
@@ -557,17 +562,6 @@ class Scanner:
if 'UCLASS_DRIVER' in buff:
self._parse_uclass_driver(fname, buff)
- # The following re will search for driver aliases declared as
- # DM_DRIVER_ALIAS(alias, driver_name)
- driver_aliases = re.findall(
- r'DM_DRIVER_ALIAS\(\s*(\w+)\s*,\s*(\w+)\s*\)',
- buff)
-
- for alias in driver_aliases: # pragma: no cover
- if len(alias) != 2:
- continue
- self._driver_aliases[alias[1]] = alias[0]
-
def scan_header(self, fname):
"""Scan a header file to build a list of struct definitions
diff --git a/tools/dtoc/test/dtoc_test_scan_drivers.cxx b/tools/dtoc/test/dtoc_test_scan_drivers.cxx
index f448767670..f370b8951d 100644
--- a/tools/dtoc/test/dtoc_test_scan_drivers.cxx
+++ b/tools/dtoc/test/dtoc_test_scan_drivers.cxx
@@ -1 +1,5 @@
+/* Aliases must be in driver files */
+U_BOOT_DRIVER(sandbox_gpio) {
+};
+
DM_DRIVER_ALIAS(sandbox_gpio, sandbox_gpio_alias2)