Regards,
Andres
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 14 +---
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 16 +----
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 74 ++++++++++++++++---
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 16 +----
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 16 +----
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 16 +----
drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 15 +---
drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 5 +-
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 ++---
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 30 ++------
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 112
+++++++++++++----------------
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 39 +++-------
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 17 +----
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 14 +---
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 14 +---
drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 18 +----
drivers/gpu/drm/amd/amdgpu/psp_v3_1.c | 15 +---
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 6 +-
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 6 +-
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 7 +-
drivers/gpu/drm/amd/amdgpu/si_dpm.c | 16 +----
22 files changed, 164 insertions(+), 325 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
index a8a942c60ea2..347ab1710523 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
@@ -402,19 +402,9 @@ static int amdgpu_cgs_get_firmware_info(struct
cgs_device *cgs_device,
return -EINVAL;
}
- err = request_firmware(&adev->pm.fw, fw_name, adev->dev);
- if (err) {
- DRM_ERROR("Failed to request firmware\n");
+ err = amdgpu_ucode_request_firmware(adev, &adev->pm.fw,
fw_name, false);
+ if (err)
return err;
- }
-
- err = amdgpu_ucode_validate(adev->pm.fw);
- if (err) {
- DRM_ERROR("Failed to load firmware \"%s\"", fw_name);
- release_firmware(adev->pm.fw);
- adev->pm.fw = NULL;
- return err;
- }
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
ucode = &adev->firmware.ucode[AMDGPU_UCODE_ID_SMC];
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index abc33464959e..967e14f14abc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1355,20 +1355,10 @@ 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);
- if (err) {
- dev_err(adev->dev,
- "Failed to load gpu_info firmware \"%s\"\n",
- fw_name);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->firmware.gpu_info_fw,
+ fw_name, false);
+ if (err)
goto out;
- }
- err = amdgpu_ucode_validate(adev->firmware.gpu_info_fw);
- if (err) {
- dev_err(adev->dev,
- "Failed to validate gpu_info firmware \"%s\"\n",
- fw_name);
- goto out;
- }
hdr = (const struct gpu_info_firmware_header_v1_0
*)adev->firmware.gpu_info_fw->data;
amdgpu_ucode_print_gpu_info_hdr(&hdr->header);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index dd6f98921918..b9cb8a488d3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -28,6 +28,70 @@
#include "amdgpu.h"
#include "amdgpu_ucode.h"
+static int amdgpu_ucode_validate(const struct firmware *fw)
+{
+ const struct common_firmware_header *hdr =
+ (const struct common_firmware_header *)fw->data;
+
+ if (fw->size == le32_to_cpu(hdr->size_bytes))
+ return 0;
+
+ return -EINVAL;
+}
+
+/**
+ * amdgpu_ucode_request_firmware() - request a firmware binary file
+ *
+ * @adev: amdgpu_device pointer
+ * @fw: will be populated with the firmware on success, NULL on failure
+ * @name: name of the firmware file to load
+ * @optional: signal we are loading a non-essential fw file.
+ *
+ * When loading optional firmware, if the file is not found it will not
+ * be treated as an error. However, if the file is found, but we
encounter
+ * validation or other errors, this function will return failure.
+ *
+ * Returns 0 on success, errno on failure
+ */
+int amdgpu_ucode_request_firmware(struct amdgpu_device *adev,
+ const struct firmware **fw,
+ const char *name, bool optional)
+{
+ int err;
+ const struct firmware *loaded_fw = NULL;
+
+ if (!fw)
+ return -EINVAL;
+
+ err = request_firmware(&loaded_fw, name, adev->dev);
+ if (err)
+ goto error;
+
+ err = amdgpu_ucode_validate(loaded_fw);
+ if (err)
+ goto error;
+
+ *fw = loaded_fw;
+ return err;
+
+error:
+ if (loaded_fw)
+ release_firmware(loaded_fw);
+
+ if (!optional)
+ dev_err(adev->dev, "failed to load firmware %s\n", name);
+
+ // Nothing useful was loaded
+ *fw = NULL;
+
+ // If we can't find optional FW, don't return an error
+ if (optional && !loaded_fw)
+ err = 0;
+
+ return err;
+}
+
+
static void amdgpu_ucode_print_common_hdr(const struct
common_firmware_header *hdr)
{
DRM_DEBUG("size_bytes: %u\n", le32_to_cpu(hdr->size_bytes));
@@ -218,16 +282,6 @@ void amdgpu_ucode_print_gpu_info_hdr(const
struct common_firmware_header *hdr)
}
}
-int amdgpu_ucode_validate(const struct firmware *fw)
-{
- const struct common_firmware_header *hdr =
- (const struct common_firmware_header *)fw->data;
-
- if (fw->size == le32_to_cpu(hdr->size_bytes))
- return 0;
-
- return -EINVAL;
-}
bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
uint16_t hdr_major, uint16_t hdr_minor)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
index 30b5500dc152..0893bcf686e8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
@@ -206,13 +206,15 @@ struct amdgpu_firmware_info {
uint32_t ucode_size;
};
+int amdgpu_ucode_request_firmware(struct amdgpu_device *adev,
+ const struct firmware **fw,
+ const char *name, bool optional);
void amdgpu_ucode_print_mc_hdr(const struct common_firmware_header
*hdr);
void amdgpu_ucode_print_smc_hdr(const struct common_firmware_header
*hdr);
void amdgpu_ucode_print_gfx_hdr(const struct common_firmware_header
*hdr);
void amdgpu_ucode_print_rlc_hdr(const struct common_firmware_header
*hdr);
void amdgpu_ucode_print_sdma_hdr(const struct
common_firmware_header *hdr);
void amdgpu_ucode_print_gpu_info_hdr(const struct
common_firmware_header *hdr);
-int amdgpu_ucode_validate(const struct firmware *fw);
bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
uint16_t hdr_major, uint16_t hdr_minor);
int amdgpu_ucode_init_bo(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 627542b22ae4..fb3c7595ad09 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -176,21 +176,9 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
return -EINVAL;
}
- r = request_firmware(&adev->uvd.fw, fw_name, adev->dev);
- if (r) {
- dev_err(adev->dev, "amdgpu_uvd: Can't load firmware \"%s\"\n",
- fw_name);
- return r;
- }
-
- r = amdgpu_ucode_validate(adev->uvd.fw);
- if (r) {
- dev_err(adev->dev, "amdgpu_uvd: Can't validate firmware
\"%s\"\n",
- fw_name);
- release_firmware(adev->uvd.fw);
- adev->uvd.fw = NULL;
+ r = amdgpu_ucode_request_firmware(adev, &adev->uvd.fw, fw_name,
false);
+ if (r)
return r;
- }
/* Set the default UVD handles that the firmware can handle */
adev->uvd.max_handles = AMDGPU_DEFAULT_UVD_HANDLES;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index a33804bd3314..4f41f3fd2786 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -143,21 +143,9 @@ int amdgpu_vce_sw_init(struct amdgpu_device
*adev, unsigned long size)
return -EINVAL;
}
- r = request_firmware(&adev->vce.fw, fw_name, adev->dev);
- if (r) {
- dev_err(adev->dev, "amdgpu_vce: Can't load firmware \"%s\"\n",
- fw_name);
- return r;
- }
-
- r = amdgpu_ucode_validate(adev->vce.fw);
- if (r) {
- dev_err(adev->dev, "amdgpu_vce: Can't validate firmware
\"%s\"\n",
- fw_name);
- release_firmware(adev->vce.fw);
- adev->vce.fw = NULL;
+ r = amdgpu_ucode_request_firmware(adev, &adev->vce.fw, fw_name,
false);
+ if (r)
return r;
- }
hdr = (const struct common_firmware_header *)adev->vce.fw->data;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 58e495330b38..07f399a64cb2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -67,21 +67,9 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
return -EINVAL;
}
- r = request_firmware(&adev->vcn.fw, fw_name, adev->dev);
- if (r) {
- dev_err(adev->dev, "amdgpu_vcn: Can't load firmware \"%s\"\n",
- fw_name);
- return r;
- }
-
- r = amdgpu_ucode_validate(adev->vcn.fw);
- if (r) {
- dev_err(adev->dev, "amdgpu_vcn: Can't validate firmware
\"%s\"\n",
- fw_name);
- release_firmware(adev->vcn.fw);
- adev->vcn.fw = NULL;
+ r = amdgpu_ucode_request_firmware(adev, &adev->vcn.fw, fw_name,
false);
+ if (r)
return r;
- }
hdr = (const struct common_firmware_header *)adev->vcn.fw->data;
family_id = le32_to_cpu(hdr->ucode_version) & 0xff;
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
index be6b19951e6a..3411803188aa 100644
--- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
@@ -5789,7 +5789,6 @@ static int ci_dpm_init_microcode(struct
amdgpu_device *adev)
{
const char *chip_name;
char fw_name[30];
- int err;
DRM_DEBUG("\n");
@@ -5815,18 +5814,8 @@ 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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->pm.fw);
-
-out:
- if (err) {
- pr_err("cik_smc: Failed to load firmware \"%s\"\n", fw_name);
- release_firmware(adev->pm.fw);
- adev->pm.fw = NULL;
- }
- return err;
+ return amdgpu_ucode_request_firmware(adev, &adev->pm.fw, fw_name,
+ false);
}
static int ci_dpm_init(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index a7576255cc30..774d9aecab02 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -135,14 +135,13 @@ 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 = amdgpu_ucode_request_firmware(adev,
&adev->sdma.instance[i].fw,
+ fw_name, false);
if (err)
goto out;
- err = amdgpu_ucode_validate(adev->sdma.instance[i].fw);
}
out:
if (err) {
- pr_err("cik_sdma: Failed to load firmware \"%s\"\n", fw_name);
for (i = 0; i < adev->sdma.num_instances; i++) {
release_firmware(adev->sdma.instance[i].fw);
adev->sdma.instance[i].fw = NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index cd6bf291a853..e5bcbec41a1e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -336,10 +336,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.pfp_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.pfp_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.pfp_fw->data;
@@ -347,10 +344,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.me_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.me_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.me_fw->data;
@@ -358,10 +352,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.ce_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.ce_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.ce_fw->data;
@@ -369,17 +360,15 @@ 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 = amdgpu_ucode_request_firmware(adev, &adev->gfx.rlc_fw,
fw_name, false);
if (err)
goto out;
- err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
rlc_hdr = (const struct rlc_firmware_header_v1_0
*)adev->gfx.rlc_fw->data;
adev->gfx.rlc_fw_version =
le32_to_cpu(rlc_hdr->header.ucode_version);
adev->gfx.rlc_feature_version =
le32_to_cpu(rlc_hdr->ucode_feature_version);
out:
if (err) {
- pr_err("gfx6: Failed to load firmware \"%s\"\n", fw_name);
release_firmware(adev->gfx.pfp_fw);
adev->gfx.pfp_fw = NULL;
release_firmware(adev->gfx.me_fw);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 42b6144c1fd5..9aed1be1c9b4 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -926,56 +926,40 @@ 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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.pfp_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.pfp_fw,
fw_name, false);
if (err)
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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.me_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.me_fw,
fw_name, false);
if (err)
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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.ce_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.ce_fw,
fw_name, false);
if (err)
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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.mec_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.mec_fw,
fw_name, false);
if (err)
goto out;
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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.mec2_fw);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->gfx.mec2_fw, fw_name,
+ false);
if (err)
goto out;
}
snprintf(fw_name, sizeof(fw_name), "radeon/%s_rlc.bin",
chip_name);
- err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.rlc_fw,
fw_name, false);
if (err)
goto out;
- err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
out:
if (err) {
- pr_err("gfx7: Failed to load firmware \"%s\"\n", fw_name);
release_firmware(adev->gfx.pfp_fw);
adev->gfx.pfp_fw = NULL;
release_firmware(adev->gfx.me_fw);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index b0e591eaa71a..b10ce4786b8f 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -934,63 +934,57 @@ static int gfx_v8_0_init_microcode(struct
amdgpu_device *adev)
BUG();
}
+ adev->gfx.pfp_fw = NULL;
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);
- 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);
- }
- } else {
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.pfp_fw,
fw_name, true);
+ if (err)
+ goto out;
+ }
+
+ if (!adev->gfx.pfp_fw) {
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin",
chip_name);
- err = request_firmware(&adev->gfx.pfp_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.pfp_fw,
fw_name, false);
+ if (err)
+ goto out;
}
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.pfp_fw);
- if (err)
- goto out;
+
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.pfp_fw->data;
adev->gfx.pfp_fw_version =
le32_to_cpu(cp_hdr->header.ucode_version);
adev->gfx.pfp_feature_version =
le32_to_cpu(cp_hdr->ucode_feature_version);
+ adev->gfx.me_fw = NULL;
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);
- 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);
- }
- } else {
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.me_fw,
fw_name, true);
+ if (err)
+ goto out;
+ }
+
+ if (!adev->gfx.me_fw) {
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin",
chip_name);
- err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.me_fw,
fw_name, false);
+ if (err)
+ goto out;
}
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.me_fw);
- if (err)
- goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.me_fw->data;
adev->gfx.me_fw_version =
le32_to_cpu(cp_hdr->header.ucode_version);
adev->gfx.me_feature_version =
le32_to_cpu(cp_hdr->ucode_feature_version);
+ adev->gfx.ce_fw = NULL;
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);
- 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);
- }
- } else {
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.ce_fw,
fw_name, true);
+ if (err)
+ goto out;
+ }
+ if (!adev->gfx.ce_fw) {
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin",
chip_name);
- err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.ce_fw,
fw_name, false);
+ if (err)
+ goto out;
}
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.ce_fw);
- if (err)
- goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.ce_fw->data;
adev->gfx.ce_fw_version =
le32_to_cpu(cp_hdr->header.ucode_version);
adev->gfx.ce_feature_version =
le32_to_cpu(cp_hdr->ucode_feature_version);
@@ -1007,10 +1001,9 @@ 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 = amdgpu_ucode_request_firmware(adev, &adev->gfx.rlc_fw,
fw_name, false);
if (err)
goto out;
- err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
rlc_hdr = (const struct rlc_firmware_header_v2_0
*)adev->gfx.rlc_fw->data;
adev->gfx.rlc_fw_version =
le32_to_cpu(rlc_hdr->header.ucode_version);
adev->gfx.rlc_feature_version =
le32_to_cpu(rlc_hdr->ucode_feature_version);
@@ -1055,43 +1048,39 @@ static int gfx_v8_0_init_microcode(struct
amdgpu_device *adev)
for (i = 0 ; i < (rlc_hdr->reg_list_size_bytes >> 2); i++)
adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]);
+ adev->gfx.mec_fw = NULL;
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);
- 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);
- }
- } else {
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.mec_fw,
fw_name, true);
+ if (err)
+ goto out;
+ }
+ if (!adev->gfx.mec_fw) {
snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin",
chip_name);
- err = request_firmware(&adev->gfx.mec_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.mec_fw,
fw_name, false);
+ if (err)
+ goto out;
}
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.mec_fw);
- if (err)
- goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.mec_fw->data;
adev->gfx.mec_fw_version =
le32_to_cpu(cp_hdr->header.ucode_version);
adev->gfx.mec_feature_version =
le32_to_cpu(cp_hdr->ucode_feature_version);
if ((adev->asic_type != CHIP_STONEY) &&
(adev->asic_type != CHIP_TOPAZ)) {
+ adev->gfx.mec2_fw = NULL;
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);
- 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);
- }
- } 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 = amdgpu_ucode_request_firmware(adev,
&adev->gfx.mec2_fw, fw_name, true);
+ if (err)
+ goto out;
}
- if (!err) {
- err = amdgpu_ucode_validate(adev->gfx.mec2_fw);
+ if (!adev->gfx.mec2_fw) {
+ snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin",
chip_name);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->gfx.mec2_fw, fw_name, true);
if (err)
goto out;
+ }
+ if (!err) {
cp_hdr = (const struct gfx_firmware_header_v1_0 *)
adev->gfx.mec2_fw->data;
adev->gfx.mec2_fw_version =
@@ -1166,9 +1155,6 @@ static int gfx_v8_0_init_microcode(struct
amdgpu_device *adev)
out:
if (err) {
- dev_err(adev->dev,
- "gfx8: Failed to load firmware \"%s\"\n",
- fw_name);
release_firmware(adev->gfx.pfp_fw);
adev->gfx.pfp_fw = NULL;
release_firmware(adev->gfx.me_fw);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index 9d39fd5b1822..da2a829d7725 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -430,10 +430,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.pfp_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.pfp_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.pfp_fw->data;
@@ -441,10 +438,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.me_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.me_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.me_fw->data;
@@ -452,10 +446,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.ce_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.ce_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.ce_fw->data;
@@ -463,10 +454,9 @@ 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 = amdgpu_ucode_request_firmware(adev, &adev->gfx.rlc_fw,
fw_name, false);
if (err)
goto out;
- err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
rlc_hdr = (const struct rlc_firmware_header_v2_0
*)adev->gfx.rlc_fw->data;
adev->gfx.rlc_fw_version =
le32_to_cpu(rlc_hdr->header.ucode_version);
adev->gfx.rlc_feature_version =
le32_to_cpu(rlc_hdr->ucode_feature_version);
@@ -509,10 +499,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gfx.mec_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.mec_fw,
fw_name, false);
if (err)
goto out;
cp_hdr = (const struct gfx_firmware_header_v1_0
*)adev->gfx.mec_fw->data;
@@ -521,20 +508,17 @@ 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);
- if (!err) {
- err = amdgpu_ucode_validate(adev->gfx.mec2_fw);
- if (err)
- goto out;
+ err = amdgpu_ucode_request_firmware(adev, &adev->gfx.mec2_fw,
fw_name, true);
+ if (err)
+ goto out;
+
+ if (adev->gfx.mec2_fw) {
cp_hdr = (const struct gfx_firmware_header_v1_0 *)
adev->gfx.mec2_fw->data;
adev->gfx.mec2_fw_version =
le32_to_cpu(cp_hdr->header.ucode_version);
adev->gfx.mec2_feature_version =
le32_to_cpu(cp_hdr->ucode_feature_version);
- } else {
- err = 0;
- adev->gfx.mec2_fw = NULL;
}
if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) {
@@ -599,9 +583,6 @@ static int gfx_v9_0_init_microcode(struct
amdgpu_device *adev)
out:
if (err) {
- dev_err(adev->dev,
- "gfx9: Failed to load firmware \"%s\"\n",
- fw_name);
release_firmware(adev->gfx.pfp_fw);
adev->gfx.pfp_fw = NULL;
release_firmware(adev->gfx.me_fw);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 5617cf62c566..b49ad21f5465 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -105,7 +105,6 @@ static int gmc_v6_0_init_microcode(struct
amdgpu_device *adev)
{
const char *chip_name;
char fw_name[30];
- int err;
bool is_58_fw = false;
DRM_DEBUG("\n");
@@ -137,21 +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->gmc.fw, fw_name, adev->dev);
- if (err)
- goto out;
-
- err = amdgpu_ucode_validate(adev->gmc.fw);
-
-out:
- if (err) {
- dev_err(adev->dev,
- "si_mc: Failed to load firmware \"%s\"\n",
- fw_name);
- release_firmware(adev->gmc.fw);
- adev->gmc.fw = NULL;
- }
- return err;
+ return amdgpu_ucode_request_firmware(adev, &adev->gmc.fw,
fw_name, false);
}
static int gmc_v6_0_mc_load_microcode(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 80054f36e487..7b010fedb6ec 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -126,7 +126,6 @@ static int gmc_v7_0_init_microcode(struct
amdgpu_device *adev)
{
const char *chip_name;
char fw_name[30];
- int err;
DRM_DEBUG("\n");
@@ -152,18 +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->gmc.fw, fw_name, adev->dev);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gmc.fw);
-
-out:
- if (err) {
- pr_err("cik_mc: Failed to load firmware \"%s\"\n", fw_name);
- release_firmware(adev->gmc.fw);
- adev->gmc.fw = NULL;
- }
- return err;
+ return amdgpu_ucode_request_firmware(adev, &adev->gmc.fw,
fw_name, false);
}
/**
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index d71d4cb68f9c..3693873ae647 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -211,7 +211,6 @@ static int gmc_v8_0_init_microcode(struct
amdgpu_device *adev)
{
const char *chip_name;
char fw_name[30];
- int err;
DRM_DEBUG("\n");
@@ -236,18 +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->gmc.fw, fw_name, adev->dev);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->gmc.fw);
-
-out:
- if (err) {
- pr_err("mc: Failed to load firmware \"%s\"\n", fw_name);
- release_firmware(adev->gmc.fw);
- adev->gmc.fw = NULL;
- }
- return err;
+ return amdgpu_ucode_request_firmware(adev, &adev->gmc.fw,
fw_name, false);
}
/**
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
index 8873d833a7f7..9ad3bf6ebc54 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
@@ -105,13 +105,9 @@ static 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 = amdgpu_ucode_request_firmware(adev, &adev->psp.asd_fw,
fw_name, false);
if (err)
- goto out;
-
- err = amdgpu_ucode_validate(adev->psp.asd_fw);
- if (err)
- goto out;
+ return err;
hdr = (const struct psp_firmware_header_v1_0
*)adev->psp.asd_fw->data;
adev->psp.asd_fw_version = le32_to_cpu(hdr->header.ucode_version);
@@ -121,16 +117,6 @@ static int psp_v10_0_init_microcode(struct
psp_context *psp)
le32_to_cpu(hdr->header.ucode_array_offset_bytes);
return 0;
-out:
- if (err) {
- dev_err(adev->dev,
- "psp v10.0: Failed to load firmware \"%s\"\n",
- fw_name);
- release_firmware(adev->psp.asd_fw);
- adev->psp.asd_fw = NULL;
- }
-
- return err;
}
static int psp_v10_0_prep_cmd_buf(struct amdgpu_firmware_info
*ucode,
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
index 196e75def1f2..b91f7af1198b 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
@@ -116,11 +116,7 @@ static 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);
- if (err)
- goto out;
-
- err = amdgpu_ucode_validate(adev->psp.sos_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->psp.sos_fw,
fw_name, false);
if (err)
goto out;
@@ -136,11 +132,7 @@ static 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);
- if (err)
- goto out;
-
- err = amdgpu_ucode_validate(adev->psp.asd_fw);
+ err = amdgpu_ucode_request_firmware(adev, &adev->psp.asd_fw,
fw_name, false);
if (err)
goto out;
@@ -154,9 +146,6 @@ static int psp_v3_1_init_microcode(struct
psp_context *psp)
return 0;
out:
if (err) {
- dev_err(adev->dev,
- "psp v3.1: Failed to load firmware \"%s\"\n",
- fw_name);
release_firmware(adev->psp.sos_fw);
adev->psp.sos_fw = NULL;
release_firmware(adev->psp.asd_fw);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index c7190c39c4f5..71e2d822e245 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -146,10 +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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->sdma.instance[i].fw);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->sdma.instance[i].fw, fw_name, false);
if (err)
goto out;
hdr = (const struct sdma_firmware_header_v1_0
*)adev->sdma.instance[i].fw->data;
@@ -170,7 +167,6 @@ static int sdma_v2_4_init_microcode(struct
amdgpu_device *adev)
out:
if (err) {
- pr_err("sdma_v2_4: Failed to load firmware \"%s\"\n", fw_name);
for (i = 0; i < adev->sdma.num_instances; i++) {
release_firmware(adev->sdma.instance[i].fw);
adev->sdma.instance[i].fw = NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index be20a387d961..de315baef30d 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -298,10 +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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->sdma.instance[i].fw);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->sdma.instance[i].fw, fw_name, false);
if (err)
goto out;
hdr = (const struct sdma_firmware_header_v1_0
*)adev->sdma.instance[i].fw->data;
@@ -321,7 +318,6 @@ static int sdma_v3_0_init_microcode(struct
amdgpu_device *adev)
}
out:
if (err) {
- pr_err("sdma_v3_0: Failed to load firmware \"%s\"\n", fw_name);
for (i = 0; i < adev->sdma.num_instances; i++) {
release_firmware(adev->sdma.instance[i].fw);
adev->sdma.instance[i].fw = NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index 2c618a1be03e..0776bf41078f 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -194,10 +194,8 @@ 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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->sdma.instance[i].fw);
+ err = amdgpu_ucode_request_firmware(adev,
&adev->sdma.instance[i].fw,
+ fw_name, false);
if (err)
goto out;
hdr = (const struct sdma_firmware_header_v1_0
*)adev->sdma.instance[i].fw->data;
@@ -219,7 +217,6 @@ static int sdma_v4_0_init_microcode(struct
amdgpu_device *adev)
}
out:
if (err) {
- DRM_ERROR("sdma_v4_0: Failed to load firmware \"%s\"\n",
fw_name);
for (i = 0; i < adev->sdma.num_instances; i++) {
release_firmware(adev->sdma.instance[i].fw);
adev->sdma.instance[i].fw = NULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
index b12d7c9d42a0..bee2b0a5df5d 100644
--- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
@@ -7605,7 +7605,6 @@ static int si_dpm_init_microcode(struct
amdgpu_device *adev)
{
const char *chip_name;
char fw_name[30];
- int err;
DRM_DEBUG("\n");
switch (adev->asic_type) {
@@ -7665,20 +7664,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);
- if (err)
- goto out;
- err = amdgpu_ucode_validate(adev->pm.fw);
-
-out:
- if (err) {
- DRM_ERROR("si_smc: Failed to load firmware. err = %d\"%s\"\n",
- err, fw_name);
- release_firmware(adev->pm.fw);
- adev->pm.fw = NULL;
- }
- return err;
-
+ return amdgpu_ucode_request_firmware(adev, &adev->pm.fw,
fw_name, false);
}
static int si_dpm_sw_init(void *handle)