aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Boyd <swboyd@chromium.org>2018-08-15 13:37:05 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-09-14 15:37:23 +0200
commitb81e3140e4128921f25119a2b5ae0049f8373d1a (patch)
tree1ae83415715c34e726b3c9200f493666ef78de6d
parentfirmware: coreboot: Unmap ioregion after device population (diff)
downloadlinux-dev-b81e3140e4128921f25119a2b5ae0049f8373d1a.tar.xz
linux-dev-b81e3140e4128921f25119a2b5ae0049f8373d1a.zip
firmware: coreboot: Make bus registration symmetric
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>
-rw-r--r--drivers/firmware/google/coreboot_table.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c
index 898bb9abc41f..f417170f83ea 100644
--- a/drivers/firmware/google/coreboot_table.c
+++ b/drivers/firmware/google/coreboot_table.c
@@ -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);
@@ -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));
@@ -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;