Received: by 10.192.165.156 with SMTP id m28csp269399imm; Tue, 17 Apr 2018 09:51:38 -0700 (PDT) X-Google-Smtp-Source: AIpwx485+YpOBufcDcCYMWMqUP64FWh7ZAFjwSi2mRzPxGXz19N3FDCpwGoI0uudyJuaMWJU8ESk X-Received: by 2002:a17:902:b081:: with SMTP id p1-v6mr2794301plr.31.1523983898272; Tue, 17 Apr 2018 09:51:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523983898; cv=none; d=google.com; s=arc-20160816; b=uiYRhuFLG/9Li3zdda9UHH+ACs1Tyy4Q/qaS/rkJOEBYDvKIuRpcjkk00E7DLbMTSm PiABMfNOmObY6xUoYxrZNQAvAJ3DFEpFYjCTwWe7MndK68BfQoSFh+m29A9dgCoJMCEy +mhk7RFbdmAV0ifGL6xEU3ZI3x4sSzOwE/K14axm/5PMdLEHfBt6yQ01NhCOYsSxlf7e 0/ZbrmBI8T/NnK11i1fiUiqOWMsep8+Aczm/Nr4P3Hz1mxVhoXtEOiC/JkPC6NFcy+Px SzXnSmw5KHRFIrSfoci9Kl8rlgkVVwuamdAYg7qI2RH2+BFmpuoFBufiafGDVouk9Vx5 X0uA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:cc:dkim-signature :arc-authentication-results; bh=Ol8FMurtIgIw0vX/aqUL0yExvkIEntnWkN0FtDT4AV4=; b=nRa60ng+icyPO3y5R16A+4rrIFbQgXKIDAD7u1fTIJWr6/QGYmBt1LM7qlFryGze/E pi2QsbBhDUor8tRMmBF5gaCRhCnrlEaDY/sgzRiWTq/TpraAB4h/lbSb4kMdeSB7TxWK oG/wY0EDkQadn3cVddZsEDJ4JzPwWzQHZW9445C12Ujdlq/mDmlu8UECTC9WgaHgMFAu nYcILgOD1xr/XmsvVs1l2IfpcwurhwTsi/clUl0/7meVedtdvB1O9qRD721Rph5CXXcK KJ8jzP6+wR4sQ55h4fovbB9NjTBKXyFOkFceJtNHjIZ0iQVJXuOFqoY3Gf3em7F+O0Sg yBHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=rjvcUOGd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d22-v6si14901940plr.581.2018.04.17.09.51.23; Tue, 17 Apr 2018 09:51:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=rjvcUOGd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754707AbeDQQuH (ORCPT + 99 others); Tue, 17 Apr 2018 12:50:07 -0400 Received: from mail-it0-f45.google.com ([209.85.214.45]:36718 "EHLO mail-it0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754226AbeDQQuC (ORCPT ); Tue, 17 Apr 2018 12:50:02 -0400 Received: by mail-it0-f45.google.com with SMTP id n81-v6so10363158ita.1 for ; Tue, 17 Apr 2018 09:50:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=cc:subject:to:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Ol8FMurtIgIw0vX/aqUL0yExvkIEntnWkN0FtDT4AV4=; b=rjvcUOGdoIO/DnM11+iekF9VXYeu8xzuQiuKusq5WAVhEQvyUIPMQ5Aw0HL4buAtkN beYp4t9e3RN9edEyycbeL1kK60VpI+RJoxA1rSCHppWA3IEo9Zu2YLqvQH05kaztPW3h bE6+w/4lSTKgybzbvCJc7AwAEkVfx1Mc2qXhhCUR5VG2er10834CzOh07Vn945ir/rWR 7/IjfS6NfSoOtQZvwbTMMsC+HTxqnNFNOJ1aLwhjfLVbSaab9SC4VwvICa67mZDKEt69 RPC3qqqrudEyfyElJpEYPLCZ5w0rQkXbcq3TcJOs6pJ2U1JqiFPHC7vv/87mJTOc486Q pSjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:cc:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Ol8FMurtIgIw0vX/aqUL0yExvkIEntnWkN0FtDT4AV4=; b=GzmGehXY1b+jdZ5h+GhsMNNtdq5xc1v8GjUYISz9DmIb757zLa6KbfQRkMs2ZqXB1E iuiV7tdBn/KIfEgK6f1MfUpVnRGiSxbsvo2SXBotvgkwXVhRi452mmoHhYPoQqxQ8BLu bceatTWu6kErHu6Tk7/OX2g0Agd/RVpV+Imkj18GjxcjG9ulnxmMFlFiYlR/d/i7B4/7 Sr6UMSynFCbS/ZSxcahFOWVSVQP1lzrNnG9fngPVtLNEuJv1zb0Xfd05SzV9hmPmCFsw sv5UQTP13J7Cel0BtJsd/DAZyuOyAfTiHqO+/sng4Vdrv2n2q/Xz4aNViEyv56ZgBI1Y fbaQ== X-Gm-Message-State: ALQs6tD5z/rCo2LQc3thZPUaxQNVMMk3MGx2mrgs2nihRtA2fG/jDJpS R3viXXr+GFlOMe/qPERzHd0= X-Received: by 2002:a24:f04b:: with SMTP id p11-v6mr1928465iti.48.1523983801747; Tue, 17 Apr 2018 09:50:01 -0700 (PDT) Received: from [192.168.0.26] (184-175-36-239.dsl.teksavvy.com. [184.175.36.239]) by smtp.gmail.com with ESMTPSA id 72-v6sm6012503itg.36.2018.04.17.09.50.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Apr 2018 09:50:01 -0700 (PDT) Cc: andresx7@gmail.com, gregkh@linuxfoundation.org, mcgrof@kernel.org, alexdeucher@gmail.com, kvalo@codeaurora.org, arend.vanspriel@broadcom.com Subject: Re: [PATCH 6/8] drm/amdgpu: use firmware_request_nowarn to load firmware To: =?UTF-8?Q?Christian_K=c3=b6nig?= , linux-kernel@vger.kernel.org References: <20180416222427.29683-1-andresx7@gmail.com> <20180416222427.29683-7-andresx7@gmail.com> <2c27b97a-5cb7-92c3-d4d8-a9d274a2f1cf@amd.com> <459ec1e2-bb64-c5c5-75c0-47f443b35cc6@amd.com> <01911e9a-36f6-5fee-41d0-2eb5fc187ec1@gmail.com> From: Andres Rodriguez Message-ID: <26e2a9e3-3f98-695b-a6f4-c0cd707c3ef4@gmail.com> Date: Tue, 17 Apr 2018 12:50:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 >>>>>>> --- >>>>>>>   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); >>>>>> >>>> >>