Re: [PATCH] mfd: rk8xx: register devices again with PLATFORM_DEVID_NONE

From: Sebastian Reichel
Date: Thu Nov 16 2023 - 06:35:12 EST


Hi,

On Thu, Nov 16, 2023 at 09:53:05AM +0100, Neil Armstrong wrote:
> Since commit 210f418f8ace ("mfd: rk8xx: Add rk806 support"), devices are
> registered with "0" as id, causing devices to not have an automatic device id
> and prevents having multiple RK8xx PMICs on the same system.

They are not registered with "0" as ID - they are registered without
any ID at all, because their cells have PLATFORM_DEVID_NONE.

> This fixes a regression while booting the Odroid Go Ultra on v6.6.1:
> sysfs: cannot create duplicate filename '/bus/platform/devices/rk808-clkout'

^ which you can see here. There is no ".0" suffix at the end of the
sysfs path.

> CPU: 3 PID: 97 Comm: kworker/u12:2 Not tainted 6.6.1 #1
> Hardware name: Hardkernel ODROID-GO-Ultra (DT)
> Workqueue: events_unbound deferred_probe_work_func
> Call trace:
> dump_backtrace+0x9c/0x11c
> show_stack+0x18/0x24
> dump_stack_lvl+0x78/0xc4
> dump_stack+0x18/0x24
> sysfs_warn_dup+0x64/0x80
> sysfs_do_create_link_sd+0xf0/0xf8
> sysfs_create_link+0x20/0x40
> bus_add_device+0x114/0x160
> device_add+0x3f0/0x7cc
> platform_device_add+0x180/0x270
> mfd_add_device+0x390/0x4a8
> devm_mfd_add_devices+0xb0/0x150
> rk8xx_probe+0x26c/0x410
> rk8xx_i2c_probe+0x64/0x98
> i2c_device_probe+0x104/0x2e8
> really_probe+0x184/0x3c8
> __driver_probe_device+0x7c/0x16c
> driver_probe_device+0x3c/0x10c
> __device_attach_driver+0xbc/0x158
> bus_for_each_drv+0x80/0xdc
> __device_attach+0x9c/0x1ac
> device_initial_probe+0x14/0x20
> bus_probe_device+0xac/0xb0
> deferred_probe_work_func+0xa0/0xf4
> process_one_work+0x1bc/0x378
> worker_thread+0x1dc/0x3d4
> kthread+0x104/0x118
> ret_from_fork+0x10/0x20
> rk8xx-i2c 0-001c: error -EEXIST: failed to add MFD devices
> rk8xx-i2c: probe of 0-001c failed with error -17
>
> Fixes: 210f418f8ace ("mfd: rk8xx: Add rk806 support")
> Reported-by: Adam Green <greena88@xxxxxxxxx>
> Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
> ---
> Lee, This is only a fix for the regression, as discussed with Sebastian at [1],
> the driver would require some more cleanup to cleanly register all devices with
> PLATFORM_DEVID_AUTO. I plan to send this later on.
>
> [1] https://lore.kernel.org/all/20231115180050.5r5xukttz27vviyi@xxxxxxxxxxxxxxxxxxxxxx/

NAK, this would break rk806. You can use PLATFORM_DEVID_AUTO instead,
since that has special handling in devm_mfd_add_devices and will
ignore the PLATFORM_DEVID_NONE specified by the cells.

Greetings,

-- Sebastian

> ---
> drivers/mfd/rk8xx-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mfd/rk8xx-core.c b/drivers/mfd/rk8xx-core.c
> index c47164a3ec1d..58d8dec7ac02 100644
> --- a/drivers/mfd/rk8xx-core.c
> +++ b/drivers/mfd/rk8xx-core.c
> @@ -684,7 +684,7 @@ int rk8xx_probe(struct device *dev, int variant, unsigned int irq, struct regmap
> pre_init_reg[i].addr);
> }
>
> - ret = devm_mfd_add_devices(dev, 0, cells, nr_cells, NULL, 0,
> + ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, cells, nr_cells, NULL, 0,
> regmap_irq_get_domain(rk808->irq_data));
> if (ret)
> return dev_err_probe(dev, ret, "failed to add MFD devices\n");
>
> ---
> base-commit: f31817cbcf48d191faee7cebfb59197d2048cd64
> change-id: 20231116-topic-amlogic-upstream-fix-rk8xx-devid-auto-59ce0d1b738a
>
> Best regards,
> --
> Neil Armstrong <neil.armstrong@xxxxxxxxxx>
>

Attachment: signature.asc
Description: PGP signature