Skip to content

Commit

Permalink
firmware: coreboot: Make bus registration symmetric
Browse files Browse the repository at this point in the history
The bus is registered in module_init() but is unregistered when the
platform driver remove() function calls coreboot_table_exit(). That
isn't symmetric and it causes the bus to appear on systems that compile
this code in, even when there isn't any coreboot firmware on the device.
Let's move the registration to the coreboot_table_init() function so
that it matches the exit path.

Cc: Wei-Ning Huang <wnhuang@chromium.org>
Cc: Julius Werner <jwerner@chromium.org>
Cc: Brian Norris <briannorris@chromium.org>
Cc: Samuel Holland <samuel@sholland.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
bebarino authored and gregkh committed Sep 14, 2018
1 parent 20edec3 commit b81e314
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/firmware/google/coreboot_table.c
Expand Up @@ -70,12 +70,6 @@ static struct bus_type coreboot_bus_type = {
.remove = coreboot_bus_remove,
};

static int __init coreboot_bus_init(void)
{
return bus_register(&coreboot_bus_type);
}
module_init(coreboot_bus_init);

static void coreboot_device_release(struct device *dev)
{
struct coreboot_device *device = CB_DEV(dev);
Expand Down Expand Up @@ -114,6 +108,10 @@ int coreboot_table_init(struct device *dev, void __iomem *ptr)
goto out;
}

ret = bus_register(&coreboot_bus_type);
if (ret)
goto out;

ptr_entry = (void *)ptr_header + header.header_bytes;
for (i = 0; i < header.table_entries; i++) {
memcpy_fromio(&entry, ptr_entry, sizeof(entry));
Expand All @@ -138,6 +136,10 @@ int coreboot_table_init(struct device *dev, void __iomem *ptr)

ptr_entry += entry.size;
}

if (ret)
bus_unregister(&coreboot_bus_type);

out:
iounmap(ptr);
return ret;
Expand Down

0 comments on commit b81e314

Please sign in to comment.