Re: [PATCH] drm/amdgpu: Fix VCN allocation in CPX partition

2024-03-28 Thread Deucher, Alexander
[AMD Official Use Only - General]

Acked-by: Alex Deucher 

From: Lazar, Lijo 
Sent: Wednesday, March 27, 2024 10:05 PM
To: amd-gfx@lists.freedesktop.org 
Cc: Zhang, Hawking ; Deucher, Alexander 
; Zhu, James ; Kamal, Asad 

Subject: [PATCH] drm/amdgpu: Fix VCN allocation in CPX partition

VCN need not be shared in CPX mode always for all GFX 9.4.3 SOC SKUs. In
certain configs, VCN instance can be exclusively allocated to a
partition even under CPX mode.

Signed-off-by: Lijo Lazar 
Reviewed-by: James Zhu 
Reviewed-by: Asad Kamal 
---
 drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c | 15 +++
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c 
b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
index d6f808acfb17..fbb43ae7624f 100644
--- a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
+++ b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
@@ -62,6 +62,11 @@ void aqua_vanjaram_doorbell_index_init(struct amdgpu_device 
*adev)
 adev->doorbell_index.max_assignment = 
AMDGPU_DOORBELL_LAYOUT1_MAX_ASSIGNMENT << 1;
 }

+static bool aqua_vanjaram_xcp_vcn_shared(struct amdgpu_device *adev)
+{
+   return (adev->xcp_mgr->num_xcps > adev->vcn.num_vcn_inst);
+}
+
 static void aqua_vanjaram_set_xcp_id(struct amdgpu_device *adev,
  uint32_t inst_idx, struct amdgpu_ring *ring)
 {
@@ -87,7 +92,7 @@ static void aqua_vanjaram_set_xcp_id(struct amdgpu_device 
*adev,
 case AMDGPU_RING_TYPE_VCN_ENC:
 case AMDGPU_RING_TYPE_VCN_JPEG:
 ip_blk = AMDGPU_XCP_VCN;
-   if (adev->xcp_mgr->mode == AMDGPU_CPX_PARTITION_MODE)
+   if (aqua_vanjaram_xcp_vcn_shared(adev))
 inst_mask = 1 << (inst_idx * 2);
 break;
 default:
@@ -140,10 +145,12 @@ static int aqua_vanjaram_xcp_sched_list_update(

 aqua_vanjaram_xcp_gpu_sched_update(adev, ring, ring->xcp_id);

-   /* VCN is shared by two partitions under CPX MODE */
+   /* VCN may be shared by two partitions under CPX MODE in certain
+* configs.
+*/
 if ((ring->funcs->type == AMDGPU_RING_TYPE_VCN_ENC ||
-   ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG) &&
-   adev->xcp_mgr->mode == AMDGPU_CPX_PARTITION_MODE)
+ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG) &&
+   aqua_vanjaram_xcp_vcn_shared(adev))
 aqua_vanjaram_xcp_gpu_sched_update(adev, ring, 
ring->xcp_id + 1);
 }

--
2.25.1



[PATCH] drm/amdgpu: Fix VCN allocation in CPX partition

2024-03-27 Thread Lijo Lazar
VCN need not be shared in CPX mode always for all GFX 9.4.3 SOC SKUs. In
certain configs, VCN instance can be exclusively allocated to a
partition even under CPX mode.

Signed-off-by: Lijo Lazar 
Reviewed-by: James Zhu 
Reviewed-by: Asad Kamal 
---
 drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c | 15 +++
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c 
b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
index d6f808acfb17..fbb43ae7624f 100644
--- a/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
+++ b/drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c
@@ -62,6 +62,11 @@ void aqua_vanjaram_doorbell_index_init(struct amdgpu_device 
*adev)
adev->doorbell_index.max_assignment = 
AMDGPU_DOORBELL_LAYOUT1_MAX_ASSIGNMENT << 1;
 }
 
+static bool aqua_vanjaram_xcp_vcn_shared(struct amdgpu_device *adev)
+{
+   return (adev->xcp_mgr->num_xcps > adev->vcn.num_vcn_inst);
+}
+
 static void aqua_vanjaram_set_xcp_id(struct amdgpu_device *adev,
 uint32_t inst_idx, struct amdgpu_ring *ring)
 {
@@ -87,7 +92,7 @@ static void aqua_vanjaram_set_xcp_id(struct amdgpu_device 
*adev,
case AMDGPU_RING_TYPE_VCN_ENC:
case AMDGPU_RING_TYPE_VCN_JPEG:
ip_blk = AMDGPU_XCP_VCN;
-   if (adev->xcp_mgr->mode == AMDGPU_CPX_PARTITION_MODE)
+   if (aqua_vanjaram_xcp_vcn_shared(adev))
inst_mask = 1 << (inst_idx * 2);
break;
default:
@@ -140,10 +145,12 @@ static int aqua_vanjaram_xcp_sched_list_update(
 
aqua_vanjaram_xcp_gpu_sched_update(adev, ring, ring->xcp_id);
 
-   /* VCN is shared by two partitions under CPX MODE */
+   /* VCN may be shared by two partitions under CPX MODE in certain
+* configs.
+*/
if ((ring->funcs->type == AMDGPU_RING_TYPE_VCN_ENC ||
-   ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG) &&
-   adev->xcp_mgr->mode == AMDGPU_CPX_PARTITION_MODE)
+ring->funcs->type == AMDGPU_RING_TYPE_VCN_JPEG) &&
+   aqua_vanjaram_xcp_vcn_shared(adev))
aqua_vanjaram_xcp_gpu_sched_update(adev, ring, 
ring->xcp_id + 1);
}
 
-- 
2.25.1