* [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait()
@ 2024-05-16 10:25 Lucas Stach
2024-05-16 10:25 ` [PATCH 2/2] dmaengine: imx-sdma: don't print warning when firmware is absent Lucas Stach
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Lucas Stach @ 2024-05-16 10:25 UTC (permalink / raw)
To: Luis Chamberlain, Russ Weight, Vinod Koul
Cc: Greg Kroah-Hartman, Rafael J . Wysocki, Shawn Guo, Fabio Estevam,
Pengutronix Kernel Team, dmaengine, imx, patchwork-lst
Device drivers with optional firmware may still want to use the
asynchronous firmware loading interface. To avoid printing a
warning into the kernel log when the optional firmware is
absent, add a nowarn variant of this interface.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
v3:
- v2-link: https://lore.kernel.org/all/20181112160143.4459-1-l.stach@pengutronix.de/
- Rename to firmware_*
- Drop uevent for new API
- Make use of EXPORT_SYMBOL_GPL
- Sort header alphabetical
---
drivers/base/firmware_loader/main.c | 90 ++++++++++++++++++++---------
include/linux/firmware.h | 12 ++++
2 files changed, 75 insertions(+), 27 deletions(-)
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index da8ca01d011c..a03ee4b11134 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -1172,34 +1172,11 @@ static void request_firmware_work_func(struct work_struct *work)
kfree(fw_work);
}
-/**
- * request_firmware_nowait() - asynchronous version of request_firmware
- * @module: module requesting the firmware
- * @uevent: sends uevent to copy the firmware image if this flag
- * is non-zero else the firmware copy must be done manually.
- * @name: name of firmware file
- * @device: device for which firmware is being loaded
- * @gfp: allocation flags
- * @context: will be passed over to @cont, and
- * @fw may be %NULL if firmware request fails.
- * @cont: function will be called asynchronously when the firmware
- * request is over.
- *
- * Caller must hold the reference count of @device.
- *
- * Asynchronous variant of request_firmware() for user contexts:
- * - sleep for as small periods as possible since it may
- * increase kernel boot time of built-in device drivers
- * requesting firmware in their ->probe() methods, if
- * @gfp is GFP_KERNEL.
- *
- * - can't sleep at all if @gfp is GFP_ATOMIC.
- **/
-int
-request_firmware_nowait(
+
+static int _request_firmware_nowait(
struct module *module, bool uevent,
const char *name, struct device *device, gfp_t gfp, void *context,
- void (*cont)(const struct firmware *fw, void *context))
+ void (*cont)(const struct firmware *fw, void *context), bool nowarn)
{
struct firmware_work *fw_work;
@@ -1217,7 +1194,8 @@ request_firmware_nowait(
fw_work->context = context;
fw_work->cont = cont;
fw_work->opt_flags = FW_OPT_NOWAIT |
- (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
+ (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER) |
+ (nowarn ? FW_OPT_NO_WARN : 0);
if (!uevent && fw_cache_is_setup(device, name)) {
kfree_const(fw_work->name);
@@ -1236,8 +1214,66 @@ request_firmware_nowait(
schedule_work(&fw_work->work);
return 0;
}
+
+/**
+ * request_firmware_nowait() - asynchronous version of request_firmware
+ * @module: module requesting the firmware
+ * @uevent: sends uevent to copy the firmware image if this flag
+ * is non-zero else the firmware copy must be done manually.
+ * @name: name of firmware file
+ * @device: device for which firmware is being loaded
+ * @gfp: allocation flags
+ * @context: will be passed over to @cont, and
+ * @fw may be %NULL if firmware request fails.
+ * @cont: function will be called asynchronously when the firmware
+ * request is over.
+ *
+ * Caller must hold the reference count of @device.
+ *
+ * Asynchronous variant of request_firmware() for user contexts:
+ * - sleep for as small periods as possible since it may
+ * increase kernel boot time of built-in device drivers
+ * requesting firmware in their ->probe() methods, if
+ * @gfp is GFP_KERNEL.
+ *
+ * - can't sleep at all if @gfp is GFP_ATOMIC.
+ **/
+int request_firmware_nowait(
+ struct module *module, bool uevent,
+ const char *name, struct device *device, gfp_t gfp, void *context,
+ void (*cont)(const struct firmware *fw, void *context))
+{
+ return _request_firmware_nowait(module, uevent, name, device, gfp,
+ context, cont, false);
+
+}
EXPORT_SYMBOL(request_firmware_nowait);
+/**
+ * firmware_request_nowait_nowarn() - async version of request_firmware_nowarn
+ * @module: module requesting the firmware
+ * @name: name of firmware file
+ * @device: device for which firmware is being loaded
+ * @gfp: allocation flags
+ * @context: will be passed over to @cont, and
+ * @fw may be %NULL if firmware request fails.
+ * @cont: function will be called asynchronously when the firmware
+ * request is over.
+ *
+ * Similar in function to request_firmware_nowait(), but doesn't print a warning
+ * when the firmware file could not be found and always sends a uevent to copy
+ * the firmware image.
+ */
+int firmware_request_nowait_nowarn(
+ struct module *module, const char *name,
+ struct device *device, gfp_t gfp, void *context,
+ void (*cont)(const struct firmware *fw, void *context))
+{
+ return _request_firmware_nowait(module, FW_ACTION_UEVENT, name, device,
+ gfp, context, cont, true);
+}
+EXPORT_SYMBOL_GPL(firmware_request_nowait_nowarn);
+
#ifdef CONFIG_FW_CACHE
static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
diff --git a/include/linux/firmware.h b/include/linux/firmware.h
index f026f8926d79..aae1b85ffc10 100644
--- a/include/linux/firmware.h
+++ b/include/linux/firmware.h
@@ -98,6 +98,10 @@ static inline bool firmware_request_builtin(struct firmware *fw,
#if IS_REACHABLE(CONFIG_FW_LOADER)
int request_firmware(const struct firmware **fw, const char *name,
struct device *device);
+int firmware_request_nowait_nowarn(
+ struct module *module, const char *name,
+ struct device *device, gfp_t gfp, void *context,
+ void (*cont)(const struct firmware *fw, void *context));
int firmware_request_nowarn(const struct firmware **fw, const char *name,
struct device *device);
int firmware_request_platform(const struct firmware **fw, const char *name,
@@ -123,6 +127,14 @@ static inline int request_firmware(const struct firmware **fw,
return -EINVAL;
}
+static inline int firmware_request_nowait_nowarn(
+ struct module *module, const char *name,
+ struct device *device, gfp_t gfp, void *context,
+ void (*cont)(const struct firmware *fw, void *context))
+{
+ return -EINVAL;
+}
+
static inline int firmware_request_nowarn(const struct firmware **fw,
const char *name,
struct device *device)
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] dmaengine: imx-sdma: don't print warning when firmware is absent
2024-05-16 10:25 [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Lucas Stach
@ 2024-05-16 10:25 ` Lucas Stach
2024-05-28 23:25 ` [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Luis Chamberlain
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Lucas Stach @ 2024-05-16 10:25 UTC (permalink / raw)
To: Luis Chamberlain, Russ Weight, Vinod Koul
Cc: Greg Kroah-Hartman, Rafael J . Wysocki, Shawn Guo, Fabio Estevam,
Pengutronix Kernel Team, dmaengine, imx, patchwork-lst
The SDMA firmware is optional and a usable fallback to the internal
ROM firmware is present in the driver. There is already a message
printed informing the user that the internal firmware is used, so
there is no need to print a scary warning for what is normal operation
on most systems.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
v3:
- v2-link: https://lore.kernel.org/all/20181112160143.4459-1-l.stach@pengutronix.de/
- Adapt to new firmware_* API
---
drivers/dma/imx-sdma.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index 9b42f5e96b1e..b94aef57c2c0 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -2057,9 +2057,8 @@ static int sdma_get_firmware(struct sdma_engine *sdma,
{
int ret;
- ret = request_firmware_nowait(THIS_MODULE,
- FW_ACTION_UEVENT, fw_name, sdma->dev,
- GFP_KERNEL, sdma, sdma_load_firmware);
+ ret = firmware_request_nowait_nowarn(THIS_MODULE, fw_name, sdma->dev,
+ GFP_KERNEL, sdma, sdma_load_firmware);
return ret;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait()
2024-05-16 10:25 [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Lucas Stach
2024-05-16 10:25 ` [PATCH 2/2] dmaengine: imx-sdma: don't print warning when firmware is absent Lucas Stach
@ 2024-05-28 23:25 ` Luis Chamberlain
2024-06-04 15:35 ` Greg Kroah-Hartman
2024-06-07 17:47 ` Vinod Koul
3 siblings, 0 replies; 5+ messages in thread
From: Luis Chamberlain @ 2024-05-28 23:25 UTC (permalink / raw)
To: Lucas Stach
Cc: Russ Weight, Vinod Koul, Greg Kroah-Hartman, Rafael J . Wysocki,
Shawn Guo, Fabio Estevam, Pengutronix Kernel Team, dmaengine, imx,
patchwork-lst
On Thu, May 16, 2024 at 12:25:31PM +0200, Lucas Stach wrote:
> Device drivers with optional firmware may still want to use the
> asynchronous firmware loading interface. To avoid printing a
> warning into the kernel log when the optional firmware is
> absent, add a nowarn variant of this interface.
>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Luis
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait()
2024-05-16 10:25 [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Lucas Stach
2024-05-16 10:25 ` [PATCH 2/2] dmaengine: imx-sdma: don't print warning when firmware is absent Lucas Stach
2024-05-28 23:25 ` [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Luis Chamberlain
@ 2024-06-04 15:35 ` Greg Kroah-Hartman
2024-06-07 17:47 ` Vinod Koul
3 siblings, 0 replies; 5+ messages in thread
From: Greg Kroah-Hartman @ 2024-06-04 15:35 UTC (permalink / raw)
To: Lucas Stach
Cc: Luis Chamberlain, Russ Weight, Vinod Koul, Rafael J . Wysocki,
Shawn Guo, Fabio Estevam, Pengutronix Kernel Team, dmaengine, imx,
patchwork-lst
On Thu, May 16, 2024 at 12:25:31PM +0200, Lucas Stach wrote:
> Device drivers with optional firmware may still want to use the
> asynchronous firmware loading interface. To avoid printing a
> warning into the kernel log when the optional firmware is
> absent, add a nowarn variant of this interface.
>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait()
2024-05-16 10:25 [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Lucas Stach
` (2 preceding siblings ...)
2024-06-04 15:35 ` Greg Kroah-Hartman
@ 2024-06-07 17:47 ` Vinod Koul
3 siblings, 0 replies; 5+ messages in thread
From: Vinod Koul @ 2024-06-07 17:47 UTC (permalink / raw)
To: Luis Chamberlain, Russ Weight, Lucas Stach
Cc: Greg Kroah-Hartman, Rafael J . Wysocki, Shawn Guo, Fabio Estevam,
Pengutronix Kernel Team, dmaengine, imx, patchwork-lst
On Thu, 16 May 2024 12:25:31 +0200, Lucas Stach wrote:
> Device drivers with optional firmware may still want to use the
> asynchronous firmware loading interface. To avoid printing a
> warning into the kernel log when the optional firmware is
> absent, add a nowarn variant of this interface.
>
>
Applied, thanks!
[1/2] firmware: add nowarn variant of request_firmware_nowait()
commit: 11c63e57404e538c5df91f732e5d505860edb660
[2/2] dmaengine: imx-sdma: don't print warning when firmware is absent
commit: ea00def538eceda618b940fef757f55c1190e327
Best regards,
--
Vinod Koul <vkoul@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-06-07 17:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-16 10:25 [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Lucas Stach
2024-05-16 10:25 ` [PATCH 2/2] dmaengine: imx-sdma: don't print warning when firmware is absent Lucas Stach
2024-05-28 23:25 ` [PATCH 1/2] firmware: add nowarn variant of request_firmware_nowait() Luis Chamberlain
2024-06-04 15:35 ` Greg Kroah-Hartman
2024-06-07 17:47 ` Vinod Koul
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).