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

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu/vcn: custom video info caps for sriov

for sriov, we added a new flag to indicate av1 support,
this will override the original caps info.

Signed-off-by: Jane Jian <Jane.Jian@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Jane Jian and committed by
Alex Deucher
dcaf5000 0fb44d54

+99 -11
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
··· 124 124 AMDGIM_FEATURE_PP_ONE_VF = (1 << 4), 125 125 /* Indirect Reg Access enabled */ 126 126 AMDGIM_FEATURE_INDIRECT_REG_ACCESS = (1 << 5), 127 + /* AV1 Support MODE*/ 128 + AMDGIM_FEATURE_AV1_SUPPORT = (1 << 6), 127 129 }; 128 130 129 131 enum AMDGIM_REG_ACCESS_FLAG { ··· 324 322 ((!amdgpu_in_reset(adev)) && adev->virt.tdr_debug) 325 323 #define amdgpu_sriov_is_normal(adev) \ 326 324 ((!amdgpu_in_reset(adev)) && (!adev->virt.tdr_debug)) 325 + #define amdgpu_sriov_is_av1_support(adev) \ 326 + ((adev)->virt.gim_feature & AMDGIM_FEATURE_AV1_SUPPORT) 327 327 bool amdgpu_virt_mmio_blocked(struct amdgpu_device *adev); 328 328 void amdgpu_virt_init_setting(struct amdgpu_device *adev); 329 329 void amdgpu_virt_kiq_reg_write_reg_wait(struct amdgpu_device *adev,
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h
··· 93 93 uint32_t mm_bw_management : 1; 94 94 uint32_t pp_one_vf_mode : 1; 95 95 uint32_t reg_indirect_acc : 1; 96 - uint32_t reserved : 26; 96 + uint32_t av1_support : 1; 97 + uint32_t reserved : 25; 97 98 } flags; 98 99 uint32_t all; 99 100 };
+93 -10
drivers/gpu/drm/amd/amdgpu/soc21.c
··· 102 102 .codec_array = vcn_4_0_0_video_codecs_decode_array_vcn1, 103 103 }; 104 104 105 + /* SRIOV SOC21, not const since data is controlled by host */ 106 + static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_encode_array_vcn0[] = { 107 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, 108 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)}, 109 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)}, 110 + }; 111 + 112 + static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_encode_array_vcn1[] = { 113 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, 114 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)}, 115 + }; 116 + 117 + static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_encode_vcn0 = { 118 + .codec_count = ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_encode_array_vcn0), 119 + .codec_array = sriov_vcn_4_0_0_video_codecs_encode_array_vcn0, 120 + }; 121 + 122 + static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_encode_vcn1 = { 123 + .codec_count = ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_encode_array_vcn1), 124 + .codec_array = sriov_vcn_4_0_0_video_codecs_encode_array_vcn1, 125 + }; 126 + 127 + static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_decode_array_vcn0[] = { 128 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4096, 3)}, 129 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4096, 5)}, 130 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4096, 52)}, 131 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4096, 4)}, 132 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, 133 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, 134 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)}, 135 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)}, 136 + }; 137 + 138 + static struct amdgpu_video_codec_info sriov_vcn_4_0_0_video_codecs_decode_array_vcn1[] = { 139 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4096, 3)}, 140 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4096, 5)}, 141 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4096, 52)}, 142 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4096, 4)}, 143 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)}, 144 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)}, 145 + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)}, 146 + }; 147 + 148 + static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_decode_vcn0 = { 149 + .codec_count = ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_decode_array_vcn0), 150 + .codec_array = sriov_vcn_4_0_0_video_codecs_decode_array_vcn0, 151 + }; 152 + 153 + static struct amdgpu_video_codecs sriov_vcn_4_0_0_video_codecs_decode_vcn1 = { 154 + .codec_count = ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_decode_array_vcn1), 155 + .codec_array = sriov_vcn_4_0_0_video_codecs_decode_array_vcn1, 156 + }; 157 + 105 158 static int soc21_query_video_codecs(struct amdgpu_device *adev, bool encode, 106 159 const struct amdgpu_video_codecs **codecs) 107 160 { ··· 165 112 case IP_VERSION(4, 0, 0): 166 113 case IP_VERSION(4, 0, 2): 167 114 case IP_VERSION(4, 0, 4): 168 - if (adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0) { 169 - if (encode) 170 - *codecs = &vcn_4_0_0_video_codecs_encode_vcn1; 171 - else 172 - *codecs = &vcn_4_0_0_video_codecs_decode_vcn1; 115 + if (amdgpu_sriov_vf(adev)) { 116 + if ((adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0) || 117 + !amdgpu_sriov_is_av1_support(adev)) { 118 + if (encode) 119 + *codecs = &sriov_vcn_4_0_0_video_codecs_encode_vcn1; 120 + else 121 + *codecs = &sriov_vcn_4_0_0_video_codecs_decode_vcn1; 122 + } else { 123 + if (encode) 124 + *codecs = &sriov_vcn_4_0_0_video_codecs_encode_vcn0; 125 + else 126 + *codecs = &sriov_vcn_4_0_0_video_codecs_decode_vcn0; 127 + } 173 128 } else { 174 - if (encode) 175 - *codecs = &vcn_4_0_0_video_codecs_encode_vcn0; 176 - else 177 - *codecs = &vcn_4_0_0_video_codecs_decode_vcn0; 129 + if ((adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0)) { 130 + if (encode) 131 + *codecs = &vcn_4_0_0_video_codecs_encode_vcn1; 132 + else 133 + *codecs = &vcn_4_0_0_video_codecs_decode_vcn1; 134 + } else { 135 + if (encode) 136 + *codecs = &vcn_4_0_0_video_codecs_encode_vcn0; 137 + else 138 + *codecs = &vcn_4_0_0_video_codecs_decode_vcn0; 139 + } 178 140 } 179 141 return 0; 180 142 default: ··· 798 730 { 799 731 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 800 732 801 - if (amdgpu_sriov_vf(adev)) 733 + if (amdgpu_sriov_vf(adev)) { 802 734 xgpu_nv_mailbox_get_irq(adev); 735 + if ((adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0) || 736 + !amdgpu_sriov_is_av1_support(adev)) { 737 + amdgpu_virt_update_sriov_video_codec(adev, 738 + sriov_vcn_4_0_0_video_codecs_encode_array_vcn1, 739 + ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_encode_array_vcn1), 740 + sriov_vcn_4_0_0_video_codecs_decode_array_vcn1, 741 + ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_decode_array_vcn1)); 742 + } else { 743 + amdgpu_virt_update_sriov_video_codec(adev, 744 + sriov_vcn_4_0_0_video_codecs_encode_array_vcn0, 745 + ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_encode_array_vcn0), 746 + sriov_vcn_4_0_0_video_codecs_decode_array_vcn0, 747 + ARRAY_SIZE(sriov_vcn_4_0_0_video_codecs_decode_array_vcn0)); 748 + } 749 + } 803 750 804 751 return 0; 805 752 }