[NOT A REGRESSION] firmware: framebuffer-coreboot: duplicate device name "simple-framebuffer.0"

Brian Norris
2024-09-10T17:49:09Z

(Tweaking subject; this indeed isn't related to the regression at all)

Hi,

On Mon, Sep 09, 2024 at 10:02:00AM +0200, Borislav Petkov wrote:
> Looking at your log, the first warn is in framebuffer_coreboot. Some mess in
> the sysfs platform devices registration.
>
> Adding the relevant people for that:
>
> Aug 20 20:29:36 luna kernel: sysfs: cannot create duplicate filename '/bus/platform/devices/simple-framebuffer.0'
> Aug 20 20:29:36 luna kernel: CPU: 5 PID: 571 Comm: (udev-worker) Tainted: G OE 6.10.6-arch1-1 #1 703d152c24f1971e36f16e505405e456fc9e23f8
> Aug 20 20:29:36 luna kernel: Hardware name: Purism Librem 14/Librem 14, BIOS 4.14-Purism-1 06/18/2021
> Aug 20 20:29:36 luna kernel: Call Trace:
> Aug 20 20:29:36 luna kernel: <TASK>
> Aug 20 20:29:36 luna kernel: dump_stack_lvl+0x5d/0x80
> Aug 20 20:29:36 luna kernel: sysfs_warn_dup.cold+0x17/0x23
> Aug 20 20:29:36 luna kernel: sysfs_do_create_link_sd+0xcf/0xe0
> Aug 20 20:29:36 luna kernel: bus_add_device+0x6b/0x130
> Aug 20 20:29:36 luna kernel: device_add+0x3b3/0x870
> Aug 20 20:29:36 luna kernel: platform_device_add+0xed/0x250
> Aug 20 20:29:36 luna kernel: platform_device_register_full+0xbb/0x140
> Aug 20 20:29:36 luna kernel: platform_device_register_resndata.constprop.0+0x54/0x80 [framebuffer_coreboot a587d2fc243ebaa0205c3badd33442a004d284e0]
> Aug 20 20:29:36 luna kernel: framebuffer_probe+0x165/0x1b0 [framebuffer_coreboot a587d2fc243ebaa0205c3badd33442a004d284e0]
> Aug 20 20:29:36 luna kernel: really_probe+0xdb/0x340
> Aug 20 20:29:36 luna kernel: ? pm_runtime_barrier+0x54/0x90
> Aug 20 20:29:36 luna kernel: ? __pfx___driver_attach+0x10/0x10
> Aug 20 20:29:36 luna kernel: __driver_probe_device+0x78/0x110
> Aug 20 20:29:36 luna kernel: driver_probe_device+0x1f/0xa0
> Aug 20 20:29:36 luna kernel: __driver_attach+0xba/0x1c0
> Aug 20 20:29:36 luna kernel: bus_for_each_dev+0x8c/0xe0
> Aug 20 20:29:36 luna kernel: bus_add_driver+0x112/0x1f0
> Aug 20 20:29:36 luna kernel: driver_register+0x72/0xd0
> Aug 20 20:29:36 luna kernel: ? __pfx_framebuffer_driver_init+0x10/0x10 [framebuffer_coreboot a587d2fc243ebaa0205c3badd33442a004d284e0]
> Aug 20 20:29:36 luna kernel: do_one_initcall+0x58/0x310
> Aug 20 20:29:36 luna kernel: do_init_module+0x60/0x220
> Aug 20 20:29:36 luna kernel: init_module_from_file+0x89/0xe0
> Aug 20 20:29:36 luna kernel: idempotent_init_module+0x121/0x320
> Aug 20 20:29:36 luna kernel: __x64_sys_finit_module+0x5e/0xb0
> Aug 20 20:29:36 luna kernel: do_syscall_64+0x82/0x190
> Aug 20 20:29:36 luna kernel: ? __do_sys_newfstatat+0x3c/0x80
> Aug 20 20:29:36 luna kernel: ? syscall_exit_to_user_mode+0x72/0x200
> Aug 20 20:29:36 luna kernel: ? do_syscall_64+0x8e/0x190
> Aug 20 20:29:36 luna kernel: ? do_sys_openat2+0x9c/0xe0
> Aug 20 20:29:36 luna kernel: ? syscall_exit_to_user_mode+0x72/0x200
> Aug 20 20:29:36 luna kernel: ? do_syscall_64+0x8e/0x190
> Aug 20 20:29:36 luna kernel: ? clear_bhb_loop+0x25/0x80
> Aug 20 20:29:36 luna kernel: ? clear_bhb_loop+0x25/0x80
> Aug 20 20:29:36 luna kernel: ? clear_bhb_loop+0x25/0x80
> Aug 20 20:29:36 luna kernel: entry_SYSCALL_64_after_hwframe+0x76/0x7e
> Aug 20 20:29:36 luna kernel: RIP: 0033:0x7b1bee2f81fd

Looks like it might be a conflict with
drivers/firmware/sysfb_simplefb.c, which also uses the
"simple-framebuffer" name with a constant ID of 0. It's possible both
drivers should be switched to use PLATFORM_DEVID_AUTO? Or at least one
of them. Or they should use different base names.

I'm not really sure what the best option is (does anyone rely on or care
about the device naming?), and I don't actually use this driver. But
here's an untested diff to try if you'd really like. If you test it,
feel free to submit as a proper patch with my:

Signed-off-by: Brian Norris <briannorris@chromium.org>

diff --git a/drivers/firmware/google/framebuffer-coreboot.c b/drivers/firmware/google/framebuffer-coreboot.c
index daadd71d8ddd..3f1b8f664c3f 100644
--- a/drivers/firmware/google/framebuffer-coreboot.c
+++ b/drivers/firmware/google/framebuffer-coreboot.c
@@ -62,7 +62,8 @@ static int framebuffer_probe(struct coreboot_device *dev)
return -EINVAL;

pdev = platform_device_register_resndata(&dev->dev,
- "simple-framebuffer", 0,
+ "simple-framebuffer",
+ PLATFORM_DEVID_AUTO,
&res, 1, &pdata,
sizeof(pdata));
if (IS_ERR(pdev))