Commit aa7d6513 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'tag-chrome-platform-firmware-for-v6.9' of...

Merge tag 'tag-chrome-platform-firmware-for-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux

Pull chrome platform firmware updates from Tzung-Bi Shih:

 - Allow userspace to automatically load coreboot modules by adding
   modaliases and sending uevents

 - Make bus_type const

* tag 'tag-chrome-platform-firmware-for-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux:
  firmware: coreboot: Replace tag with id table in driver struct
  firmware: coreboot: Generate aliases for coreboot modules
  firmware: coreboot: Generate modalias uevent for devices
  firmware: coreboot: make coreboot_bus_type const
parents 61387b8d 8a0a6294
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -114,6 +114,12 @@ static int cbmem_entry_probe(struct coreboot_device *dev)
	return 0;
}

static const struct coreboot_device_id cbmem_ids[] = {
	{ .tag = LB_TAG_CBMEM_ENTRY },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(coreboot, cbmem_ids);

static struct coreboot_driver cbmem_entry_driver = {
	.probe = cbmem_entry_probe,
	.drv = {
@@ -121,7 +127,7 @@ static struct coreboot_driver cbmem_entry_driver = {
		.owner = THIS_MODULE,
		.dev_groups = dev_groups,
	},
	.tag = LB_TAG_CBMEM_ENTRY,
	.id_table = cbmem_ids,
};
module_coreboot_driver(cbmem_entry_driver);

+20 −2
Original line number Diff line number Diff line
@@ -28,8 +28,17 @@ static int coreboot_bus_match(struct device *dev, struct device_driver *drv)
{
	struct coreboot_device *device = CB_DEV(dev);
	struct coreboot_driver *driver = CB_DRV(drv);
	const struct coreboot_device_id *id;

	return device->entry.tag == driver->tag;
	if (!driver->id_table)
		return 0;

	for (id = driver->id_table; id->tag; id++) {
		if (device->entry.tag == id->tag)
			return 1;
	}

	return 0;
}

static int coreboot_bus_probe(struct device *dev)
@@ -53,11 +62,20 @@ static void coreboot_bus_remove(struct device *dev)
		driver->remove(device);
}

static struct bus_type coreboot_bus_type = {
static int coreboot_bus_uevent(const struct device *dev, struct kobj_uevent_env *env)
{
	struct coreboot_device *device = CB_DEV(dev);
	u32 tag = device->entry.tag;

	return add_uevent_var(env, "MODALIAS=coreboot:t%08X", tag);
}

static const struct bus_type coreboot_bus_type = {
	.name		= "coreboot",
	.match		= coreboot_bus_match,
	.probe		= coreboot_bus_probe,
	.remove		= coreboot_bus_remove,
	.uevent		= coreboot_bus_uevent,
};

static void coreboot_device_release(struct device *dev)
+2 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#define __COREBOOT_TABLE_H

#include <linux/device.h>
#include <linux/mod_devicetable.h>

/* Coreboot table header structure */
struct coreboot_table_header {
@@ -93,7 +94,7 @@ struct coreboot_driver {
	int (*probe)(struct coreboot_device *);
	void (*remove)(struct coreboot_device *);
	struct device_driver drv;
	u32 tag;
	const struct coreboot_device_id *id_table;
};

/* Register a driver that uses the data from a coreboot table. */
+7 −1
Original line number Diff line number Diff line
@@ -80,13 +80,19 @@ static void framebuffer_remove(struct coreboot_device *dev)
	platform_device_unregister(pdev);
}

static const struct coreboot_device_id framebuffer_ids[] = {
	{ .tag = CB_TAG_FRAMEBUFFER },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(coreboot, framebuffer_ids);

static struct coreboot_driver framebuffer_driver = {
	.probe = framebuffer_probe,
	.remove = framebuffer_remove,
	.drv = {
		.name = "framebuffer",
	},
	.tag = CB_TAG_FRAMEBUFFER,
	.id_table = framebuffer_ids,
};
module_coreboot_driver(framebuffer_driver);

+7 −1
Original line number Diff line number Diff line
@@ -96,13 +96,19 @@ static void memconsole_remove(struct coreboot_device *dev)
	memconsole_exit();
}

static const struct coreboot_device_id memconsole_ids[] = {
	{ .tag = CB_TAG_CBMEM_CONSOLE },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(coreboot, memconsole_ids);

static struct coreboot_driver memconsole_driver = {
	.probe = memconsole_probe,
	.remove = memconsole_remove,
	.drv = {
		.name = "memconsole",
	},
	.tag = CB_TAG_CBMEM_CONSOLE,
	.id_table = memconsole_ids,
};
module_coreboot_driver(memconsole_driver);

Loading