AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: keep init xcc0 for all xccs under sriov
@ 2024-06-14 11:10 Jane Jian
  2024-06-14 11:50 ` Lazar, Lijo
  0 siblings, 1 reply; 6+ messages in thread
From: Jane Jian @ 2024-06-14 11:10 UTC (permalink / raw)
  To: Lijo.Lazar, Haijun.Chang, Victor.Zhao; +Cc: amd-gfx, Jane Jian

[WHY]
sriov has the higher bit violation when flushing tlb

[HOW]
for sriov only init XCC0(lower 16-bit) for all XCCs to avoid higher bit violation
since kiq ring is always local, local address without XCC ID is enough to be sent to the XCC KIQ

Signed-off-by: Jane Jian <Jane.Jian@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
index e14acab5cceb..4e38a66a52f4 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.c
@@ -537,29 +537,36 @@ static void gfxhub_v1_2_xcc_init(struct amdgpu_device *adev, uint32_t xcc_mask)
 {
 	struct amdgpu_vmhub *hub;
 	int i;
+	uint32_t gc_index;
 
 	for_each_inst(i, xcc_mask) {
 		hub = &adev->vmhub[AMDGPU_GFXHUB(i)];
 
+		/* for sriov only init XCC0(lower 16-bit) to avoid higher bit violation */
+		if (amdgpu_sriov_vf(adev))
+			gc_index = 0;
+		else
+			gc_index = GET_INST(GC, i);
+
 		hub->ctx0_ptb_addr_lo32 =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i),
+			SOC15_REG_OFFSET(GC, gc_index,
 				regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32);
 		hub->ctx0_ptb_addr_hi32 =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i),
+			SOC15_REG_OFFSET(GC, gc_index,
 				regVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32);
 		hub->vm_inv_eng0_sem =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i), regVM_INVALIDATE_ENG0_SEM);
+			SOC15_REG_OFFSET(GC, gc_index, regVM_INVALIDATE_ENG0_SEM);
 		hub->vm_inv_eng0_req =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i), regVM_INVALIDATE_ENG0_REQ);
+			SOC15_REG_OFFSET(GC, gc_index, regVM_INVALIDATE_ENG0_REQ);
 		hub->vm_inv_eng0_ack =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i), regVM_INVALIDATE_ENG0_ACK);
+			SOC15_REG_OFFSET(GC, gc_index, regVM_INVALIDATE_ENG0_ACK);
 		hub->vm_context0_cntl =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i), regVM_CONTEXT0_CNTL);
+			SOC15_REG_OFFSET(GC, gc_index, regVM_CONTEXT0_CNTL);
 		hub->vm_l2_pro_fault_status =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i),
+			SOC15_REG_OFFSET(GC, gc_index,
 				regVM_L2_PROTECTION_FAULT_STATUS);
 		hub->vm_l2_pro_fault_cntl =
-			SOC15_REG_OFFSET(GC, GET_INST(GC, i), regVM_L2_PROTECTION_FAULT_CNTL);
+			SOC15_REG_OFFSET(GC, gc_index, regVM_L2_PROTECTION_FAULT_CNTL);
 
 		hub->ctx_distance = regVM_CONTEXT1_CNTL -
 				regVM_CONTEXT0_CNTL;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-17  4:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-14 11:10 [PATCH] drm/amdgpu: keep init xcc0 for all xccs under sriov Jane Jian
2024-06-14 11:50 ` Lazar, Lijo
2024-06-15  2:08   ` Lazar, Lijo
2024-06-17  3:28     ` Chang, HaiJun
2024-06-17  3:35       ` Lazar, Lijo
2024-06-17  4:56         ` Chang, HaiJun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox