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