On Tue, Aug 6, 2024 at 11:37 PM Khatri, Sunil <sukha...@amd.com> wrote:
>
>
> On 8/7/2024 3:02 AM, Alex Deucher wrote:
> > On Tue, Aug 6, 2024 at 4:18 AM Sunil Khatri <sunil.kha...@amd.com> wrote:
> >> Add support for logging the registers in devcoredump
> >> buffer for vcn_v4_0_3.
> >>
> >> Signed-off-by: Sunil Khatri <sunil.kha...@amd.com>
> >> ---
> >>   drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 34 ++++++++++++++++++++++++-
> >>   1 file changed, 33 insertions(+), 1 deletion(-)
> >>
> >> 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 dd3baccb2904..033e5c88527c 100644
> >> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> >> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> >> @@ -1823,6 +1823,38 @@ static void vcn_v4_0_3_set_irq_funcs(struct 
> >> amdgpu_device *adev)
> >>          adev->vcn.inst->irq.funcs = &vcn_v4_0_3_irq_funcs;
> >>   }
> >>
> >> +static void vcn_v4_0_3_print_ip_state(void *handle, struct drm_printer *p)
> >> +{
> >> +       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> >> +       int i, j;
> >> +       uint32_t reg_count = ARRAY_SIZE(vcn_reg_list_4_0_3);
> >> +       uint32_t inst_off, is_powered;
> >> +
> >> +       if (!adev->vcn.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;
> >> +               }
> >> +
> >> +               inst_off = i * reg_count;
> >> +               is_powered = (adev->vcn.ip_dump[inst_off] &
> >> +                               UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) 
> >> != 1;
> > Actually, we shouldn't be checking whether or not VCN is powered up
> > when we print the results.  We've already stored the registers so we
> > don't care if VCN is powered at this point or not.  VCN could be
> > powered down by the time we print this.  It would be better to just
> > store a flag to determine whether or not we logged the registers in
> > the first place, then use that to determine whether or not we print
> > anything.  Same comment for the other VCN print_ip_state callbacks.
> This is exactly the same being done here.
>
> is_powered = (adev->vcn.ip_dump[inst_off] &
> +                               UVD_POWER_STATUS__UVD_POWER_STATUS_MASK) != 1;
> The above is already stored at the time of capturing the dump, i am just 
> checking the value to make sure if it was
> powered up at the time of dump and if yes then add logs to devcore dump else 
> skip. Its done this way rather than using a variable as there could
> be multiple instances of VCN and one may be powered or not so power state is 
> captured for each instance and based on that value only its we are printing 
> or logging in devcoredump.

Ah, yes, you are right.  My brain misread that.

Alex

>
> Regards
> Sunil khatri
>
> >
> > Alex
> >
> >> +
> >> +               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_4_0_3[j].reg_name,
> >> +                                          adev->vcn.ip_dump[inst_off + 
> >> j]);
> >> +               } else {
> >> +                       drm_printf(p, "\nInactive Instance:VCN%d\n", i);
> >> +               }
> >> +       }
> >> +}
> >> +
> >>   static void vcn_v4_0_3_dump_ip_state(void *handle)
> >>   {
> >>          struct amdgpu_device *adev = (struct amdgpu_device *)handle;
> >> @@ -1871,7 +1903,7 @@ static const struct amd_ip_funcs vcn_v4_0_3_ip_funcs 
> >> = {
> >>          .set_clockgating_state = vcn_v4_0_3_set_clockgating_state,
> >>          .set_powergating_state = vcn_v4_0_3_set_powergating_state,
> >>          .dump_ip_state = vcn_v4_0_3_dump_ip_state,
> >> -       .print_ip_state = NULL,
> >> +       .print_ip_state = vcn_v4_0_3_print_ip_state,
> >>   };
> >>
> >>   const struct amdgpu_ip_block_version vcn_v4_0_3_ip_block = {
> >> --
> >> 2.34.1
> >>

Reply via email to