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

From: Neil Armstrong
Date: Thu Nov 16 2023 - 08:13:21 EST


Hi,

On 16/11/2023 12:35, Sebastian Reichel wrote:
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.

You're right, I was preparing the patch cleanup and it's clear it will
break rk806 because I just saw you specifically added PLATFORM_DEVID_AUTO
to rk806 cells.

I'll send a v2.

Thanks,
Neil


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>