]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dtoc: Process driver aliases along with drivers
authorSimon Glass <sjg@chromium.org>
Wed, 3 Feb 2021 13:01:05 +0000 (06:01 -0700)
committerSimon Glass <sjg@chromium.org>
Mon, 22 Mar 2021 06:23:27 +0000 (19:23 +1300)
Instead of using a separate step for this processing, handle it while
scanning its associated driver. This allows us to drop the code coverage
exception in this case.

Note that only files containing drivers are scanned by dtoc, so aliases
declared in a file that doesn't hold a driver will not be noticed. It
would be confusing to put them anywhere other than in the driver that they
relate to, but update the documentation to say this explicitly, just in
case.

Signed-off-by: Simon Glass <sjg@chromium.org>
doc/driver-model/of-plat.rst
tools/dtoc/src_scan.py
tools/dtoc/test/dtoc_test_scan_drivers.cxx

index 4ef2fe699a4eec6503845c5d18df4f042f1a0be1..a5a6e46e3ece902b757035de8ab1f3427fe52f9b 100644 (file)
@@ -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
index 206b2b375836074e457bb5dd149bbcef40a2c202..9d161a2cbc743dc6f8ae47a0d2cacc05cbdf1ba3 100644 (file)
@@ -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
 
index f448767670eeca47be5d62b86ad46f23f4a096fd..f370b8951d0c57ebf6162cbba65b20707955d4ed 100644 (file)
@@ -1 +1,5 @@
+/* Aliases must be in driver files */
+U_BOOT_DRIVER(sandbox_gpio) {
+};
+
 DM_DRIVER_ALIAS(sandbox_gpio, sandbox_gpio_alias2)