Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/jpeg2.6: Add jpeg2.6 support

Aldebaran is using jpeg2.6, and the main change is jpeg2.6 using
AMDGPU_MMHUB_0, and jpeg2.5 using AMDGPU_MMHUB_1.

Signed-off-by: James Zhu <James.Zhu@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

James Zhu and committed by
Alex Deucher
ff6885ac 7ffe7238

+64 -2
+63 -2
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c
··· 565 565 .set_powergating_state = jpeg_v2_5_set_powergating_state, 566 566 }; 567 567 568 + static const struct amd_ip_funcs jpeg_v2_6_ip_funcs = { 569 + .name = "jpeg_v2_6", 570 + .early_init = jpeg_v2_5_early_init, 571 + .late_init = NULL, 572 + .sw_init = jpeg_v2_5_sw_init, 573 + .sw_fini = jpeg_v2_5_sw_fini, 574 + .hw_init = jpeg_v2_5_hw_init, 575 + .hw_fini = jpeg_v2_5_hw_fini, 576 + .suspend = jpeg_v2_5_suspend, 577 + .resume = jpeg_v2_5_resume, 578 + .is_idle = jpeg_v2_5_is_idle, 579 + .wait_for_idle = jpeg_v2_5_wait_for_idle, 580 + .check_soft_reset = NULL, 581 + .pre_soft_reset = NULL, 582 + .soft_reset = NULL, 583 + .post_soft_reset = NULL, 584 + .set_clockgating_state = jpeg_v2_5_set_clockgating_state, 585 + .set_powergating_state = jpeg_v2_5_set_powergating_state, 586 + }; 587 + 568 588 static const struct amdgpu_ring_funcs jpeg_v2_5_dec_ring_vm_funcs = { 569 589 .type = AMDGPU_RING_TYPE_VCN_JPEG, 570 590 .align_mask = 0xf, 571 591 .vmhub = AMDGPU_MMHUB_1, 592 + .get_rptr = jpeg_v2_5_dec_ring_get_rptr, 593 + .get_wptr = jpeg_v2_5_dec_ring_get_wptr, 594 + .set_wptr = jpeg_v2_5_dec_ring_set_wptr, 595 + .emit_frame_size = 596 + SOC15_FLUSH_GPU_TLB_NUM_WREG * 6 + 597 + SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 8 + 598 + 8 + /* jpeg_v2_5_dec_ring_emit_vm_flush */ 599 + 18 + 18 + /* jpeg_v2_5_dec_ring_emit_fence x2 vm fence */ 600 + 8 + 16, 601 + .emit_ib_size = 22, /* jpeg_v2_5_dec_ring_emit_ib */ 602 + .emit_ib = jpeg_v2_0_dec_ring_emit_ib, 603 + .emit_fence = jpeg_v2_0_dec_ring_emit_fence, 604 + .emit_vm_flush = jpeg_v2_0_dec_ring_emit_vm_flush, 605 + .test_ring = amdgpu_jpeg_dec_ring_test_ring, 606 + .test_ib = amdgpu_jpeg_dec_ring_test_ib, 607 + .insert_nop = jpeg_v2_0_dec_ring_nop, 608 + .insert_start = jpeg_v2_0_dec_ring_insert_start, 609 + .insert_end = jpeg_v2_0_dec_ring_insert_end, 610 + .pad_ib = amdgpu_ring_generic_pad_ib, 611 + .begin_use = amdgpu_jpeg_ring_begin_use, 612 + .end_use = amdgpu_jpeg_ring_end_use, 613 + .emit_wreg = jpeg_v2_0_dec_ring_emit_wreg, 614 + .emit_reg_wait = jpeg_v2_0_dec_ring_emit_reg_wait, 615 + .emit_reg_write_reg_wait = amdgpu_ring_emit_reg_write_reg_wait_helper, 616 + }; 617 + 618 + static const struct amdgpu_ring_funcs jpeg_v2_6_dec_ring_vm_funcs = { 619 + .type = AMDGPU_RING_TYPE_VCN_JPEG, 620 + .align_mask = 0xf, 621 + .vmhub = AMDGPU_MMHUB_0, 572 622 .get_rptr = jpeg_v2_5_dec_ring_get_rptr, 573 623 .get_wptr = jpeg_v2_5_dec_ring_get_wptr, 574 624 .set_wptr = jpeg_v2_5_dec_ring_set_wptr, ··· 652 602 for (i = 0; i < adev->jpeg.num_jpeg_inst; ++i) { 653 603 if (adev->jpeg.harvest_config & (1 << i)) 654 604 continue; 655 - 656 - adev->jpeg.inst[i].ring_dec.funcs = &jpeg_v2_5_dec_ring_vm_funcs; 605 + if (adev->asic_type == CHIP_ARCTURUS) 606 + adev->jpeg.inst[i].ring_dec.funcs = &jpeg_v2_5_dec_ring_vm_funcs; 607 + else /* CHIP_ALDEBARAN */ 608 + adev->jpeg.inst[i].ring_dec.funcs = &jpeg_v2_6_dec_ring_vm_funcs; 657 609 adev->jpeg.inst[i].ring_dec.me = i; 658 610 DRM_INFO("JPEG(%d) JPEG decode is enabled in VM mode\n", i); 659 611 } ··· 686 634 .minor = 5, 687 635 .rev = 0, 688 636 .funcs = &jpeg_v2_5_ip_funcs, 637 + }; 638 + 639 + const struct amdgpu_ip_block_version jpeg_v2_6_ip_block = 640 + { 641 + .type = AMD_IP_BLOCK_TYPE_JPEG, 642 + .major = 2, 643 + .minor = 6, 644 + .rev = 0, 645 + .funcs = &jpeg_v2_6_ip_funcs, 689 646 };
+1
drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.h
··· 25 25 #define __JPEG_V2_5_H__ 26 26 27 27 extern const struct amdgpu_ip_block_version jpeg_v2_5_ip_block; 28 + extern const struct amdgpu_ip_block_version jpeg_v2_6_ip_block; 28 29 29 30 #endif /* __JPEG_V2_5_H__ */