]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
firmware: google: Skip failing entries instead of aborting populate
authorTitouan Ameline de Cadeville <titouan.ameline@gmail.com>
Fri, 1 May 2026 09:43:22 +0000 (11:43 +0200)
committerTzung-Bi Shih <tzungbi@kernel.org>
Sun, 3 May 2026 01:40:06 +0000 (09:40 +0800)
coreboot_table_populate() registers devices one by one. If
device_register() fails for one entry, the current code returns
immediately, leaving previously registered devices orphaned on the
coreboot bus with no cleanup path.

Since coreboot table entries are independent of each other, a failure
on one entry should not prevent the others from being registered.
This mirrors the strategy used by of_platform_populate(), which skips
individual failures rather than aborting.

Move ptr_entry increment before device_register(), log a warning on
failure, and continue the loop rather than aborting.

Signed-off-by: Titouan Ameline de Cadeville <titouan.ameline@gmail.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Acked-by: Brian Norris <briannorris@chromium.org>
Link: https://lore.kernel.org/r/20260501094322.123160-1-titouan.ameline@gmail.com
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
drivers/firmware/google/coreboot_table.c

index 233939e548b44d60fc8b839d9ff0b9e48468140f..83f7eedf0b3fbe7d9e3e88c7324bcda5f266a4ad 100644 (file)
@@ -155,13 +155,13 @@ static int coreboot_table_populate(struct device *dev, void *ptr, resource_size_
                        break;
                }
 
+               ptr_entry += entry->size;
+
                ret = device_register(&device->dev);
                if (ret) {
+                       dev_warn(dev, "failed to register coreboot device: %d\n", ret);
                        put_device(&device->dev);
-                       return ret;
                }
-
-               ptr_entry += entry->size;
        }
 
        return 0;