* [PATCH 0/3] Add module autoprobing support for vop and cosm driver @ 2020-09-25 7:31 Sherry Sun 2020-09-25 7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Sherry Sun @ 2020-09-25 7:31 UTC (permalink / raw) To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart Cc: linux-kernel, linux-kbuild, linux-imx Add module autoprobing support for vop and cosm driver, when the vop/cosm device appears, the driver will be autoloaded. Sherry Sun (3): mic: vop: fix a written error in MODULE_DEVICE_TABLE mic: vop: module autoprobing support for vop drivers mic: cosm: module autoprobing support for cosm driver drivers/misc/mic/bus/cosm_bus.c | 8 ++++++++ drivers/misc/mic/bus/vop_bus.h | 7 +------ drivers/misc/mic/cosm/cosm_main.c | 7 +++++++ drivers/misc/mic/vop/vop_main.c | 2 +- include/linux/mod_devicetable.h | 15 +++++++++++++++ scripts/mod/devicetable-offsets.c | 7 +++++++ scripts/mod/file2alias.c | 27 +++++++++++++++++++++++++++ 7 files changed, 66 insertions(+), 7 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE 2020-09-25 7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun @ 2020-09-25 7:31 ` Sherry Sun 2020-09-27 10:28 ` Greg KH 2020-09-25 7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun 2020-09-25 7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun 2 siblings, 1 reply; 10+ messages in thread From: Sherry Sun @ 2020-09-25 7:31 UTC (permalink / raw) To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart Cc: linux-kernel, linux-kbuild, linux-imx For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE. Signed-off-by: Sherry Sun <sherry.sun@nxp.com> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> --- drivers/misc/mic/vop/vop_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/mic/vop/vop_main.c b/drivers/misc/mic/vop/vop_main.c index d609f0dc6124..589425fa78d4 100644 --- a/drivers/misc/mic/vop/vop_main.c +++ b/drivers/misc/mic/vop/vop_main.c @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = { module_vop_driver(vop_driver); -MODULE_DEVICE_TABLE(mbus, id_table); +MODULE_DEVICE_TABLE(vop, id_table); MODULE_AUTHOR("Intel Corporation"); MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver"); MODULE_LICENSE("GPL v2"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE 2020-09-25 7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun @ 2020-09-27 10:28 ` Greg KH 2020-09-27 12:19 ` Sherry Sun 0 siblings, 1 reply; 10+ messages in thread From: Greg KH @ 2020-09-27 10:28 UTC (permalink / raw) To: Sherry Sun Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, linux-imx On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote: > For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE. > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > --- > drivers/misc/mic/vop/vop_main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/misc/mic/vop/vop_main.c b/drivers/misc/mic/vop/vop_main.c > index d609f0dc6124..589425fa78d4 100644 > --- a/drivers/misc/mic/vop/vop_main.c > +++ b/drivers/misc/mic/vop/vop_main.c > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = { > > module_vop_driver(vop_driver); > > -MODULE_DEVICE_TABLE(mbus, id_table); > +MODULE_DEVICE_TABLE(vop, id_table); > MODULE_AUTHOR("Intel Corporation"); > MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver"); > MODULE_LICENSE("GPL v2"); Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support, which you add in patch 2 of this series? Does this patch here break the build? If not, how is it working? And if you only have one vop driver, why do you need autoloading for it? thanks, greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE 2020-09-27 10:28 ` Greg KH @ 2020-09-27 12:19 ` Sherry Sun 2020-09-27 12:31 ` Greg KH 0 siblings, 1 reply; 10+ messages in thread From: Sherry Sun @ 2020-09-27 12:19 UTC (permalink / raw) To: Greg KH Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, dl-linux-imx, Sherry Sun Hi Greg, > -----Original Message----- > From: Greg KH <gregkh@linuxfoundation.org> > Sent: 2020年9月27日 18:29 > To: Sherry Sun <sherry.sun@nxp.com> > Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de; > masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org; > rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de; > jhugo@codeaurora.org; tglx@linutronix.de; > manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre- > louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux- > kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com> > Subject: Re: [PATCH 1/3] mic: vop: fix a written error in > MODULE_DEVICE_TABLE > > On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote: > > For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE. > > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > > --- > > drivers/misc/mic/vop/vop_main.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/misc/mic/vop/vop_main.c > > b/drivers/misc/mic/vop/vop_main.c index d609f0dc6124..589425fa78d4 > > 100644 > > --- a/drivers/misc/mic/vop/vop_main.c > > +++ b/drivers/misc/mic/vop/vop_main.c > > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = { > > > > module_vop_driver(vop_driver); > > > > -MODULE_DEVICE_TABLE(mbus, id_table); > > +MODULE_DEVICE_TABLE(vop, id_table); > > MODULE_AUTHOR("Intel Corporation"); > > MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver"); > > MODULE_LICENSE("GPL v2"); > > Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support, > which you add in patch 2 of this series? Yes, this patch must be used in conjunction with Patch2. But I think here may be a small bug, in order to distinguish it from the driver autoloading support, make this a separate patch. I can put this patch together with Patch2 if you think it might look more reasonable. > > Does this patch here break the build? If not, how is it working? > > And if you only have one vop driver, why do you need autoloading for it? > No, it doesn't break the build. But actually it won't work(autoloaded) when kernel boot and vop device appears. Although we may only have one vop driver, but in the mic Kconfig, the intel mic/vop/cosm/scif drivers all recommended to be built as modules, if we don't add autoloading for them, we may need modprobe them one by one manually both on EP and RC side. Obviously, for our use case, driver autoloading is more convenient. Best regards Sherry > thanks, > > greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE 2020-09-27 12:19 ` Sherry Sun @ 2020-09-27 12:31 ` Greg KH 2020-09-27 12:50 ` Sherry Sun 0 siblings, 1 reply; 10+ messages in thread From: Greg KH @ 2020-09-27 12:31 UTC (permalink / raw) To: Sherry Sun Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, dl-linux-imx On Sun, Sep 27, 2020 at 12:19:50PM +0000, Sherry Sun wrote: > Hi Greg, > > > -----Original Message----- > > From: Greg KH <gregkh@linuxfoundation.org> > > Sent: 2020年9月27日 18:29 > > To: Sherry Sun <sherry.sun@nxp.com> > > Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de; > > masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org; > > rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de; > > jhugo@codeaurora.org; tglx@linutronix.de; > > manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre- > > louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux- > > kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com> > > Subject: Re: [PATCH 1/3] mic: vop: fix a written error in > > MODULE_DEVICE_TABLE > > > > On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote: > > > For vop bus, the first parameter should be vop in MODULE_DEVICE_TABLE. > > > > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > > > --- > > > drivers/misc/mic/vop/vop_main.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/drivers/misc/mic/vop/vop_main.c > > > b/drivers/misc/mic/vop/vop_main.c index d609f0dc6124..589425fa78d4 > > > 100644 > > > --- a/drivers/misc/mic/vop/vop_main.c > > > +++ b/drivers/misc/mic/vop/vop_main.c > > > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = { > > > > > > module_vop_driver(vop_driver); > > > > > > -MODULE_DEVICE_TABLE(mbus, id_table); > > > +MODULE_DEVICE_TABLE(vop, id_table); > > > MODULE_AUTHOR("Intel Corporation"); > > > MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver"); > > > MODULE_LICENSE("GPL v2"); > > > > Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) support, > > which you add in patch 2 of this series? > > Yes, this patch must be used in conjunction with Patch2. > But I think here may be a small bug, in order to distinguish it from the driver > autoloading support, make this a separate patch. > > I can put this patch together with Patch2 if you think it might look more reasonable. How about _after_ patch 2, otherwise this patch will break the build, right? > > Does this patch here break the build? If not, how is it working? > > > > And if you only have one vop driver, why do you need autoloading for it? > > > No, it doesn't break the build. But actually it won't work(autoloaded) when kernel boot and vop device appears. > > Although we may only have one vop driver, but in the mic Kconfig, the intel mic/vop/cosm/scif drivers all > recommended to be built as modules, if we don't add autoloading for them, we may need modprobe them > one by one manually both on EP and RC side. > > Obviously, for our use case, driver autoloading is more convenient. Why are these all not "mic_SUFFIX" type drivers? Why "vop" and "cosm" and "scif"? And if you only have 1 driver, then what would cause autoloading? thanks, greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE 2020-09-27 12:31 ` Greg KH @ 2020-09-27 12:50 ` Sherry Sun 0 siblings, 0 replies; 10+ messages in thread From: Sherry Sun @ 2020-09-27 12:50 UTC (permalink / raw) To: Greg KH Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, dl-linux-imx Hi Greg, > On Sun, Sep 27, 2020 at 12:19:50PM +0000, Sherry Sun wrote: > > Hi Greg, > > > > > -----Original Message----- > > > From: Greg KH <gregkh@linuxfoundation.org> > > > Sent: 2020年9月27日 18:29 > > > To: Sherry Sun <sherry.sun@nxp.com> > > > Cc: sudeep.dutt@intel.com; ashutosh.dixit@intel.com; arnd@arndb.de; > > > masahiroy@kernel.org; michal.lkml@markovi.net; lee.jones@linaro.org; > > > rikard.falkeborn@gmail.com; mst@redhat.co; bp@suse.de; > > > jhugo@codeaurora.org; tglx@linutronix.de; > > > manivannan.sadhasivam@linaro.org; mgross@linux.intel.com; pierre- > > > louis.bossart@linux.intel.com; linux-kernel@vger.kernel.org; linux- > > > kbuild@vger.kernel.org; dl-linux-imx <linux-imx@nxp.com> > > > Subject: Re: [PATCH 1/3] mic: vop: fix a written error in > > > MODULE_DEVICE_TABLE > > > > > > On Fri, Sep 25, 2020 at 03:31:56PM +0800, Sherry Sun wrote: > > > > For vop bus, the first parameter should be vop in > MODULE_DEVICE_TABLE. > > > > > > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > > > > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > > > > --- > > > > drivers/misc/mic/vop/vop_main.c | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/drivers/misc/mic/vop/vop_main.c > > > > b/drivers/misc/mic/vop/vop_main.c index > d609f0dc6124..589425fa78d4 > > > > 100644 > > > > --- a/drivers/misc/mic/vop/vop_main.c > > > > +++ b/drivers/misc/mic/vop/vop_main.c > > > > @@ -796,7 +796,7 @@ static struct vop_driver vop_driver = { > > > > > > > > module_vop_driver(vop_driver); > > > > > > > > -MODULE_DEVICE_TABLE(mbus, id_table); > > > > +MODULE_DEVICE_TABLE(vop, id_table); > > > > MODULE_AUTHOR("Intel Corporation"); > > > > MODULE_DESCRIPTION("Intel(R) Virtio Over PCIe (VOP) driver"); > > > > MODULE_LICENSE("GPL v2"); > > > > > > Doesn't this have to go _after_ the MODULE_DEVICE_TABLE(vop...) > > > support, which you add in patch 2 of this series? > > > > Yes, this patch must be used in conjunction with Patch2. > > But I think here may be a small bug, in order to distinguish it from > > the driver autoloading support, make this a separate patch. > > > > I can put this patch together with Patch2 if you think it might look more > reasonable. > > How about _after_ patch 2, otherwise this patch will break the build, right? This change won't break the build, actually no matter what the first parameter of MODULE_DEVICE_TABLE is, it won’t cause any build errors. > > > > Does this patch here break the build? If not, how is it working? > > > > > > And if you only have one vop driver, why do you need autoloading for it? > > > > > No, it doesn't break the build. But actually it won't work(autoloaded) when > kernel boot and vop device appears. > > > > Although we may only have one vop driver, but in the mic Kconfig, the > > intel mic/vop/cosm/scif drivers all recommended to be built as > > modules, if we don't add autoloading for them, we may need modprobe > them one by one manually both on EP and RC side. > > > > Obviously, for our use case, driver autoloading is more convenient. > > Why are these all not "mic_SUFFIX" type drivers? Why "vop" and "cosm" > and "scif"? > For VOP driver, it is designed to be a hardware independent Virtio Over PCIe (VOP) driver. This is why we want to reuse it on i.MX platform. In theory, it can be applied to any platform. With some changes, cosm driver also can be hardware independent. So the names of them don’t use "mic_SUFFIX". > And if you only have 1 driver, then what would cause autoloading? As I understand it, if we add support for the driver autoloading like patch2, driver will be autoloaded when the matched device appears. Please correct me if I'm wrong. Regards Sherry > > thanks, > > greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/3] mic: vop: module autoprobing support for vop drivers 2020-09-25 7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun 2020-09-25 7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun @ 2020-09-25 7:31 ` Sherry Sun 2020-09-25 7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun 2 siblings, 0 replies; 10+ messages in thread From: Sherry Sun @ 2020-09-25 7:31 UTC (permalink / raw) To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart Cc: linux-kernel, linux-kbuild, linux-imx Add vop autoprobing support to MODULE_DEVICE_TABLE() by adding info about struct vop_device_id in devicetable-offsets.c and add a vop entry point in file2alias.c. The type argument for MODULE_DEVICE_TABLE(type, name) is vop. Signed-off-by: Sherry Sun <sherry.sun@nxp.com> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> --- drivers/misc/mic/bus/vop_bus.h | 7 +------ include/linux/mod_devicetable.h | 7 +++++++ scripts/mod/devicetable-offsets.c | 4 ++++ scripts/mod/file2alias.c | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/misc/mic/bus/vop_bus.h b/drivers/misc/mic/bus/vop_bus.h index d891eacae358..5b4a58757951 100644 --- a/drivers/misc/mic/bus/vop_bus.h +++ b/drivers/misc/mic/bus/vop_bus.h @@ -14,16 +14,11 @@ */ #include <linux/dmaengine.h> #include <linux/interrupt.h> +#include <linux/mod_devicetable.h> #include "../common/mic_dev.h" -struct vop_device_id { - u32 device; - u32 vendor; -}; - #define VOP_DEV_TRNSP 1 -#define VOP_DEV_ANY_ID 0xffffffff /* * Size of the internal buffer used during DMA's as an intermediate buffer * for copy to/from user. Must be an integral number of pages. diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 5b08a473cdba..736cdc236cf9 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -838,4 +838,11 @@ struct mhi_device_id { kernel_ulong_t driver_data; }; +/* vop */ +struct vop_device_id { + __u32 device; + __u32 vendor; +}; +#define VOP_DEV_ANY_ID 0xffffffff + #endif /* LINUX_MOD_DEVICETABLE_H */ diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c index 27007c18e754..393acaa5302a 100644 --- a/scripts/mod/devicetable-offsets.c +++ b/scripts/mod/devicetable-offsets.c @@ -243,5 +243,9 @@ int main(void) DEVID(mhi_device_id); DEVID_FIELD(mhi_device_id, chan); + DEVID(vop_device_id); + DEVID_FIELD(vop_device_id, device); + DEVID_FIELD(vop_device_id, vendor); + return 0; } diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 2417dd1dee33..8063b778eedf 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -1368,6 +1368,21 @@ static int do_mhi_entry(const char *filename, void *symval, char *alias) return 1; } +/* Looks like: vop:dNvN */ +static int do_vop_entry(const char *filename, void *symval, + char *alias) +{ + DEF_FIELD(symval, vop_device_id, device); + DEF_FIELD(symval, vop_device_id, vendor); + + strcpy(alias, "vop:"); + ADD(alias, "d", device != VOP_DEV_ANY_ID, device); + ADD(alias, "v", vendor != VOP_DEV_ANY_ID, vendor); + + add_wildcard(alias); + return 1; +} + /* Does namelen bytes of name exactly match the symbol? */ static bool sym_is(const char *name, unsigned namelen, const char *symbol) { @@ -1442,6 +1457,7 @@ static const struct devtable devtable[] = { {"tee", SIZE_tee_client_device_id, do_tee_entry}, {"wmi", SIZE_wmi_device_id, do_wmi_entry}, {"mhi", SIZE_mhi_device_id, do_mhi_entry}, + {"vop", SIZE_vop_device_id, do_vop_entry}, }; /* Create MODULE_ALIAS() statements. -- 2.17.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver 2020-09-25 7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun 2020-09-25 7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun 2020-09-25 7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun @ 2020-09-25 7:31 ` Sherry Sun 2020-09-27 10:29 ` Greg KH 2 siblings, 1 reply; 10+ messages in thread From: Sherry Sun @ 2020-09-25 7:31 UTC (permalink / raw) To: sudeep.dutt, ashutosh.dixit, arnd, gregkh, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart Cc: linux-kernel, linux-kbuild, linux-imx Add uevent callback for cosm_bus and add cosm_device_id for cosm driver which is needed for MODULE_DEVICE_TABLE. Also adding struct cosm_device_id in devicetable-offsets.c and the cosm entry point in file2alias.c. Cosm driver will be autoloaded when cosm device appears. Signed-off-by: Sherry Sun <sherry.sun@nxp.com> --- drivers/misc/mic/bus/cosm_bus.c | 8 ++++++++ drivers/misc/mic/cosm/cosm_main.c | 7 +++++++ include/linux/mod_devicetable.h | 8 ++++++++ scripts/mod/devicetable-offsets.c | 3 +++ scripts/mod/file2alias.c | 11 +++++++++++ 5 files changed, 37 insertions(+) diff --git a/drivers/misc/mic/bus/cosm_bus.c b/drivers/misc/mic/bus/cosm_bus.c index 5f2141c71738..736e27bbc9f9 100644 --- a/drivers/misc/mic/bus/cosm_bus.c +++ b/drivers/misc/mic/bus/cosm_bus.c @@ -14,6 +14,13 @@ /* Unique numbering for cosm devices. */ static DEFINE_IDA(cosm_index_ida); +static int cosm_uevent(struct device *d, struct kobj_uevent_env *env) +{ + struct cosm_device *dev = dev_to_cosm(d); + + return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev->index); +} + static int cosm_dev_probe(struct device *d) { struct cosm_device *dev = dev_to_cosm(d); @@ -33,6 +40,7 @@ static int cosm_dev_remove(struct device *d) static struct bus_type cosm_bus = { .name = "cosm_bus", + .uevent = cosm_uevent, .probe = cosm_dev_probe, .remove = cosm_dev_remove, }; diff --git a/drivers/misc/mic/cosm/cosm_main.c b/drivers/misc/mic/cosm/cosm_main.c index ebb0eac43754..627e7d5f3a83 100644 --- a/drivers/misc/mic/cosm/cosm_main.c +++ b/drivers/misc/mic/cosm/cosm_main.c @@ -12,6 +12,7 @@ #include <linux/idr.h> #include <linux/slab.h> #include <linux/cred.h> +#include <linux/mod_devicetable.h> #include "cosm_main.h" static const char cosm_driver_name[] = "mic"; @@ -323,6 +324,12 @@ static int cosm_suspend(struct device *dev) return 0; } +static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = { + { .name = "cosm-dev*" }, + { }, +}; +MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table); + static const struct dev_pm_ops cosm_pm_ops = { .suspend = cosm_suspend, .freeze = cosm_suspend diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 736cdc236cf9..ea6cdfe1a3a3 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -845,4 +845,12 @@ struct vop_device_id { }; #define VOP_DEV_ANY_ID 0xffffffff +/* cosm */ +#define COSM_NAME_SIZE 32 +#define COSM_MODULE_PREFIX "cosm:" + +struct cosm_device_id { + char name[COSM_NAME_SIZE]; +}; + #endif /* LINUX_MOD_DEVICETABLE_H */ diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c index 393acaa5302a..499a2832878d 100644 --- a/scripts/mod/devicetable-offsets.c +++ b/scripts/mod/devicetable-offsets.c @@ -247,5 +247,8 @@ int main(void) DEVID_FIELD(vop_device_id, device); DEVID_FIELD(vop_device_id, vendor); + DEVID(cosm_device_id); + DEVID_FIELD(cosm_device_id, name); + return 0; } diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 8063b778eedf..f7c80e4da137 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename, void *symval, return 1; } +/* Looks like: cosm:S */ +static int do_cosm_entry(const char *filename, void *symval, + char *alias) +{ + DEF_FIELD_ADDR(symval, cosm_device_id, name); + sprintf(alias, COSM_MODULE_PREFIX "%s", *name); + + return 1; +} + /* Does namelen bytes of name exactly match the symbol? */ static bool sym_is(const char *name, unsigned namelen, const char *symbol) { @@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = { {"wmi", SIZE_wmi_device_id, do_wmi_entry}, {"mhi", SIZE_mhi_device_id, do_mhi_entry}, {"vop", SIZE_vop_device_id, do_vop_entry}, + {"cosm", SIZE_cosm_device_id, do_cosm_entry}, }; /* Create MODULE_ALIAS() statements. -- 2.17.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver 2020-09-25 7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun @ 2020-09-27 10:29 ` Greg KH 2020-09-27 13:04 ` Sherry Sun 0 siblings, 1 reply; 10+ messages in thread From: Greg KH @ 2020-09-27 10:29 UTC (permalink / raw) To: Sherry Sun Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, mst, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, linux-imx On Fri, Sep 25, 2020 at 03:31:58PM +0800, Sherry Sun wrote: > Add uevent callback for cosm_bus and add cosm_device_id for cosm driver > which is needed for MODULE_DEVICE_TABLE. Also adding struct > cosm_device_id in devicetable-offsets.c and the cosm entry point in > file2alias.c. > > Cosm driver will be autoloaded when cosm device appears. > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > --- > drivers/misc/mic/bus/cosm_bus.c | 8 ++++++++ > drivers/misc/mic/cosm/cosm_main.c | 7 +++++++ > include/linux/mod_devicetable.h | 8 ++++++++ > scripts/mod/devicetable-offsets.c | 3 +++ > scripts/mod/file2alias.c | 11 +++++++++++ > 5 files changed, 37 insertions(+) > > diff --git a/drivers/misc/mic/bus/cosm_bus.c b/drivers/misc/mic/bus/cosm_bus.c > index 5f2141c71738..736e27bbc9f9 100644 > --- a/drivers/misc/mic/bus/cosm_bus.c > +++ b/drivers/misc/mic/bus/cosm_bus.c > @@ -14,6 +14,13 @@ > /* Unique numbering for cosm devices. */ > static DEFINE_IDA(cosm_index_ida); > > +static int cosm_uevent(struct device *d, struct kobj_uevent_env *env) > +{ > + struct cosm_device *dev = dev_to_cosm(d); > + > + return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev->index); > +} > + > static int cosm_dev_probe(struct device *d) > { > struct cosm_device *dev = dev_to_cosm(d); > @@ -33,6 +40,7 @@ static int cosm_dev_remove(struct device *d) > > static struct bus_type cosm_bus = { > .name = "cosm_bus", > + .uevent = cosm_uevent, > .probe = cosm_dev_probe, > .remove = cosm_dev_remove, > }; > diff --git a/drivers/misc/mic/cosm/cosm_main.c b/drivers/misc/mic/cosm/cosm_main.c > index ebb0eac43754..627e7d5f3a83 100644 > --- a/drivers/misc/mic/cosm/cosm_main.c > +++ b/drivers/misc/mic/cosm/cosm_main.c > @@ -12,6 +12,7 @@ > #include <linux/idr.h> > #include <linux/slab.h> > #include <linux/cred.h> > +#include <linux/mod_devicetable.h> > #include "cosm_main.h" > > static const char cosm_driver_name[] = "mic"; > @@ -323,6 +324,12 @@ static int cosm_suspend(struct device *dev) > return 0; > } > > +static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = { > + { .name = "cosm-dev*" }, > + { }, > +}; > +MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table); > + > static const struct dev_pm_ops cosm_pm_ops = { > .suspend = cosm_suspend, > .freeze = cosm_suspend > diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h > index 736cdc236cf9..ea6cdfe1a3a3 100644 > --- a/include/linux/mod_devicetable.h > +++ b/include/linux/mod_devicetable.h > @@ -845,4 +845,12 @@ struct vop_device_id { > }; > #define VOP_DEV_ANY_ID 0xffffffff > > +/* cosm */ > +#define COSM_NAME_SIZE 32 > +#define COSM_MODULE_PREFIX "cosm:" > + > +struct cosm_device_id { > + char name[COSM_NAME_SIZE]; > +}; > + > #endif /* LINUX_MOD_DEVICETABLE_H */ > diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c > index 393acaa5302a..499a2832878d 100644 > --- a/scripts/mod/devicetable-offsets.c > +++ b/scripts/mod/devicetable-offsets.c > @@ -247,5 +247,8 @@ int main(void) > DEVID_FIELD(vop_device_id, device); > DEVID_FIELD(vop_device_id, vendor); > > + DEVID(cosm_device_id); > + DEVID_FIELD(cosm_device_id, name); > + > return 0; > } > diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c > index 8063b778eedf..f7c80e4da137 100644 > --- a/scripts/mod/file2alias.c > +++ b/scripts/mod/file2alias.c > @@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename, void *symval, > return 1; > } > > +/* Looks like: cosm:S */ > +static int do_cosm_entry(const char *filename, void *symval, > + char *alias) > +{ > + DEF_FIELD_ADDR(symval, cosm_device_id, name); > + sprintf(alias, COSM_MODULE_PREFIX "%s", *name); > + > + return 1; > +} > + > /* Does namelen bytes of name exactly match the symbol? */ > static bool sym_is(const char *name, unsigned namelen, const char *symbol) > { > @@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = { > {"wmi", SIZE_wmi_device_id, do_wmi_entry}, > {"mhi", SIZE_mhi_device_id, do_mhi_entry}, > {"vop", SIZE_vop_device_id, do_vop_entry}, > + {"cosm", SIZE_cosm_device_id, do_cosm_entry}, > }; > > /* Create MODULE_ALIAS() statements. > -- > 2.17.1 > You are adding MODULE_DEVICE_TABLE() support for a class of drivers, but then never adding that support to those drivers? Why add this at all then? Shouldn't you also be modifying a bunch of drivers to get this to work properly? thanks, greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver 2020-09-27 10:29 ` Greg KH @ 2020-09-27 13:04 ` Sherry Sun 0 siblings, 0 replies; 10+ messages in thread From: Sherry Sun @ 2020-09-27 13:04 UTC (permalink / raw) To: Greg KH Cc: sudeep.dutt, ashutosh.dixit, arnd, masahiroy, michal.lkml, lee.jones, rikard.falkeborn, bp, jhugo, tglx, manivannan.sadhasivam, mgross, pierre-louis.bossart, linux-kernel, linux-kbuild, dl-linux-imx, Sherry Sun Hi Greg, > > On Fri, Sep 25, 2020 at 03:31:58PM +0800, Sherry Sun wrote: > > Add uevent callback for cosm_bus and add cosm_device_id for cosm > > driver which is needed for MODULE_DEVICE_TABLE. Also adding struct > > cosm_device_id in devicetable-offsets.c and the cosm entry point in > > file2alias.c. > > > > Cosm driver will be autoloaded when cosm device appears. > > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com> > > --- > > drivers/misc/mic/bus/cosm_bus.c | 8 ++++++++ > > drivers/misc/mic/cosm/cosm_main.c | 7 +++++++ > > include/linux/mod_devicetable.h | 8 ++++++++ > > scripts/mod/devicetable-offsets.c | 3 +++ > > scripts/mod/file2alias.c | 11 +++++++++++ > > 5 files changed, 37 insertions(+) > > > > diff --git a/drivers/misc/mic/bus/cosm_bus.c > > b/drivers/misc/mic/bus/cosm_bus.c index 5f2141c71738..736e27bbc9f9 > > 100644 > > --- a/drivers/misc/mic/bus/cosm_bus.c > > +++ b/drivers/misc/mic/bus/cosm_bus.c > > @@ -14,6 +14,13 @@ > > /* Unique numbering for cosm devices. */ static > > DEFINE_IDA(cosm_index_ida); > > > > +static int cosm_uevent(struct device *d, struct kobj_uevent_env *env) > > +{ > > + struct cosm_device *dev = dev_to_cosm(d); > > + > > + return add_uevent_var(env, "MODALIAS=cosm:cosm-dev%u", dev- > >index); > > +} > > + > > static int cosm_dev_probe(struct device *d) { > > struct cosm_device *dev = dev_to_cosm(d); @@ -33,6 +40,7 @@ > static > > int cosm_dev_remove(struct device *d) > > > > static struct bus_type cosm_bus = { > > .name = "cosm_bus", > > + .uevent = cosm_uevent, > > .probe = cosm_dev_probe, > > .remove = cosm_dev_remove, > > }; > > diff --git a/drivers/misc/mic/cosm/cosm_main.c > > b/drivers/misc/mic/cosm/cosm_main.c > > index ebb0eac43754..627e7d5f3a83 100644 > > --- a/drivers/misc/mic/cosm/cosm_main.c > > +++ b/drivers/misc/mic/cosm/cosm_main.c > > @@ -12,6 +12,7 @@ > > #include <linux/idr.h> > > #include <linux/slab.h> > > #include <linux/cred.h> > > +#include <linux/mod_devicetable.h> > > #include "cosm_main.h" > > > > static const char cosm_driver_name[] = "mic"; @@ -323,6 +324,12 @@ > > static int cosm_suspend(struct device *dev) > > return 0; > > } > > > > +static struct cosm_device_id __maybe_unused cosm_driver_id_table[] = { > > + { .name = "cosm-dev*" }, > > + { }, > > +}; > > +MODULE_DEVICE_TABLE(cosm, cosm_driver_id_table); > > + > > static const struct dev_pm_ops cosm_pm_ops = { > > .suspend = cosm_suspend, > > .freeze = cosm_suspend > > diff --git a/include/linux/mod_devicetable.h > > b/include/linux/mod_devicetable.h index 736cdc236cf9..ea6cdfe1a3a3 > > 100644 > > --- a/include/linux/mod_devicetable.h > > +++ b/include/linux/mod_devicetable.h > > @@ -845,4 +845,12 @@ struct vop_device_id { }; > > #define VOP_DEV_ANY_ID 0xffffffff > > > > +/* cosm */ > > +#define COSM_NAME_SIZE 32 > > +#define COSM_MODULE_PREFIX "cosm:" > > + > > +struct cosm_device_id { > > + char name[COSM_NAME_SIZE]; > > +}; > > + > > #endif /* LINUX_MOD_DEVICETABLE_H */ > > diff --git a/scripts/mod/devicetable-offsets.c > > b/scripts/mod/devicetable-offsets.c > > index 393acaa5302a..499a2832878d 100644 > > --- a/scripts/mod/devicetable-offsets.c > > +++ b/scripts/mod/devicetable-offsets.c > > @@ -247,5 +247,8 @@ int main(void) > > DEVID_FIELD(vop_device_id, device); > > DEVID_FIELD(vop_device_id, vendor); > > > > + DEVID(cosm_device_id); > > + DEVID_FIELD(cosm_device_id, name); > > + > > return 0; > > } > > diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index > > 8063b778eedf..f7c80e4da137 100644 > > --- a/scripts/mod/file2alias.c > > +++ b/scripts/mod/file2alias.c > > @@ -1383,6 +1383,16 @@ static int do_vop_entry(const char *filename, > void *symval, > > return 1; > > } > > > > +/* Looks like: cosm:S */ > > +static int do_cosm_entry(const char *filename, void *symval, > > + char *alias) > > +{ > > + DEF_FIELD_ADDR(symval, cosm_device_id, name); > > + sprintf(alias, COSM_MODULE_PREFIX "%s", *name); > > + > > + return 1; > > +} > > + > > /* Does namelen bytes of name exactly match the symbol? */ static > > bool sym_is(const char *name, unsigned namelen, const char *symbol) { > > @@ -1458,6 +1468,7 @@ static const struct devtable devtable[] = { > > {"wmi", SIZE_wmi_device_id, do_wmi_entry}, > > {"mhi", SIZE_mhi_device_id, do_mhi_entry}, > > {"vop", SIZE_vop_device_id, do_vop_entry}, > > + {"cosm", SIZE_cosm_device_id, do_cosm_entry}, > > }; > > > > /* Create MODULE_ALIAS() statements. > > -- > > 2.17.1 > > > > You are adding MODULE_DEVICE_TABLE() support for a class of drivers, but > then never adding that support to those drivers? Why add this at all > then? Shouldn't you also be modifying a bunch of drivers to get this to > work properly? I also wonder why Intel didn't add the specific implementation code to support MODULE_DEVICE_TABLE() like here. The MODULE_DEVICE_TABLE() macro was written here, but it has no effect before. The changes in this patches is enough to support the drivers autoloading, there no need to modify other codes to make this function works. Regards sherry > > thanks, > > greg k-h ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-09-27 13:04 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-09-25 7:31 [PATCH 0/3] Add module autoprobing support for vop and cosm driver Sherry Sun 2020-09-25 7:31 ` [PATCH 1/3] mic: vop: fix a written error in MODULE_DEVICE_TABLE Sherry Sun 2020-09-27 10:28 ` Greg KH 2020-09-27 12:19 ` Sherry Sun 2020-09-27 12:31 ` Greg KH 2020-09-27 12:50 ` Sherry Sun 2020-09-25 7:31 ` [PATCH 2/3] mic: vop: module autoprobing support for vop drivers Sherry Sun 2020-09-25 7:31 ` [PATCH 3/3] mic: cosm: module autoprobing support for cosm driver Sherry Sun 2020-09-27 10:29 ` Greg KH 2020-09-27 13:04 ` Sherry Sun
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).