From 1ddcdb7cb6bb5edb889a21228533406e908f7257 Mon Sep 17 00:00:00 2001 From: Lang Yu Date: Sat, 8 Jul 2023 12:43:14 +0800 Subject: drm/amdgpu: use psp_execute_load_ip_fw instead Replace the old ones with psp_execute_load_ip_fw. Suggested-by: Lijo Lazar Signed-off-by: Lang Yu Reviewed-by: Lijo Lazar Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index ae455aab5d29..36b55d2bd51a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -1239,3 +1239,18 @@ int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev) return 0; } + +int amdgpu_vcn_psp_update_sram(struct amdgpu_device *adev, int inst_idx, + enum AMDGPU_UCODE_ID ucode_id) +{ + struct amdgpu_firmware_info ucode = { + .ucode_id = (ucode_id ? ucode_id : + (inst_idx ? AMDGPU_UCODE_ID_VCN1_RAM : + AMDGPU_UCODE_ID_VCN0_RAM)), + .mc_addr = adev->vcn.inst[inst_idx].dpg_sram_gpu_addr, + .ucode_size = ((uintptr_t)adev->vcn.inst[inst_idx].dpg_sram_curr_addr - + (uintptr_t)adev->vcn.inst[inst_idx].dpg_sram_cpu_addr), + }; + + return psp_execute_ip_fw_load(&adev->psp, &ucode); +} -- cgit v1.2.3-70-g09d2 From f3fa86f5c778e258cd5c01bb420d4639bb393bd0 Mon Sep 17 00:00:00 2001 From: Saleemkhan Jamadar Date: Tue, 13 Jun 2023 17:40:17 +0530 Subject: drm/amdgpu:update kernel vcn ring test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add session context buffer to decoder ring test. v5 - clear the session ct buffer (Christian) v4 - data type, explain change of ib size change (Christian) v3 - indent and v2 changes correction. (Christian) v2 - put the buffer at the end of the IB (Christian) Signed-off-by: Saleemkhan Jamadar Acked-by: Leo Liu Acked-by: Christian König Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 13 +++++++++++-- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 5 ++++- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 36b55d2bd51a..8e83fd9e55be 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -573,13 +573,15 @@ static int amdgpu_vcn_dec_get_create_msg(struct amdgpu_ring *ring, uint32_t hand int r, i; memset(ib, 0, sizeof(*ib)); - r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 2, + /* 34 pages : 128KiB session context buffer size and 8KiB ib msg */ + r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 34, AMDGPU_IB_POOL_DIRECT, ib); if (r) return r; msg = (uint32_t *)AMDGPU_GPU_PAGE_ALIGN((unsigned long)ib->ptr); + memset(msg, 0, (AMDGPU_GPU_PAGE_SIZE * 34)); msg[0] = cpu_to_le32(0x00000028); msg[1] = cpu_to_le32(0x00000038); msg[2] = cpu_to_le32(0x00000001); @@ -608,13 +610,15 @@ static int amdgpu_vcn_dec_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han int r, i; memset(ib, 0, sizeof(*ib)); - r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 2, + /* 34 pages : 128KiB session context buffer size and 8KiB ib msg */ + r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 34, AMDGPU_IB_POOL_DIRECT, ib); if (r) return r; msg = (uint32_t *)AMDGPU_GPU_PAGE_ALIGN((unsigned long)ib->ptr); + memset(msg, 0, (AMDGPU_GPU_PAGE_SIZE * 34)); msg[0] = cpu_to_le32(0x00000028); msg[1] = cpu_to_le32(0x00000018); msg[2] = cpu_to_le32(0x00000000); @@ -700,6 +704,7 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, struct amdgpu_job *job; struct amdgpu_ib *ib; uint64_t addr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr); + uint64_t session_ctx_buf_gaddr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr + 8192); bool sq = amdgpu_vcn_using_unified_queue(ring); uint32_t *ib_checksum; uint32_t ib_pack_in_dw; @@ -730,6 +735,10 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, ib->length_dw += sizeof(struct amdgpu_vcn_decode_buffer) / 4; memset(decode_buffer, 0, sizeof(struct amdgpu_vcn_decode_buffer)); + decode_buffer->valid_buf_flag |= + cpu_to_le32(AMDGPU_VCN_CMD_FLAG_SESSION_CONTEXT_BUFFER); + decode_buffer->session_context_buffer_address_hi = upper_32_bits(session_ctx_buf_gaddr); + decode_buffer->session_context_buffer_address_lo = lower_32_bits(session_ctx_buf_gaddr); decode_buffer->valid_buf_flag |= cpu_to_le32(AMDGPU_VCN_CMD_FLAG_MSG_BUFFER); decode_buffer->msg_buffer_address_hi = cpu_to_le32(addr >> 32); decode_buffer->msg_buffer_address_lo = cpu_to_le32(addr); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h index 1f1d7dc94f90..ba5fefd74197 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h @@ -171,6 +171,7 @@ #define AMDGPU_VCN_IB_FLAG_DECODE_BUFFER 0x00000001 #define AMDGPU_VCN_CMD_FLAG_MSG_BUFFER 0x00000001 +#define AMDGPU_VCN_CMD_FLAG_SESSION_CONTEXT_BUFFER 0x00100000 #define VCN_CODEC_DISABLE_MASK_AV1 (1 << 0) #define VCN_CODEC_DISABLE_MASK_VP9 (1 << 1) @@ -366,7 +367,9 @@ struct amdgpu_vcn_decode_buffer { uint32_t valid_buf_flag; uint32_t msg_buffer_address_hi; uint32_t msg_buffer_address_lo; - uint32_t pad[30]; + uint32_t session_context_buffer_address_hi; + uint32_t session_context_buffer_address_lo; + uint32_t pad[28]; }; #define VCN_BLOCK_ENCODE_DISABLE_MASK 0x80 -- cgit v1.2.3-70-g09d2 From 3ebfa943b8451e4675d023b3f387911702ebee17 Mon Sep 17 00:00:00 2001 From: Saleemkhan Jamadar Date: Mon, 26 Jun 2023 14:50:51 +0530 Subject: drm/amdgpu: update kernel vcn ring test add session context buffer to decoder ring test for vcn v1 to v3. v3 - correct the cmd for sesssion ctx buf v2 - add the buffer into IB (Leo liu) Signed-off-by: Saleemkhan Jamadar Reviewed-by: Leo Liu Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 8e83fd9e55be..57b62ab01788 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -521,6 +521,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct dma_fence **fence) { u64 addr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr); + uint64_t session_ctx_buf_gaddr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr + 8192); struct amdgpu_device *adev = ring->adev; struct dma_fence *f = NULL; struct amdgpu_job *job; @@ -534,13 +535,23 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, goto err; ib = &job->ibs[0]; - ib->ptr[0] = PACKET0(adev->vcn.internal.data0, 0); - ib->ptr[1] = addr; - ib->ptr[2] = PACKET0(adev->vcn.internal.data1, 0); - ib->ptr[3] = addr >> 32; - ib->ptr[4] = PACKET0(adev->vcn.internal.cmd, 0); - ib->ptr[5] = 0; - for (i = 6; i < 16; i += 2) { + ib->length_dw = 0; + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data0, 0); + ib->ptr[ib->length_dw++] = lower_32_bits(session_ctx_buf_gaddr); + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data1, 0); + ib->ptr[ib->length_dw++] = upper_32_bits(session_ctx_buf_gaddr); + /* session ctx buffer cmd */ + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.cmd, 0); + ib->ptr[ib->length_dw++] = 0xa; + + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data0, 0); + ib->ptr[ib->length_dw++] = lower_32_bits(addr); + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data1, 0); + ib->ptr[ib->length_dw++] = upper_32_bits(addr); + ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.cmd, 0); + ib->ptr[ib->length_dw++] = 0; + + for (i = ib->length_dw; i < 16; i += 2) { ib->ptr[i] = PACKET0(adev->vcn.internal.nop, 0); ib->ptr[i+1] = 0; } -- cgit v1.2.3-70-g09d2 From 093b21f43173ecd9820a73a87a48905805b4f676 Mon Sep 17 00:00:00 2001 From: Saleemkhan Jamadar Date: Thu, 13 Jul 2023 10:46:20 +0530 Subject: Revert "drm/amdgpu: update kernel vcn ring test" VCN FW depncencies revert it to unlock others This reverts commit 3ebfa943b8451e4675d023b3f387911702ebee17. Signed-off-by: Saleemkhan Jamadar Acked-by: Veerabadhran Gopalakrishnan Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 57b62ab01788..8e83fd9e55be 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -521,7 +521,6 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct dma_fence **fence) { u64 addr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr); - uint64_t session_ctx_buf_gaddr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr + 8192); struct amdgpu_device *adev = ring->adev; struct dma_fence *f = NULL; struct amdgpu_job *job; @@ -535,23 +534,13 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, goto err; ib = &job->ibs[0]; - ib->length_dw = 0; - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data0, 0); - ib->ptr[ib->length_dw++] = lower_32_bits(session_ctx_buf_gaddr); - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data1, 0); - ib->ptr[ib->length_dw++] = upper_32_bits(session_ctx_buf_gaddr); - /* session ctx buffer cmd */ - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.cmd, 0); - ib->ptr[ib->length_dw++] = 0xa; - - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data0, 0); - ib->ptr[ib->length_dw++] = lower_32_bits(addr); - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.data1, 0); - ib->ptr[ib->length_dw++] = upper_32_bits(addr); - ib->ptr[ib->length_dw++] = PACKET0(adev->vcn.internal.cmd, 0); - ib->ptr[ib->length_dw++] = 0; - - for (i = ib->length_dw; i < 16; i += 2) { + ib->ptr[0] = PACKET0(adev->vcn.internal.data0, 0); + ib->ptr[1] = addr; + ib->ptr[2] = PACKET0(adev->vcn.internal.data1, 0); + ib->ptr[3] = addr >> 32; + ib->ptr[4] = PACKET0(adev->vcn.internal.cmd, 0); + ib->ptr[5] = 0; + for (i = 6; i < 16; i += 2) { ib->ptr[i] = PACKET0(adev->vcn.internal.nop, 0); ib->ptr[i+1] = 0; } -- cgit v1.2.3-70-g09d2 From 33e88286d615d9fa0396f69885a6552ed3302d1e Mon Sep 17 00:00:00 2001 From: Saleemkhan Jamadar Date: Thu, 13 Jul 2023 10:46:32 +0530 Subject: Revert "drm/amdgpu:update kernel vcn ring test" VCN FW depncencies revert it to unblock others This reverts commit f3fa86f5c778e258cd5c01bb420d4639bb393bd0. Signed-off-by: Saleemkhan Jamadar Acked-by: Veerabadhran Gopalakrishnan Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 13 ++----------- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h | 5 +---- 2 files changed, 3 insertions(+), 15 deletions(-) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 8e83fd9e55be..36b55d2bd51a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -573,15 +573,13 @@ static int amdgpu_vcn_dec_get_create_msg(struct amdgpu_ring *ring, uint32_t hand int r, i; memset(ib, 0, sizeof(*ib)); - /* 34 pages : 128KiB session context buffer size and 8KiB ib msg */ - r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 34, + r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 2, AMDGPU_IB_POOL_DIRECT, ib); if (r) return r; msg = (uint32_t *)AMDGPU_GPU_PAGE_ALIGN((unsigned long)ib->ptr); - memset(msg, 0, (AMDGPU_GPU_PAGE_SIZE * 34)); msg[0] = cpu_to_le32(0x00000028); msg[1] = cpu_to_le32(0x00000038); msg[2] = cpu_to_le32(0x00000001); @@ -610,15 +608,13 @@ static int amdgpu_vcn_dec_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han int r, i; memset(ib, 0, sizeof(*ib)); - /* 34 pages : 128KiB session context buffer size and 8KiB ib msg */ - r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 34, + r = amdgpu_ib_get(adev, NULL, AMDGPU_GPU_PAGE_SIZE * 2, AMDGPU_IB_POOL_DIRECT, ib); if (r) return r; msg = (uint32_t *)AMDGPU_GPU_PAGE_ALIGN((unsigned long)ib->ptr); - memset(msg, 0, (AMDGPU_GPU_PAGE_SIZE * 34)); msg[0] = cpu_to_le32(0x00000028); msg[1] = cpu_to_le32(0x00000018); msg[2] = cpu_to_le32(0x00000000); @@ -704,7 +700,6 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, struct amdgpu_job *job; struct amdgpu_ib *ib; uint64_t addr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr); - uint64_t session_ctx_buf_gaddr = AMDGPU_GPU_PAGE_ALIGN(ib_msg->gpu_addr + 8192); bool sq = amdgpu_vcn_using_unified_queue(ring); uint32_t *ib_checksum; uint32_t ib_pack_in_dw; @@ -735,10 +730,6 @@ static int amdgpu_vcn_dec_sw_send_msg(struct amdgpu_ring *ring, ib->length_dw += sizeof(struct amdgpu_vcn_decode_buffer) / 4; memset(decode_buffer, 0, sizeof(struct amdgpu_vcn_decode_buffer)); - decode_buffer->valid_buf_flag |= - cpu_to_le32(AMDGPU_VCN_CMD_FLAG_SESSION_CONTEXT_BUFFER); - decode_buffer->session_context_buffer_address_hi = upper_32_bits(session_ctx_buf_gaddr); - decode_buffer->session_context_buffer_address_lo = lower_32_bits(session_ctx_buf_gaddr); decode_buffer->valid_buf_flag |= cpu_to_le32(AMDGPU_VCN_CMD_FLAG_MSG_BUFFER); decode_buffer->msg_buffer_address_hi = cpu_to_le32(addr >> 32); decode_buffer->msg_buffer_address_lo = cpu_to_le32(addr); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h index ba5fefd74197..1f1d7dc94f90 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.h @@ -171,7 +171,6 @@ #define AMDGPU_VCN_IB_FLAG_DECODE_BUFFER 0x00000001 #define AMDGPU_VCN_CMD_FLAG_MSG_BUFFER 0x00000001 -#define AMDGPU_VCN_CMD_FLAG_SESSION_CONTEXT_BUFFER 0x00100000 #define VCN_CODEC_DISABLE_MASK_AV1 (1 << 0) #define VCN_CODEC_DISABLE_MASK_VP9 (1 << 1) @@ -367,9 +366,7 @@ struct amdgpu_vcn_decode_buffer { uint32_t valid_buf_flag; uint32_t msg_buffer_address_hi; uint32_t msg_buffer_address_lo; - uint32_t session_context_buffer_address_hi; - uint32_t session_context_buffer_address_lo; - uint32_t pad[28]; + uint32_t pad[30]; }; #define VCN_BLOCK_ENCODE_DISABLE_MASK 0x80 -- cgit v1.2.3-70-g09d2