Hi Fabio,

On 8/12/26 1:01 AM, Fabio Estevam wrote:
Hi Quentin,

On Tue, Aug 11, 2026 at 8:55 AM Quentin Schulz <[email protected]> wrote:

Ideally, we should be able to automatically detect whether it's a
roc-pc-mezzanine-rk3399, but I couldn't find schematics for it and from
the Device Tree, there doesn't seem to be something we could use to
detect it like we do for ROC-PC-PLUS/ROC-PC. So instead I recommend to
check for CONFIG_IS_ENABLED(DM_I2C). If it ever gets enabled for
roc-pc-mezzanine-rk3399_defconfig, the logic will return that it's NOT a
ROC-PC-PLUS and thus use CONFIG_DEFAULT_FDT_FILE which is
rockchip/rk3399-roc-pc-mezzanine.dtb which is correct.

DM_I2C is also selected by roc-pc-mezzanine-rk3399_defconfig.


Yes, but it's missing SPL_DM_I2C.

We can use SPL_I2C to distinguish, like this:


Unfortunately, we cannot simply rely on SPL_I2C as the function is only implemented in i2c-uclass.c which is only compiled when SPL_DM_I2C (and SPL_I2C) is enabled.

There's also an issue in the dependencies for SPL_DM_I2C and TPL_DM_I2C as they both depend on I2C (via the if at the top of drivers/i2c/Kconfig) and DM_I2C while they should depend on SPL_I2C (respectively TPL_I2C). I'm not sure why they depend on DM_I2C as it's for proper, not xPL...

TPL_SYS_I2C_LEGACY depends on !SPL_DM_I2C but I'm assuming it should rather depend on !TPL_DM_I2C.

Same for SPL_DM_I2C_GPIO, not sure why it depends on DM_I2C_GPIO. SPL_I2C_MUX also depends on I2C_MUX, for what reason?

VPL_DM_I2C should depend on VPL_I2C but it doesn't exist, so we probably should just remove the symbol since it won't do anything as is.

None are a blocker for this series.

--- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
+++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
@@ -68,6 +68,9 @@ static bool is_roc_pc_plus(void)
  {
         struct udevice *bus, *dev;

+       /* roc-pc-mezzanine-rk3399_defconfig does not select SPL_I2C */
+       if (!CONFIG_IS_ENABLED(SPL_I2C))
+               return false;

Please add a newline after the return false;

It should be !CONFIG_IS_ENABLED(DM_I2C) as CONFIG_IS_ENABLED is going to add the appropriate prefix based on the current stage being built (so definitely no SPL/TPL/VPL to be added manually) and CONFIG_SPL_I2C is not enough to build the dm_i2c_probe implementation, we need CONFIG_SPL_DM_I2C (well, and CONFIG_SPL_I2C because otherwise the drivers/i2c directory isn't traversed and because SPL_DM_I2C is missing a dependency on it).

Cheers,
Quentin

Reply via email to