From: "Lazar, Lijo" <lijo.lazar@amd.com>
To: Xiang Liu <xiang.liu@amd.com>,
amd-gfx@lists.freedesktop.org, alexander.deucher@amd.com,
christian.koenig@amd.com, leo.liu@amd.com, hawking.zhang@amd.com
Cc: david.wu3@amd.com
Subject: Re: [PATCH] drm/amdgpu/vcn: reset fw_shared when VCPU buffers corrupted on vcn v4.0.3
Date: Tue, 19 Nov 2024 17:52:18 +0530 [thread overview]
Message-ID: <8a6f8b0a-96fc-4ef0-812a-04bd129a5232@amd.com> (raw)
In-Reply-To: <20241119105739.1047372-1-xiang.liu@amd.com>
On 11/19/2024 4:27 PM, Xiang Liu wrote:
> In the case of RAS err_event_athub, the VCPU buffers are corrupted and
For a better description -
It is not necessarily corrupted. When there is RAS fatal error, device
memory access is blocked. Hence vcpu bo cannot be saved to system memory
as in a regular suspend sequence before going for reset. In other full
device reset cases, that gets saved and restored during resume.
Thanks,
Lijo
> cannot be restored in amdgpu_vcn_resume(), the buffers are cleared to 0
> for good. However, the fw_shared stored in the buffers need to be reset
> , or the firmware cannot work properly.
>
> v2: Remove redundant code like vcn_v4_0 did
> v2: Refine commit message
>
> Signed-off-by: Xiang Liu <xiang.liu@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 32 ++++++++++++++++++-------
> 1 file changed, 23 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> index d011e4678ca1..cf8264bf45c5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> @@ -123,6 +123,20 @@ static int vcn_v4_0_3_early_init(struct amdgpu_ip_block *ip_block)
> return amdgpu_vcn_early_init(adev);
> }
>
> +static int vcn_v4_0_3_fw_shared_init(struct amdgpu_device *adev, int inst_idx)
> +{
> + volatile struct amdgpu_vcn4_fw_shared *fw_shared;
> +
> + fw_shared = adev->vcn.inst[inst_idx].fw_shared.cpu_addr;
> + fw_shared->present_flag_0 = cpu_to_le32(AMDGPU_FW_SHARED_FLAG_0_UNIFIED_QUEUE);
> + fw_shared->sq.is_enabled = 1;
> +
> + if (amdgpu_vcnfw_log)
> + amdgpu_vcn_fwlog_init(&adev->vcn.inst[inst_idx]);
> +
> + return 0;
> +}
> +
> /**
> * vcn_v4_0_3_sw_init - sw init for VCN block
> *
> @@ -155,8 +169,6 @@ static int vcn_v4_0_3_sw_init(struct amdgpu_ip_block *ip_block)
> return r;
>
> for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
> - volatile struct amdgpu_vcn4_fw_shared *fw_shared;
> -
> vcn_inst = GET_INST(VCN, i);
>
> ring = &adev->vcn.inst[i].ring_enc[0];
> @@ -179,12 +191,7 @@ static int vcn_v4_0_3_sw_init(struct amdgpu_ip_block *ip_block)
> if (r)
> return r;
>
> - fw_shared = adev->vcn.inst[i].fw_shared.cpu_addr;
> - fw_shared->present_flag_0 = cpu_to_le32(AMDGPU_FW_SHARED_FLAG_0_UNIFIED_QUEUE);
> - fw_shared->sq.is_enabled = true;
> -
> - if (amdgpu_vcnfw_log)
> - amdgpu_vcn_fwlog_init(&adev->vcn.inst[i]);
> + vcn_v4_0_3_fw_shared_init(adev, i);
> }
>
> if (amdgpu_sriov_vf(adev)) {
> @@ -234,7 +241,7 @@ static int vcn_v4_0_3_sw_fini(struct amdgpu_ip_block *ip_block)
>
> fw_shared = adev->vcn.inst[i].fw_shared.cpu_addr;
> fw_shared->present_flag_0 = 0;
> - fw_shared->sq.is_enabled = cpu_to_le32(false);
> + fw_shared->sq.is_enabled = 0;
> }
> drm_dev_exit(idx);
> }
> @@ -280,6 +287,8 @@ static int vcn_v4_0_3_hw_init(struct amdgpu_ip_block *ip_block)
> }
> } else {
> for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> + volatile struct amdgpu_vcn4_fw_shared *fw_shared;
> +
> vcn_inst = GET_INST(VCN, i);
> ring = &adev->vcn.inst[i].ring_enc[0];
>
> @@ -303,6 +312,11 @@ static int vcn_v4_0_3_hw_init(struct amdgpu_ip_block *ip_block)
> regVCN_RB1_DB_CTRL);
> }
>
> + /* Re-init fw_shared when RAS err_event_athub corrupt the VCPU buffers */
> + fw_shared = adev->vcn.inst[i].fw_shared.cpu_addr;
> + if (!fw_shared->sq.is_enabled)
> + vcn_v4_0_3_fw_shared_init(adev, i);
> +
> r = amdgpu_ring_test_helper(ring);
> if (r)
> return r;
next prev parent reply other threads:[~2024-11-19 12:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-18 9:47 [PATCH] drm/amdgpu/vcn: reset firmware flags after VCPU buffers are cleared to 0 Xiang Liu
2024-11-19 10:57 ` [PATCH] drm/amdgpu/vcn: reset fw_shared when VCPU buffers corrupted on vcn v4.0.3 Xiang Liu
2024-11-19 11:57 ` Christian König
2024-11-19 12:22 ` Lazar, Lijo [this message]
2024-11-20 12:34 ` Xiang Liu
2024-11-20 12:48 ` Christian König
2024-11-21 2:34 ` Yang, Stanley
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=8a6f8b0a-96fc-4ef0-812a-04bd129a5232@amd.com \
--to=lijo.lazar@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=david.wu3@amd.com \
--cc=hawking.zhang@amd.com \
--cc=leo.liu@amd.com \
--cc=xiang.liu@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.