mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 11:33:36 -04:00
drm/amdgpu: Complete multimedia bandwidth interface
- Update SRIOV PF2VF header with latest revision - Extend existing function in amdgpu_virt.c to read MM bandwidth config from PF2VF message - Add SRIOV Sienna Cichlid codec array and update the bandwidth with PF2VF message v2: squash in removal of unused variable (Alex) Signed-off-by: Bokun Zhang <bokun.zhang@amd.com> Reviewed-by: Monk liu <monk.liu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
2b2339eeaf
commit
ed9d205363
@@ -432,6 +432,9 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev)
|
||||
uint32_t checksum;
|
||||
uint32_t checkval;
|
||||
|
||||
uint32_t i;
|
||||
uint32_t tmp;
|
||||
|
||||
if (adev->virt.fw_reserve.p_pf2vf == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -472,6 +475,27 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev)
|
||||
adev->virt.reg_access =
|
||||
((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->reg_access_flags.all;
|
||||
|
||||
adev->virt.decode_max_dimension_pixels = 0;
|
||||
adev->virt.decode_max_frame_pixels = 0;
|
||||
adev->virt.encode_max_dimension_pixels = 0;
|
||||
adev->virt.encode_max_frame_pixels = 0;
|
||||
adev->virt.is_mm_bw_enabled = false;
|
||||
for (i = 0; i < AMD_SRIOV_MSG_RESERVE_VCN_INST; i++) {
|
||||
tmp = ((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->mm_bw_management[i].decode_max_dimension_pixels;
|
||||
adev->virt.decode_max_dimension_pixels = max(tmp, adev->virt.decode_max_dimension_pixels);
|
||||
|
||||
tmp = ((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->mm_bw_management[i].decode_max_frame_pixels;
|
||||
adev->virt.decode_max_frame_pixels = max(tmp, adev->virt.decode_max_frame_pixels);
|
||||
|
||||
tmp = ((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->mm_bw_management[i].encode_max_dimension_pixels;
|
||||
adev->virt.encode_max_dimension_pixels = max(tmp, adev->virt.encode_max_dimension_pixels);
|
||||
|
||||
tmp = ((struct amd_sriov_msg_pf2vf_info *)pf2vf_info)->mm_bw_management[i].encode_max_frame_pixels;
|
||||
adev->virt.encode_max_frame_pixels = max(tmp, adev->virt.encode_max_frame_pixels);
|
||||
}
|
||||
if((adev->virt.decode_max_dimension_pixels > 0) || (adev->virt.encode_max_dimension_pixels > 0))
|
||||
adev->virt.is_mm_bw_enabled = true;
|
||||
|
||||
break;
|
||||
default:
|
||||
DRM_ERROR("invalid pf2vf version\n");
|
||||
@@ -744,3 +768,35 @@ enum amdgpu_sriov_vf_mode amdgpu_virt_get_sriov_vf_mode(struct amdgpu_device *ad
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
void amdgpu_virt_update_sriov_video_codec(struct amdgpu_device *adev,
|
||||
struct amdgpu_video_codec_info *encode, uint32_t encode_array_size,
|
||||
struct amdgpu_video_codec_info *decode, uint32_t decode_array_size)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if (!adev->virt.is_mm_bw_enabled)
|
||||
return;
|
||||
|
||||
if (encode) {
|
||||
for (i = 0; i < encode_array_size; i++) {
|
||||
encode[i].max_width = adev->virt.encode_max_dimension_pixels;
|
||||
encode[i].max_pixels_per_frame = adev->virt.encode_max_frame_pixels;
|
||||
if (encode[i].max_width > 0)
|
||||
encode[i].max_height = encode[i].max_pixels_per_frame / encode[i].max_width;
|
||||
else
|
||||
encode[i].max_height = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (decode) {
|
||||
for (i = 0; i < decode_array_size; i++) {
|
||||
decode[i].max_width = adev->virt.decode_max_dimension_pixels;
|
||||
decode[i].max_pixels_per_frame = adev->virt.decode_max_frame_pixels;
|
||||
if (decode[i].max_width > 0)
|
||||
decode[i].max_height = decode[i].max_pixels_per_frame / decode[i].max_width;
|
||||
else
|
||||
decode[i].max_height = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user