[PATCH v2 17/33] dtoc: Process driver aliases along with drivers
Johan Jonker
jbx6244 at gmail.com
Mon Jun 21 20:39:26 CEST 2021
Hi Simon, Heiko,
With introduction of rockchip-nand-controller.c in Linux and recently
rockchip_nfc.c in U-boot it offers a renewed opportunity to add support
for MK808 with a rk3066 + NAND to boot from.
rk3066 shares /arch/arm/dts/rk3xxx.dtsi with rk3188.
The only 'usable' boot loader now is closed source with proprietary FTL.
As a spinoff to that discussion I've tried to compile for
rk3188-radxarock as an example due to the lack of rk3066 support in next
and enabling the new rockchip_nfc.c driver.
I'm not familiar with Python/U-boot.
Do you have an idea what this error below is about?
Kind regards,
Johan
===
python --version
Python 2.7.13
===
>From rock_defconfig:
CONFIG_SPL_OF_PLATDATA=y
===
git clone -b next
https://source.denx.de/u-boot/custodians/u-boot-rockchip.git
u-boot-next-20210619
make rock_defconfig
make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig
[ ] Support for NAND controller on Rockchip SoCs (NEW)
Add to rock.h:
#define CONFIG_SYS_MAX_NAND_DEVICE 1
make CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- all
===
mkdir -p spl/dts/
FDTGREP spl/dts/dt-spl.dtb
COPY spl/u-boot-spl.dtb
CC spl/./lib/asm-offsets.s
CC spl/./arch/arm/lib/asm-offsets.s
DTOC spl/dts/dt-plat.c
Traceback (most recent call last):
File "./tools/dtoc/dtoc", line 112, in <module>
options.phase, instantiate=options.instantiate)
File
"~/Downloads/u-boot-next-20210619/tools/dtoc/../dtoc/dtb_platdata.py",
line 1180, in run_steps
scan.scan_drivers()
File
"~/Downloads/u-boot-next-20210619/tools/dtoc/../dtoc/src_scan.py", line
649, in scan_drivers
self.scan_driver(pathname)
File
"~/Downloads/u-boot-next-20210619/tools/dtoc/../dtoc/src_scan.py", line
608, in scan_driver
self._parse_driver(fname, buff)
File
"~/Downloads/u-boot-next-20210619/tools/dtoc/../dtoc/src_scan.py", line
558, in _parse_driver
self._driver_aliases[m_alias[2]] = m_alias[1]
TypeError: '_sre.SRE_Match' object is not subscriptable
scripts/Makefile.spl:352: recipe for target 'spl/dts/dt-plat.c' failed
make[1]: *** [spl/dts/dt-plat.c] Error 1
Makefile:1977: recipe for target 'spl/u-boot-spl' failed
make: *** [spl/u-boot-spl] Error 2
===
Changed:
self._driver_aliases[m_alias[2]] = m_alias[1]
To:
self._driver_aliases[m_alias.group(2)] = m_alias.group(1)
Is that a correct python change of mine?
===
After that it compiles normal with only this warning.
DTOC spl/dts/dt-plat.c
WARNING: the driver rockchip_rk3188_grf was not found in the driver list
WARNING: the driver rockchip_rk3188_pmu was not found in the driver list
WARNING: the driver rockchip_rk3188_uart was not found in the driver list
DTOC include/generated/dt-structs-gen.h
WARNING: the driver rockchip_rk3188_grf was not found in the driver list
WARNING: the driver rockchip_rk3188_pmu was not found in the driver list
WARNING: the driver rockchip_rk3188_uart was not found in the driver list
DTOC include/generated/dt-decl.h
WARNING: the driver rockchip_rk3188_grf was not found in the driver list
WARNING: the driver rockchip_rk3188_pmu was not found in the driver list
WARNING: the driver rockchip_rk3188_uart was not found in the driver list
On 2/3/21 2:01 PM, Simon Glass wrote:
> 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 at chromium.org>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
> doc/driver-model/of-plat.rst | 3 ++-
> tools/dtoc/src_scan.py | 16 +++++-----------
> tools/dtoc/test/dtoc_test_scan_drivers.cxx | 4 ++++
> 3 files changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/doc/driver-model/of-plat.rst b/doc/driver-model/of-plat.rst
> index 4ef2fe699a4..a5a6e46e3ec 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 206b2b37583..9d161a2cbc7 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 f448767670e..f370b8951d0 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)
>
More information about the U-Boot
mailing list