firmware: coreboot: Generate aliases for coreboot modules
authorNícolas F. R. A. Prado <nfraprado@collabora.com>
Mon, 12 Feb 2024 14:50:06 +0000 (09:50 -0500)
committerTzung-Bi Shih <tzungbi@kernel.org>
Sat, 17 Feb 2024 00:53:05 +0000 (08:53 +0800)
Generate aliases for coreboot modules to allow automatic module probing.

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Acked-by: Masahiro Yamada <masahiroy@kernel.org>
Link: https://lore.kernel.org/r/20240212-coreboot-mod-defconfig-v4-2-d14172676f6d@collabora.com
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
include/linux/mod_devicetable.h
scripts/mod/devicetable-offsets.c
scripts/mod/file2alias.c

index f458469c5ce5c2807d2896f9bbdf80a21af2087f..7a9a07ea451bc5cda64329270eeaf28d215f2b0f 100644 (file)
@@ -960,4 +960,14 @@ struct vchiq_device_id {
        char name[32];
 };
 
+/**
+ * struct coreboot_device_id - Identifies a coreboot table entry
+ * @tag: tag ID
+ * @driver_data: driver specific data
+ */
+struct coreboot_device_id {
+       __u32 tag;
+       kernel_ulong_t driver_data;
+};
+
 #endif /* LINUX_MOD_DEVICETABLE_H */
index e91a3c38143ba7820f05fb4c73f2fba0e52000bd..518200813d4e068d5ce5ca5999b18142915e30d2 100644 (file)
@@ -274,5 +274,8 @@ int main(void)
        DEVID(vchiq_device_id);
        DEVID_FIELD(vchiq_device_id, name);
 
+       DEVID(coreboot_device_id);
+       DEVID_FIELD(coreboot_device_id, tag);
+
        return 0;
 }
index 4829680a0a6ddc0a48ad1f164d91572d75edd952..5d1c61fa5a5509cd0a5825cb2467795796a3bc6c 100644 (file)
@@ -1494,6 +1494,15 @@ static int do_vchiq_entry(const char *filename, void *symval, char *alias)
        return 1;
 }
 
+/* Looks like: coreboot:tN */
+static int do_coreboot_entry(const char *filename, void *symval, char *alias)
+{
+       DEF_FIELD(symval, coreboot_device_id, tag);
+       sprintf(alias, "coreboot:t%08X", tag);
+
+       return 1;
+}
+
 /* Does namelen bytes of name exactly match the symbol? */
 static bool sym_is(const char *name, unsigned namelen, const char *symbol)
 {
@@ -1575,6 +1584,7 @@ static const struct devtable devtable[] = {
        {"ishtp", SIZE_ishtp_device_id, do_ishtp_entry},
        {"cdx", SIZE_cdx_device_id, do_cdx_entry},
        {"vchiq", SIZE_vchiq_device_id, do_vchiq_entry},
+       {"coreboot", SIZE_coreboot_device_id, do_coreboot_entry},
 };
 
 /* Create MODULE_ALIAS() statements.