All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Wang, Yang(Kevin)" <KevinYang.Wang@amd.com>
To: "Zhang, Hawking" <Hawking.Zhang@amd.com>,
	"amd-gfx@lists.freedesktop.org" <amd-gfx@lists.freedesktop.org>,
	"Gao, Likun" <Likun.Gao@amd.com>,
	"Deucher, Alexander" <Alexander.Deucher@amd.com>
Cc: "Zhang, Hawking" <Hawking.Zhang@amd.com>
Subject: RE: [PATCH 07/10] drm/amdgpu/gfx8: switch to amdgpu_gfx_rlc_init_microcode
Date: Mon, 19 Sep 2022 05:25:28 +0000	[thread overview]
Message-ID: <PH7PR12MB599773434B137AC9F487C5C0824D9@PH7PR12MB5997.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20220915170135.23060-8-Hawking.Zhang@amd.com>

[AMD Official Use Only - General]

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Hawking Zhang
Sent: Friday, September 16, 2022 1:02 AM
To: amd-gfx@lists.freedesktop.org; Gao, Likun <Likun.Gao@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>
Cc: Zhang, Hawking <Hawking.Zhang@amd.com>
Subject: [PATCH 07/10] drm/amdgpu/gfx8: switch to amdgpu_gfx_rlc_init_microcode

switch to common helper to initialize rlc firmware for gfx8

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 60 +++++----------------------
 1 file changed, 11 insertions(+), 49 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 606d0c873d71..09c63e2d4637 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -951,7 +951,7 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
        const struct common_firmware_header *header = NULL;
        const struct gfx_firmware_header_v1_0 *cp_hdr;
        const struct rlc_firmware_header_v2_0 *rlc_hdr;
-       unsigned int *tmp = NULL, i;
+       uint16_t version_major, version_minor;

        DRM_DEBUG("\n");

@@ -1064,49 +1064,18 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
        if (err)
                goto out;
        err = amdgpu_ucode_validate(adev->gfx.rlc_fw);
-       rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
-       adev->gfx.rlc_fw_version = le32_to_cpu(rlc_hdr->header.ucode_version);
-       adev->gfx.rlc_feature_version = le32_to_cpu(rlc_hdr->ucode_feature_version);
-
-       adev->gfx.rlc.save_and_restore_offset =
-                       le32_to_cpu(rlc_hdr->save_and_restore_offset);
-       adev->gfx.rlc.clear_state_descriptor_offset =
-                       le32_to_cpu(rlc_hdr->clear_state_descriptor_offset);
-       adev->gfx.rlc.avail_scratch_ram_locations =
-                       le32_to_cpu(rlc_hdr->avail_scratch_ram_locations);
-       adev->gfx.rlc.reg_restore_list_size =
-                       le32_to_cpu(rlc_hdr->reg_restore_list_size);
-       adev->gfx.rlc.reg_list_format_start =
-                       le32_to_cpu(rlc_hdr->reg_list_format_start);
-       adev->gfx.rlc.reg_list_format_separate_start =
-                       le32_to_cpu(rlc_hdr->reg_list_format_separate_start);
-       adev->gfx.rlc.starting_offsets_start =
-                       le32_to_cpu(rlc_hdr->starting_offsets_start);
-       adev->gfx.rlc.reg_list_format_size_bytes =
-                       le32_to_cpu(rlc_hdr->reg_list_format_size_bytes);
-       adev->gfx.rlc.reg_list_size_bytes =
-                       le32_to_cpu(rlc_hdr->reg_list_size_bytes);
-
-       adev->gfx.rlc.register_list_format =
-                       kmalloc(adev->gfx.rlc.reg_list_format_size_bytes +
-                                       adev->gfx.rlc.reg_list_size_bytes, GFP_KERNEL);
-
-       if (!adev->gfx.rlc.register_list_format) {
-               err = -ENOMEM;
+       if (err)
                goto out;
+       rlc_hdr = (const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data;
+       if (!rlc_hdr) {
+               dev_err(adev->dev, "invalid rlc fw data\n");
+               return -EINVAL;
        }

[Kevin]:
If variable of rlc_hdr is "NULL", the driver will get a data abort in amdgpu_ucode_validate() first, so I think the function "dev_err()" should never be called.
May be this error has been returned in previous position. (maybe in err = request_firmware()).

Thanks.

Best Regards,
Kevin
-
-       tmp = (unsigned int *)((uintptr_t)rlc_hdr +
-                       le32_to_cpu(rlc_hdr->reg_list_format_array_offset_bytes));
-       for (i = 0 ; i < (adev->gfx.rlc.reg_list_format_size_bytes >> 2); i++)
-               adev->gfx.rlc.register_list_format[i] = le32_to_cpu(tmp[i]);
-
-       adev->gfx.rlc.register_restore = adev->gfx.rlc.register_list_format + i;
-
-       tmp = (unsigned int *)((uintptr_t)rlc_hdr +
-                       le32_to_cpu(rlc_hdr->reg_list_array_offset_bytes));
-       for (i = 0 ; i < (adev->gfx.rlc.reg_list_size_bytes >> 2); i++)
-               adev->gfx.rlc.register_restore[i] = le32_to_cpu(tmp[i]);
+       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);
+       if (err)
+               goto out;

        if (adev->asic_type >= CHIP_POLARIS10 && adev->asic_type <= CHIP_POLARIS12) {
                snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec_2.bin", chip_name); @@ -1178,13 +1147,6 @@ static int gfx_v8_0_init_microcode(struct amdgpu_device *adev)
        adev->firmware.fw_size +=
                ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE);

-       info = &adev->firmware.ucode[AMDGPU_UCODE_ID_RLC_G];
-       info->ucode_id = AMDGPU_UCODE_ID_RLC_G;
-       info->fw = adev->gfx.rlc_fw;
-       header = (const struct common_firmware_header *)info->fw->data;
-       adev->firmware.fw_size +=
-               ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE);
-
        info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1];
        info->ucode_id = AMDGPU_UCODE_ID_CP_MEC1;
        info->fw = adev->gfx.mec_fw;
--
2.17.1


  reply	other threads:[~2022-09-19  5:25 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-15 17:01 [PATCH 00/10] switch to common helper for rlc fw init Hawking Zhang
2022-09-15 17:01 ` [PATCH 01/10] drm/amdgpu: add helper to init rlc fw in header v2_0 Hawking Zhang
2022-09-15 17:01 ` [PATCH 02/10] drm/amdgpu: add helper to init rlc fw in header v2_1 Hawking Zhang
2022-09-15 17:01 ` [PATCH 03/10] drm/amdgpu: add helper to init rlc fw in header v2_2 Hawking Zhang
2022-09-18 17:15   ` Wang, Yang(Kevin)
2022-09-19  2:31     ` Zhang, Hawking
2022-09-15 17:01 ` [PATCH 04/10] drm/amdgpu: add helper to init rlc fw in header v2_3 Hawking Zhang
2022-09-15 17:01 ` [PATCH 05/10] drm/amdgpu: add helper to init rlc fw in header v2_4 Hawking Zhang
2022-09-15 17:01 ` [PATCH 06/10] drm/amdgpu: add helper to init rlc firmware Hawking Zhang
2022-09-15 17:01 ` [PATCH 07/10] drm/amdgpu/gfx8: switch to amdgpu_gfx_rlc_init_microcode Hawking Zhang
2022-09-19  5:25   ` Wang, Yang(Kevin) [this message]
2022-09-15 17:01 ` [PATCH 08/10] drm/amdgpu/gfx9: " Hawking Zhang
2022-09-15 17:01 ` [PATCH 09/10] drm/amdgpu/gfx10: " Hawking Zhang
2022-09-23 21:36   ` Deucher, Alexander
2022-09-24  7:14     ` Zhang, Hawking
2022-09-28 17:40       ` Dmitry Osipenko
2022-09-28 17:44         ` Deucher, Alexander
2022-09-28 17:47           ` Dmitry Osipenko
2022-09-28 19:06             ` Dmitry Osipenko
2022-09-28 19:32               ` Alex Deucher
2022-09-29 18:08                 ` Dmitry Osipenko
2022-09-15 17:01 ` [PATCH 10/10] drm/amdgpu/gfx11: " Hawking Zhang
2022-09-15 17:13 ` [PATCH 00/10] switch to common helper for rlc fw init Christian König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=PH7PR12MB599773434B137AC9F487C5C0824D9@PH7PR12MB5997.namprd12.prod.outlook.com \
    --to=kevinyang.wang@amd.com \
    --cc=Alexander.Deucher@amd.com \
    --cc=Hawking.Zhang@amd.com \
    --cc=Likun.Gao@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.