* [PATCH 0/8] Loading optional firmware v2 @ 2018-04-16 22:24 Andres Rodriguez 2018-04-16 22:24 ` [PATCH 1/8] firmware: some documentation fixes Andres Rodriguez ` (7 more replies) 0 siblings, 8 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Hey Everyone, Thanks everyone for the feedback on the RFC: https://lkml.org/lkml/2018/3/9/903 Seems like there is a general interest in this feature, so here is a V2 of the proposal with the comments I received. Please provide comments on the _nowait2() API. It is not my favorite, but it seems like the ship on exposing fw_opts directly to the caller has sailed. If anyone has a better suggestion let me know. Also, if anyone has better suggestions for the fw_opt enum documentation please let me know. I may have botched some of the details since I'm not super familiar with them. I've also included patches for the following consumer drivers: - amdgpu - ath10k - brcmfmac Thanks again for your feedback. Regards, Andres Andres Rodriguez (8): firmware: some documentation fixes firmware: wrap FW_OPT_* into an enum firmware: add kernel-doc for enum fw_opt firmware: add functions to load firmware without warnings v3 firmware: print firmware name on fallback path drm/amdgpu: use firmware_request_nowarn to load firmware ath10k: use request_firmware_nowarn to load firmware brcmfmac: use request_firmware_nowait2 to load firmware without warnings .../driver-api/firmware/request_firmware.rst | 29 ++++++----- drivers/base/firmware_loader/fallback.c | 18 +++---- drivers/base/firmware_loader/fallback.h | 8 +-- drivers/base/firmware_loader/firmware.h | 28 ++++++++--- drivers/base/firmware_loader/main.c | 58 +++++++++++++++++++--- drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 +-- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 ++--- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 ++++++------ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 ++--- drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 +- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- drivers/net/wireless/ath/ath10k/core.c | 2 +- .../broadcom/brcm80211/brcmfmac/firmware.c | 7 +-- include/linux/firmware.h | 6 +++ 29 files changed, 164 insertions(+), 94 deletions(-) -- 2.14.1 ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/8] firmware: some documentation fixes 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 2/8] firmware: wrap FW_OPT_* into an enum Andres Rodriguez ` (6 subsequent siblings) 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Including: - Fixup outdated kernel-doc paths - Slightly too short title underline - Some typos Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- Documentation/driver-api/firmware/request_firmware.rst | 16 ++++++++-------- drivers/base/firmware_loader/fallback.c | 4 ++-- drivers/base/firmware_loader/fallback.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Documentation/driver-api/firmware/request_firmware.rst b/Documentation/driver-api/firmware/request_firmware.rst index 9305bf4db38e..7632f8807472 100644 --- a/Documentation/driver-api/firmware/request_firmware.rst +++ b/Documentation/driver-api/firmware/request_firmware.rst @@ -17,17 +17,17 @@ an error is returned. firmware_request ---------------- -.. kernel-doc:: drivers/base/firmware_class.c +.. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request firmware_request_direct ----------------------- -.. kernel-doc:: drivers/base/firmware_class.c +.. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request_direct firmware_request_into_buf ------------------------- -.. kernel-doc:: drivers/base/firmware_class.c +.. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request_into_buf Asynchronous firmware requests @@ -41,7 +41,7 @@ in atomic contexts. firmware_request_nowait ----------------------- -.. kernel-doc:: drivers/base/firmware_class.c +.. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request_nowait Special optimizations on reboot @@ -50,12 +50,12 @@ Special optimizations on reboot Some devices have an optimization in place to enable the firmware to be retained during system reboot. When such optimizations are used the driver author must ensure the firmware is still available on resume from suspend, -this can be done with firmware_request_cache() insted of requesting for the -firmare to be loaded. +this can be done with firmware_request_cache() instead of requesting for the +firmware to be loaded. firmware_request_cache() ------------------------ -.. kernel-doc:: drivers/base/firmware_class.c +------------------------ +.. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request_cache request firmware API expected driver use diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index 71f529de5243..da97fc26119c 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -536,8 +536,8 @@ fw_create_instance(struct firmware *firmware, const char *fw_name, } /** - * fw_load_sysfs_fallback - load a firmware via the syfs fallback mechanism - * @fw_sysfs: firmware syfs information for the firmware to load + * fw_load_sysfs_fallback - load a firmware via the sysfs fallback mechanism + * @fw_sysfs: firmware sysfs information for the firmware to load * @opt_flags: flags of options, FW_OPT_* * @timeout: timeout to wait for the load * diff --git a/drivers/base/firmware_loader/fallback.h b/drivers/base/firmware_loader/fallback.h index dfebc644ed35..f8255670a663 100644 --- a/drivers/base/firmware_loader/fallback.h +++ b/drivers/base/firmware_loader/fallback.h @@ -6,7 +6,7 @@ #include <linux/device.h> /** - * struct firmware_fallback_config - firmware fallback configuratioon settings + * struct firmware_fallback_config - firmware fallback configuration settings * * Helps describe and fine tune the fallback mechanism. * -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/8] firmware: wrap FW_OPT_* into an enum 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez 2018-04-16 22:24 ` [PATCH 1/8] firmware: some documentation fixes Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 3/8] firmware: add kernel-doc for enum fw_opt Andres Rodriguez ` (5 subsequent siblings) 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel This should let us associate enum kdoc to these values. Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/base/firmware_loader/fallback.c | 12 ++++++------ drivers/base/firmware_loader/fallback.h | 6 ++++-- drivers/base/firmware_loader/firmware.h | 17 +++++++++-------- drivers/base/firmware_loader/main.c | 6 +++--- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index da97fc26119c..ecc49a619298 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -511,7 +511,7 @@ static const struct attribute_group *fw_dev_attr_groups[] = { static struct fw_sysfs * fw_create_instance(struct firmware *firmware, const char *fw_name, - struct device *device, unsigned int opt_flags) + struct device *device, enum fw_opt opt_flags) { struct fw_sysfs *fw_sysfs; struct device *f_dev; @@ -544,7 +544,7 @@ fw_create_instance(struct firmware *firmware, const char *fw_name, * In charge of constructing a sysfs fallback interface for firmware loading. **/ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, - unsigned int opt_flags, long timeout) + enum fw_opt opt_flags, long timeout) { int retval = 0; struct device *f_dev = &fw_sysfs->dev; @@ -598,7 +598,7 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, static int fw_load_from_user_helper(struct firmware *firmware, const char *name, struct device *device, - unsigned int opt_flags) + enum fw_opt opt_flags) { struct fw_sysfs *fw_sysfs; long timeout; @@ -639,7 +639,7 @@ static int fw_load_from_user_helper(struct firmware *firmware, return ret; } -static bool fw_force_sysfs_fallback(unsigned int opt_flags) +static bool fw_force_sysfs_fallback(enum fw_opt opt_flags) { if (fw_fallback_config.force_sysfs_fallback) return true; @@ -648,7 +648,7 @@ static bool fw_force_sysfs_fallback(unsigned int opt_flags) return true; } -static bool fw_run_sysfs_fallback(unsigned int opt_flags) +static bool fw_run_sysfs_fallback(enum fw_opt opt_flags) { if (fw_fallback_config.ignore_sysfs_fallback) { pr_info_once("Ignoring firmware sysfs fallback due to sysctl knob\n"); @@ -663,7 +663,7 @@ static bool fw_run_sysfs_fallback(unsigned int opt_flags) int fw_sysfs_fallback(struct firmware *fw, const char *name, struct device *device, - unsigned int opt_flags, + enum fw_opt opt_flags, int ret) { if (!fw_run_sysfs_fallback(opt_flags)) diff --git a/drivers/base/firmware_loader/fallback.h b/drivers/base/firmware_loader/fallback.h index f8255670a663..a3b73a09db6c 100644 --- a/drivers/base/firmware_loader/fallback.h +++ b/drivers/base/firmware_loader/fallback.h @@ -5,6 +5,8 @@ #include <linux/firmware.h> #include <linux/device.h> +#include "firmware.h" + /** * struct firmware_fallback_config - firmware fallback configuration settings * @@ -31,7 +33,7 @@ struct firmware_fallback_config { #ifdef CONFIG_FW_LOADER_USER_HELPER int fw_sysfs_fallback(struct firmware *fw, const char *name, struct device *device, - unsigned int opt_flags, + enum fw_opt opt_flags, int ret); void kill_pending_fw_fallback_reqs(bool only_kill_custom); @@ -43,7 +45,7 @@ void unregister_sysfs_loader(void); #else /* CONFIG_FW_LOADER_USER_HELPER */ static inline int fw_sysfs_fallback(struct firmware *fw, const char *name, struct device *device, - unsigned int opt_flags, + enum fw_opt opt_flags, int ret) { /* Keep carrying over the same error */ diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h index d11d37db370b..957396293b92 100644 --- a/drivers/base/firmware_loader/firmware.h +++ b/drivers/base/firmware_loader/firmware.h @@ -10,13 +10,14 @@ #include <generated/utsrelease.h> -/* firmware behavior options */ -#define FW_OPT_UEVENT (1U << 0) -#define FW_OPT_NOWAIT (1U << 1) -#define FW_OPT_USERHELPER (1U << 2) -#define FW_OPT_NO_WARN (1U << 3) -#define FW_OPT_NOCACHE (1U << 4) -#define FW_OPT_NOFALLBACK (1U << 5) +enum fw_opt { + FW_OPT_UEVENT = (1U << 0), + FW_OPT_NOWAIT = (1U << 1), + FW_OPT_USERHELPER = (1U << 2), + FW_OPT_NO_WARN = (1U << 3), + FW_OPT_NOCACHE = (1U << 4), + FW_OPT_NOFALLBACK = (1U << 5), +}; enum fw_status { FW_STATUS_UNKNOWN, @@ -110,6 +111,6 @@ static inline void fw_state_done(struct fw_priv *fw_priv) } int assign_fw(struct firmware *fw, struct device *device, - unsigned int opt_flags); + enum fw_opt opt_flags); #endif /* __FIRMWARE_LOADER_H */ diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 5812148694b6..5baadad3012d 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -443,7 +443,7 @@ static int fw_add_devm_name(struct device *dev, const char *name) #endif int assign_fw(struct firmware *fw, struct device *device, - unsigned int opt_flags) + enum fw_opt opt_flags) { struct fw_priv *fw_priv = fw->priv; int ret; @@ -558,7 +558,7 @@ static void fw_abort_batch_reqs(struct firmware *fw) static int _firmware_request(const struct firmware **firmware_p, const char *name, struct device *device, void *buf, size_t size, - unsigned int opt_flags) + enum fw_opt opt_flags) { struct firmware *fw = NULL; int ret; @@ -734,7 +734,7 @@ struct firmware_work { struct device *device; void *context; void (*cont)(const struct firmware *fw, void *context); - unsigned int opt_flags; + enum fw_opt opt_flags; }; static void firmware_request_work_func(struct work_struct *work) -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 3/8] firmware: add kernel-doc for enum fw_opt 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez 2018-04-16 22:24 ` [PATCH 1/8] firmware: some documentation fixes Andres Rodriguez 2018-04-16 22:24 ` [PATCH 2/8] firmware: wrap FW_OPT_* into an enum Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 4/8] firmware: add functions to load firmware without warnings v3 Andres Rodriguez ` (4 subsequent siblings) 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Some basic definitions for the FW_OPT_* values Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/base/firmware_loader/firmware.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h index 957396293b92..8ef23c334135 100644 --- a/drivers/base/firmware_loader/firmware.h +++ b/drivers/base/firmware_loader/firmware.h @@ -10,6 +10,17 @@ #include <generated/utsrelease.h> +/** + * enum fw_opt - options to control firmware loading behaviour + * + * @FW_OPT_UEVENT: Enable the uevent fallback path. + * @FW_OPT_NOWAIT: Executing inside an asynchronous firmware request. + * @FW_OPT_USERHELPER: Enable the usermode fallback path. + * @FW_OPT_NO_WARN: Quiet, avoid printing warning messages. + * @FW_OPT_NOCACHE: Firmware caching will be disabled for this request. + * @FW_OPT_NOFALLBACK: Disable the fallback path. Takes precedence over + * &FW_OPT_UEVENT and &FW_OPT_USERHELPER. + */ enum fw_opt { FW_OPT_UEVENT = (1U << 0), FW_OPT_NOWAIT = (1U << 1), -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 4/8] firmware: add functions to load firmware without warnings v3 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez ` (2 preceding siblings ...) 2018-04-16 22:24 ` [PATCH 3/8] firmware: add kernel-doc for enum fw_opt Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:52 ` Randy Dunlap 2018-04-16 22:24 ` [PATCH 5/8] firmware: print firmware name on fallback path Andres Rodriguez ` (3 subsequent siblings) 7 siblings, 1 reply; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Currently the firmware loader only exposes one silent path for querying optional firmware, and that is firmware_request_direct(). This function also disables the fallback path, which might not always be the desired behaviour. [0] This patch introduces variations of firmware_request() and firmware_request_nowait() that enable the caller to disable the undesired warning messages. This is equivalent to adding FW_OPT_NO_WARN, to the old behaviour. v2: add header prototype, use updated opt_flags v3: split debug message to separate patch added _nowait variant added documentation [0]: https://git.kernel.org/linus/c0cc00f250e1 Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- .../driver-api/firmware/request_firmware.rst | 13 ++++-- drivers/base/firmware_loader/main.c | 52 ++++++++++++++++++++-- include/linux/firmware.h | 6 +++ 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/Documentation/driver-api/firmware/request_firmware.rst b/Documentation/driver-api/firmware/request_firmware.rst index 7632f8807472..913e7d2e0cb7 100644 --- a/Documentation/driver-api/firmware/request_firmware.rst +++ b/Documentation/driver-api/firmware/request_firmware.rst @@ -20,6 +20,11 @@ firmware_request .. kernel-doc:: drivers/base/firmware_loader/main.c :functions: firmware_request +firmware_request_nowarn +----------------------- +.. kernel-doc:: drivers/base/firmware_loader/main.c + :functions: firmware_request_nowarn + firmware_request_direct ----------------------- .. kernel-doc:: drivers/base/firmware_loader/main.c @@ -36,13 +41,13 @@ Asynchronous firmware requests Asynchronous firmware requests allow driver code to not have to wait until the firmware or an error is returned. Function callbacks are provided so that when the firmware or an error is found the driver is -informed through the callback. firmware_request_nowait() cannot be called +informed through the callback. firmware_request_nowait2() cannot be called in atomic contexts. -firmware_request_nowait ------------------------ +firmware_request_nowait2 +------------------------ .. kernel-doc:: drivers/base/firmware_loader/main.c - :functions: firmware_request_nowait + :functions: firmware_request_nowait2 Special optimizations on reboot =============================== diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index 5baadad3012d..14ded1de84bf 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -631,6 +631,30 @@ firmware_request(const struct firmware **firmware_p, const char *name, } EXPORT_SYMBOL(firmware_request); +/** + * firmware_request_nowarn: - request for an optional fw module + * @firmware: pointer to firmware image + * @name: name of firmware file + * @device: device for which firmware is being loaded + * + * This function is similar in behaviour to firmware_request(), except + * it doesn't produce warning messages when the file is not found. + **/ +int +firmware_request_nowarn(const struct firmware **firmware, const char *name, + struct device *device) +{ + int ret; + + /* Need to pin this module until return */ + __module_get(THIS_MODULE); + ret = _firmware_request(firmware, name, device, NULL, 0, + FW_OPT_UEVENT | FW_OPT_NO_WARN); + module_put(THIS_MODULE); + return ret; +} +EXPORT_SYMBOL_GPL(firmware_request_nowarn); + /** * firmware_request_direct: - load firmware directly without usermode helper * @firmware_p: pointer to firmware image @@ -755,10 +779,11 @@ static void firmware_request_work_func(struct work_struct *work) } /** - * firmware_request_nowait - asynchronous version of firmware_request + * firmware_request_nowait2 - asynchronous version of firmware_request * @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. + * @warn: enable warnings * @name: name of firmware file * @device: device for which firmware is being loaded * @gfp: allocation flags @@ -778,8 +803,8 @@ static void firmware_request_work_func(struct work_struct *work) * - can't sleep at all if @gfp is GFP_ATOMIC. **/ int -firmware_request_nowait( - struct module *module, bool uevent, +firmware_request_nowait2( + struct module *module, bool uevent, bool warn, const char *name, struct device *device, gfp_t gfp, void *context, void (*cont)(const struct firmware *fw, void *context)) { @@ -799,7 +824,8 @@ firmware_request_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) | + (warn ? 0 : FW_OPT_NO_WARN); if (!uevent && fw_cache_is_setup(device, name)) { kfree_const(fw_work->name); @@ -818,6 +844,24 @@ firmware_request_nowait( schedule_work(&fw_work->work); return 0; } +EXPORT_SYMBOL_GPL(firmware_request_nowait2); + +/** + * firmware_request_nowait - compatibility version of firmware_request_nowait2 + * + * This is equivalent to calling firmware_request_nowait2 with warnings enabled. + * + * Refer to firmware_request_nowait2 for further details. + **/ +int +firmware_request_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 firmware_request_nowait2(module, uevent, true, name, device, + gfp, context, cont); +} EXPORT_SYMBOL(firmware_request_nowait); #ifdef CONFIG_PM_SLEEP diff --git a/include/linux/firmware.h b/include/linux/firmware.h index db8351a42405..2623d3f853ba 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h @@ -42,6 +42,12 @@ struct builtin_fw { #if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE)) int firmware_request(const struct firmware **fw, const char *name, struct device *device); +int firmware_request_nowarn(const struct firmware **fw, const char *name, + struct device *device); +int firmware_request_nowait2( + struct module *module, bool uevent, bool warn, + const char *name, struct device *device, gfp_t gfp, void *context, + void (*cont)(const struct firmware *fw, void *context)); int firmware_request_nowait( struct module *module, bool uevent, const char *name, struct device *device, gfp_t gfp, void *context, -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 4/8] firmware: add functions to load firmware without warnings v3 2018-04-16 22:24 ` [PATCH 4/8] firmware: add functions to load firmware without warnings v3 Andres Rodriguez @ 2018-04-16 22:52 ` Randy Dunlap 0 siblings, 0 replies; 17+ messages in thread From: Randy Dunlap @ 2018-04-16 22:52 UTC (permalink / raw) To: Andres Rodriguez, linux-kernel Cc: gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel On 04/16/18 15:24, Andres Rodriguez wrote: > Currently the firmware loader only exposes one silent path for querying > optional firmware, and that is firmware_request_direct(). This function > also disables the fallback path, which might not always be the > desired behaviour. [0] > > This patch introduces variations of firmware_request() and > firmware_request_nowait() that enable the caller to disable the > undesired warning messages. This is equivalent to adding FW_OPT_NO_WARN, > to the old behaviour. > > v2: add header prototype, use updated opt_flags > v3: split debug message to separate patch > added _nowait variant > added documentation > > [0]: https://git.kernel.org/linus/c0cc00f250e1 > > Signed-off-by: Andres Rodriguez <andresx7@gmail.com> > --- > .../driver-api/firmware/request_firmware.rst | 13 ++++-- > drivers/base/firmware_loader/main.c | 52 ++++++++++++++++++++-- > include/linux/firmware.h | 6 +++ > 3 files changed, 63 insertions(+), 8 deletions(-) > diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c > index 5baadad3012d..14ded1de84bf 100644 > --- a/drivers/base/firmware_loader/main.c > +++ b/drivers/base/firmware_loader/main.c > @@ -631,6 +631,30 @@ firmware_request(const struct firmware **firmware_p, const char *name, > } > EXPORT_SYMBOL(firmware_request); > Please see/use Documentation/doc-guide/kernel-doc.rst: /** * function_name() - Brief description of function. * @arg1: Describe the first argument. * @arg2: Describe the second argument. * One can provide multiple line descriptions * for arguments. ... > +/** > + * firmware_request_nowarn: - request for an optional fw module no ':' above. > + * @firmware: pointer to firmware image > + * @name: name of firmware file > + * @device: device for which firmware is being loaded > + * > + * This function is similar in behaviour to firmware_request(), except > + * it doesn't produce warning messages when the file is not found. > + **/ > +int > +firmware_request_nowarn(const struct firmware **firmware, const char *name, > + struct device *device) > +{ > + int ret; > + > + /* Need to pin this module until return */ > + __module_get(THIS_MODULE); > + ret = _firmware_request(firmware, name, device, NULL, 0, > + FW_OPT_UEVENT | FW_OPT_NO_WARN); > + module_put(THIS_MODULE); > + return ret; > +} > +EXPORT_SYMBOL_GPL(firmware_request_nowarn); > + > /** > * firmware_request_direct: - load firmware directly without usermode helper No ':' above. > * @firmware_p: pointer to firmware image > @@ -755,10 +779,11 @@ static void firmware_request_work_func(struct work_struct *work) > } > > /** > - * firmware_request_nowait - asynchronous version of firmware_request > + * firmware_request_nowait2 - asynchronous version of firmware_request > * @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. > + * @warn: enable warnings > * @name: name of firmware file > * @device: device for which firmware is being loaded > * @gfp: allocation flags > @@ -778,8 +803,8 @@ static void firmware_request_work_func(struct work_struct *work) > * - can't sleep at all if @gfp is GFP_ATOMIC. > **/ > int > -firmware_request_nowait( > - struct module *module, bool uevent, > +firmware_request_nowait2( > + struct module *module, bool uevent, bool warn, > const char *name, struct device *device, gfp_t gfp, void *context, > void (*cont)(const struct firmware *fw, void *context)) > { > @@ -799,7 +824,8 @@ firmware_request_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) | > + (warn ? 0 : FW_OPT_NO_WARN); > > if (!uevent && fw_cache_is_setup(device, name)) { > kfree_const(fw_work->name); > @@ -818,6 +844,24 @@ firmware_request_nowait( > schedule_work(&fw_work->work); > return 0; > } > +EXPORT_SYMBOL_GPL(firmware_request_nowait2); > + > +/** > + * firmware_request_nowait - compatibility version of firmware_request_nowait2 > + * > + * This is equivalent to calling firmware_request_nowait2 with warnings enabled. > + * > + * Refer to firmware_request_nowait2 for further details. > + **/ > +int > +firmware_request_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 firmware_request_nowait2(module, uevent, true, name, device, > + gfp, context, cont); > +} > EXPORT_SYMBOL(firmware_request_nowait); > > #ifdef CONFIG_PM_SLEEP -- ~Randy ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 5/8] firmware: print firmware name on fallback path 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez ` (3 preceding siblings ...) 2018-04-16 22:24 ` [PATCH 4/8] firmware: add functions to load firmware without warnings v3 Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware Andres Rodriguez ` (2 subsequent siblings) 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Previously, one could assume the firmware name from the preceding message: "Direct firmware load for {name} failed with error %d". However, with the new firmware_request_nowarn() entrypoint, the message outlined above will not always be printed. Therefore, we add the firmware name to the fallback path spew in order to associate it with the appropriate request. Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/base/firmware_loader/fallback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index ecc49a619298..e5b0a96ae781 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -669,6 +669,6 @@ int fw_sysfs_fallback(struct firmware *fw, const char *name, if (!fw_run_sysfs_fallback(opt_flags)) return ret; - dev_warn(device, "Falling back to user helper\n"); + dev_warn(device, "Falling back to user helper for %s\n", name); return fw_load_from_user_helper(fw, name, device, opt_flags); } -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez ` (4 preceding siblings ...) 2018-04-16 22:24 ` [PATCH 5/8] firmware: print firmware name on fallback path Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-17 8:48 ` Christian König 2018-04-16 22:24 ` [PATCH 7/8] ath10k: use request_firmware_nowarn " Andres Rodriguez 2018-04-16 22:24 ` [PATCH 8/8] brcmfmac: use request_firmware_nowait2 to load firmware without warnings Andres Rodriguez 7 siblings, 1 reply; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel Currently, during the normal boot process the amdgpu driver will produce spew like the following in dmesg: Direct firmware load for amdgpu/polaris10_mec_2.bin failed with error -2 This happens when amdgpu tries to load optional firmware files. So the error does not affect the startup sequence. This patch switches the amdgpu to use firmware_request_nowarn(), which will not produce the warnings mentioned above. Hopefully resulting in a cleaner bootup log. Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 +++++++++++++++--------------- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- 21 files changed, 51 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c index 4466f3535e2d..6c950811c0a5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device, return -EINVAL; } - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); if (err) { DRM_ERROR("Failed to request firmware\n"); return err; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index af1b879a9ee9..d6225619e69f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev) if (adev->asic_type == CHIP_FIJI) { int err; uint32_t fw_ver; - err = request_firmware(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev); + err = firmware_request_nowarn(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev); /* force vPost if error occured */ if (err) return true; @@ -1133,7 +1133,7 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name); - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, fw_name, adev->dev); if (err) { dev_err(adev->dev, "Failed to load gpu_info firmware \"%s\"\n", diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h index 30b5500dc152..0acd1f3d14c8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { struct amdgpu_firmware_info { /* ucode ID */ enum AMDGPU_UCODE_ID ucode_id; - /* request_firmware */ + /* firmware_request */ const struct firmware *fw; /* starting mc address */ uint64_t mc_addr; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index b2eae86bf906..4de018d45081 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) return -EINVAL; } - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); if (r) { dev_err(adev->dev, "amdgpu_uvd: Can't load firmware \"%s\"\n", fw_name); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index d274ae535530..b6af824a2f44 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) return -EINVAL; } - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); if (r) { dev_err(adev->dev, "amdgpu_vce: Can't load firmware \"%s\"\n", fw_name); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 837962118dbc..bd650b87e281 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) return -EINVAL; } - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); if (r) { dev_err(adev->dev, "amdgpu_vcn: Can't load firmware \"%s\"\n", fw_name); diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c index a0943aa8d1d3..95e1edc1311d 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->pm.fw); diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index 6e8278e689b1..93c8acca0360 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name); else snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma1.bin", chip_name); - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c index 9870d83b68c1..8aebab5edf15 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.pfp_fw); @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.me_fw); @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.ce_fw); @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.rlc_fw); diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index a066c5eda135..35a0e46464a5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.pfp_fw); @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) goto out; snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.me_fw); @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) goto out; snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.ce_fw); @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) goto out; snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name); - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.mec_fw); @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) if (adev->asic_type == CHIP_KAVERI) { snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", chip_name); - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.mec2_fw); @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.rlc_fw); diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 4e694ae9f308..c16cd96a1557 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp_2.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); if (err == -ENOENT) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); } } else { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); } if (err) goto out; @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); if (err == -ENOENT) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); } } else { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); } if (err) goto out; @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); if (err == -ENOENT) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); } } else { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); } if (err) goto out; @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) adev->virt.chained_ib_support = false; snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.rlc_fw); @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", chip_name); - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); if (err == -ENOENT) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); } } else { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); } if (err) goto out; @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) (adev->asic_type != CHIP_TOPAZ)) { if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2_2.bin", chip_name); - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); if (err == -ENOENT) { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); } } else { snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); } if (!err) { err = amdgpu_ucode_validate(adev->gfx.mec2_fw); diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index c06479615e8a..9f70012c81ad 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.pfp_fw); @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.me_fw); @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.ce_fw); @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.rlc_fw); @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->gfx.mec_fw); @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); if (!err) { err = amdgpu_ucode_validate(adev->gfx.mec2_fw); if (err) diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c index 8e28270d1ea9..4192a5a0c444 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); else snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); if (err) goto out; diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c index 86e9d682c59e..06deba7f707d 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct amdgpu_device *adev) else snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->mc.fw); diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c index 9a813d834f1a..cbce96198dbc 100644 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name); - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->mc.fw); diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c index 5a9fe24697f9..718722ef1835 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct psp_context *psp) } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, adev->dev); if (err) goto out; diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c index 19bd1934e63d..dd5261577d9b 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) } snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", chip_name); - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, adev->dev); if (err) goto out; @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) le32_to_cpu(hdr->sos_offset_bytes); snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, adev->dev); if (err) goto out; diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index d4787ad4d346..a2afbaacc7e5 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); else snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index 521978c40537..75d2a9cc9268 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); else snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index 91cf95a8c39c..e1ebfb9e2650 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct amdgpu_device *adev) snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); else snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c index ce675a7f179a..5538a5269417 100644 --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct amdgpu_device *adev) } snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); if (err) goto out; err = amdgpu_ucode_validate(adev->pm.fw); -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-16 22:24 ` [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware Andres Rodriguez @ 2018-04-17 8:48 ` Christian König 2018-04-17 15:07 ` Andres Rodriguez 0 siblings, 1 reply; 17+ messages in thread From: Christian König @ 2018-04-17 8:48 UTC (permalink / raw) To: Andres Rodriguez, linux-kernel Cc: gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel Well this is a rather big NAK for this patch. Only a small fraction of the firmware files amdgpu uses are actually optional (the ones with the *_2.bin name). All other files are mandatory for correct driver operation. There is a fallback when actually no firmware files at all are found, in this case we at least try to get a picture on the screen so that the user gets a hint on what is wrong. But this path isn't tested well and breaks from time to time. So when you get a message like "Direct firmware load for * failed with error -2" even if it's one of the "*_2.bin" files that is a clear hint that you should update your firmware package. Regards, Christian. Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: > Currently, during the normal boot process the amdgpu driver will produce > spew like the following in dmesg: > Direct firmware load for amdgpu/polaris10_mec_2.bin failed with error -2 > > This happens when amdgpu tries to load optional firmware files. So the > error does not affect the startup sequence. > > This patch switches the amdgpu to use firmware_request_nowarn(), which > will not produce the warnings mentioned above. Hopefully resulting in a > cleaner bootup log. > > Signed-off-by: Andres Rodriguez <andresx7@gmail.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- > drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- > drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- > drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- > drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ > drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 +++++++++++++++--------------- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ > drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- > drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- > drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- > 21 files changed, 51 insertions(+), 51 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c > index 4466f3535e2d..6c950811c0a5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c > @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device, > return -EINVAL; > } > > - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); > if (err) { > DRM_ERROR("Failed to request firmware\n"); > return err; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index af1b879a9ee9..d6225619e69f 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev) > if (adev->asic_type == CHIP_FIJI) { > int err; > uint32_t fw_ver; > - err = request_firmware(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev); > + err = firmware_request_nowarn(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev); > /* force vPost if error occured */ > if (err) > return true; > @@ -1133,7 +1133,7 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name); > - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, fw_name, adev->dev); > if (err) { > dev_err(adev->dev, > "Failed to load gpu_info firmware \"%s\"\n", > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h > index 30b5500dc152..0acd1f3d14c8 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h > @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { > struct amdgpu_firmware_info { > /* ucode ID */ > enum AMDGPU_UCODE_ID ucode_id; > - /* request_firmware */ > + /* firmware_request */ > const struct firmware *fw; > /* starting mc address */ > uint64_t mc_addr; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > index b2eae86bf906..4de018d45081 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) > return -EINVAL; > } > > - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); > + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); > if (r) { > dev_err(adev->dev, "amdgpu_uvd: Can't load firmware \"%s\"\n", > fw_name); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > index d274ae535530..b6af824a2f44 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c > @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) > return -EINVAL; > } > > - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); > + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); > if (r) { > dev_err(adev->dev, "amdgpu_vce: Can't load firmware \"%s\"\n", > fw_name); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > index 837962118dbc..bd650b87e281 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) > return -EINVAL; > } > > - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); > + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); > if (r) { > dev_err(adev->dev, "amdgpu_vcn: Can't load firmware \"%s\"\n", > fw_name); > diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > index a0943aa8d1d3..95e1edc1311d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); > - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->pm.fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c > index 6e8278e689b1..93c8acca0360 100644 > --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c > +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c > @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct amdgpu_device *adev) > snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", chip_name); > else > snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma1.bin", chip_name); > - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c > index 9870d83b68c1..8aebab5edf15 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c > @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.pfp_fw); > @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.me_fw); > @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.ce_fw); > @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); > - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.rlc_fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c > index a066c5eda135..35a0e46464a5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c > @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.pfp_fw); > @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > goto out; > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.me_fw); > @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > goto out; > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.ce_fw); > @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > goto out; > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name); > - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.mec_fw); > @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > > if (adev->asic_type == CHIP_KAVERI) { > snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.mec2_fw); > @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); > - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.rlc_fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c > index 4e694ae9f308..c16cd96a1557 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c > @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > > if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp_2.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > if (err == -ENOENT) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > } > } else { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > } > if (err) > goto out; > @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > > if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > if (err == -ENOENT) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > } > } else { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > } > if (err) > goto out; > @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > > if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > if (err == -ENOENT) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > } > } else { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > } > if (err) > goto out; > @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > adev->virt.chained_ib_support = false; > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); > - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.rlc_fw); > @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > > if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); > if (err == -ENOENT) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); > - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); > } > } else { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); > - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); > } > if (err) > goto out; > @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) > (adev->asic_type != CHIP_TOPAZ)) { > if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2_2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); > if (err == -ENOENT) { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); > } > } else { > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); > } > if (!err) { > err = amdgpu_ucode_validate(adev->gfx.mec2_fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > index c06479615e8a..9f70012c81ad 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); > - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.pfp_fw); > @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); > - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.me_fw); > @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); > - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.ce_fw); > @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); > - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.rlc_fw); > @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); > - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->gfx.mec_fw); > @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct amdgpu_device *adev) > > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name); > - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); > if (!err) { > err = amdgpu_ucode_validate(adev->gfx.mec2_fw); > if (err) > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c > index 8e28270d1ea9..4192a5a0c444 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c > @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct amdgpu_device *adev) > snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); > else > snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); > - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); > if (err) > goto out; > > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c > index 86e9d682c59e..06deba7f707d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c > @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct amdgpu_device *adev) > else > snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name); > > - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->mc.fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c > index 9a813d834f1a..cbce96198dbc 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c > @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name); > - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->mc.fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > index 5a9fe24697f9..718722ef1835 100644 > --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c > @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct psp_context *psp) > } > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); > - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, adev->dev); > if (err) > goto out; > > diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c > index 19bd1934e63d..dd5261577d9b 100644 > --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c > +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c > @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) > } > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", chip_name); > - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, adev->dev); > if (err) > goto out; > > @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) > le32_to_cpu(hdr->sos_offset_bytes); > > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); > - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, adev->dev); > if (err) > goto out; > > diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c > index d4787ad4d346..a2afbaacc7e5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c > +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c > @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct amdgpu_device *adev) > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); > else > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); > - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c > index 521978c40537..75d2a9cc9268 100644 > --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c > @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct amdgpu_device *adev) > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); > else > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); > - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > index 91cf95a8c39c..e1ebfb9e2650 100644 > --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c > @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct amdgpu_device *adev) > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name); > else > snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name); > - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); > diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > index ce675a7f179a..5538a5269417 100644 > --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct amdgpu_device *adev) > } > > snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); > - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); > + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); > if (err) > goto out; > err = amdgpu_ucode_validate(adev->pm.fw); ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 8:48 ` Christian König @ 2018-04-17 15:07 ` Andres Rodriguez 2018-04-17 15:33 ` Christian König 0 siblings, 1 reply; 17+ messages in thread From: Andres Rodriguez @ 2018-04-17 15:07 UTC (permalink / raw) To: Christian König, linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel On 2018-04-17 04:48 AM, Christian König wrote: > Well this is a rather big NAK for this patch. > > Only a small fraction of the firmware files amdgpu uses are actually > optional (the ones with the *_2.bin name). All other files are mandatory > for correct driver operation. > > There is a fallback when actually no firmware files at all are found, in > this case we at least try to get a picture on the screen so that the > user gets a hint on what is wrong. But this path isn't tested well and > breaks from time to time. > > So when you get a message like "Direct firmware load for * failed with > error -2" even if it's one of the "*_2.bin" files that is a clear hint > that you should update your firmware package. The amdgpu driver already provides clear messages when a required firmware file is not found. After request_firmware() returns an error, we will print: "{ip_name}: Failed to load firmware {fw_name}" When the firmware is optional, we won't print that message, and handle the firmware load in an appropriate way (re-use _1 firmware for_2 etc.) Note that we care about informing the user *only* if the firmware was not found. If the firmware ends up coming from the fallback loader, but we do receive it, then we don't really care. This is specially important since we don't print a success message on firmware load. So if we hit the fallback loader, the user will see a warning followed by silence, so it could cause confusion on whether the firmware load succeed or not. These are my 2c in the matter. Regards, Andres > > Regards, > Christian. > > Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >> Currently, during the normal boot process the amdgpu driver will produce >> spew like the following in dmesg: >> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with error -2 >> >> This happens when amdgpu tries to load optional firmware files. So the >> error does not affect the startup sequence. >> >> This patch switches the amdgpu to use firmware_request_nowarn(), which >> will not produce the warnings mentioned above. Hopefully resulting in a >> cleaner bootup log. >> >> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >> +++++++++++++++--------------- >> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >> 21 files changed, 51 insertions(+), 51 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >> index 4466f3535e2d..6c950811c0a5 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >> @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct >> cgs_device *cgs_device, >> return -EINVAL; >> } >> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >> adev->dev); >> if (err) { >> DRM_ERROR("Failed to request firmware\n"); >> return err; >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> index af1b879a9ee9..d6225619e69f 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct amdgpu_device >> *adev) >> if (adev->asic_type == CHIP_FIJI) { >> int err; >> uint32_t fw_ver; >> - err = request_firmware(&adev->pm.fw, >> "amdgpu/fiji_smc.bin", adev->dev); >> + err = firmware_request_nowarn(&adev->pm.fw, >> "amdgpu/fiji_smc.bin", adev->dev); >> /* force vPost if error occured */ >> if (err) >> return true; >> @@ -1133,7 +1133,7 @@ static int >> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", >> chip_name); >> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >> fw_name, adev->dev); >> if (err) { >> dev_err(adev->dev, >> "Failed to load gpu_info firmware \"%s\"\n", >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >> index 30b5500dc152..0acd1f3d14c8 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >> struct amdgpu_firmware_info { >> /* ucode ID */ >> enum AMDGPU_UCODE_ID ucode_id; >> - /* request_firmware */ >> + /* firmware_request */ >> const struct firmware *fw; >> /* starting mc address */ >> uint64_t mc_addr; >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >> index b2eae86bf906..4de018d45081 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) >> return -EINVAL; >> } >> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >> if (r) { >> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware \"%s\"\n", >> fw_name); >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> index d274ae535530..b6af824a2f44 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, >> unsigned long size) >> return -EINVAL; >> } >> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >> if (r) { >> dev_err(adev->dev, "amdgpu_vce: Can't load firmware \"%s\"\n", >> fw_name); >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> index 837962118dbc..bd650b87e281 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >> return -EINVAL; >> } >> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >> if (r) { >> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware \"%s\"\n", >> fw_name); >> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >> index a0943aa8d1d3..95e1edc1311d 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); >> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->pm.fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >> index 6e8278e689b1..93c8acca0360 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_sdma.bin", >> chip_name); >> else >> snprintf(fw_name, sizeof(fw_name), >> "radeon/%s_sdma1.bin", chip_name); >> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >> fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >> index 9870d83b68c1..8aebab5edf15 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.pfp_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.me_fw); >> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.me_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.ce_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); >> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >> index a066c5eda135..35a0e46464a5 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> goto out; >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.me_fw); >> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> goto out; >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> goto out; >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", chip_name); >> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> if (adev->asic_type == CHIP_KAVERI) { >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", chip_name); >> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >> index 4e694ae9f308..c16cd96a1557 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >> CHIP_POLARIS12) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp_2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> if (err == -ENOENT) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> } >> } else { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> } >> if (err) >> goto out; >> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >> CHIP_POLARIS12) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >> adev->dev); >> if (err == -ENOENT) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >> adev->dev); >> } >> } else { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >> adev->dev); >> } >> if (err) >> goto out; >> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >> CHIP_POLARIS12) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >> adev->dev); >> if (err == -ENOENT) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >> adev->dev); >> } >> } else { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >> adev->dev); >> } >> if (err) >> goto out; >> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> adev->virt.chained_ib_support = false; >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); >> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >> CHIP_POLARIS12) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> if (err == -ENOENT) { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> } >> } else { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> } >> if (err) >> goto out; >> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >> amdgpu_device *adev) >> (adev->asic_type != CHIP_TOPAZ)) { >> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >> CHIP_POLARIS12) { >> snprintf(fw_name, sizeof(fw_name), >> "amdgpu/%s_mec2_2.bin", chip_name); >> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >> fw_name, adev->dev); >> if (err == -ENOENT) { >> snprintf(fw_name, sizeof(fw_name), >> "amdgpu/%s_mec2.bin", chip_name); >> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >> fw_name, adev->dev); >> } >> } else { >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >> fw_name, adev->dev); >> } >> if (!err) { >> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >> index c06479615e8a..9f70012c81ad 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name); >> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.pfp_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name); >> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.me_fw); >> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.me_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name); >> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.ce_feature_version = >> le32_to_cpu(cp_hdr->ucode_feature_version); >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); >> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name); >> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >> chip_name); >> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >> adev->dev); >> if (!err) { >> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >> if (err) >> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >> index 8e28270d1ea9..4192a5a0c444 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >> else >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >> chip_name); >> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >> if (err) >> goto out; >> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >> index 86e9d682c59e..06deba7f707d 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >> amdgpu_device *adev) >> else >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >> chip_name); >> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->mc.fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >> index 9a813d834f1a..cbce96198dbc 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name); >> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->mc.fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >> index 5a9fe24697f9..718722ef1835 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct psp_context *psp) >> } >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); >> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >> index 19bd1934e63d..dd5261577d9b 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) >> } >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", chip_name); >> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context *psp) >> le32_to_cpu(hdr->sos_offset_bytes); >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name); >> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >> adev->dev); >> if (err) >> goto out; >> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >> index d4787ad4d346..a2afbaacc7e5 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", >> chip_name); >> else >> snprintf(fw_name, sizeof(fw_name), >> "amdgpu/%s_sdma1.bin", chip_name); >> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >> fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >> index 521978c40537..75d2a9cc9268 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", >> chip_name); >> else >> snprintf(fw_name, sizeof(fw_name), >> "amdgpu/%s_sdma1.bin", chip_name); >> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >> fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >> index 91cf95a8c39c..e1ebfb9e2650 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >> amdgpu_device *adev) >> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", >> chip_name); >> else >> snprintf(fw_name, sizeof(fw_name), >> "amdgpu/%s_sdma1.bin", chip_name); >> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >> adev->dev); >> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >> fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >> index ce675a7f179a..5538a5269417 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >> amdgpu_device *adev) >> } >> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name); >> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >> if (err) >> goto out; >> err = amdgpu_ucode_validate(adev->pm.fw); > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 15:07 ` Andres Rodriguez @ 2018-04-17 15:33 ` Christian König 2018-04-17 15:41 ` Andres Rodriguez 0 siblings, 1 reply; 17+ messages in thread From: Christian König @ 2018-04-17 15:33 UTC (permalink / raw) To: Andres Rodriguez, linux-kernel Cc: gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel Am 17.04.2018 um 17:07 schrieb Andres Rodriguez: > > > On 2018-04-17 04:48 AM, Christian König wrote: >> Well this is a rather big NAK for this patch. >> >> Only a small fraction of the firmware files amdgpu uses are actually >> optional (the ones with the *_2.bin name). All other files are >> mandatory for correct driver operation. >> >> There is a fallback when actually no firmware files at all are found, >> in this case we at least try to get a picture on the screen so that >> the user gets a hint on what is wrong. But this path isn't tested >> well and breaks from time to time. >> >> So when you get a message like "Direct firmware load for * failed >> with error -2" even if it's one of the "*_2.bin" files that is a >> clear hint that you should update your firmware package. > > The amdgpu driver already provides clear messages when a required > firmware file is not found. After request_firmware() returns an error, > we will print: > "{ip_name}: Failed to load firmware {fw_name}" > > When the firmware is optional, we won't print that message, and handle > the firmware load in an appropriate way (re-use _1 firmware for_2 etc.) > > Note that we care about informing the user *only* if the firmware was > not found. If the firmware ends up coming from the fallback loader, > but we do receive it, then we don't really care. And that is exactly what I disagree on. Even when we used the fallback there should definitely be an error message that the real firmware wasn't found. We should probably add a message that the fallback is used and remove the error message that the firmware couldn't be loaded. Regards, Christian. > > This is specially important since we don't print a success message on > firmware load. So if we hit the fallback loader, the user will see a > warning followed by silence, so it could cause confusion on whether > the firmware load succeed or not. > > These are my 2c in the matter. > > Regards, > Andres > > >> >> Regards, >> Christian. >> >> Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >>> Currently, during the normal boot process the amdgpu driver will >>> produce >>> spew like the following in dmesg: >>> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with >>> error -2 >>> >>> This happens when amdgpu tries to load optional firmware files. So the >>> error does not affect the startup sequence. >>> >>> This patch switches the amdgpu to use firmware_request_nowarn(), which >>> will not produce the warnings mentioned above. Hopefully resulting in a >>> cleaner bootup log. >>> >>> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >>> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >>> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >>> +++++++++++++++--------------- >>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >>> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >>> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >>> 21 files changed, 51 insertions(+), 51 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>> index 4466f3535e2d..6c950811c0a5 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>> @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct >>> cgs_device *cgs_device, >>> return -EINVAL; >>> } >>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>> adev->dev); >>> if (err) { >>> DRM_ERROR("Failed to request firmware\n"); >>> return err; >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>> index af1b879a9ee9..d6225619e69f 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct >>> amdgpu_device *adev) >>> if (adev->asic_type == CHIP_FIJI) { >>> int err; >>> uint32_t fw_ver; >>> - err = request_firmware(&adev->pm.fw, >>> "amdgpu/fiji_smc.bin", adev->dev); >>> + err = firmware_request_nowarn(&adev->pm.fw, >>> "amdgpu/fiji_smc.bin", adev->dev); >>> /* force vPost if error occured */ >>> if (err) >>> return true; >>> @@ -1133,7 +1133,7 @@ static int >>> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", >>> chip_name); >>> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >>> fw_name, adev->dev); >>> if (err) { >>> dev_err(adev->dev, >>> "Failed to load gpu_info firmware \"%s\"\n", >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>> index 30b5500dc152..0acd1f3d14c8 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >>> struct amdgpu_firmware_info { >>> /* ucode ID */ >>> enum AMDGPU_UCODE_ID ucode_id; >>> - /* request_firmware */ >>> + /* firmware_request */ >>> const struct firmware *fw; >>> /* starting mc address */ >>> uint64_t mc_addr; >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>> index b2eae86bf906..4de018d45081 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) >>> return -EINVAL; >>> } >>> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >>> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >>> if (r) { >>> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware >>> \"%s\"\n", >>> fw_name); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>> index d274ae535530..b6af824a2f44 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device >>> *adev, unsigned long size) >>> return -EINVAL; >>> } >>> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >>> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >>> if (r) { >>> dev_err(adev->dev, "amdgpu_vce: Can't load firmware >>> \"%s\"\n", >>> fw_name); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>> index 837962118dbc..bd650b87e281 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >>> return -EINVAL; >>> } >>> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >>> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >>> if (r) { >>> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware >>> \"%s\"\n", >>> fw_name); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>> index a0943aa8d1d3..95e1edc1311d 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>> chip_name); >>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->pm.fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>> index 6e8278e689b1..93c8acca0360 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), >>> "radeon/%s_sdma.bin", chip_name); >>> else >>> snprintf(fw_name, sizeof(fw_name), >>> "radeon/%s_sdma1.bin", chip_name); >>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>> fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>> index 9870d83b68c1..8aebab5edf15 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.pfp_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.me_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.ce_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>> index a066c5eda135..35a0e46464a5 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> goto out; >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> goto out; >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> goto out; >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> if (adev->asic_type == CHIP_KAVERI) { >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>> index 4e694ae9f308..c16cd96a1557 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>> CHIP_POLARIS12) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp_2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> if (err == -ENOENT) { >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_pfp.bin", chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>> fw_name, adev->dev); >>> } >>> } else { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> } >>> if (err) >>> goto out; >>> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>> CHIP_POLARIS12) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> if (err == -ENOENT) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, >>> fw_name, adev->dev); >>> } >>> } else { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> } >>> if (err) >>> goto out; >>> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>> CHIP_POLARIS12) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> if (err == -ENOENT) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, >>> fw_name, adev->dev); >>> } >>> } else { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> } >>> if (err) >>> goto out; >>> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->virt.chained_ib_support = false; >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>> CHIP_POLARIS12) { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>> adev->dev); >>> if (err == -ENOENT) { >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_mec.bin", chip_name); >>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>> fw_name, adev->dev); >>> } >>> } else { >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>> adev->dev); >>> } >>> if (err) >>> goto out; >>> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> (adev->asic_type != CHIP_TOPAZ)) { >>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type >>> <= CHIP_POLARIS12) { >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_mec2_2.bin", chip_name); >>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>> fw_name, adev->dev); >>> if (err == -ENOENT) { >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_mec2.bin", chip_name); >>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>> fw_name, adev->dev); >>> } >>> } else { >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_mec2.bin", chip_name); >>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>> fw_name, adev->dev); >>> } >>> if (!err) { >>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>> index c06479615e8a..9f70012c81ad 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.pfp_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.me_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.ce_feature_version = >>> le32_to_cpu(cp_hdr->ucode_feature_version); >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >>> chip_name); >>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>> adev->dev); >>> if (!err) { >>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>> if (err) >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>> index 8e28270d1ea9..4192a5a0c444 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >>> else >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>> chip_name); >>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>> if (err) >>> goto out; >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>> index 86e9d682c59e..06deba7f707d 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >>> amdgpu_device *adev) >>> else >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>> chip_name); >>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->mc.fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>> index 9a813d834f1a..cbce96198dbc 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", >>> chip_name); >>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->mc.fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>> index 5a9fe24697f9..718722ef1835 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct psp_context >>> *psp) >>> } >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>> chip_name); >>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>> index 19bd1934e63d..dd5261577d9b 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context >>> *psp) >>> } >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", >>> chip_name); >>> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context >>> *psp) >>> le32_to_cpu(hdr->sos_offset_bytes); >>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>> chip_name); >>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>> adev->dev); >>> if (err) >>> goto out; >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>> index d4787ad4d346..a2afbaacc7e5 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma.bin", chip_name); >>> else >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma1.bin", chip_name); >>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>> fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>> index 521978c40537..75d2a9cc9268 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma.bin", chip_name); >>> else >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma1.bin", chip_name); >>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>> fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>> index 91cf95a8c39c..e1ebfb9e2650 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >>> amdgpu_device *adev) >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma.bin", chip_name); >>> else >>> snprintf(fw_name, sizeof(fw_name), >>> "amdgpu/%s_sdma1.bin", chip_name); >>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>> adev->dev); >>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>> fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>> index ce675a7f179a..5538a5269417 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >>> amdgpu_device *adev) >>> } >>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>> chip_name); >>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>> if (err) >>> goto out; >>> err = amdgpu_ucode_validate(adev->pm.fw); >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 15:33 ` Christian König @ 2018-04-17 15:41 ` Andres Rodriguez 2018-04-17 15:52 ` Christian König 0 siblings, 1 reply; 17+ messages in thread From: Andres Rodriguez @ 2018-04-17 15:41 UTC (permalink / raw) To: Christian König, linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel On 2018-04-17 11:33 AM, Christian König wrote: > Am 17.04.2018 um 17:07 schrieb Andres Rodriguez: >> >> >> On 2018-04-17 04:48 AM, Christian König wrote: >>> Well this is a rather big NAK for this patch. >>> >>> Only a small fraction of the firmware files amdgpu uses are actually >>> optional (the ones with the *_2.bin name). All other files are >>> mandatory for correct driver operation. >>> >>> There is a fallback when actually no firmware files at all are found, >>> in this case we at least try to get a picture on the screen so that >>> the user gets a hint on what is wrong. But this path isn't tested >>> well and breaks from time to time. >>> >>> So when you get a message like "Direct firmware load for * failed >>> with error -2" even if it's one of the "*_2.bin" files that is a >>> clear hint that you should update your firmware package. >> >> The amdgpu driver already provides clear messages when a required >> firmware file is not found. After request_firmware() returns an error, >> we will print: >> "{ip_name}: Failed to load firmware {fw_name}" >> >> When the firmware is optional, we won't print that message, and handle >> the firmware load in an appropriate way (re-use _1 firmware for_2 etc.) >> >> Note that we care about informing the user *only* if the firmware was >> not found. If the firmware ends up coming from the fallback loader, >> but we do receive it, then we don't really care. > > And that is exactly what I disagree on. Even when we used the fallback > there should definitely be an error message that the real firmware > wasn't found The request_firmware() fallback does fetch the real firmware. Why should a user configuration knob produce an error message if the behaviour is valid? Regards, Andres > > We should probably add a message that the fallback is used and remove > the error message that the firmware couldn't be loaded. > > Regards, > Christian. > >> >> This is specially important since we don't print a success message on >> firmware load. So if we hit the fallback loader, the user will see a >> warning followed by silence, so it could cause confusion on whether >> the firmware load succeed or not. >> >> These are my 2c in the matter. >> >> Regards, >> Andres >> >> >>> >>> Regards, >>> Christian. >>> >>> Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >>>> Currently, during the normal boot process the amdgpu driver will >>>> produce >>>> spew like the following in dmesg: >>>> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with >>>> error -2 >>>> >>>> This happens when amdgpu tries to load optional firmware files. So the >>>> error does not affect the startup sequence. >>>> >>>> This patch switches the amdgpu to use firmware_request_nowarn(), which >>>> will not produce the warnings mentioned above. Hopefully resulting in a >>>> cleaner bootup log. >>>> >>>> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >>>> --- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >>>> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >>>> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >>>> +++++++++++++++--------------- >>>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >>>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >>>> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >>>> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >>>> 21 files changed, 51 insertions(+), 51 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>> index 4466f3535e2d..6c950811c0a5 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>> @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct >>>> cgs_device *cgs_device, >>>> return -EINVAL; >>>> } >>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>> adev->dev); >>>> if (err) { >>>> DRM_ERROR("Failed to request firmware\n"); >>>> return err; >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>> index af1b879a9ee9..d6225619e69f 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type == CHIP_FIJI) { >>>> int err; >>>> uint32_t fw_ver; >>>> - err = request_firmware(&adev->pm.fw, >>>> "amdgpu/fiji_smc.bin", adev->dev); >>>> + err = firmware_request_nowarn(&adev->pm.fw, >>>> "amdgpu/fiji_smc.bin", adev->dev); >>>> /* force vPost if error occured */ >>>> if (err) >>>> return true; >>>> @@ -1133,7 +1133,7 @@ static int >>>> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >>>> fw_name, adev->dev); >>>> if (err) { >>>> dev_err(adev->dev, >>>> "Failed to load gpu_info firmware \"%s\"\n", >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>> index 30b5500dc152..0acd1f3d14c8 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >>>> struct amdgpu_firmware_info { >>>> /* ucode ID */ >>>> enum AMDGPU_UCODE_ID ucode_id; >>>> - /* request_firmware */ >>>> + /* firmware_request */ >>>> const struct firmware *fw; >>>> /* starting mc address */ >>>> uint64_t mc_addr; >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>> index b2eae86bf906..4de018d45081 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) >>>> return -EINVAL; >>>> } >>>> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >>>> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >>>> if (r) { >>>> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware >>>> \"%s\"\n", >>>> fw_name); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>> index d274ae535530..b6af824a2f44 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device >>>> *adev, unsigned long size) >>>> return -EINVAL; >>>> } >>>> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >>>> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >>>> if (r) { >>>> dev_err(adev->dev, "amdgpu_vce: Can't load firmware >>>> \"%s\"\n", >>>> fw_name); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>> index 837962118dbc..bd650b87e281 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >>>> return -EINVAL; >>>> } >>>> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >>>> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >>>> if (r) { >>>> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware >>>> \"%s\"\n", >>>> fw_name); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>> index a0943aa8d1d3..95e1edc1311d 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>> index 6e8278e689b1..93c8acca0360 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), >>>> "radeon/%s_sdma.bin", chip_name); >>>> else >>>> snprintf(fw_name, sizeof(fw_name), >>>> "radeon/%s_sdma1.bin", chip_name); >>>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>> fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>> index 9870d83b68c1..8aebab5edf15 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.pfp_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.me_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.ce_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>> index a066c5eda135..35a0e46464a5 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> goto out; >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> goto out; >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> goto out; >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type == CHIP_KAVERI) { >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>> index 4e694ae9f308..c16cd96a1557 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>> CHIP_POLARIS12) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp_2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> if (err == -ENOENT) { >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_pfp.bin", chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>> fw_name, adev->dev); >>>> } >>>> } else { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> } >>>> if (err) >>>> goto out; >>>> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>> CHIP_POLARIS12) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> if (err == -ENOENT) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, >>>> fw_name, adev->dev); >>>> } >>>> } else { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> } >>>> if (err) >>>> goto out; >>>> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>> CHIP_POLARIS12) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> if (err == -ENOENT) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, >>>> fw_name, adev->dev); >>>> } >>>> } else { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> } >>>> if (err) >>>> goto out; >>>> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->virt.chained_ib_support = false; >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>> CHIP_POLARIS12) { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>> adev->dev); >>>> if (err == -ENOENT) { >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_mec.bin", chip_name); >>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>> fw_name, adev->dev); >>>> } >>>> } else { >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>> adev->dev); >>>> } >>>> if (err) >>>> goto out; >>>> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> (adev->asic_type != CHIP_TOPAZ)) { >>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type >>>> <= CHIP_POLARIS12) { >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_mec2_2.bin", chip_name); >>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>> fw_name, adev->dev); >>>> if (err == -ENOENT) { >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_mec2.bin", chip_name); >>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>> fw_name, adev->dev); >>>> } >>>> } else { >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_mec2.bin", chip_name); >>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>> fw_name, adev->dev); >>>> } >>>> if (!err) { >>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>> index c06479615e8a..9f70012c81ad 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.pfp_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.me_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.ce_feature_version = >>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>>> adev->dev); >>>> if (!err) { >>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>> if (err) >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>> index 8e28270d1ea9..4192a5a0c444 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >>>> else >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>> index 86e9d682c59e..06deba7f707d 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> else >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>> index 9a813d834f1a..cbce96198dbc 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>> index 5a9fe24697f9..718722ef1835 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct psp_context >>>> *psp) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>> index 19bd1934e63d..dd5261577d9b 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>> *psp) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>> *psp) >>>> le32_to_cpu(hdr->sos_offset_bytes); >>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>> adev->dev); >>>> if (err) >>>> goto out; >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>> index d4787ad4d346..a2afbaacc7e5 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma.bin", chip_name); >>>> else >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma1.bin", chip_name); >>>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>> fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>> index 521978c40537..75d2a9cc9268 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma.bin", chip_name); >>>> else >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma1.bin", chip_name); >>>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>> fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>> index 91cf95a8c39c..e1ebfb9e2650 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >>>> amdgpu_device *adev) >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma.bin", chip_name); >>>> else >>>> snprintf(fw_name, sizeof(fw_name), >>>> "amdgpu/%s_sdma1.bin", chip_name); >>>> - err = request_firmware(&adev->sdma.instance[i].fw, fw_name, >>>> adev->dev); >>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>> fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>> index ce675a7f179a..5538a5269417 100644 >>>> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >>>> amdgpu_device *adev) >>>> } >>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>> chip_name); >>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>> if (err) >>>> goto out; >>>> err = amdgpu_ucode_validate(adev->pm.fw); >>> > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 15:41 ` Andres Rodriguez @ 2018-04-17 15:52 ` Christian König 2018-04-17 16:41 ` Andres Rodriguez 0 siblings, 1 reply; 17+ messages in thread From: Christian König @ 2018-04-17 15:52 UTC (permalink / raw) To: Andres Rodriguez, linux-kernel Cc: gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel Am 17.04.2018 um 17:41 schrieb Andres Rodriguez: > > > On 2018-04-17 11:33 AM, Christian König wrote: >> Am 17.04.2018 um 17:07 schrieb Andres Rodriguez: >>> >>> >>> On 2018-04-17 04:48 AM, Christian König wrote: >>>> Well this is a rather big NAK for this patch. >>>> >>>> Only a small fraction of the firmware files amdgpu uses are >>>> actually optional (the ones with the *_2.bin name). All other files >>>> are mandatory for correct driver operation. >>>> >>>> There is a fallback when actually no firmware files at all are >>>> found, in this case we at least try to get a picture on the screen >>>> so that the user gets a hint on what is wrong. But this path isn't >>>> tested well and breaks from time to time. >>>> >>>> So when you get a message like "Direct firmware load for * failed >>>> with error -2" even if it's one of the "*_2.bin" files that is a >>>> clear hint that you should update your firmware package. >>> >>> The amdgpu driver already provides clear messages when a required >>> firmware file is not found. After request_firmware() returns an >>> error, we will print: >>> "{ip_name}: Failed to load firmware {fw_name}" >>> >>> When the firmware is optional, we won't print that message, and >>> handle the firmware load in an appropriate way (re-use _1 firmware >>> for_2 etc.) >>> >>> Note that we care about informing the user *only* if the firmware >>> was not found. If the firmware ends up coming from the fallback >>> loader, but we do receive it, then we don't really care. >> >> And that is exactly what I disagree on. Even when we used the >> fallback there should definitely be an error message that the real >> firmware wasn't found > > The request_firmware() fallback does fetch the real firmware. Why > should a user configuration knob produce an error message if the > behaviour is valid? Because the behavior isn't valid. We ran the fallback path which is not optimal and the user should consider installing the missing firmware. There definitely should be a message about that. I agree that it's also a good idea to note that we hit the fallback and not only that the firmware was missing, but that is a different issue. Additional to that it isn't the job of the driver to print messages about missing firmware, so the extra message about that should be removed. Regards, Christian. > > Regards, > Andres > > >> >> We should probably add a message that the fallback is used and remove >> the error message that the firmware couldn't be loaded. >> >> Regards, >> Christian. >> >>> >>> This is specially important since we don't print a success message >>> on firmware load. So if we hit the fallback loader, the user will >>> see a warning followed by silence, so it could cause confusion on >>> whether the firmware load succeed or not. >>> >>> These are my 2c in the matter. >>> >>> Regards, >>> Andres >>> >>> >>>> >>>> Regards, >>>> Christian. >>>> >>>> Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >>>>> Currently, during the normal boot process the amdgpu driver will >>>>> produce >>>>> spew like the following in dmesg: >>>>> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with >>>>> error -2 >>>>> >>>>> This happens when amdgpu tries to load optional firmware files. So >>>>> the >>>>> error does not affect the startup sequence. >>>>> >>>>> This patch switches the amdgpu to use firmware_request_nowarn(), >>>>> which >>>>> will not produce the warnings mentioned above. Hopefully resulting >>>>> in a >>>>> cleaner bootup log. >>>>> >>>>> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >>>>> --- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >>>>> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >>>>> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >>>>> +++++++++++++++--------------- >>>>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >>>>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >>>>> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >>>>> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >>>>> 21 files changed, 51 insertions(+), 51 deletions(-) >>>>> >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>> index 4466f3535e2d..6c950811c0a5 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>> @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct >>>>> cgs_device *cgs_device, >>>>> return -EINVAL; >>>>> } >>>>> - err = request_firmware(&adev->pm.fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>>> adev->dev); >>>>> if (err) { >>>>> DRM_ERROR("Failed to request firmware\n"); >>>>> return err; >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>> index af1b879a9ee9..d6225619e69f 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type == CHIP_FIJI) { >>>>> int err; >>>>> uint32_t fw_ver; >>>>> - err = request_firmware(&adev->pm.fw, >>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>> + err = firmware_request_nowarn(&adev->pm.fw, >>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>> /* force vPost if error occured */ >>>>> if (err) >>>>> return true; >>>>> @@ -1133,7 +1133,7 @@ static int >>>>> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >>>>> fw_name, adev->dev); >>>>> if (err) { >>>>> dev_err(adev->dev, >>>>> "Failed to load gpu_info firmware \"%s\"\n", >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>> index 30b5500dc152..0acd1f3d14c8 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >>>>> struct amdgpu_firmware_info { >>>>> /* ucode ID */ >>>>> enum AMDGPU_UCODE_ID ucode_id; >>>>> - /* request_firmware */ >>>>> + /* firmware_request */ >>>>> const struct firmware *fw; >>>>> /* starting mc address */ >>>>> uint64_t mc_addr; >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>> index b2eae86bf906..4de018d45081 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device >>>>> *adev) >>>>> return -EINVAL; >>>>> } >>>>> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >>>>> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >>>>> if (r) { >>>>> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware >>>>> \"%s\"\n", >>>>> fw_name); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>> index d274ae535530..b6af824a2f44 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device >>>>> *adev, unsigned long size) >>>>> return -EINVAL; >>>>> } >>>>> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >>>>> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >>>>> if (r) { >>>>> dev_err(adev->dev, "amdgpu_vce: Can't load firmware >>>>> \"%s\"\n", >>>>> fw_name); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>> index 837962118dbc..bd650b87e281 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >>>>> return -EINVAL; >>>>> } >>>>> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >>>>> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >>>>> if (r) { >>>>> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware >>>>> \"%s\"\n", >>>>> fw_name); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>> index a0943aa8d1d3..95e1edc1311d 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>> index 6e8278e689b1..93c8acca0360 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "radeon/%s_sdma.bin", chip_name); >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "radeon/%s_sdma1.bin", chip_name); >>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>> index 9870d83b68c1..8aebab5edf15 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.pfp_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.me_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.ce_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>> index a066c5eda135..35a0e46464a5 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> goto out; >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> goto out; >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> goto out; >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type == CHIP_KAVERI) { >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>> fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>> index 4e694ae9f308..c16cd96a1557 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>> CHIP_POLARIS12) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_pfp_2.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> if (err == -ENOENT) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_pfp.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> } else { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> } >>>>> if (err) >>>>> goto out; >>>>> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>> CHIP_POLARIS12) { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> if (err == -ENOENT) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_me.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> } else { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> } >>>>> if (err) >>>>> goto out; >>>>> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>> CHIP_POLARIS12) { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> if (err == -ENOENT) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_ce.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> } else { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> } >>>>> if (err) >>>>> goto out; >>>>> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->virt.chained_ib_support = false; >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>> CHIP_POLARIS12) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_mec_2.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> if (err == -ENOENT) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_mec.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> } else { >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> } >>>>> if (err) >>>>> goto out; >>>>> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> (adev->asic_type != CHIP_TOPAZ)) { >>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type >>>>> <= CHIP_POLARIS12) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_mec2_2.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>> fw_name, adev->dev); >>>>> if (err == -ENOENT) { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.mec2_fw, >>>>> fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> } else { >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>> adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>> fw_name, adev->dev); >>>>> } >>>>> if (!err) { >>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>> index c06479615e8a..9f70012c81ad 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.pfp_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.me_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.ce_feature_version = >>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>>>> adev->dev); >>>>> if (!err) { >>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>> if (err) >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>> index 8e28270d1ea9..4192a5a0c444 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>> index 86e9d682c59e..06deba7f707d 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>> index 9a813d834f1a..cbce96198dbc 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>> index 5a9fe24697f9..718722ef1835 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct >>>>> psp_context *psp) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>> index 19bd1934e63d..dd5261577d9b 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>>> *psp) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>>> *psp) >>>>> le32_to_cpu(hdr->sos_offset_bytes); >>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>> adev->dev); >>>>> if (err) >>>>> goto out; >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>> index d4787ad4d346..a2afbaacc7e5 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>> index 521978c40537..75d2a9cc9268 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>> index 91cf95a8c39c..e1ebfb9e2650 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>> else >>>>> snprintf(fw_name, sizeof(fw_name), >>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>> fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>> index ce675a7f179a..5538a5269417 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >>>>> amdgpu_device *adev) >>>>> } >>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>> chip_name); >>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>>> if (err) >>>>> goto out; >>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>> >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 15:52 ` Christian König @ 2018-04-17 16:41 ` Andres Rodriguez 2018-04-17 16:50 ` Andres Rodriguez 0 siblings, 1 reply; 17+ messages in thread From: Andres Rodriguez @ 2018-04-17 16:41 UTC (permalink / raw) To: Christian König, linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel On 2018-04-17 11:52 AM, Christian König wrote: > Am 17.04.2018 um 17:41 schrieb Andres Rodriguez: >> >> >> On 2018-04-17 11:33 AM, Christian König wrote: >>> Am 17.04.2018 um 17:07 schrieb Andres Rodriguez: >>>> >>>> >>>> On 2018-04-17 04:48 AM, Christian König wrote: >>>>> Well this is a rather big NAK for this patch. >>>>> >>>>> Only a small fraction of the firmware files amdgpu uses are >>>>> actually optional (the ones with the *_2.bin name). All other files >>>>> are mandatory for correct driver operation. >>>>> >>>>> There is a fallback when actually no firmware files at all are >>>>> found, in this case we at least try to get a picture on the screen >>>>> so that the user gets a hint on what is wrong. But this path isn't >>>>> tested well and breaks from time to time. >>>>> >>>>> So when you get a message like "Direct firmware load for * failed >>>>> with error -2" even if it's one of the "*_2.bin" files that is a >>>>> clear hint that you should update your firmware package. >>>> >>>> The amdgpu driver already provides clear messages when a required >>>> firmware file is not found. After request_firmware() returns an >>>> error, we will print: >>>> "{ip_name}: Failed to load firmware {fw_name}" >>>> >>>> When the firmware is optional, we won't print that message, and >>>> handle the firmware load in an appropriate way (re-use _1 firmware >>>> for_2 etc.) >>>> >>>> Note that we care about informing the user *only* if the firmware >>>> was not found. If the firmware ends up coming from the fallback >>>> loader, but we do receive it, then we don't really care. >>> >>> And that is exactly what I disagree on. Even when we used the >>> fallback there should definitely be an error message that the real >>> firmware wasn't found >> >> The request_firmware() fallback does fetch the real firmware. Why >> should a user configuration knob produce an error message if the >> behaviour is valid? > > Because the behavior isn't valid. > > We ran the fallback path which is not optimal and the user should > consider installing the missing firmware. There definitely should be a > message about that. I think I misused the word fallback and that has led to some confusion, sorry about that. There is the fallback path inside request_firmware() (formerly known as the usermode helper), and there is the fallback path in amdgpu. The first, if request_firmware() can't find built-in firmware it can query the usermodehelper for the file and retrieve it. This will result in the real firmware file being retrieved and optimal behaviour from the amdgpu side. In this case request_firmware() returns success. The second, if request_firmware() completely fails, we will try some strategies like loading the firmware of the primary engine into the secondary engine. Or disabling the engine, etc. This leads to less than optimal behaviour in some cases, and we should warn the user appropriately. We do produce errors where appropriate in this scenario inside amdgpu. Maybe I'm going a bit overzealous here trying two kill two birds with one stone. There are two cases that I wanted to improve on the amdgpu side: First case, Usermodehelper: disabled - Firmware: not found, but optional ------------------------------------------------------------------------ This was my main motivation for writing these changes. In this scenario we would get the "Direct firmware load failed with error..." message. And then the driver would self correct and load correctly. For some combinations of ASICs + fw files this is expected behaviour, e.g. mec_2.bin on polaris10. And having that error message in the kernel log would lead users to think there is something wrong with their firmware install, when in reality everything is ok. Second case, Usermodehelper: enabled - Firmware: found ------------------------------------------------------ This is where I might be overextending myself, but I think we do have an opportunity for a big improvement. In this scenario we will produce the output: "Direct firmware load for * failed with error -2" "Falling back to user helper" I don't think those messages are particularly useful in the amdgpu case. If the user configured their system to use the usermodehelper, why should we be producing two*n_firmware_files lines of spew for regular operation? That is a lot of message flooding, and I don't see the purpose. If the intent of the message is to help the user know that they need to install/update their linux-firmware package, then we have the error message: "{ip_name}: Failed to load firmware {fw_name}" And that should point the user in the proper direction to fix their issue. Regards, Andres > > I agree that it's also a good idea to note that we hit the fallback and > not only that the firmware was missing, but that is a different issue. > > Additional to that it isn't the job of the driver to print messages > about missing firmware, so the extra message about that should be removed. > > Regards, > Christian. > >> >> Regards, >> Andres >> >> >>> >>> We should probably add a message that the fallback is used and remove >>> the error message that the firmware couldn't be loaded. >>> >>> Regards, >>> Christian. >>> >>>> >>>> This is specially important since we don't print a success message >>>> on firmware load. So if we hit the fallback loader, the user will >>>> see a warning followed by silence, so it could cause confusion on >>>> whether the firmware load succeed or not. >>>> >>>> These are my 2c in the matter. >>>> >>>> Regards, >>>> Andres >>>> >>>> >>>>> >>>>> Regards, >>>>> Christian. >>>>> >>>>> Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >>>>>> Currently, during the normal boot process the amdgpu driver will >>>>>> produce >>>>>> spew like the following in dmesg: >>>>>> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with >>>>>> error -2 >>>>>> >>>>>> This happens when amdgpu tries to load optional firmware files. So >>>>>> the >>>>>> error does not affect the startup sequence. >>>>>> >>>>>> This patch switches the amdgpu to use firmware_request_nowarn(), >>>>>> which >>>>>> will not produce the warnings mentioned above. Hopefully resulting >>>>>> in a >>>>>> cleaner bootup log. >>>>>> >>>>>> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >>>>>> --- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >>>>>> +++++++++++++++--------------- >>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >>>>>> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >>>>>> 21 files changed, 51 insertions(+), 51 deletions(-) >>>>>> >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>> index 4466f3535e2d..6c950811c0a5 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>> @@ -811,7 +811,7 @@ static int amdgpu_cgs_get_firmware_info(struct >>>>>> cgs_device *cgs_device, >>>>>> return -EINVAL; >>>>>> } >>>>>> - err = request_firmware(&adev->pm.fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) { >>>>>> DRM_ERROR("Failed to request firmware\n"); >>>>>> return err; >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>> index af1b879a9ee9..d6225619e69f 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type == CHIP_FIJI) { >>>>>> int err; >>>>>> uint32_t fw_ver; >>>>>> - err = request_firmware(&adev->pm.fw, >>>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->pm.fw, >>>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>>> /* force vPost if error occured */ >>>>>> if (err) >>>>>> return true; >>>>>> @@ -1133,7 +1133,7 @@ static int >>>>>> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) { >>>>>> dev_err(adev->dev, >>>>>> "Failed to load gpu_info firmware \"%s\"\n", >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>> index 30b5500dc152..0acd1f3d14c8 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >>>>>> struct amdgpu_firmware_info { >>>>>> /* ucode ID */ >>>>>> enum AMDGPU_UCODE_ID ucode_id; >>>>>> - /* request_firmware */ >>>>>> + /* firmware_request */ >>>>>> const struct firmware *fw; >>>>>> /* starting mc address */ >>>>>> uint64_t mc_addr; >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>> index b2eae86bf906..4de018d45081 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device >>>>>> *adev) >>>>>> return -EINVAL; >>>>>> } >>>>>> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >>>>>> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >>>>>> if (r) { >>>>>> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware >>>>>> \"%s\"\n", >>>>>> fw_name); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>> index d274ae535530..b6af824a2f44 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device >>>>>> *adev, unsigned long size) >>>>>> return -EINVAL; >>>>>> } >>>>>> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >>>>>> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >>>>>> if (r) { >>>>>> dev_err(adev->dev, "amdgpu_vce: Can't load firmware >>>>>> \"%s\"\n", >>>>>> fw_name); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>> index 837962118dbc..bd650b87e281 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >>>>>> return -EINVAL; >>>>>> } >>>>>> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >>>>>> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >>>>>> if (r) { >>>>>> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware >>>>>> \"%s\"\n", >>>>>> fw_name); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>> index a0943aa8d1d3..95e1edc1311d 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>> index 6e8278e689b1..93c8acca0360 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "radeon/%s_sdma.bin", chip_name); >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "radeon/%s_sdma1.bin", chip_name); >>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>> index 9870d83b68c1..8aebab5edf15 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.pfp_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.me_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.ce_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>> index a066c5eda135..35a0e46464a5 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> goto out; >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> goto out; >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> goto out; >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>>> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type == CHIP_KAVERI) { >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec2.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>> index 4e694ae9f308..c16cd96a1557 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>> CHIP_POLARIS12) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_pfp_2.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err == -ENOENT) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_pfp.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> } else { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> } >>>>>> if (err) >>>>>> goto out; >>>>>> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>> CHIP_POLARIS12) { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me_2.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err == -ENOENT) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_me.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> } else { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> } >>>>>> if (err) >>>>>> goto out; >>>>>> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>> CHIP_POLARIS12) { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce_2.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err == -ENOENT) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_ce.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> } else { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> } >>>>>> if (err) >>>>>> goto out; >>>>>> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->virt.chained_ib_support = false; >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>> CHIP_POLARIS12) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_mec_2.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err == -ENOENT) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_mec.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> } else { >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> } >>>>>> if (err) >>>>>> goto out; >>>>>> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> (adev->asic_type != CHIP_TOPAZ)) { >>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type >>>>>> <= CHIP_POLARIS12) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_mec2_2.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>> fw_name, adev->dev); >>>>>> if (err == -ENOENT) { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec2_fw, >>>>>> fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> } else { >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>> adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>> fw_name, adev->dev); >>>>>> } >>>>>> if (!err) { >>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>> index c06479615e8a..9f70012c81ad 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.pfp_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.me_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.ce_feature_version = >>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>>> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>>>>> adev->dev); >>>>>> if (!err) { >>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>> if (err) >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>> index 8e28270d1ea9..4192a5a0c444 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>> index 86e9d682c59e..06deba7f707d 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>> index 9a813d834f1a..cbce96198dbc 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>> index 5a9fe24697f9..718722ef1835 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct >>>>>> psp_context *psp) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>> index 19bd1934e63d..dd5261577d9b 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>>>> *psp) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct psp_context >>>>>> *psp) >>>>>> le32_to_cpu(hdr->sos_offset_bytes); >>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>>> adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>> index d4787ad4d346..a2afbaacc7e5 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>> index 521978c40537..75d2a9cc9268 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>> index 91cf95a8c39c..e1ebfb9e2650 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>> else >>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->sdma.instance[i].fw, >>>>>> fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>> index ce675a7f179a..5538a5269417 100644 >>>>>> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >>>>>> amdgpu_device *adev) >>>>>> } >>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>>> chip_name); >>>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, adev->dev); >>>>>> if (err) >>>>>> goto out; >>>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>>> >>> > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware 2018-04-17 16:41 ` Andres Rodriguez @ 2018-04-17 16:50 ` Andres Rodriguez 0 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-17 16:50 UTC (permalink / raw) To: Christian König, linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, kvalo, arend.vanspriel On 2018-04-17 12:41 PM, Andres Rodriguez wrote: > > > On 2018-04-17 11:52 AM, Christian König wrote: >> Am 17.04.2018 um 17:41 schrieb Andres Rodriguez: >>> >>> >>> On 2018-04-17 11:33 AM, Christian König wrote: >>>> Am 17.04.2018 um 17:07 schrieb Andres Rodriguez: >>>>> >>>>> >>>>> On 2018-04-17 04:48 AM, Christian König wrote: >>>>>> Well this is a rather big NAK for this patch. >>>>>> >>>>>> Only a small fraction of the firmware files amdgpu uses are >>>>>> actually optional (the ones with the *_2.bin name). All other >>>>>> files are mandatory for correct driver operation. >>>>>> >>>>>> There is a fallback when actually no firmware files at all are >>>>>> found, in this case we at least try to get a picture on the screen >>>>>> so that the user gets a hint on what is wrong. But this path isn't >>>>>> tested well and breaks from time to time. >>>>>> >>>>>> So when you get a message like "Direct firmware load for * failed >>>>>> with error -2" even if it's one of the "*_2.bin" files that is a >>>>>> clear hint that you should update your firmware package. >>>>> >>>>> The amdgpu driver already provides clear messages when a required >>>>> firmware file is not found. After request_firmware() returns an >>>>> error, we will print: >>>>> "{ip_name}: Failed to load firmware {fw_name}" >>>>> >>>>> When the firmware is optional, we won't print that message, and >>>>> handle the firmware load in an appropriate way (re-use _1 firmware >>>>> for_2 etc.) >>>>> >>>>> Note that we care about informing the user *only* if the firmware >>>>> was not found. If the firmware ends up coming from the fallback >>>>> loader, but we do receive it, then we don't really care. >>>> >>>> And that is exactly what I disagree on. Even when we used the >>>> fallback there should definitely be an error message that the real >>>> firmware wasn't found >>> >>> The request_firmware() fallback does fetch the real firmware. Why >>> should a user configuration knob produce an error message if the >>> behaviour is valid? >> >> Because the behavior isn't valid. >> >> We ran the fallback path which is not optimal and the user should >> consider installing the missing firmware. There definitely should be a >> message about that. > > I think I misused the word fallback and that has led to some confusion, > sorry about that. There is the fallback path inside request_firmware() > (formerly known as the usermode helper), and there is the fallback path > in amdgpu. > > The first, if request_firmware() can't find built-in firmware it can > query the usermodehelper for the file and retrieve it. This will result > in the real firmware file being retrieved and optimal behaviour from the > amdgpu side. In this case request_firmware() returns success. > > The second, if request_firmware() completely fails, we will try some > strategies like loading the firmware of the primary engine into the > secondary engine. Or disabling the engine, etc. This leads to less than > optimal behaviour in some cases, and we should warn the user > appropriately. We do produce errors where appropriate in this scenario > inside amdgpu. > > Maybe I'm going a bit overzealous here trying two kill two birds with > one stone. There are two cases that I wanted to improve on the amdgpu side: > > First case, Usermodehelper: disabled - Firmware: not found, but optional > ------------------------------------------------------------------------ > > This was my main motivation for writing these changes. In this scenario > we would get the "Direct firmware load failed with error..." message. > And then the driver would self correct and load correctly. > > For some combinations of ASICs + fw files this is expected behaviour, > e.g. mec_2.bin on polaris10. And having that error message in the kernel > log would lead users to think there is something wrong with their > firmware install, when in reality everything is ok. > > Second case, Usermodehelper: enabled - Firmware: found > ------------------------------------------------------ > > This is where I might be overextending myself, but I think we do have an > opportunity for a big improvement. > > In this scenario we will produce the output: > "Direct firmware load for * failed with error -2" > "Falling back to user helper" > > I don't think those messages are particularly useful in the amdgpu case. > If the user configured their system to use the usermodehelper, why > should we be producing two*n_firmware_files lines of spew for regular > operation? That is a lot of message flooding, and I don't see the purpose. > > If the intent of the message is to help the user know that they need to > install/update their linux-firmware package, then we have the error > message: > "{ip_name}: Failed to load firmware {fw_name}" > > And that should point the user in the proper direction to fix their issue. > I should also point out, I'm not a user of the usermodehelper and I don't really like it much as a configuration option. I think most distros have phased it out (or are in the process of). So, while I would prefer if we take the approach of switching everything to _nowarn(), I wouldn't be opposed to switching just the optional firmware files. Regards, Andres > Regards, > Andres > > >> >> I agree that it's also a good idea to note that we hit the fallback >> and not only that the firmware was missing, but that is a different >> issue. >> >> Additional to that it isn't the job of the driver to print messages >> about missing firmware, so the extra message about that should be >> removed. >> > >> Regards, >> Christian. >> >>> >>> Regards, >>> Andres >>> >>> >>>> >>>> We should probably add a message that the fallback is used and >>>> remove the error message that the firmware couldn't be loaded. >>>> >>>> Regards, >>>> Christian. >>>> >>>>> >>>>> This is specially important since we don't print a success message >>>>> on firmware load. So if we hit the fallback loader, the user will >>>>> see a warning followed by silence, so it could cause confusion on >>>>> whether the firmware load succeed or not. >>>>> >>>>> These are my 2c in the matter. >>>>> >>>>> Regards, >>>>> Andres >>>>> >>>>> >>>>>> >>>>>> Regards, >>>>>> Christian. >>>>>> >>>>>> Am 17.04.2018 um 00:24 schrieb Andres Rodriguez: >>>>>>> Currently, during the normal boot process the amdgpu driver will >>>>>>> produce >>>>>>> spew like the following in dmesg: >>>>>>> Direct firmware load for amdgpu/polaris10_mec_2.bin failed with >>>>>>> error -2 >>>>>>> >>>>>>> This happens when amdgpu tries to load optional firmware files. >>>>>>> So the >>>>>>> error does not affect the startup sequence. >>>>>>> >>>>>>> This patch switches the amdgpu to use firmware_request_nowarn(), >>>>>>> which >>>>>>> will not produce the warnings mentioned above. Hopefully >>>>>>> resulting in a >>>>>>> cleaner bootup log. >>>>>>> >>>>>>> Signed-off-by: Andres Rodriguez <andresx7@gmail.com> >>>>>>> --- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 8 ++++---- >>>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++------ >>>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 32 >>>>>>> +++++++++++++++--------------- >>>>>>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 +++++------ >>>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 4 ++-- >>>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/si_dpm.c | 2 +- >>>>>>> 21 files changed, 51 insertions(+), 51 deletions(-) >>>>>>> >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>>> index 4466f3535e2d..6c950811c0a5 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c >>>>>>> @@ -811,7 +811,7 @@ static int >>>>>>> amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device, >>>>>>> return -EINVAL; >>>>>>> } >>>>>>> - err = request_firmware(&adev->pm.fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) { >>>>>>> DRM_ERROR("Failed to request firmware\n"); >>>>>>> return err; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>>> index af1b879a9ee9..d6225619e69f 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >>>>>>> @@ -696,7 +696,7 @@ bool amdgpu_device_need_post(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type == CHIP_FIJI) { >>>>>>> int err; >>>>>>> uint32_t fw_ver; >>>>>>> - err = request_firmware(&adev->pm.fw, >>>>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->pm.fw, >>>>>>> "amdgpu/fiji_smc.bin", adev->dev); >>>>>>> /* force vPost if error occured */ >>>>>>> if (err) >>>>>>> return true; >>>>>>> @@ -1133,7 +1133,7 @@ static int >>>>>>> amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_gpu_info.bin", chip_name); >>>>>>> - err = request_firmware(&adev->firmware.gpu_info_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->firmware.gpu_info_fw, >>>>>>> fw_name, adev->dev); >>>>>>> if (err) { >>>>>>> dev_err(adev->dev, >>>>>>> "Failed to load gpu_info firmware \"%s\"\n", >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>>> index 30b5500dc152..0acd1f3d14c8 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h >>>>>>> @@ -196,7 +196,7 @@ enum AMDGPU_UCODE_STATUS { >>>>>>> struct amdgpu_firmware_info { >>>>>>> /* ucode ID */ >>>>>>> enum AMDGPU_UCODE_ID ucode_id; >>>>>>> - /* request_firmware */ >>>>>>> + /* firmware_request */ >>>>>>> const struct firmware *fw; >>>>>>> /* starting mc address */ >>>>>>> uint64_t mc_addr; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> index b2eae86bf906..4de018d45081 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> @@ -171,7 +171,7 @@ int amdgpu_uvd_sw_init(struct amdgpu_device >>>>>>> *adev) >>>>>>> return -EINVAL; >>>>>>> } >>>>>>> - r = request_firmware(&adev->uvd.fw, fw_name, adev->dev); >>>>>>> + r = firmware_request_nowarn(&adev->uvd.fw, fw_name, adev->dev); >>>>>>> if (r) { >>>>>>> dev_err(adev->dev, "amdgpu_uvd: Can't load firmware >>>>>>> \"%s\"\n", >>>>>>> fw_name); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>>> index d274ae535530..b6af824a2f44 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c >>>>>>> @@ -138,7 +138,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device >>>>>>> *adev, unsigned long size) >>>>>>> return -EINVAL; >>>>>>> } >>>>>>> - r = request_firmware(&adev->vce.fw, fw_name, adev->dev); >>>>>>> + r = firmware_request_nowarn(&adev->vce.fw, fw_name, adev->dev); >>>>>>> if (r) { >>>>>>> dev_err(adev->dev, "amdgpu_vce: Can't load firmware >>>>>>> \"%s\"\n", >>>>>>> fw_name); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>>> index 837962118dbc..bd650b87e281 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c >>>>>>> @@ -67,7 +67,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) >>>>>>> return -EINVAL; >>>>>>> } >>>>>>> - r = request_firmware(&adev->vcn.fw, fw_name, adev->dev); >>>>>>> + r = firmware_request_nowarn(&adev->vcn.fw, fw_name, adev->dev); >>>>>>> if (r) { >>>>>>> dev_err(adev->dev, "amdgpu_vcn: Can't load firmware >>>>>>> \"%s\"\n", >>>>>>> fw_name); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>>> index a0943aa8d1d3..95e1edc1311d 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c >>>>>>> @@ -5849,7 +5849,7 @@ static int ci_dpm_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>>> index 6e8278e689b1..93c8acca0360 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c >>>>>>> @@ -135,7 +135,7 @@ static int cik_sdma_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "radeon/%s_sdma.bin", chip_name); >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "radeon/%s_sdma1.bin", chip_name); >>>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>>> fw_name, adev->dev); >>>>>>> + err = >>>>>>> firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>>> index 9870d83b68c1..8aebab5edf15 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c >>>>>>> @@ -335,7 +335,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>>> @@ -346,7 +346,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.pfp_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>>> @@ -357,7 +357,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.me_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>>> @@ -368,7 +368,7 @@ static int gfx_v6_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.ce_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>>> index a066c5eda135..35a0e46464a5 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c >>>>>>> @@ -926,7 +926,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>>> @@ -934,7 +934,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> goto out; >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>>> @@ -942,7 +942,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> goto out; >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_ce.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>>> @@ -950,7 +950,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> goto out; >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mec.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>>>> @@ -959,7 +959,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type == CHIP_KAVERI) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "radeon/%s_mec2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>>> fw_name, adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>>> @@ -968,7 +968,7 @@ static int gfx_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>>> index 4e694ae9f308..c16cd96a1557 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c >>>>>>> @@ -936,14 +936,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>>> CHIP_POLARIS12) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_pfp_2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>>>>> fw_name, adev->dev); >>>>>>> if (err == -ENOENT) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_pfp.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> } else { >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> if (err) >>>>>>> goto out; >>>>>>> @@ -956,14 +956,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>>> CHIP_POLARIS12) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_me_2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err == -ENOENT) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_me.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> } else { >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> } >>>>>>> if (err) >>>>>>> goto out; >>>>>>> @@ -977,14 +977,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>>> CHIP_POLARIS12) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_ce_2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err == -ENOENT) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_ce.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> } else { >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> } >>>>>>> if (err) >>>>>>> goto out; >>>>>>> @@ -1007,7 +1007,7 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->virt.chained_ib_support = false; >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>>> @@ -1057,14 +1057,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= >>>>>>> CHIP_POLARIS12) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_mec_2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>>>>> fw_name, adev->dev); >>>>>>> if (err == -ENOENT) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_mec.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> } else { >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> if (err) >>>>>>> goto out; >>>>>>> @@ -1079,14 +1079,14 @@ static int gfx_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> (adev->asic_type != CHIP_TOPAZ)) { >>>>>>> if (adev->asic_type >= CHIP_POLARIS10 && >>>>>>> adev->asic_type <= CHIP_POLARIS12) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_mec2_2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>>> fw_name, adev->dev); >>>>>>> if (err == -ENOENT) { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec2_fw, >>>>>>> fw_name, adev->dev); >>>>>>> + err = >>>>>>> firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, adev->dev); >>>>>>> } >>>>>>> } else { >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_mec2.bin", chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, >>>>>>> adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, >>>>>>> fw_name, adev->dev); >>>>>>> } >>>>>>> if (!err) { >>>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>>> index c06479615e8a..9f70012c81ad 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c >>>>>>> @@ -370,7 +370,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.pfp_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.pfp_fw); >>>>>>> @@ -381,7 +381,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.pfp_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.me_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.me_fw); >>>>>>> @@ -392,7 +392,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.me_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.ce_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.ce_fw); >>>>>>> @@ -403,7 +403,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.ce_feature_version = >>>>>>> le32_to_cpu(cp_hdr->ucode_feature_version); >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.rlc_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.rlc_fw); >>>>>>> @@ -449,7 +449,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]); >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->gfx.mec_fw); >>>>>>> @@ -461,7 +461,7 @@ static int gfx_v9_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->gfx.mec2_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (!err) { >>>>>>> err = amdgpu_ucode_validate(adev->gfx.mec2_fw); >>>>>>> if (err) >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>>> index 8e28270d1ea9..4192a5a0c444 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c >>>>>>> @@ -136,7 +136,7 @@ static int gmc_v6_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/si58_mc.bin"); >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>>> index 86e9d682c59e..06deba7f707d 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c >>>>>>> @@ -151,7 +151,7 @@ static int gmc_v7_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>>> index 9a813d834f1a..cbce96198dbc 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c >>>>>>> @@ -235,7 +235,7 @@ static int gmc_v8_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->mc.fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->mc.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->mc.fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>>> index 5a9fe24697f9..718722ef1835 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c >>>>>>> @@ -105,7 +105,7 @@ int psp_v10_0_init_microcode(struct >>>>>>> psp_context *psp) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>>> index 19bd1934e63d..dd5261577d9b 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c >>>>>>> @@ -111,7 +111,7 @@ int psp_v3_1_init_microcode(struct >>>>>>> psp_context *psp) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->psp.sos_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->psp.sos_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> @@ -131,7 +131,7 @@ int psp_v3_1_init_microcode(struct >>>>>>> psp_context *psp) >>>>>>> le32_to_cpu(hdr->sos_offset_bytes); >>>>>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->psp.asd_fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->psp.asd_fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>>> index d4787ad4d346..a2afbaacc7e5 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c >>>>>>> @@ -146,7 +146,7 @@ static int sdma_v2_4_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>>> fw_name, adev->dev); >>>>>>> + err = >>>>>>> firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>>> index 521978c40537..75d2a9cc9268 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c >>>>>>> @@ -298,7 +298,7 @@ static int sdma_v3_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>>> fw_name, adev->dev); >>>>>>> + err = >>>>>>> firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>>> index 91cf95a8c39c..e1ebfb9e2650 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c >>>>>>> @@ -176,7 +176,7 @@ static int sdma_v4_0_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma.bin", chip_name); >>>>>>> else >>>>>>> snprintf(fw_name, sizeof(fw_name), >>>>>>> "amdgpu/%s_sdma1.bin", chip_name); >>>>>>> - err = request_firmware(&adev->sdma.instance[i].fw, >>>>>>> fw_name, adev->dev); >>>>>>> + err = >>>>>>> firmware_request_nowarn(&adev->sdma.instance[i].fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>>> b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>>> index ce675a7f179a..5538a5269417 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c >>>>>>> @@ -7687,7 +7687,7 @@ static int si_dpm_init_microcode(struct >>>>>>> amdgpu_device *adev) >>>>>>> } >>>>>>> snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", >>>>>>> chip_name); >>>>>>> - err = request_firmware(&adev->pm.fw, fw_name, adev->dev); >>>>>>> + err = firmware_request_nowarn(&adev->pm.fw, fw_name, >>>>>>> adev->dev); >>>>>>> if (err) >>>>>>> goto out; >>>>>>> err = amdgpu_ucode_validate(adev->pm.fw); >>>>>> >>>> >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 7/8] ath10k: use request_firmware_nowarn to load firmware 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez ` (5 preceding siblings ...) 2018-04-16 22:24 ` [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 8/8] brcmfmac: use request_firmware_nowait2 to load firmware without warnings Andres Rodriguez 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel This reduces the unnecessary spew when trying to load optional firmware: "Direct firmware load for ... failed with error -2" Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/net/wireless/ath/ath10k/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index f3ec13b80b20..9a225b7ad2d7 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -652,7 +652,7 @@ static const struct firmware *ath10k_fetch_fw_file(struct ath10k *ar, dir = "."; snprintf(filename, sizeof(filename), "%s/%s", dir, file); - ret = request_firmware(&fw, filename, ar->dev); + ret = request_firmware_nowarn(&fw, filename, ar->dev); ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot fw request '%s': %d\n", filename, ret); -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 8/8] brcmfmac: use request_firmware_nowait2 to load firmware without warnings 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez ` (6 preceding siblings ...) 2018-04-16 22:24 ` [PATCH 7/8] ath10k: use request_firmware_nowarn " Andres Rodriguez @ 2018-04-16 22:24 ` Andres Rodriguez 7 siblings, 0 replies; 17+ messages in thread From: Andres Rodriguez @ 2018-04-16 22:24 UTC (permalink / raw) To: linux-kernel Cc: andresx7, gregkh, mcgrof, alexdeucher, ckoenig.leichtzumerken, kvalo, arend.vanspriel This reduces the unnecessary spew when trying to load optional firmware: "Direct firmware load for ... failed with error -2" Signed-off-by: Andres Rodriguez <andresx7@gmail.com> --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c index 091b52979e03..26db3ebd52dc 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c @@ -503,8 +503,9 @@ static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx) goto done; fwctx->code = fw; - ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name, - fwctx->dev, GFP_KERNEL, fwctx, + ret = request_firmware_nowait(THIS_MODULE, true, false, + fwctx->nvram_name, fwctx->dev, + GFP_KERNEL, fwctx, brcmf_fw_request_nvram_done); /* pass NULL to nvram callback for bcm47xx fallback */ @@ -547,7 +548,7 @@ int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags, fwctx->domain_nr = domain_nr; fwctx->bus_nr = bus_nr; - return request_firmware_nowait(THIS_MODULE, true, code, dev, + return request_firmware_nowait2(THIS_MODULE, true, false, code, dev, GFP_KERNEL, fwctx, brcmf_fw_request_code_done); } -- 2.14.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
end of thread, other threads:[~2018-04-17 16:50 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-04-16 22:24 [PATCH 0/8] Loading optional firmware v2 Andres Rodriguez 2018-04-16 22:24 ` [PATCH 1/8] firmware: some documentation fixes Andres Rodriguez 2018-04-16 22:24 ` [PATCH 2/8] firmware: wrap FW_OPT_* into an enum Andres Rodriguez 2018-04-16 22:24 ` [PATCH 3/8] firmware: add kernel-doc for enum fw_opt Andres Rodriguez 2018-04-16 22:24 ` [PATCH 4/8] firmware: add functions to load firmware without warnings v3 Andres Rodriguez 2018-04-16 22:52 ` Randy Dunlap 2018-04-16 22:24 ` [PATCH 5/8] firmware: print firmware name on fallback path Andres Rodriguez 2018-04-16 22:24 ` [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware Andres Rodriguez 2018-04-17 8:48 ` Christian König 2018-04-17 15:07 ` Andres Rodriguez 2018-04-17 15:33 ` Christian König 2018-04-17 15:41 ` Andres Rodriguez 2018-04-17 15:52 ` Christian König 2018-04-17 16:41 ` Andres Rodriguez 2018-04-17 16:50 ` Andres Rodriguez 2018-04-16 22:24 ` [PATCH 7/8] ath10k: use request_firmware_nowarn " Andres Rodriguez 2018-04-16 22:24 ` [PATCH 8/8] brcmfmac: use request_firmware_nowait2 to load firmware without warnings Andres Rodriguez
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).