* [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
@ 2024-05-31 6:52 Yang Wang
2024-06-03 11:05 ` Christian König
0 siblings, 1 reply; 25+ messages in thread
From: Yang Wang @ 2024-05-31 6:52 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
Adding formatting string feature to improve function flexibility.
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++++++++++++++------
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 ++-
2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index a9de78bb96e2..a452d9b6afdb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -28,6 +28,8 @@
#include "amdgpu.h"
#include "amdgpu_ucode.h"
+#define AMDGPU_MAX_FW_NAME_LEN (128)
+
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));
@@ -1432,28 +1434,40 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
*
* @adev: amdgpu device
* @fw: pointer to load firmware to
- * @fw_name: firmware to load
+ * @fmt: firmware name format string
+ * @...: variable arguments
*
* This is a helper that will use request_firmware and amdgpu_ucode_validate
* to load and run basic validation on firmware. If the load fails, remap
* the error code to -ENODEV, so that early_init functions will fail to load.
*/
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
- const char *fw_name)
+ const char *fmt, ...)
{
- int err = request_firmware(fw, fw_name, adev->dev);
+ char fname[AMDGPU_MAX_FW_NAME_LEN];
+ va_list ap;
+ int r;
+
+ va_start(ap, fmt);
+ r = vsnprintf(fname, sizeof(fname), fmt, ap);
+ va_end(ap);
+ if (r == sizeof(fname)) {
+ dev_warn(adev->dev, "amdgpu firmware name buffer overflow\n");
+ return -EOVERFLOW;
+ }
- if (err)
+ r = request_firmware(fw, fname, adev->dev);
+ if (r)
return -ENODEV;
- err = amdgpu_ucode_validate(*fw);
- if (err) {
- dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
+ r = amdgpu_ucode_validate(*fw);
+ if (r) {
+ dev_dbg(adev->dev, "\"%s\" failed to validate\n", fname);
release_firmware(*fw);
*fw = NULL;
}
- return err;
+ return r;
}
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
index db745ab7b0c8..5bc37acd3981 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
@@ -594,8 +594,9 @@ 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_psp_hdr(const struct common_firmware_header *hdr);
void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
+__printf(3, 4)
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
- const char *fw_name);
+ const char *fmt, ...);
void amdgpu_ucode_release(const struct firmware **fw);
bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
uint16_t hdr_major, uint16_t hdr_minor);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
@ 2024-06-03 1:41 Yang Wang
2024-06-03 1:41 ` [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
` (18 more replies)
0 siblings, 19 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
Adding variable parameter support to function amdgpu_firmware_request()
to improve function flexibility.
Yang Wang (18):
drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
drm/amdgpu: refine gpu_info firmware loading
drm/amdgpu: refine isp firmware loading
drm/amdgpu: refine mes firmware loading
drm/amdgpu: refine psp firmware loading
drm/amdgpu: refine sdma firmware loading
drm/amdgpu: refine imu firmware loading
drm/amdgpu: refine pmfw/smu firmware loading
drm/amdgpu: refine gmc firmware loading
drm/amdgpu: refine vcn firmware loading
drm/amdgpu: refine vpe firmware loading
drm/amdgpu: refine gfx6 firmware loading
drm/amdgpu: refine gfx7 firmware loading
drm/amdgpu: refine gfx8 firmware loading
drm/amdgpu: refine gfx9 firmware loading
drm/amdgpu: refine gfx10 firmware loading
drm/amdgpu: refine gfx11 firmware loading
drm/amdgpu: refine gfx12 firmware loading
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 ++-
drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 6 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 26 ++-----
drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 +--
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++---
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 +-
drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 11 +--
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 25 ++++---
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 26 ++++---
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 22 +++---
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 +++--
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 27 ++++----
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 69 +++++++++----------
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 45 ++++++------
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 11 ++-
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 14 ++--
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +-
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +-
drivers/gpu/drm/amd/amdgpu/imu_v11_0.c | 10 ++-
drivers/gpu/drm/amd/amdgpu/imu_v12_0.c | 10 ++-
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 11 +--
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 +--
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 8 +--
.../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 6 +-
.../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 6 +-
.../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 6 +-
.../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 6 +-
30 files changed, 205 insertions(+), 257 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
@ 2024-06-03 1:41 ` Yang Wang
2024-06-06 7:40 ` Christian König
2024-06-03 1:41 ` [PATCH 02/18] drm/amdgpu: refine gpu_info firmware loading Yang Wang
` (17 subsequent siblings)
18 siblings, 1 reply; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
Adding formatting string feature to improve function flexibility.
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++++++++++++++------
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 ++-
2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index a9de78bb96e2..a452d9b6afdb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -28,6 +28,8 @@
#include "amdgpu.h"
#include "amdgpu_ucode.h"
+#define AMDGPU_MAX_FW_NAME_LEN (128)
+
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));
@@ -1432,28 +1434,40 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
*
* @adev: amdgpu device
* @fw: pointer to load firmware to
- * @fw_name: firmware to load
+ * @fmt: firmware name format string
+ * @...: variable arguments
*
* This is a helper that will use request_firmware and amdgpu_ucode_validate
* to load and run basic validation on firmware. If the load fails, remap
* the error code to -ENODEV, so that early_init functions will fail to load.
*/
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
- const char *fw_name)
+ const char *fmt, ...)
{
- int err = request_firmware(fw, fw_name, adev->dev);
+ char fname[AMDGPU_MAX_FW_NAME_LEN];
+ va_list ap;
+ int r;
+
+ va_start(ap, fmt);
+ r = vsnprintf(fname, sizeof(fname), fmt, ap);
+ va_end(ap);
+ if (r == sizeof(fname)) {
+ dev_warn(adev->dev, "amdgpu firmware name buffer overflow\n");
+ return -EOVERFLOW;
+ }
- if (err)
+ r = request_firmware(fw, fname, adev->dev);
+ if (r)
return -ENODEV;
- err = amdgpu_ucode_validate(*fw);
- if (err) {
- dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
+ r = amdgpu_ucode_validate(*fw);
+ if (r) {
+ dev_dbg(adev->dev, "\"%s\" failed to validate\n", fname);
release_firmware(*fw);
*fw = NULL;
}
- return err;
+ return r;
}
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
index db745ab7b0c8..5bc37acd3981 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
@@ -594,8 +594,9 @@ 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_psp_hdr(const struct common_firmware_header *hdr);
void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
+__printf(3, 4)
int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
- const char *fw_name);
+ const char *fmt, ...);
void amdgpu_ucode_release(const struct firmware **fw);
bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
uint16_t hdr_major, uint16_t hdr_minor);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 02/18] drm/amdgpu: refine gpu_info firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
2024-06-03 1:41 ` [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
@ 2024-06-03 1:41 ` Yang Wang
2024-06-03 1:41 ` [PATCH 03/18] drm/amdgpu: refine isp " Yang Wang
` (16 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gpu_info firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 6711836054f9..a6af15fb203c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2350,7 +2350,6 @@ void amdgpu_device_set_sriov_virtual_display(struct amdgpu_device *adev)
static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[40];
int err;
const struct gpu_info_firmware_header_v1_0 *hdr;
@@ -2384,12 +2383,12 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
break;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_gpu_info.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->firmware.gpu_info_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->firmware.gpu_info_fw,
+ "amdgpu/%s_gpu_info.bin", chip_name);
if (err) {
dev_err(adev->dev,
- "Failed to get gpu_info firmware \"%s\"\n",
- fw_name);
+ "Failed to get gpu_info firmware \"%s_gpu_info.bin\"\n",
+ chip_name);
goto out;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 03/18] drm/amdgpu: refine isp firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
2024-06-03 1:41 ` [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
2024-06-03 1:41 ` [PATCH 02/18] drm/amdgpu: refine gpu_info firmware loading Yang Wang
@ 2024-06-03 1:41 ` Yang Wang
2024-06-03 1:41 ` [PATCH v2 04/18] drm/amdgpu: refine mes " Yang Wang
` (15 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine isp firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
index 2a3f4668cb9b..215bae809153 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c
@@ -97,16 +97,14 @@ static int isp_load_fw_by_psp(struct amdgpu_device *adev)
{
const struct common_firmware_header *hdr;
char ucode_prefix[10];
- char fw_name[40];
int r = 0;
/* get isp fw binary name and path */
amdgpu_ucode_ip_version_decode(adev, ISP_HWIP, ucode_prefix,
sizeof(ucode_prefix));
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
/* read isp fw */
- r = amdgpu_ucode_request(adev, &adev->isp.fw, fw_name);
+ r = amdgpu_ucode_request(adev, &adev->isp.fw, "amdgpu/%s.bin", ucode_prefix);
if (r) {
amdgpu_ucode_release(&adev->isp.fw);
return r;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 04/18] drm/amdgpu: refine mes firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (2 preceding siblings ...)
2024-06-03 1:41 ` [PATCH 03/18] drm/amdgpu: refine isp " Yang Wang
@ 2024-06-03 1:41 ` Yang Wang
2024-06-03 1:41 ` [PATCH 05/18] drm/amdgpu: refine psp " Yang Wang
` (14 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
v1:
refine mes firmware loading
v2:
use dev_info instead of DRM_INFO
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
index 62edf6328566..48a5b0713fed 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
@@ -1528,11 +1528,9 @@ int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe)
r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe], fw_name);
if (r && need_retry && pipe == AMDGPU_MES_SCHED_PIPE) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes.bin",
- ucode_prefix);
- DRM_INFO("try to fall back to %s\n", fw_name);
+ dev_info(adev->dev, "try to fall back to %s_mes.bin\n", ucode_prefix);
r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe],
- fw_name);
+ "amdgpu/%s_mes.bin", ucode_prefix);
}
if (r)
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 05/18] drm/amdgpu: refine psp firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (3 preceding siblings ...)
2024-06-03 1:41 ` [PATCH v2 04/18] drm/amdgpu: refine mes " Yang Wang
@ 2024-06-03 1:41 ` Yang Wang
2024-06-03 1:42 ` [PATCH 06/18] drm/amdgpu: refine sdma " Yang Wang
` (13 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:41 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine psp firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 26 +++++++------------------
1 file changed, 7 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 6d1911773043..14fb4a5b4bd5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -3184,12 +3184,10 @@ int psp_ring_cmd_submit(struct psp_context *psp,
int psp_init_asd_microcode(struct psp_context *psp, const char *chip_name)
{
struct amdgpu_device *adev = psp->adev;
- char fw_name[PSP_FW_NAME_LEN];
const struct psp_firmware_header_v1_0 *asd_hdr;
int err = 0;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_asd.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->psp.asd_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.asd_fw, "amdgpu/%s_asd.bin", chip_name);
if (err)
goto out;
@@ -3208,12 +3206,10 @@ int psp_init_asd_microcode(struct psp_context *psp, const char *chip_name)
int psp_init_toc_microcode(struct psp_context *psp, const char *chip_name)
{
struct amdgpu_device *adev = psp->adev;
- char fw_name[PSP_FW_NAME_LEN];
const struct psp_firmware_header_v1_0 *toc_hdr;
int err = 0;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_toc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->psp.toc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.toc_fw, "amdgpu/%s_toc.bin", chip_name);
if (err)
goto out;
@@ -3365,7 +3361,6 @@ static int psp_init_sos_base_fw(struct amdgpu_device *adev)
int psp_init_sos_microcode(struct psp_context *psp, const char *chip_name)
{
struct amdgpu_device *adev = psp->adev;
- char fw_name[PSP_FW_NAME_LEN];
const struct psp_firmware_header_v1_0 *sos_hdr;
const struct psp_firmware_header_v1_1 *sos_hdr_v1_1;
const struct psp_firmware_header_v1_2 *sos_hdr_v1_2;
@@ -3375,8 +3370,7 @@ int psp_init_sos_microcode(struct psp_context *psp, const char *chip_name)
uint8_t *ucode_array_start_addr;
int fw_index = 0;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sos.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.sos_fw, "amdgpu/%s_sos.bin", chip_name);
if (err)
goto out;
@@ -3601,11 +3595,9 @@ int psp_init_ta_microcode(struct psp_context *psp, const char *chip_name)
{
const struct common_firmware_header *hdr;
struct amdgpu_device *adev = psp->adev;
- char fw_name[PSP_FW_NAME_LEN];
int err;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.ta_fw, "amdgpu/%s_ta.bin", chip_name);
if (err)
return err;
@@ -3631,7 +3623,6 @@ int psp_init_ta_microcode(struct psp_context *psp, const char *chip_name)
int psp_init_cap_microcode(struct psp_context *psp, const char *chip_name)
{
struct amdgpu_device *adev = psp->adev;
- char fw_name[PSP_FW_NAME_LEN];
const struct psp_firmware_header_v1_0 *cap_hdr_v1_0;
struct amdgpu_firmware_info *info = NULL;
int err = 0;
@@ -3641,8 +3632,7 @@ int psp_init_cap_microcode(struct psp_context *psp, const char *chip_name)
return -EINVAL;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_cap.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->psp.cap_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.cap_fw, "amdgpu/%s_cap.bin", chip_name);
if (err) {
if (err == -ENODEV) {
dev_warn(adev->dev, "cap microcode does not exist, skip\n");
@@ -3716,7 +3706,6 @@ static ssize_t psp_usbc_pd_fw_sysfs_write(struct device *dev,
struct drm_device *ddev = dev_get_drvdata(dev);
struct amdgpu_device *adev = drm_to_adev(ddev);
int ret, idx;
- char fw_name[100];
const struct firmware *usbc_pd_fw;
struct amdgpu_bo *fw_buf_bo = NULL;
uint64_t fw_pri_mc_addr;
@@ -3730,8 +3719,7 @@ static ssize_t psp_usbc_pd_fw_sysfs_write(struct device *dev,
if (!drm_dev_enter(ddev, &idx))
return -ENODEV;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s", buf);
- ret = request_firmware(&usbc_pd_fw, fw_name, adev->dev);
+ ret = amdgpu_ucode_request(adev, &usbc_pd_fw, "amdgpu/%s", buf);
if (ret)
goto fail;
@@ -3753,7 +3741,7 @@ static ssize_t psp_usbc_pd_fw_sysfs_write(struct device *dev,
amdgpu_bo_free_kernel(&fw_buf_bo, &fw_pri_mc_addr, &fw_pri_cpu_addr);
rel_buf:
- release_firmware(usbc_pd_fw);
+ amdgpu_ucode_release(&usbc_pd_fw);
fail:
if (ret) {
dev_err(adev->dev, "Failed to load USBC PD FW, err = %d", ret);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 06/18] drm/amdgpu: refine sdma firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (4 preceding siblings ...)
2024-06-03 1:41 ` [PATCH 05/18] drm/amdgpu: refine psp " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 07/18] drm/amdgpu: refine imu " Yang Wang
` (12 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine sdma firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 ++++----
drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 11 ++++++-----
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 11 ++++++-----
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 ++++++-----
4 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
index 151f83ea803b..183a976ba29d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
@@ -215,14 +215,14 @@ int amdgpu_sdma_init_microcode(struct amdgpu_device *adev,
const struct sdma_firmware_header_v3_0 *sdma_hv3;
uint16_t version_major;
char ucode_prefix[30];
- char fw_name[52];
amdgpu_ucode_ip_version_decode(adev, SDMA0_HWIP, ucode_prefix, sizeof(ucode_prefix));
if (instance == 0)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[instance].fw,
+ "amdgpu/%s.bin", ucode_prefix);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s%d.bin", ucode_prefix, instance);
- err = amdgpu_ucode_request(adev, &adev->sdma.instance[instance].fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[instance].fw,
+ "amdgpu/%s%d.bin", ucode_prefix, instance);
if (err)
goto out;
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index 6948ebda0fa2..952737de9411 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -107,7 +107,6 @@ static void cik_sdma_free_microcode(struct amdgpu_device *adev)
static int cik_sdma_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err = 0, i;
DRM_DEBUG("\n");
@@ -133,16 +132,18 @@ static int cik_sdma_init_microcode(struct amdgpu_device *adev)
for (i = 0; i < adev->sdma.num_instances; i++) {
if (i == 0)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma1.bin", chip_name);
if (err)
goto out;
}
out:
if (err) {
- pr_err("cik_sdma: Failed to load firmware \"%s\"\n", fw_name);
+ pr_err("cik_sdma: Failed to load firmware \"%s_sdma%s.bin\"\n",
+ chip_name, i == 0 ? "" : "1");
for (i = 0; i < adev->sdma.num_instances; i++)
amdgpu_ucode_release(&adev->sdma.instance[i].fw);
}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index ac8a9b9b3e52..725392522267 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -127,7 +127,6 @@ static void sdma_v2_4_free_microcode(struct amdgpu_device *adev)
static int sdma_v2_4_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err = 0, i;
struct amdgpu_firmware_info *info = NULL;
const struct common_firmware_header *header = NULL;
@@ -145,10 +144,11 @@ static int sdma_v2_4_init_microcode(struct amdgpu_device *adev)
for (i = 0; i < adev->sdma.num_instances; i++) {
if (i == 0)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma1.bin", chip_name);
if (err)
goto out;
hdr = (const struct sdma_firmware_header_v1_0 *)adev->sdma.instance[i].fw->data;
@@ -169,7 +169,8 @@ 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);
+ pr_err("sdma_v2_4: Failed to load firmware \"%s_sdma%s.bin\"\n",
+ chip_name, i == 0 ? "" : "1");
for (i = 0; i < adev->sdma.num_instances; i++)
amdgpu_ucode_release(&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 b8ebdc4ae6f6..aa637541da58 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -267,7 +267,6 @@ static void sdma_v3_0_free_microcode(struct amdgpu_device *adev)
static int sdma_v3_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err = 0, i;
struct amdgpu_firmware_info *info = NULL;
const struct common_firmware_header *header = NULL;
@@ -305,10 +304,11 @@ static int sdma_v3_0_init_microcode(struct amdgpu_device *adev)
for (i = 0; i < adev->sdma.num_instances; i++) {
if (i == 0)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sdma1.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->sdma.instance[i].fw,
+ "amdgpu/%s_sdma1.bin", chip_name);
if (err)
goto out;
hdr = (const struct sdma_firmware_header_v1_0 *)adev->sdma.instance[i].fw->data;
@@ -327,7 +327,8 @@ 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);
+ pr_err("sdma_v3_0: Failed to load firmware \"%s_sdma%s.bin\"\n",
+ chip_name, i == 0 ? "" : "1");
for (i = 0; i < adev->sdma.num_instances; i++)
amdgpu_ucode_release(&adev->sdma.instance[i].fw);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 07/18] drm/amdgpu: refine imu firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (5 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 06/18] drm/amdgpu: refine sdma " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 08/18] drm/amdgpu: refine pmfw/smu " Yang Wang
` (11 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine imu firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/imu_v11_0.c | 10 ++++------
drivers/gpu/drm/amd/amdgpu/imu_v12_0.c | 10 ++++------
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c b/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
index 3e91a8e42c21..a9f5d9e4610d 100644
--- a/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/imu_v11_0.c
@@ -41,7 +41,6 @@ MODULE_FIRMWARE("amdgpu/gc_11_5_1_imu.bin");
static int imu_v11_0_init_microcode(struct amdgpu_device *adev)
{
- char fw_name[45];
char ucode_prefix[30];
int err;
const struct imu_firmware_header_v1_0 *imu_hdr;
@@ -50,11 +49,10 @@ static int imu_v11_0_init_microcode(struct amdgpu_device *adev)
DRM_DEBUG("\n");
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_imu.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, "amdgpu/%s_imu.bin", ucode_prefix);
if (err)
goto out;
+
imu_hdr = (const struct imu_firmware_header_v1_0 *)adev->gfx.imu_fw->data;
//adev->gfx.imu_feature_version = le32_to_cpu(imu_hdr->ucode_feature_version);
@@ -75,8 +73,8 @@ static int imu_v11_0_init_microcode(struct amdgpu_device *adev)
out:
if (err) {
dev_err(adev->dev,
- "gfx11: Failed to load firmware \"%s\"\n",
- fw_name);
+ "gfx11: Failed to load firmware \"%s_imu.bin\"\n",
+ ucode_prefix);
amdgpu_ucode_release(&adev->gfx.imu_fw);
}
diff --git a/drivers/gpu/drm/amd/amdgpu/imu_v12_0.c b/drivers/gpu/drm/amd/amdgpu/imu_v12_0.c
index 0c8ef908d112..41b88ec26a20 100644
--- a/drivers/gpu/drm/amd/amdgpu/imu_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/imu_v12_0.c
@@ -39,7 +39,6 @@ MODULE_FIRMWARE("amdgpu/gc_12_0_1_imu.bin");
static int imu_v12_0_init_microcode(struct amdgpu_device *adev)
{
- char fw_name[40];
char ucode_prefix[15];
int err;
const struct imu_firmware_header_v1_0 *imu_hdr;
@@ -48,11 +47,10 @@ static int imu_v12_0_init_microcode(struct amdgpu_device *adev)
DRM_DEBUG("\n");
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_imu.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.imu_fw, "amdgpu/%s_imu.bin", ucode_prefix);
if (err)
goto out;
+
imu_hdr = (const struct imu_firmware_header_v1_0 *)adev->gfx.imu_fw->data;
adev->gfx.imu_fw_version = le32_to_cpu(imu_hdr->header.ucode_version);
@@ -72,8 +70,8 @@ static int imu_v12_0_init_microcode(struct amdgpu_device *adev)
out:
if (err) {
dev_err(adev->dev,
- "gfx12: Failed to load firmware \"%s\"\n",
- fw_name);
+ "gfx12: Failed to load firmware \"%s_imu.bin\"\n",
+ ucode_prefix);
amdgpu_ucode_release(&adev->gfx.imu_fw);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 08/18] drm/amdgpu: refine pmfw/smu firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (6 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 07/18] drm/amdgpu: refine imu " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 09/18] drm/amdgpu: refine gmc " Yang Wang
` (10 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine pmfw/smu firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 8 +++-----
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 6 +-----
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 6 +-----
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 6 +-----
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 6 +-----
5 files changed, 7 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
index 68ac01a8bc3a..c1a553a68251 100644
--- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
+++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c
@@ -7652,7 +7652,6 @@ static int si_dpm_late_init(void *handle)
static int si_dpm_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
DRM_DEBUG("\n");
@@ -7712,11 +7711,10 @@ static int si_dpm_init_microcode(struct amdgpu_device *adev)
default: BUG();
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_smc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->pm.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->pm.fw, "amdgpu/%s_smc.bin", chip_name);
if (err) {
- DRM_ERROR("si_smc: Failed to load firmware. err = %d\"%s\"\n",
- err, fw_name);
+ DRM_ERROR("si_smc: Failed to load firmware. err = %d\"%s_smc.bin\"\n",
+ err, chip_name);
amdgpu_ucode_release(&adev->pm.fw);
}
return err;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
index 9d5ab2ea643a..16fcd9dcd202 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -94,7 +94,6 @@ int smu_v11_0_init_microcode(struct smu_context *smu)
{
struct amdgpu_device *adev = smu->adev;
char ucode_prefix[25];
- char fw_name[SMU_FW_NAME_LEN];
int err = 0;
const struct smc_firmware_header_v1_0 *hdr;
const struct common_firmware_header *header;
@@ -106,10 +105,7 @@ int smu_v11_0_init_microcode(struct smu_context *smu)
return 0;
amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
-
- err = amdgpu_ucode_request(adev, &adev->pm.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->pm.fw, "amdgpu/%s.bin", ucode_prefix);
if (err)
goto out;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
index 3a50076e44f0..e17466cc1952 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -92,7 +92,6 @@ const int pmfw_decoded_link_width[7] = {0, 1, 2, 4, 8, 12, 16};
int smu_v13_0_init_microcode(struct smu_context *smu)
{
struct amdgpu_device *adev = smu->adev;
- char fw_name[30];
char ucode_prefix[15];
int err = 0;
const struct smc_firmware_header_v1_0 *hdr;
@@ -104,10 +103,7 @@ int smu_v13_0_init_microcode(struct smu_context *smu)
return 0;
amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
-
- err = amdgpu_ucode_request(adev, &adev->pm.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->pm.fw, "amdgpu/%s.bin", ucode_prefix);
if (err)
goto out;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
index 15c0aa0ad443..c2b706396dfd 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
@@ -272,7 +272,6 @@ static int smu_v13_0_6_init_microcode(struct smu_context *smu)
uint32_t p2s_table_id = P2S_TABLE_ID_A;
int ret = 0, i, p2stable_count;
char ucode_prefix[15];
- char fw_name[30];
/* No need to load P2S tables in IOV mode */
if (amdgpu_sriov_vf(adev))
@@ -283,10 +282,7 @@ static int smu_v13_0_6_init_microcode(struct smu_context *smu)
amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix,
sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
-
- ret = amdgpu_ucode_request(adev, &adev->pm.fw, fw_name);
+ ret = amdgpu_ucode_request(adev, &adev->pm.fw, "amdgpu/%s.bin", ucode_prefix);
if (ret)
goto out;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
index 8cce17d1f230..5ffd7144d99e 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
@@ -68,7 +68,6 @@ MODULE_FIRMWARE("amdgpu/smu_14_0_3.bin");
int smu_v14_0_init_microcode(struct smu_context *smu)
{
struct amdgpu_device *adev = smu->adev;
- char fw_name[30];
char ucode_prefix[15];
int err = 0;
const struct smc_firmware_header_v1_0 *hdr;
@@ -80,10 +79,7 @@ int smu_v14_0_init_microcode(struct smu_context *smu)
return 0;
amdgpu_ucode_ip_version_decode(adev, MP1_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
-
- err = amdgpu_ucode_request(adev, &adev->pm.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->pm.fw, "amdgpu/%s.bin", ucode_prefix);
if (err)
goto out;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 09/18] drm/amdgpu: refine gmc firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (7 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 08/18] drm/amdgpu: refine pmfw/smu " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 10/18] drm/amdgpu: refine vcn " Yang Wang
` (9 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gmc firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 14 ++++----------
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 ++-----
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 ++----
3 files changed, 8 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 3e38d8bfcb69..d36725666b54 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -98,9 +98,7 @@ static void gmc_v6_0_mc_resume(struct amdgpu_device *adev)
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");
@@ -126,17 +124,13 @@ static int gmc_v6_0_init_microcode(struct amdgpu_device *adev)
/* this memory configuration requires special firmware */
if (((RREG32(mmMC_SEQ_MISC0) & 0xff000000) >> 24) == 0x58)
- is_58_fw = true;
+ chip_name = "si58";
- if (is_58_fw)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/si58_mc.bin");
- else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gmc.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gmc.fw, "amdgpu/%s_mc.bin", chip_name);
if (err) {
dev_err(adev->dev,
- "si_mc: Failed to load firmware \"%s\"\n",
- fw_name);
+ "si_mc: Failed to load firmware \"%s_mc.bin\"\n",
+ chip_name);
amdgpu_ucode_release(&adev->gmc.fw);
}
return err;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 85df8fc81065..994432fb57ea 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -130,7 +130,6 @@ static void gmc_v7_0_mc_resume(struct amdgpu_device *adev)
static int gmc_v7_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
DRM_DEBUG("\n");
@@ -153,11 +152,9 @@ static int gmc_v7_0_init_microcode(struct amdgpu_device *adev)
return -EINVAL;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name);
-
- err = amdgpu_ucode_request(adev, &adev->gmc.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gmc.fw, "amdgpu/%s_mc.bin", chip_name);
if (err) {
- pr_err("cik_mc: Failed to load firmware \"%s\"\n", fw_name);
+ pr_err("cik_mc: Failed to load firmware \"%s_mc.bin\"\n", chip_name);
amdgpu_ucode_release(&adev->gmc.fw);
}
return err;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index fc97757e33d9..86488c052f82 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -212,7 +212,6 @@ static void gmc_v8_0_mc_resume(struct amdgpu_device *adev)
static int gmc_v8_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
DRM_DEBUG("\n");
@@ -255,10 +254,9 @@ static int gmc_v8_0_init_microcode(struct amdgpu_device *adev)
return -EINVAL;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gmc.fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gmc.fw, "amdgpu/%s_mc.bin", chip_name);
if (err) {
- pr_err("mc: Failed to load firmware \"%s\"\n", fw_name);
+ pr_err("mc: Failed to load firmware \"%s_mc.bin\"\n", chip_name);
amdgpu_ucode_release(&adev->gmc.fw);
}
return err;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 10/18] drm/amdgpu: refine vcn firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (8 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 09/18] drm/amdgpu: refine gmc " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 11/18] drm/amdgpu: refine vpe " Yang Wang
` (8 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine vcn firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 5e2b7c340724..8d65b096db90 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -94,18 +94,14 @@ static void amdgpu_vcn_idle_work_handler(struct work_struct *work);
int amdgpu_vcn_early_init(struct amdgpu_device *adev)
{
char ucode_prefix[25];
- char fw_name[40];
int r, i;
+ amdgpu_ucode_ip_version_decode(adev, UVD_HWIP, ucode_prefix, sizeof(ucode_prefix));
for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
- amdgpu_ucode_ip_version_decode(adev, UVD_HWIP, ucode_prefix, sizeof(ucode_prefix));
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", ucode_prefix);
- if (amdgpu_ip_version(adev, UVD_HWIP, 0) == IP_VERSION(4, 0, 6) &&
- i == 1) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_%d.bin", ucode_prefix, i);
- }
-
- r = amdgpu_ucode_request(adev, &adev->vcn.fw[i], fw_name);
+ if (i == 1 && amdgpu_ip_version(adev, UVD_HWIP, 0) == IP_VERSION(4, 0, 6))
+ r = amdgpu_ucode_request(adev, &adev->vcn.fw[i], "amdgpu/%s_%d.bin", ucode_prefix, i);
+ else
+ r = amdgpu_ucode_request(adev, &adev->vcn.fw[i], "amdgpu/%s.bin", ucode_prefix);
if (r) {
amdgpu_ucode_release(&adev->vcn.fw[i]);
return r;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 11/18] drm/amdgpu: refine vpe firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (9 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 10/18] drm/amdgpu: refine vcn " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 12/18] drm/amdgpu: refine gfx6 " Yang Wang
` (7 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine vpe firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
index 49881073ff58..bad232859972 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c
@@ -232,13 +232,11 @@ int amdgpu_vpe_init_microcode(struct amdgpu_vpe *vpe)
{
struct amdgpu_device *adev = vpe->ring.adev;
const struct vpe_firmware_header_v1_0 *vpe_hdr;
- char fw_prefix[32], fw_name[64];
+ char fw_prefix[32];
int ret;
amdgpu_ucode_ip_version_decode(adev, VPE_HWIP, fw_prefix, sizeof(fw_prefix));
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s.bin", fw_prefix);
-
- ret = amdgpu_ucode_request(adev, &adev->vpe.fw, fw_name);
+ ret = amdgpu_ucode_request(adev, &adev->vpe.fw, "amdgpu/%s.bin", fw_prefix);
if (ret)
goto out;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 12/18] drm/amdgpu: refine gfx6 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (10 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 11/18] drm/amdgpu: refine vpe " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 13/18] drm/amdgpu: refine gfx7 " Yang Wang
` (6 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx6 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index d0992ce9fb47..564f0b9336b6 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -311,7 +311,6 @@ static const u32 verde_rlc_save_restore_register_list[] =
static int gfx_v6_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
const struct gfx_firmware_header_v1_0 *cp_hdr;
const struct rlc_firmware_header_v1_0 *rlc_hdr;
@@ -337,32 +336,32 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev)
default: BUG();
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", chip_name);
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);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", chip_name);
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);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce.bin", chip_name);
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);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", chip_name);
if (err)
goto out;
rlc_hdr = (const struct rlc_firmware_header_v1_0 *)adev->gfx.rlc_fw->data;
@@ -371,7 +370,7 @@ static int gfx_v6_0_init_microcode(struct amdgpu_device *adev)
out:
if (err) {
- pr_err("gfx6: Failed to load firmware \"%s\"\n", fw_name);
+ pr_err("gfx6: Failed to load firmware %s gfx firmware\n", chip_name);
amdgpu_ucode_release(&adev->gfx.pfp_fw);
amdgpu_ucode_release(&adev->gfx.me_fw);
amdgpu_ucode_release(&adev->gfx.ce_fw);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 13/18] drm/amdgpu: refine gfx7 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (11 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 12/18] drm/amdgpu: refine gfx6 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 14/18] drm/amdgpu: refine gfx8 " Yang Wang
` (5 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx7 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 8f19b6ae8d5b..d84589137df9 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -909,7 +909,6 @@ static void gfx_v7_0_free_microcode(struct amdgpu_device *adev)
static int gfx_v7_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
DRM_DEBUG("\n");
@@ -934,38 +933,38 @@ static int gfx_v7_0_init_microcode(struct amdgpu_device *adev)
BUG();
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", chip_name);
if (err)
goto out;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", chip_name);
if (err)
goto out;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce.bin", chip_name);
if (err)
goto out;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", chip_name);
if (err)
goto out;
if (adev->asic_type == CHIP_KAVERI) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2.bin", chip_name);
if (err)
goto out;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", chip_name);
out:
if (err) {
- pr_err("gfx7: Failed to load firmware \"%s\"\n", fw_name);
+ pr_err("gfx7: Failed to load firmware %s gfx firmware\n", chip_name);
gfx_v7_0_free_microcode(adev);
}
return err;
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 14/18] drm/amdgpu: refine gfx8 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (12 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 13/18] drm/amdgpu: refine gfx7 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 15/18] drm/amdgpu: refine gfx9 " Yang Wang
` (4 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx8 firmware loadin
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 69 +++++++++++++--------------
1 file changed, 33 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 2f0e72caee1a..b4658c7db0e1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -939,7 +939,6 @@ static void gfx_v8_0_free_microcode(struct amdgpu_device *adev)
static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
{
const char *chip_name;
- char fw_name[30];
int err;
struct amdgpu_firmware_info *info = NULL;
const struct common_firmware_header *header = NULL;
@@ -982,15 +981,15 @@ 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 = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp_2.bin", chip_name);
if (err == -ENODEV) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", chip_name);
}
} else {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", chip_name);
}
if (err)
goto out;
@@ -999,15 +998,15 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version);
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 = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me_2.bin", chip_name);
if (err == -ENODEV) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", chip_name);
}
} else {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", chip_name);
}
if (err)
goto out;
@@ -1017,15 +1016,15 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version);
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 = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce_2.bin", chip_name);
if (err == -ENODEV) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce.bin", chip_name);
}
} else {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce.bin", chip_name);
}
if (err)
goto out;
@@ -1044,8 +1043,8 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
} else
adev->virt.chained_ib_support = false;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", chip_name);
if (err)
goto out;
rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
@@ -1093,15 +1092,15 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]);
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 = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec_2.bin", chip_name);
if (err == -ENODEV) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", chip_name);
}
} else {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", chip_name);
}
if (err)
goto out;
@@ -1112,15 +1111,15 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
if ((adev->asic_type != CHIP_STONEY) &&
(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 = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2_2.bin", chip_name);
if (err == -ENODEV) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2.bin", chip_name);
}
} else {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2.bin", chip_name);
}
if (!err) {
cp_hdr = (const struct gfx_firmware_header_v1_0 *)
@@ -1194,9 +1193,7 @@ 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);
+ dev_err(adev->dev, "gfx8: Failed to load firmware %s gfx firmware\n", chip_name);
amdgpu_ucode_release(&adev->gfx.pfp_fw);
amdgpu_ucode_release(&adev->gfx.me_fw);
amdgpu_ucode_release(&adev->gfx.ce_fw);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 15/18] drm/amdgpu: refine gfx9 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (13 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 14/18] drm/amdgpu: refine gfx8 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 16/18] drm/amdgpu: refine gfx10 " Yang Wang
` (3 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx9 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 45 ++++++++++++-------------
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 11 +++---
2 files changed, 26 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index ad99ee10fd4a..2929c8972ea7 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -1378,23 +1378,22 @@ static void gfx_v9_0_check_if_need_gfxoff(struct amdgpu_device *adev)
static int gfx_v9_0_init_cp_gfx_microcode(struct amdgpu_device *adev,
char *chip_name)
{
- char fw_name[50];
int err;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", chip_name);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_PFP);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", chip_name);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_ME);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce.bin", chip_name);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_CE);
@@ -1411,7 +1410,6 @@ static int gfx_v9_0_init_cp_gfx_microcode(struct amdgpu_device *adev,
static int gfx_v9_0_init_rlc_microcode(struct amdgpu_device *adev,
char *chip_name)
{
- char fw_name[53];
int err;
const struct rlc_firmware_header_v2_0 *rlc_hdr;
uint16_t version_major;
@@ -1429,20 +1427,22 @@ static int gfx_v9_0_init_rlc_microcode(struct amdgpu_device *adev,
if (!strcmp(chip_name, "picasso") &&
(((adev->pdev->revision >= 0xC8) && (adev->pdev->revision <= 0xCF)) ||
((adev->pdev->revision >= 0xD8) && (adev->pdev->revision <= 0xDF))))
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc_am4.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc_am4.bin", chip_name);
else if (!strcmp(chip_name, "raven") && (amdgpu_pm_load_smu_firmware(adev, &smu_version) == 0) &&
(smu_version >= 0x41e2b))
/**
*SMC is loaded by SBIOS on APU and it's able to get the SMU version directly.
*/
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_kicker_rlc.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_kicker_rlc.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", chip_name);
if (err)
goto out;
- rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
+ rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
version_major = le16_to_cpu(rlc_hdr->header.header_version_major);
version_minor = le16_to_cpu(rlc_hdr->header.header_version_minor);
err = amdgpu_gfx_rlc_init_microcode(adev, version_major, version_minor);
@@ -1466,28 +1466,27 @@ static bool gfx_v9_0_load_mec2_fw_bin_support(struct amdgpu_device *adev)
static int gfx_v9_0_init_cp_compute_microcode(struct amdgpu_device *adev,
char *chip_name)
{
- char fw_name[50];
int err;
if (amdgpu_sriov_vf(adev) && (adev->asic_type == CHIP_ALDEBARAN))
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sjt_mec.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_sjt_mec.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name);
-
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", chip_name);
if (err)
goto out;
+
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1_JT);
if (gfx_v9_0_load_mec2_fw_bin_support(adev)) {
if (amdgpu_sriov_vf(adev) && (adev->asic_type == CHIP_ALDEBARAN))
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_sjt_mec2.bin", chip_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_sjt_mec2.bin", chip_name);
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2.bin", chip_name);
-
- /* ignore failures to load */
- err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2.bin", chip_name);
if (!err) {
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2_JT);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
index aecc2bcea145..6e1598128209 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
@@ -372,15 +372,14 @@ static void gfx_v9_4_3_free_microcode(struct amdgpu_device *adev)
static int gfx_v9_4_3_init_rlc_microcode(struct amdgpu_device *adev,
const char *chip_name)
{
- char fw_name[30];
int err;
const struct rlc_firmware_header_v2_0 *rlc_hdr;
uint16_t version_major;
uint16_t version_minor;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", chip_name);
if (err)
goto out;
rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
@@ -409,12 +408,10 @@ static void gfx_v9_4_3_check_if_need_gfxoff(struct amdgpu_device *adev)
static int gfx_v9_4_3_init_cp_compute_microcode(struct amdgpu_device *adev,
const char *chip_name)
{
- char fw_name[30];
int err;
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", chip_name);
-
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", chip_name);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 16/18] drm/amdgpu: refine gfx10 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (14 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 15/18] drm/amdgpu: refine gfx9 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 17/18] drm/amdgpu: refine gfx11 " Yang Wang
` (2 subsequent siblings)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx10 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
index 3b0d8d3af58a..18488c02d1cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
@@ -4116,7 +4116,6 @@ static void gfx_v10_0_check_gfxoff_flag(struct amdgpu_device *adev)
static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)
{
- char fw_name[53];
char ucode_prefix[30];
const char *wks = "";
int err;
@@ -4131,27 +4130,27 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)
wks = "_wks";
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp%s.bin", ucode_prefix, wks);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp%s.bin", ucode_prefix, wks);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_PFP);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me%s.bin", ucode_prefix, wks);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me%s.bin", ucode_prefix, wks);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_ME);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce%s.bin", ucode_prefix, wks);
- err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.ce_fw,
+ "amdgpu/%s_ce%s.bin", ucode_prefix, wks);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_CE);
if (!amdgpu_sriov_vf(adev)) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", ucode_prefix);
- err = request_firmware(&adev->gfx.rlc_fw, fw_name, adev->dev);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", ucode_prefix);
if (err)
goto out;
@@ -4166,15 +4165,15 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)
goto out;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec%s.bin", ucode_prefix, wks);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec%s.bin", ucode_prefix, wks);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1_JT);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2%s.bin", ucode_prefix, wks);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec2_fw,
+ "amdgpu/%s_mec2%s.bin", ucode_prefix, wks);
if (!err) {
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2_JT);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 17/18] drm/amdgpu: refine gfx11 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (15 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 16/18] drm/amdgpu: refine gfx10 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-03 1:42 ` [PATCH 18/18] drm/amdgpu: refine gfx12 " Yang Wang
2024-06-05 9:33 ` [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Wang, Yang(Kevin)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx11 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
index 0a9cbb550194..0b51755a449d 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -611,10 +611,9 @@ static int gfx_v11_0_init_toc_microcode(struct amdgpu_device *adev, const char *
{
const struct psp_firmware_header_v1_0 *toc_hdr;
int err = 0;
- char fw_name[40];
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_toc.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->psp.toc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.toc_fw,
+ "amdgpu/%s_toc.bin", ucode_prefix);
if (err)
goto out;
@@ -653,7 +652,6 @@ static void gfx_v11_0_check_fw_cp_gfx_shadow(struct amdgpu_device *adev)
static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
{
- char fw_name[40];
char ucode_prefix[25];
int err;
const struct rlc_firmware_header_v2_0 *rlc_hdr;
@@ -663,9 +661,8 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
DRM_DEBUG("\n");
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
-
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", ucode_prefix);
if (err)
goto out;
/* check pfp fw hdr version to decide if enable rs64 for gfx11.*/
@@ -681,8 +678,8 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_PFP);
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", ucode_prefix);
if (err)
goto out;
if (adev->gfx.rs64_enable) {
@@ -696,10 +693,11 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
if (!amdgpu_sriov_vf(adev)) {
if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(11, 0, 0) &&
adev->pdev->revision == 0xCE)
- snprintf(fw_name, sizeof(fw_name), "amdgpu/gc_11_0_0_rlc_1.bin");
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/gc_11_0_0_rlc_1.bin");
else
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", ucode_prefix);
if (err)
goto out;
rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
@@ -710,8 +708,8 @@ static int gfx_v11_0_init_microcode(struct amdgpu_device *adev)
goto out;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", ucode_prefix);
if (err)
goto out;
if (adev->gfx.rs64_enable) {
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 18/18] drm/amdgpu: refine gfx12 firmware loading
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (16 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 17/18] drm/amdgpu: refine gfx11 " Yang Wang
@ 2024-06-03 1:42 ` Yang Wang
2024-06-05 9:33 ` [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Wang, Yang(Kevin)
18 siblings, 0 replies; 25+ messages in thread
From: Yang Wang @ 2024-06-03 1:42 UTC (permalink / raw)
To: amd-gfx; +Cc: hawking.zhang, alexander.deucher
refine gfx12 firmware loading
Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
index 6419f98e32b6..f37cfa4bfb22 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
@@ -386,10 +386,9 @@ static int gfx_v12_0_init_toc_microcode(struct amdgpu_device *adev, const char *
{
const struct psp_firmware_header_v1_0 *toc_hdr;
int err = 0;
- char fw_name[40];
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_toc.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->psp.toc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->psp.toc_fw,
+ "amdgpu/%s_toc.bin", ucode_prefix);
if (err)
goto out;
@@ -407,7 +406,6 @@ static int gfx_v12_0_init_toc_microcode(struct amdgpu_device *adev, const char *
static int gfx_v12_0_init_microcode(struct amdgpu_device *adev)
{
- char fw_name[40];
char ucode_prefix[15];
int err;
const struct rlc_firmware_header_v2_0 *rlc_hdr;
@@ -418,23 +416,23 @@ static int gfx_v12_0_init_microcode(struct amdgpu_device *adev)
amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix));
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_pfp.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.pfp_fw,
+ "amdgpu/%s_pfp.bin", ucode_prefix);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_PFP);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_PFP_P0_STACK);
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.me_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.me_fw,
+ "amdgpu/%s_me.bin", ucode_prefix);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_ME);
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_ME_P0_STACK);
if (!amdgpu_sriov_vf(adev)) {
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.rlc_fw,
+ "amdgpu/%s_rlc.bin", ucode_prefix);
if (err)
goto out;
rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
@@ -445,8 +443,8 @@ static int gfx_v12_0_init_microcode(struct amdgpu_device *adev)
goto out;
}
- snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec.bin", ucode_prefix);
- err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw, fw_name);
+ err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+ "amdgpu/%s_mec.bin", ucode_prefix);
if (err)
goto out;
amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_RS64_MEC);
--
2.34.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
2024-05-31 6:52 [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
@ 2024-06-03 11:05 ` Christian König
0 siblings, 0 replies; 25+ messages in thread
From: Christian König @ 2024-06-03 11:05 UTC (permalink / raw)
To: Yang Wang, amd-gfx; +Cc: hawking.zhang, alexander.deucher
Am 31.05.24 um 08:52 schrieb Yang Wang:
> Adding formatting string feature to improve function flexibility.
>
> Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++++++++++++++------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 ++-
> 2 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> index a9de78bb96e2..a452d9b6afdb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> @@ -28,6 +28,8 @@
> #include "amdgpu.h"
> #include "amdgpu_ucode.h"
>
> +#define AMDGPU_MAX_FW_NAME_LEN (128)
Please drop that define and use NAME_MAX instead.
> +
> 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));
> @@ -1432,28 +1434,40 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
> *
> * @adev: amdgpu device
> * @fw: pointer to load firmware to
> - * @fw_name: firmware to load
> + * @fmt: firmware name format string
> + * @...: variable arguments
> *
> * This is a helper that will use request_firmware and amdgpu_ucode_validate
> * to load and run basic validation on firmware. If the load fails, remap
> * the error code to -ENODEV, so that early_init functions will fail to load.
> */
> int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
> - const char *fw_name)
> + const char *fmt, ...)
> {
> - int err = request_firmware(fw, fw_name, adev->dev);
> + char fname[AMDGPU_MAX_FW_NAME_LEN];
> + va_list ap;
> + int r;
> +
> + va_start(ap, fmt);
> + r = vsnprintf(fname, sizeof(fname), fmt, ap);
> + va_end(ap);
> + if (r == sizeof(fname)) {
> + dev_warn(adev->dev, "amdgpu firmware name buffer overflow\n");
> + return -EOVERFLOW;
> + }
>
> - if (err)
> + r = request_firmware(fw, fname, adev->dev);
> + if (r)
> return -ENODEV;
>
> - err = amdgpu_ucode_validate(*fw);
> - if (err) {
> - dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
> + r = amdgpu_ucode_validate(*fw);
> + if (r) {
> + dev_dbg(adev->dev, "\"%s\" failed to validate\n", fname);
> release_firmware(*fw);
> *fw = NULL;
> }
>
> - return err;
> + return r;
> }
>
> /*
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> index db745ab7b0c8..5bc37acd3981 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> @@ -594,8 +594,9 @@ 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_psp_hdr(const struct common_firmware_header *hdr);
> void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
> +__printf(3, 4)
> int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
> - const char *fw_name);
> + const char *fmt, ...);
That should probably have __printf() annotation so that the compiler can
check the format and arguments.
See here
https://elixir.free-electrons.com/linux/v6.10-rc2/source/include/linux/compiler_attributes.h#L171
Regards,
Christian.
> void amdgpu_ucode_release(const struct firmware **fw);
> bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
> uint16_t hdr_major, uint16_t hdr_minor);
^ permalink raw reply [flat|nested] 25+ messages in thread
* RE: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
` (17 preceding siblings ...)
2024-06-03 1:42 ` [PATCH 18/18] drm/amdgpu: refine gfx12 " Yang Wang
@ 2024-06-05 9:33 ` Wang, Yang(Kevin)
2024-06-05 11:20 ` Christian König
18 siblings, 1 reply; 25+ messages in thread
From: Wang, Yang(Kevin) @ 2024-06-05 9:33 UTC (permalink / raw)
To: amd-gfx@lists.freedesktop.org; +Cc: Zhang, Hawking, Deucher, Alexander
[AMD Official Use Only - AMD Internal Distribution Only]
Ping...
Best Regards,
Kevin
-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Yang Wang
Sent: Monday, June 3, 2024 9:42 AM
To: amd-gfx@lists.freedesktop.org
Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
Adding variable parameter support to function amdgpu_firmware_request() to improve function flexibility.
Yang Wang (18):
drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
drm/amdgpu: refine gpu_info firmware loading
drm/amdgpu: refine isp firmware loading
drm/amdgpu: refine mes firmware loading
drm/amdgpu: refine psp firmware loading
drm/amdgpu: refine sdma firmware loading
drm/amdgpu: refine imu firmware loading
drm/amdgpu: refine pmfw/smu firmware loading
drm/amdgpu: refine gmc firmware loading
drm/amdgpu: refine vcn firmware loading
drm/amdgpu: refine vpe firmware loading
drm/amdgpu: refine gfx6 firmware loading
drm/amdgpu: refine gfx7 firmware loading
drm/amdgpu: refine gfx8 firmware loading
drm/amdgpu: refine gfx9 firmware loading
drm/amdgpu: refine gfx10 firmware loading
drm/amdgpu: refine gfx11 firmware loading
drm/amdgpu: refine gfx12 firmware loading
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 ++-
drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 6 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 26 ++-----
drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 +--
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++---
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 +-
drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 11 +--
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 25 ++++---
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 26 ++++---
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 22 +++---
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 +++--
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 27 ++++----
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 69 +++++++++----------
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 45 ++++++------
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 11 ++-
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 14 ++--
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +-
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +-
drivers/gpu/drm/amd/amdgpu/imu_v11_0.c | 10 ++-
drivers/gpu/drm/amd/amdgpu/imu_v12_0.c | 10 ++-
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 11 +--
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 +--
drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 8 +--
.../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 6 +-
.../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 6 +-
.../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 6 +-
.../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 6 +-
30 files changed, 205 insertions(+), 257 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
2024-06-05 9:33 ` [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Wang, Yang(Kevin)
@ 2024-06-05 11:20 ` Christian König
2024-06-05 12:54 ` Wang, Yang(Kevin)
0 siblings, 1 reply; 25+ messages in thread
From: Christian König @ 2024-06-05 11:20 UTC (permalink / raw)
To: Wang, Yang(Kevin), amd-gfx@lists.freedesktop.org
Cc: Zhang, Hawking, Deucher, Alexander
You haven't addressed any of my comments on patch #1.
Regards,
Christian.
Am 05.06.24 um 11:33 schrieb Wang, Yang(Kevin):
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> Ping...
>
> Best Regards,
> Kevin
>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Yang Wang
> Sent: Monday, June 3, 2024 9:42 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
>
> Adding variable parameter support to function amdgpu_firmware_request() to improve function flexibility.
>
> Yang Wang (18):
> drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
> drm/amdgpu: refine gpu_info firmware loading
> drm/amdgpu: refine isp firmware loading
> drm/amdgpu: refine mes firmware loading
> drm/amdgpu: refine psp firmware loading
> drm/amdgpu: refine sdma firmware loading
> drm/amdgpu: refine imu firmware loading
> drm/amdgpu: refine pmfw/smu firmware loading
> drm/amdgpu: refine gmc firmware loading
> drm/amdgpu: refine vcn firmware loading
> drm/amdgpu: refine vpe firmware loading
> drm/amdgpu: refine gfx6 firmware loading
> drm/amdgpu: refine gfx7 firmware loading
> drm/amdgpu: refine gfx8 firmware loading
> drm/amdgpu: refine gfx9 firmware loading
> drm/amdgpu: refine gfx10 firmware loading
> drm/amdgpu: refine gfx11 firmware loading
> drm/amdgpu: refine gfx12 firmware loading
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 ++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 26 ++-----
> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 +--
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 11 +--
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 25 ++++---
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 26 ++++---
> drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 22 +++---
> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 +++--
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 27 ++++----
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 69 +++++++++----------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 45 ++++++------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 11 ++-
> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 14 ++--
> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +-
> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/imu_v11_0.c | 10 ++-
> drivers/gpu/drm/amd/amdgpu/imu_v12_0.c | 10 ++-
> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 11 +--
> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 +--
> drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 8 +--
> .../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 6 +-
> .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 6 +-
> .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 6 +-
> .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 6 +-
> 30 files changed, 205 insertions(+), 257 deletions(-)
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* RE: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
2024-06-05 11:20 ` Christian König
@ 2024-06-05 12:54 ` Wang, Yang(Kevin)
0 siblings, 0 replies; 25+ messages in thread
From: Wang, Yang(Kevin) @ 2024-06-05 12:54 UTC (permalink / raw)
To: Koenig, Christian, amd-gfx@lists.freedesktop.org
Cc: Zhang, Hawking, Deucher, Alexander
[AMD Official Use Only - AMD Internal Distribution Only]
Hi Chris,
I have checked my inbox and did not see your email.
Could you please resend it?
Best Regards,
Kevin
-----Original Message-----
From: Koenig, Christian <Christian.Koenig@amd.com>
Sent: Wednesday, June 5, 2024 7:21 PM
To: Wang, Yang(Kevin) <KevinYang.Wang@amd.com>; amd-gfx@lists.freedesktop.org
Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: Re: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
You haven't addressed any of my comments on patch #1.
Regards,
Christian.
Am 05.06.24 um 11:33 schrieb Wang, Yang(Kevin):
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> Ping...
>
> Best Regards,
> Kevin
>
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Yang Wang
> Sent: Monday, June 3, 2024 9:42 AM
> To: amd-gfx@lists.freedesktop.org
> Cc: Zhang, Hawking <Hawking.Zhang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>
> Subject: [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility
>
> Adding variable parameter support to function amdgpu_firmware_request() to improve function flexibility.
>
> Yang Wang (18):
> drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
> drm/amdgpu: refine gpu_info firmware loading
> drm/amdgpu: refine isp firmware loading
> drm/amdgpu: refine mes firmware loading
> drm/amdgpu: refine psp firmware loading
> drm/amdgpu: refine sdma firmware loading
> drm/amdgpu: refine imu firmware loading
> drm/amdgpu: refine pmfw/smu firmware loading
> drm/amdgpu: refine gmc firmware loading
> drm/amdgpu: refine vcn firmware loading
> drm/amdgpu: refine vpe firmware loading
> drm/amdgpu: refine gfx6 firmware loading
> drm/amdgpu: refine gfx7 firmware loading
> drm/amdgpu: refine gfx8 firmware loading
> drm/amdgpu: refine gfx9 firmware loading
> drm/amdgpu: refine gfx10 firmware loading
> drm/amdgpu: refine gfx11 firmware loading
> drm/amdgpu: refine gfx12 firmware loading
>
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 ++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_isp.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 26 ++-----
> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 +--
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 14 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 11 +--
> drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 25 ++++---
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 26 ++++---
> drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 22 +++---
> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 19 +++--
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 27 ++++----
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 69 +++++++++----------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 45 ++++++------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 11 ++-
> drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 14 ++--
> drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +-
> drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 6 +-
> drivers/gpu/drm/amd/amdgpu/imu_v11_0.c | 10 ++-
> drivers/gpu/drm/amd/amdgpu/imu_v12_0.c | 10 ++-
> drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 11 +--
> drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 +--
> drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 8 +--
> .../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 6 +-
> .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 6 +-
> .../drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 6 +-
> .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 6 +-
> 30 files changed, 205 insertions(+), 257 deletions(-)
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() function flexibility
2024-06-03 1:41 ` [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
@ 2024-06-06 7:40 ` Christian König
0 siblings, 0 replies; 25+ messages in thread
From: Christian König @ 2024-06-06 7:40 UTC (permalink / raw)
To: Yang Wang, amd-gfx; +Cc: hawking.zhang, alexander.deucher
Am 03.06.24 um 03:41 schrieb Yang Wang:
> Adding formatting string feature to improve function flexibility.
>
> Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 30 +++++++++++++++++------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h | 3 ++-
> 2 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> index a9de78bb96e2..a452d9b6afdb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
> @@ -28,6 +28,8 @@
> #include "amdgpu.h"
> #include "amdgpu_ucode.h"
>
> +#define AMDGPU_MAX_FW_NAME_LEN (128)
> +
Please drop that and use NAME_MAX instead.
> 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));
> @@ -1432,28 +1434,40 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
> *
> * @adev: amdgpu device
> * @fw: pointer to load firmware to
> - * @fw_name: firmware to load
> + * @fmt: firmware name format string
> + * @...: variable arguments
> *
> * This is a helper that will use request_firmware and amdgpu_ucode_validate
> * to load and run basic validation on firmware. If the load fails, remap
> * the error code to -ENODEV, so that early_init functions will fail to load.
> */
> int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
> - const char *fw_name)
> + const char *fmt, ...)
> {
> - int err = request_firmware(fw, fw_name, adev->dev);
> + char fname[AMDGPU_MAX_FW_NAME_LEN];
> + va_list ap;
> + int r;
> +
> + va_start(ap, fmt);
> + r = vsnprintf(fname, sizeof(fname), fmt, ap);
> + va_end(ap);
> + if (r == sizeof(fname)) {
> + dev_warn(adev->dev, "amdgpu firmware name buffer overflow\n");
> + return -EOVERFLOW;
> + }
>
> - if (err)
> + r = request_firmware(fw, fname, adev->dev);
> + if (r)
> return -ENODEV;
>
> - err = amdgpu_ucode_validate(*fw);
> - if (err) {
> - dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
> + r = amdgpu_ucode_validate(*fw);
> + if (r) {
> + dev_dbg(adev->dev, "\"%s\" failed to validate\n", fname);
> release_firmware(*fw);
> *fw = NULL;
> }
>
> - return err;
> + return r;
> }
>
> /*
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> index db745ab7b0c8..5bc37acd3981 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h
> @@ -594,8 +594,9 @@ 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_psp_hdr(const struct common_firmware_header *hdr);
> void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
> +__printf(3, 4)
> int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
> - const char *fw_name);
> + const char *fmt, ...);
This needs __printf() annotation so that the compiler can complain if we
do something incorrect.
Regards,
Christian.
> void amdgpu_ucode_release(const struct firmware **fw);
> bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
> uint16_t hdr_major, uint16_t hdr_minor);
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2024-06-06 7:40 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-03 1:41 [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Yang Wang
2024-06-03 1:41 ` [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
2024-06-06 7:40 ` Christian König
2024-06-03 1:41 ` [PATCH 02/18] drm/amdgpu: refine gpu_info firmware loading Yang Wang
2024-06-03 1:41 ` [PATCH 03/18] drm/amdgpu: refine isp " Yang Wang
2024-06-03 1:41 ` [PATCH v2 04/18] drm/amdgpu: refine mes " Yang Wang
2024-06-03 1:41 ` [PATCH 05/18] drm/amdgpu: refine psp " Yang Wang
2024-06-03 1:42 ` [PATCH 06/18] drm/amdgpu: refine sdma " Yang Wang
2024-06-03 1:42 ` [PATCH 07/18] drm/amdgpu: refine imu " Yang Wang
2024-06-03 1:42 ` [PATCH 08/18] drm/amdgpu: refine pmfw/smu " Yang Wang
2024-06-03 1:42 ` [PATCH 09/18] drm/amdgpu: refine gmc " Yang Wang
2024-06-03 1:42 ` [PATCH 10/18] drm/amdgpu: refine vcn " Yang Wang
2024-06-03 1:42 ` [PATCH 11/18] drm/amdgpu: refine vpe " Yang Wang
2024-06-03 1:42 ` [PATCH 12/18] drm/amdgpu: refine gfx6 " Yang Wang
2024-06-03 1:42 ` [PATCH 13/18] drm/amdgpu: refine gfx7 " Yang Wang
2024-06-03 1:42 ` [PATCH 14/18] drm/amdgpu: refine gfx8 " Yang Wang
2024-06-03 1:42 ` [PATCH 15/18] drm/amdgpu: refine gfx9 " Yang Wang
2024-06-03 1:42 ` [PATCH 16/18] drm/amdgpu: refine gfx10 " Yang Wang
2024-06-03 1:42 ` [PATCH 17/18] drm/amdgpu: refine gfx11 " Yang Wang
2024-06-03 1:42 ` [PATCH 18/18] drm/amdgpu: refine gfx12 " Yang Wang
2024-06-05 9:33 ` [PATCH 00/18] Enhance amdgpu_firmware_request() to improve function flexibility Wang, Yang(Kevin)
2024-06-05 11:20 ` Christian König
2024-06-05 12:54 ` Wang, Yang(Kevin)
-- strict thread matches above, loose matches on Subject: below --
2024-05-31 6:52 [PATCH 01/18] drm/amdgpu: enhance amdgpu_ucode_request() " Yang Wang
2024-06-03 11:05 ` Christian König
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox