From: Luben Tuikov <luben.tuikov@amd.com>
To: Alex Deucher <alexdeucher@gmail.com>
Cc: Alex Deucher <alexander.deucher@amd.com>,
Huang Rui <ray.huang@amd.com>,
amd-gfx list <amd-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 36/45] drm/amdgpu: add TOC firmware support for apu (v2)
Date: Tue, 29 Sep 2020 15:02:35 -0400 [thread overview]
Message-ID: <fe68afee-d9c6-e320-882e-d8d2dd8aacca@amd.com> (raw)
In-Reply-To: <CADnq5_Op9sobQ18HDjQ9TKwcQdhGYQP28CbFQEVCcMLFMZhuyQ@mail.gmail.com>
On 2020-09-29 11:09 a.m., Alex Deucher wrote:
> On Mon, Sep 28, 2020 at 6:26 PM Luben Tuikov <luben.tuikov@amd.com> wrote:
>>
>> On 2020-09-25 4:10 p.m., Alex Deucher wrote:
>>> From: Huang Rui <ray.huang@amd.com>
>>>
>>> APU needs load toc firmware for gfx10 series on psp front door loading.
>>>
>>> v2: rebase against latest code
>>>
>>> Signed-off-by: Huang Rui <ray.huang@amd.com>
>>> Acked-by: Alex Deucher <alexander.deucher@amd.com>
>>> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 11 ++++++++
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 36 +++++++++++++++++++++++++
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 7 +++++
>>> drivers/gpu/drm/amd/amdgpu/psp_v11_0.c | 33 ++++++++++++++++-------
>>> 4 files changed, 77 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> index bd0d14419841..26caa8d43483 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> @@ -325,6 +325,10 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info,
>>> fw_info->ver = adev->dm.dmcub_fw_version;
>>> fw_info->feature = 0;
>>> break;
>>> + case AMDGPU_INFO_FW_TOC:
>>> + fw_info->ver = adev->psp.toc_fw_version;
>>> + fw_info->feature = adev->psp.toc_feature_version;
>>> + break;
>>> default:
>>> return -EINVAL;
>>> }
>>> @@ -1464,6 +1468,13 @@ static int amdgpu_debugfs_firmware_info(struct seq_file *m, void *data)
>>> seq_printf(m, "DMCUB feature version: %u, firmware version: 0x%08x\n",
>>> fw_info.feature, fw_info.ver);
>>>
>>> + /* TOC */
>>> + query_fw.fw_type = AMDGPU_INFO_FW_TOC;
>>> + ret = amdgpu_firmware_info(&fw_info, &query_fw, adev);
>>> + if (ret)
>>> + return ret;
>>> + seq_printf(m, "TOC feature version: %u, firmware version: 0x%08x\n",
>>> + fw_info.feature, fw_info.ver);
>>>
>>> seq_printf(m, "VBIOS version: %s\n", ctx->vbios_version);
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> index 18be544d8c1e..c8cec7ab499d 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> @@ -2415,6 +2415,42 @@ int psp_init_asd_microcode(struct psp_context *psp,
>>> return err;
>>> }
>>>
>>> +int psp_init_toc_microcode(struct psp_context *psp,
>>> + const char *chip_name)
>>> +{
>>> + struct amdgpu_device *adev = psp->adev;
>>> + char fw_name[30];
>>> + const struct psp_firmware_header_v1_0 *toc_hdr;
>>> + int err = 0;
>>> +
>>> + if (!chip_name) {
>>> + dev_err(adev->dev, "invalid chip name for toc microcode\n");
>>> + return -EINVAL;
>>> + }
>>> +
>>> + snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_toc.bin", chip_name);
>>> + err = request_firmware(&adev->psp.toc_fw, fw_name, adev->dev);
>>> + if (err)
>>> + goto out;
>>> +
>>> + err = amdgpu_ucode_validate(adev->psp.toc_fw);
>>> + if (err)
>>> + goto out;
>>> +
>>> + toc_hdr = (const struct psp_firmware_header_v1_0 *)adev->psp.toc_fw->data;
>>> + adev->psp.toc_fw_version = le32_to_cpu(toc_hdr->header.ucode_version);
>>> + adev->psp.toc_feature_version = le32_to_cpu(toc_hdr->ucode_feature_version);
>>> + adev->psp.toc_bin_size = le32_to_cpu(toc_hdr->header.ucode_size_bytes);
>>> + adev->psp.toc_start_addr = (uint8_t *)toc_hdr +
>>> + le32_to_cpu(toc_hdr->header.ucode_array_offset_bytes);
>>> + return 0;
>>> +out:
>>
>> I'd rather this label be "Err:".
>>
>> Regardless of whether there already is a variable "err",
>> (there is!), capitalizing goto labels is good practice, since
>> it distinguishes them from variables (which are all lowercase),
>> and macros (which are all caps). Plus, you also avoid conflict
>> with the eponymous variable.
>>
>
> I see your point, but I find random caps in code hard to read.
They wouldn't be random. They're only the names of goto labels,
kind of like when chapters of books or sections of papers are
capitalized. I think it would be good and visually distinctive.
FWIW, I've picked this capitalization of goto labels only,
*from the Linux kernel.* I liked it and I think it makes sense.
I certainly didn't come up with it myself.
Regards,
Luben
>
>>> + dev_err(adev->dev, "fail to initialize toc microcode\n");
>>
>> That's a very misleading message. Please print this instead:
>>
>> dev_err(adev->dev,
>> "Failed to load/validate firmware for %s\n",
>> fw_name);
>>
>> To make it clear what was being loaded and validated and failed.
>>
>
> Updated.
>
> Thanks,
>
> Alex
>
>> Regards,
>> Luben
>>
>>> + release_firmware(adev->psp.toc_fw);
>>> + adev->psp.toc_fw = NULL;
>>> + return err;
>>> +}
>>> +
>>> int psp_init_sos_microcode(struct psp_context *psp,
>>> const char *chip_name)
>>> {
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
>>> index 919d2fb7427b..13f56618660a 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
>>> @@ -253,6 +253,11 @@ struct psp_context
>>> uint32_t asd_ucode_size;
>>> uint8_t *asd_start_addr;
>>>
>>> + /* toc firmware */
>>> + const struct firmware *toc_fw;
>>> + uint32_t toc_fw_version;
>>> + uint32_t toc_feature_version;
>>> +
>>> /* fence buffer */
>>> struct amdgpu_bo *fence_buf_bo;
>>> uint64_t fence_buf_mc_addr;
>>> @@ -386,6 +391,8 @@ int psp_ring_cmd_submit(struct psp_context *psp,
>>> int index);
>>> 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);
>>> int psp_init_sos_microcode(struct psp_context *psp,
>>> const char *chip_name);
>>> int psp_init_ta_microcode(struct psp_context *psp,
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
>>> index 6c5d9612abcb..f2d6b2518eee 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
>>> @@ -109,20 +109,16 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
>>> BUG();
>>> }
>>>
>>> - err = psp_init_sos_microcode(psp, chip_name);
>>> - if (err)
>>> - return err;
>>> -
>>> - if (adev->asic_type != CHIP_SIENNA_CICHLID &&
>>> - adev->asic_type != CHIP_NAVY_FLOUNDER) {
>>> - err = psp_init_asd_microcode(psp, chip_name);
>>> - if (err)
>>> - return err;
>>> - }
>>>
>>> switch (adev->asic_type) {
>>> case CHIP_VEGA20:
>>> case CHIP_ARCTURUS:
>>> + err = psp_init_sos_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> + err = psp_init_asd_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name);
>>> err = request_firmware(&adev->psp.ta_fw, fw_name, adev->dev);
>>> if (err) {
>>> @@ -150,6 +146,12 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
>>> case CHIP_NAVI10:
>>> case CHIP_NAVI14:
>>> case CHIP_NAVI12:
>>> + err = psp_init_sos_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> + err = psp_init_asd_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> if (amdgpu_sriov_vf(adev))
>>> break;
>>> snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ta.bin", chip_name);
>>> @@ -180,10 +182,21 @@ static int psp_v11_0_init_microcode(struct psp_context *psp)
>>> break;
>>> case CHIP_SIENNA_CICHLID:
>>> case CHIP_NAVY_FLOUNDER:
>>> + err = psp_init_sos_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> err = psp_init_ta_microcode(&adev->psp, chip_name);
>>> if (err)
>>> return err;
>>> break;
>>> + case CHIP_VANGOGH:
>>> + err = psp_init_asd_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> + err = psp_init_toc_microcode(psp, chip_name);
>>> + if (err)
>>> + return err;
>>> + break;
>>> default:
>>> BUG();
>>> }
>>>
>>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2020-09-29 19:02 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 20:09 [PATCH 00/45] Add support for vangoh Alex Deucher
2020-09-25 20:09 ` [PATCH 02/45] drm/amdgpu: add van gogh asic_type enum (v2) Alex Deucher
2020-09-25 20:09 ` [PATCH 03/45] drm/amdgpu: add uapi to define van gogh series Alex Deucher
2020-09-25 20:09 ` [PATCH 04/45] drm/amdgpu: add van gogh support for gpu_info and ip block setting Alex Deucher
2020-09-25 20:09 ` [PATCH 05/45] drm/amdgpu: add vangogh_reg_base_init function for van gogh Alex Deucher
2020-09-28 20:48 ` Luben Tuikov
2020-09-29 14:57 ` Alex Deucher
2020-09-29 18:59 ` Luben Tuikov
2020-09-29 20:15 ` Alex Deucher
2020-09-25 20:09 ` [PATCH 06/45] drm/amdgpu: add nv common ip block support " Alex Deucher
2020-09-28 20:50 ` Luben Tuikov
2020-09-25 20:09 ` [PATCH 07/45] drm/amdgpu: skip sdma1 in nv_allowed_read_registers list for van gogh (v2) Alex Deucher
2020-09-28 20:52 ` Luben Tuikov
2020-09-29 14:37 ` Alex Deucher
2020-09-25 20:09 ` [PATCH 08/45] drm/amdgpu: add van gogh support for ih block Alex Deucher
2020-09-25 20:09 ` [PATCH 09/45] drm/amdgpu: use gpu virtual address for interrupt packet write space for vangogh Alex Deucher
2020-09-28 20:57 ` Luben Tuikov
2020-09-29 15:02 ` Alex Deucher
2020-09-25 20:09 ` [PATCH 10/45] drm/amdgpu: add uapi to define van gogh memory type Alex Deucher
2020-09-25 20:09 ` [PATCH 11/45] drm/amdgpu: update new memory types in atomfirmware header Alex Deucher
2020-09-25 20:09 ` [PATCH 12/45] drm/amdgpu/atomfirmware: Add edp and integrated info v2.1 tables Alex Deucher
2020-09-25 20:09 ` [PATCH 13/45] drm/amdgpu: get the correct vram type for van gogh Alex Deucher
2020-09-25 20:09 ` [PATCH 14/45] drm/amdgpu: add gmc v10 supports for van gogh (v3) Alex Deucher
2020-09-25 20:09 ` [PATCH 15/45] drm/amdgpu: set fw load type for van gogh Alex Deucher
2020-09-25 20:10 ` [PATCH 16/45] drm/amdgpu: add gfx support for van gogh (v2) Alex Deucher
2020-09-28 20:18 ` [PATCH] drm/amdgpu: fix perms of gfx_v10_0.c Luben Tuikov
2020-09-30 18:07 ` Alex Deucher
2020-09-25 20:10 ` [PATCH 17/45] drm/amdgpu: add gfx golden settings for vangogh (v3) Alex Deucher
2020-09-25 20:10 ` [PATCH 18/45] drm/amdgpu/gfx10: add updated register offsets for VGH Alex Deucher
2020-09-25 20:10 ` [PATCH 19/45] drm/amdgpu: add sdma support for van gogh Alex Deucher
2020-09-25 20:10 ` [PATCH 20/45] drm/amdgpu: set ip blocks " Alex Deucher
2020-09-25 20:10 ` [PATCH 21/45] drm/amdkfd: add Van Gogh KFD support Alex Deucher
2020-09-25 20:10 ` [PATCH 22/45] drm/amdgpu: add mmhub v2.3 for vangogh (v4) Alex Deucher
2020-09-25 20:10 ` [PATCH 23/45] drm/amdgpu: enable vcn3.0 for van gogh Alex Deucher
2020-09-25 20:10 ` [PATCH 24/45] drm/amdgpu: add pcie port indirect read and write on nv Alex Deucher
2020-09-25 20:10 ` [PATCH 25/45] drm/amdgpu: add nbio v7.2 for vangogh (v2) Alex Deucher
2020-09-25 20:10 ` [PATCH 26/45] drm/amdgpu/powerplay: add new smu messages and feature masks " Alex Deucher
2020-09-25 20:10 ` [PATCH 27/45] drm/admgpu/powerplay: add smu v11.5 driver interface header for vangogh Alex Deucher
2020-09-28 21:41 ` Luben Tuikov
2020-09-29 14:39 ` Alex Deucher
2020-09-25 20:10 ` [PATCH 28/45] drm/amdgpu/powerplay: add smu v11.5 firmware header for vangogh (v2) Alex Deucher
2020-09-25 20:10 ` [PATCH 29/45] drm/amdgpu/powerplay: add smu v11.5 smc header for vangogh Alex Deucher
2020-09-25 20:10 ` [PATCH 30/45] drm/amdgpu/powerplay: add vangogh asic name in smu v11 (v2) Alex Deucher
2020-09-25 20:10 ` [PATCH 31/45] drm/amdgpu/powerplay: add smu initialize funcitons for vangogh (v2) Alex Deucher
2020-09-25 20:10 ` [PATCH 32/45] drm/amd/powerplay: partially enable swsmu for vangogh Alex Deucher
2020-09-25 20:10 ` [PATCH 33/45] drm/amd/powerplay: add vangogh ppt into swSMU Alex Deucher
2020-09-25 20:10 ` [PATCH 34/45] drm/amdgpu: add smu ip block for vangogh Alex Deucher
2020-09-25 20:10 ` [PATCH 35/45] drm/amdgpu: add TOC firmware definition Alex Deucher
2020-09-25 20:10 ` [PATCH 36/45] drm/amdgpu: add TOC firmware support for apu (v2) Alex Deucher
2020-09-28 22:26 ` Luben Tuikov
2020-09-29 15:09 ` Alex Deucher
2020-09-29 19:02 ` Luben Tuikov [this message]
2020-09-30 1:15 ` gfx timeout and GPU reset while hundreds apps run on AMD GPU wales wang
2020-09-25 20:10 ` [PATCH 37/45] drm/amdgpu: enable psp support for vangogh Alex Deucher
2020-09-25 20:10 ` [PATCH 38/45] drm/amdgpu: disable gfxoff on vangogh for the moment (v2) Alex Deucher
2020-09-25 20:10 ` [PATCH 39/45] drm/amdgpu: IP discovery table is not ready yet for VG Alex Deucher
2020-09-25 20:10 ` [PATCH 40/45] drm/amdgpu/mmhub2.3: print client id string for mmhub Alex Deucher
2020-09-25 20:10 ` [PATCH 41/45] drm/amdgpu: add gfx power gating for gfx10 Alex Deucher
2020-09-28 22:48 ` Luben Tuikov
2020-09-29 15:13 ` Alex Deucher
2020-09-25 20:10 ` [PATCH 42/45] drm/amdgpu: enable gfx clock gating and power gating for vangogh Alex Deucher
2020-09-25 20:10 ` [PATCH 43/45] drm/amd/display: Add dcn3.01 support to DC Alex Deucher
2020-09-25 20:10 ` [PATCH 44/45] drm/amd/display: Add dcn3.01 support to DM Alex Deucher
2020-09-25 20:10 ` [PATCH 45/45] drm/amdgpu: add van gogh pci id Alex Deucher
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=fe68afee-d9c6-e320-882e-d8d2dd8aacca@amd.com \
--to=luben.tuikov@amd.com \
--cc=alexander.deucher@amd.com \
--cc=alexdeucher@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=ray.huang@amd.com \
/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.