On Wed, Apr 26, 2023 at 12:31 AM Dave Airlie <airlied@xxxxxxxxx> wrote: > > From: Dave Airlie <airlied@xxxxxxxxxx> > > This adds a tag that will go into the module info, only one firmware from > the group given needs to be available for this driver to work. This allows > dracut to avoid adding in firmware that aren't needed. > > This just brackets a module list in the modinfo, the modules in the list > will get entries in reversed order so the last module in the list is the > preferred one. > > The corresponding dracut code it at: > https://github.com/dracutdevs/dracut/pull/2309 > > Cc: Luis Chamberlain <mcgrof@xxxxxxxxxx> > Cc: linux-modules@xxxxxxxxxxxxxxx > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> I think this is a very useful feature, Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > include/linux/module.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/include/linux/module.h b/include/linux/module.h > index f9d072a7e198..d3e7085cedd0 100644 > --- a/include/linux/module.h > +++ b/include/linux/module.h > @@ -306,6 +306,28 @@ extern typeof(name) __mod_##type##__##name##_device_table \ > */ > #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) > > +/** > + * MODULE_FIRMWARE_GROUP_ONLY_ONE - Create a need only one firmware group > + * @_grpname: group name > + * > + * This creates a group of which the driver only needs one firmware installed. > + * This is to allow dracut to limit the number of firmwares in the initramfs. > + * This just creates a new entry in the modinfo section, there should be one > + * of these entries bracketing the group of MODULE_INFO lines. > + * Due to how modinfo is constructed the ordering of the modinfo means the > + * last module info in the group will end up being the first one dracut will > + * search for, so place the newest firmware last. > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + * > + * ``MODULE_FIRMWARE("firmwarev1")`` > + * > + * ``MODULE_FIRMWARE("firmwarev2")`` > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + */ > +#define MODULE_FIRMWARE_GROUP_ONLY_ONE(_grpname) MODULE_INFO(firmware_group_only_one, _grpname) > + > /** > * MODULE_IMPORT_NS - Set the symbol namespace for the module. > * @ns: symbol namespace to import the module into. > -- > 2.39.2 >