AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Khatri, Sunil" <sunil.khatri@amd.com>
To: "Christian König" <christian.koenig@amd.com>,
	"Alex Deucher" <alexander.deucher@amd.com>,
	"Leo Liu" <leo.liu@amd.com>,
	"Boyuan Zhang" <boyuan.zhang@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH v1 1/9] drm/amdgpu: update vcn_v1 devcoredump on per instance basis
Date: Mon, 4 Nov 2024 09:34:42 +0530	[thread overview]
Message-ID: <04d8f83c-8d14-78cc-c8ad-29a8a4234190@amd.com> (raw)
In-Reply-To: <446d84ed-9a45-4125-8618-9a1ad3dea5f5@amd.com>

On 10/31/2024 3:16 PM, Christian König wrote:
> Am 29.10.24 um 14:50 schrieb Sunil Khatri:
>> vcn code is restructured for per instance basis. Each
>> vcn instance is represented by an ip_block and hence a
>> need to update the dump and print functions for each
>> instance as an IP.
>>
>> Existing way was to capture the ip dump for each instance
>> in a same memory dump but now each ip_block of vcn is an
>> independent one and its memory is independent and handled
>> within the ip_block now.
>>
>> Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu.h   |  2 +
>>   drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 77 +++++++++++++--------------
>>   2 files changed, 39 insertions(+), 40 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index d4c8cc3c1730..ef564ddcfcbb 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -392,6 +392,8 @@ struct amdgpu_ip_block {
>>       const struct amdgpu_ip_block_version *version;
>>       struct amdgpu_device *adev;
>>       unsigned int instance;
>> +    /* IP reg dump */
>
> That comment could be improved, something like "Memory to dump IP 
> registers and state in GPU reset handling".
> Sure will update the commit message as you suggested.
>
> Apart from that feel free to add Reviewed-by: Christian König 
> <christian.koenig@amd.com> to the patch.
>
> Regards,
> Christian.
>
>> +    uint32_t *ip_dump;
>>   };
>>     int amdgpu_device_ip_block_version_cmp(struct amdgpu_device *adev,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c 
>> b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> index 7638ddeccec7..f31fdd620c86 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
>> @@ -203,12 +203,12 @@ static int vcn_v1_0_sw_init(struct 
>> amdgpu_ip_block *ip_block)
>>       r = jpeg_v1_0_sw_init(ip_block);
>>         /* Allocate memory for VCN IP Dump buffer */
>> -    ptr = kcalloc(adev->vcn.num_vcn_inst * reg_count, 
>> sizeof(uint32_t), GFP_KERNEL);
>> +    ptr = kcalloc(reg_count, sizeof(uint32_t), GFP_KERNEL);
>>       if (!ptr) {
>>           DRM_ERROR("Failed to allocate memory for VCN IP Dump\n");
>> -        adev->vcn.ip_dump = NULL;
>> +        ip_block->ip_dump = NULL;
>>       } else {
>> -        adev->vcn.ip_dump = ptr;
>> +        ip_block->ip_dump = ptr;
>>       }
>>       return r;
>>   }
>> @@ -234,7 +234,7 @@ static int vcn_v1_0_sw_fini(struct 
>> amdgpu_ip_block *ip_block)
>>         r = amdgpu_vcn_sw_fini(adev, inst);
>>   -    kfree(adev->vcn.ip_dump);
>> +    kfree(ip_block->ip_dump);
>>         return r;
>>   }
>> @@ -1933,61 +1933,58 @@ void vcn_v1_0_ring_end_use(struct amdgpu_ring 
>> *ring)
>>   static void vcn_v1_0_print_ip_state(struct amdgpu_ip_block 
>> *ip_block, struct drm_printer *p)
>>   {
>>       struct amdgpu_device *adev = ip_block->adev;
>> -    int i, j;
>> +    int i;
>>       uint32_t reg_count = ARRAY_SIZE(vcn_reg_list_1_0);
>> -    uint32_t inst_off, is_powered;
>> +    uint32_t is_powered;
>> +    int inst = ip_block->instance;
>>   -    if (!adev->vcn.ip_dump)
>> +    if (!ip_block->ip_dump)
>>           return;
>>   -    drm_printf(p, "num_instances:%d\n", adev->vcn.num_vcn_inst);
>> -    for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
>> -        if (adev->vcn.harvest_config & (1 << i)) {
>> -            drm_printf(p, "\nHarvested Instance:VCN%d Skipping 
>> dump\n", i);
>> -            continue;
>> -        }
>> +    drm_printf(p, "Instance no:VCN%d\n", inst);
>>   -        inst_off = i * reg_count;
>> -        is_powered = (adev->vcn.ip_dump[inst_off] &
>> -                UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) != 1;
>> +    if (adev->vcn.harvest_config & (1 << inst)) {
>> +        drm_printf(p, "\nHarvested Instance:VCN%d Skipping dump\n", 
>> inst);
>> +        return;
>> +    }
>>   -        if (is_powered) {
>> -            drm_printf(p, "\nActive Instance:VCN%d\n", i);
>> -            for (j = 0; j < reg_count; j++)
>> -                drm_printf(p, "%-50s \t 0x%08x\n", 
>> vcn_reg_list_1_0[j].reg_name,
>> -                       adev->vcn.ip_dump[inst_off + j]);
>> -        } else {
>> -            drm_printf(p, "\nInactive Instance:VCN%d\n", i);
>> -        }
>> +    is_powered = (ip_block->ip_dump[0] &
>> +              UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) != 1;
>> +
>> +    if (is_powered) {
>> +        drm_printf(p, "\nActive Instance:VCN%d\n", inst);
>> +        for (i = 0; i < reg_count; i++)
>> +            drm_printf(p, "%-50s \t 0x%08x\n",
>> +                   vcn_reg_list_1_0[i].reg_name,
>> +                   ip_block->ip_dump[i]);
>> +    } else {
>> +        drm_printf(p, "\nInactive Instance:VCN%d\n", inst);
>>       }
>>   }
>>     static void vcn_v1_0_dump_ip_state(struct amdgpu_ip_block *ip_block)
>>   {
>>       struct amdgpu_device *adev = ip_block->adev;
>> -    int i, j;
>> +    int i;
>> +    int inst = ip_block->instance;
>>       bool is_powered;
>> -    uint32_t inst_off;
>>       uint32_t reg_count = ARRAY_SIZE(vcn_reg_list_1_0);
>>   -    if (!adev->vcn.ip_dump)
>> +    if (!ip_block->ip_dump)
>>           return;
>>   -    for (i = 0; i < adev->vcn.num_vcn_inst; i++) {
>> -        if (adev->vcn.harvest_config & (1 << i))
>> -            continue;
>> +    if (adev->vcn.harvest_config & (1 << inst))
>> +        return;
>>   -        inst_off = i * reg_count;
>> -        /* mmUVD_POWER_STATUS is always readable and is first 
>> element of the array */
>> -        adev->vcn.ip_dump[inst_off] = RREG32_SOC15(VCN, i, 
>> mmUVD_POWER_STATUS);
>> -        is_powered = (adev->vcn.ip_dump[inst_off] &
>> -                UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) != 1;
>> +    /* mmUVD_POWER_STATUS is always readable and is first element of 
>> the array */
>> +    ip_block->ip_dump[0] = RREG32_SOC15(VCN, inst, mmUVD_POWER_STATUS);
>> +    is_powered = (ip_block->ip_dump[0] &
>> +              UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) != 1;
>>   -        if (is_powered)
>> -            for (j = 1; j < reg_count; j++)
>> -                adev->vcn.ip_dump[inst_off + j] =
>> - RREG32(SOC15_REG_ENTRY_OFFSET_INST(vcn_reg_list_1_0[j], i));
>> -    }
>> +    if (is_powered)
>> +        for (i = 1; i < reg_count; i++)
>> +            ip_block->ip_dump[i] =
>> + RREG32(SOC15_REG_ENTRY_OFFSET_INST(vcn_reg_list_1_0[i], inst));
>>   }
>>     static const struct amd_ip_funcs vcn_v1_0_ip_funcs = {
>

  reply	other threads:[~2024-11-04  4:04 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-29 13:50 [PATCH v1 0/9] update devcoredump for new VCN instance design Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 1/9] drm/amdgpu: update vcn_v1 devcoredump on per instance basis Sunil Khatri
2024-10-31  9:46   ` Christian König
2024-11-04  4:04     ` Khatri, Sunil [this message]
2024-10-29 13:50 ` [PATCH v1 2/9] drm/amdgpu: update vcn_v2.0 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 3/9] drm/amdgpu: update vcn_v2.5 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 4/9] drm/amdgpu: update vcn_v3.0 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 5/9] drm/amdgpu: update vcn_v4.0.3 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 6/9] drm/amdgpu: update vcn_v4.0.5 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 7/9] drm/amdgpu: update vcn_v4 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 8/9] drm/amdgpu: update vcn_v5.0 " Sunil Khatri
2024-10-29 13:50 ` [PATCH v1 9/9] drm/amdgpu: remove unused ip_dump from vcn device Sunil Khatri
2024-10-31  9:53   ` Christian König
2024-11-04  4:05     ` Khatri, Sunil

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=04d8f83c-8d14-78cc-c8ad-29a8a4234190@amd.com \
    --to=sunil.khatri@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=boyuan.zhang@amd.com \
    --cc=christian.koenig@amd.com \
    --cc=leo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox