drm/amdgpu: add ip_dump support for vcn 5.0.1
authorAlex Deucher <alexander.deucher@amd.com>
Tue, 10 Dec 2024 18:37:39 +0000 (13:37 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 11 Dec 2024 22:37:13 +0000 (17:37 -0500)
Shared with vcn 5.0.0.

Reviewed-by: David (Ming Qiang) Wu <David.Wu3@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.h
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.h

index 097b9ad1721fe43c35b15b2a0ba0614653b8d278..b6d78381ebfbc75b617bfe2e264a409a3efbef60 100644 (file)
@@ -105,6 +105,21 @@ static int vcn_v5_0_0_early_init(struct amdgpu_ip_block *ip_block)
        return amdgpu_vcn_early_init(adev);
 }
 
+void vcn_v5_0_0_alloc_ip_dump(struct amdgpu_device *adev)
+{
+       uint32_t reg_count = ARRAY_SIZE(vcn_reg_list_5_0);
+       uint32_t *ptr;
+
+       /* Allocate memory for VCN IP Dump buffer */
+       ptr = kcalloc(adev->vcn.num_vcn_inst * 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;
+       } else {
+               adev->vcn.ip_dump = ptr;
+       }
+}
+
 /**
  * vcn_v5_0_0_sw_init - sw init for VCN block
  *
@@ -117,8 +132,6 @@ static int vcn_v5_0_0_sw_init(struct amdgpu_ip_block *ip_block)
        struct amdgpu_ring *ring;
        struct amdgpu_device *adev = ip_block->adev;
        int i, r;
-       uint32_t reg_count = ARRAY_SIZE(vcn_reg_list_5_0);
-       uint32_t *ptr;
 
        r = amdgpu_vcn_sw_init(adev);
        if (r)
@@ -177,14 +190,7 @@ static int vcn_v5_0_0_sw_init(struct amdgpu_ip_block *ip_block)
        if (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG)
                adev->vcn.pause_dpg_mode = vcn_v5_0_0_pause_dpg_mode;
 
-       /* Allocate memory for VCN IP Dump buffer */
-       ptr = kcalloc(adev->vcn.num_vcn_inst * 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;
-       } else {
-               adev->vcn.ip_dump = ptr;
-       }
+       vcn_v5_0_0_alloc_ip_dump(adev);
 
        r = amdgpu_vcn_sysfs_reset_mask_init(adev);
        if (r)
@@ -1357,7 +1363,8 @@ static void vcn_v5_0_0_set_irq_funcs(struct amdgpu_device *adev)
        }
 }
 
-static void vcn_v5_0_print_ip_state(struct amdgpu_ip_block *ip_block, struct drm_printer *p)
+void vcn_v5_0_0_print_ip_state(struct amdgpu_ip_block *ip_block,
+                              struct drm_printer *p)
 {
        struct amdgpu_device *adev = ip_block->adev;
        int i, j;
@@ -1389,7 +1396,7 @@ static void vcn_v5_0_print_ip_state(struct amdgpu_ip_block *ip_block, struct drm
        }
 }
 
-static void vcn_v5_0_dump_ip_state(struct amdgpu_ip_block *ip_block)
+void vcn_v5_0_0_dump_ip_state(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
        int i, j;
@@ -1430,8 +1437,8 @@ static const struct amd_ip_funcs vcn_v5_0_0_ip_funcs = {
        .wait_for_idle = vcn_v5_0_0_wait_for_idle,
        .set_clockgating_state = vcn_v5_0_0_set_clockgating_state,
        .set_powergating_state = vcn_v5_0_0_set_powergating_state,
-       .dump_ip_state = vcn_v5_0_dump_ip_state,
-       .print_ip_state = vcn_v5_0_print_ip_state,
+       .dump_ip_state = vcn_v5_0_0_dump_ip_state,
+       .print_ip_state = vcn_v5_0_0_print_ip_state,
 };
 
 const struct amdgpu_ip_block_version vcn_v5_0_0_ip_block = {
index 51bbccd4360ffa1f665f99a0481d877cbf615a2e..b8927652bc50ca4874053b776bcc5a2e2f6830de 100644 (file)
 #define VCN_VID_IP_ADDRESS                         0x0
 #define VCN_AON_IP_ADDRESS                         0x30000
 
+void vcn_v5_0_0_alloc_ip_dump(struct amdgpu_device *adev);
+void vcn_v5_0_0_print_ip_state(struct amdgpu_ip_block *ip_block,
+                              struct drm_printer *p);
+void vcn_v5_0_0_dump_ip_state(struct amdgpu_ip_block *ip_block);
+
 extern const struct amdgpu_ip_block_version vcn_v5_0_0_ip_block;
 
 #endif /* __VCN_V5_0_0_H__ */
index daca18bfff062d9c66a897f386e1c4017c02ffa8..a076ffb3867acae439f13a21d73fc9c34f362703 100644 (file)
@@ -33,6 +33,7 @@
 #include "vcn/vcn_5_0_0_offset.h"
 #include "vcn/vcn_5_0_0_sh_mask.h"
 #include "ivsrcid/vcn/irqsrcs_vcn_5_0.h"
+#include "vcn_v5_0_0.h"
 #include "vcn_v5_0_1.h"
 
 #include <drm/drm_drv.h>
@@ -118,6 +119,8 @@ static int vcn_v5_0_1_sw_init(struct amdgpu_ip_block *ip_block)
                        amdgpu_vcn_fwlog_init(&adev->vcn.inst[i]);
        }
 
+       vcn_v5_0_0_alloc_ip_dump(adev);
+
        return 0;
 }
 
@@ -151,6 +154,8 @@ static int vcn_v5_0_1_sw_fini(struct amdgpu_ip_block *ip_block)
 
        r = amdgpu_vcn_sw_fini(adev);
 
+       kfree(adev->vcn.ip_dump);
+
        return r;
 }
 
@@ -1094,6 +1099,8 @@ static const struct amd_ip_funcs vcn_v5_0_1_ip_funcs = {
        .post_soft_reset = NULL,
        .set_clockgating_state = vcn_v5_0_1_set_clockgating_state,
        .set_powergating_state = vcn_v5_0_1_set_powergating_state,
+       .dump_ip_state = vcn_v5_0_0_dump_ip_state,
+       .print_ip_state = vcn_v5_0_0_print_ip_state,
 };
 
 const struct amdgpu_ip_block_version vcn_v5_0_1_ip_block = {
index 6587879de458ed3348e50e6565ef5a8f8ed0afe7..82ac709f44bfb2c4bbfd75648d2f7f3d18722e8a 100644 (file)
 #ifndef __VCN_v5_0_1_H__
 #define __VCN_v5_0_1_H__
 
-#define VCN_VID_SOC_ADDRESS                        0x1FC00
-#define VCN_AON_SOC_ADDRESS                        0x1F800
-#define VCN1_VID_SOC_ADDRESS                       0x48300
-#define VCN1_AON_SOC_ADDRESS                       0x48000
-
-#define VCN_VID_IP_ADDRESS                         0x0
-#define VCN_AON_IP_ADDRESS                         0x30000
-
 extern const struct amdgpu_ip_block_version vcn_v5_0_1_ip_block;
 
 #endif /* __VCN_v5_0_1_H__ */