diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index a33804bd3314..23d960ec1cf2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |||
| @@ -51,11 +51,13 @@ | |||
| 51 | #define FIRMWARE_FIJI "amdgpu/fiji_vce.bin" | 51 | #define FIRMWARE_FIJI "amdgpu/fiji_vce.bin" |
| 52 | #define FIRMWARE_STONEY "amdgpu/stoney_vce.bin" | 52 | #define FIRMWARE_STONEY "amdgpu/stoney_vce.bin" |
| 53 | #define FIRMWARE_POLARIS10 "amdgpu/polaris10_vce.bin" | 53 | #define FIRMWARE_POLARIS10 "amdgpu/polaris10_vce.bin" |
| 54 | #define FIRMWARE_POLARIS11 "amdgpu/polaris11_vce.bin" | 54 | #define FIRMWARE_POLARIS11 "amdgpu/polaris11_vce.bin" |
| 55 | #define FIRMWARE_POLARIS12 "amdgpu/polaris12_vce.bin" | 55 | #define FIRMWARE_POLARIS12 "amdgpu/polaris12_vce.bin" |
| 56 | #define FIRMWARE_VEGAM "amdgpu/vegam_vce.bin" | ||
| 56 | 57 | ||
| 57 | #define FIRMWARE_VEGA10 "amdgpu/vega10_vce.bin" | 58 | #define FIRMWARE_VEGA10 "amdgpu/vega10_vce.bin" |
| 58 | #define FIRMWARE_VEGA12 "amdgpu/vega12_vce.bin" | 59 | #define FIRMWARE_VEGA12 "amdgpu/vega12_vce.bin" |
| 60 | #define FIRMWARE_VEGA20 "amdgpu/vega20_vce.bin" | ||
| 59 | 61 | ||
| 60 | #ifdef CONFIG_DRM_AMDGPU_CIK | 62 | #ifdef CONFIG_DRM_AMDGPU_CIK |
| 61 | MODULE_FIRMWARE(FIRMWARE_BONAIRE); | 63 | MODULE_FIRMWARE(FIRMWARE_BONAIRE); |
| @@ -71,9 +73,11 @@ MODULE_FIRMWARE(FIRMWARE_STONEY); | |||
| 71 | MODULE_FIRMWARE(FIRMWARE_POLARIS10); | 73 | MODULE_FIRMWARE(FIRMWARE_POLARIS10); |
| 72 | MODULE_FIRMWARE(FIRMWARE_POLARIS11); | 74 | MODULE_FIRMWARE(FIRMWARE_POLARIS11); |
| 73 | MODULE_FIRMWARE(FIRMWARE_POLARIS12); | 75 | MODULE_FIRMWARE(FIRMWARE_POLARIS12); |
| 76 | MODULE_FIRMWARE(FIRMWARE_VEGAM); | ||
| 74 | 77 | ||
| 75 | MODULE_FIRMWARE(FIRMWARE_VEGA10); | 78 | MODULE_FIRMWARE(FIRMWARE_VEGA10); |
| 76 | MODULE_FIRMWARE(FIRMWARE_VEGA12); | 79 | MODULE_FIRMWARE(FIRMWARE_VEGA12); |
| 80 | MODULE_FIRMWARE(FIRMWARE_VEGA20); | ||
| 77 | 81 | ||
| 78 | static void amdgpu_vce_idle_work_handler(struct work_struct *work); | 82 | static void amdgpu_vce_idle_work_handler(struct work_struct *work); |
| 79 | 83 | ||
| @@ -132,12 +136,18 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) | |||
| 132 | case CHIP_POLARIS12: | 136 | case CHIP_POLARIS12: |
| 133 | fw_name = FIRMWARE_POLARIS12; | 137 | fw_name = FIRMWARE_POLARIS12; |
| 134 | break; | 138 | break; |
| 139 | case CHIP_VEGAM: | ||
| 140 | fw_name = FIRMWARE_VEGAM; | ||
| 141 | break; | ||
| 135 | case CHIP_VEGA10: | 142 | case CHIP_VEGA10: |
| 136 | fw_name = FIRMWARE_VEGA10; | 143 | fw_name = FIRMWARE_VEGA10; |
| 137 | break; | 144 | break; |
| 138 | case CHIP_VEGA12: | 145 | case CHIP_VEGA12: |
| 139 | fw_name = FIRMWARE_VEGA12; | 146 | fw_name = FIRMWARE_VEGA12; |
| 140 | break; | 147 | break; |
| 148 | case CHIP_VEGA20: | ||
| 149 | fw_name = FIRMWARE_VEGA20; | ||
| 150 | break; | ||
| 141 | 151 | ||
| 142 | default: | 152 | default: |
| 143 | return -EINVAL; | 153 | return -EINVAL; |
| @@ -181,7 +191,7 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) | |||
| 181 | ring = &adev->vce.ring[0]; | 191 | ring = &adev->vce.ring[0]; |
| 182 | rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL]; | 192 | rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL]; |
| 183 | r = drm_sched_entity_init(&ring->sched, &adev->vce.entity, | 193 | r = drm_sched_entity_init(&ring->sched, &adev->vce.entity, |
| 184 | rq, amdgpu_sched_jobs, NULL); | 194 | rq, NULL); |
| 185 | if (r != 0) { | 195 | if (r != 0) { |
| 186 | DRM_ERROR("Failed setting up VCE run queue.\n"); | 196 | DRM_ERROR("Failed setting up VCE run queue.\n"); |
| 187 | return r; | 197 | return r; |
| @@ -755,6 +765,18 @@ int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx) | |||
| 755 | if (r) | 765 | if (r) |
| 756 | goto out; | 766 | goto out; |
| 757 | break; | 767 | break; |
| 768 | |||
| 769 | case 0x0500000d: /* MV buffer */ | ||
| 770 | r = amdgpu_vce_validate_bo(p, ib_idx, idx + 3, | ||
| 771 | idx + 2, 0, 0); | ||
| 772 | if (r) | ||
| 773 | goto out; | ||
| 774 | |||
| 775 | r = amdgpu_vce_validate_bo(p, ib_idx, idx + 8, | ||
| 776 | idx + 7, 0, 0); | ||
| 777 | if (r) | ||
| 778 | goto out; | ||
| 779 | break; | ||
| 758 | } | 780 | } |
| 759 | 781 | ||
| 760 | idx += len / 4; | 782 | idx += len / 4; |
| @@ -860,6 +882,18 @@ int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx) | |||
| 860 | goto out; | 882 | goto out; |
| 861 | break; | 883 | break; |
| 862 | 884 | ||
| 885 | case 0x0500000d: /* MV buffer */ | ||
| 886 | r = amdgpu_vce_cs_reloc(p, ib_idx, idx + 3, | ||
| 887 | idx + 2, *size, 0); | ||
| 888 | if (r) | ||
| 889 | goto out; | ||
| 890 | |||
| 891 | r = amdgpu_vce_cs_reloc(p, ib_idx, idx + 8, | ||
| 892 | idx + 7, *size / 12, 0); | ||
| 893 | if (r) | ||
| 894 | goto out; | ||
| 895 | break; | ||
| 896 | |||
| 863 | default: | 897 | default: |
| 864 | DRM_ERROR("invalid VCE command (0x%x)!\n", cmd); | 898 | DRM_ERROR("invalid VCE command (0x%x)!\n", cmd); |
| 865 | r = -EINVAL; | 899 | r = -EINVAL; |
