
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@chromium.org Signed-off-by: Simon Glass sjg@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)