aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c40
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
61MODULE_FIRMWARE(FIRMWARE_BONAIRE); 63MODULE_FIRMWARE(FIRMWARE_BONAIRE);
@@ -71,9 +73,11 @@ MODULE_FIRMWARE(FIRMWARE_STONEY);
71MODULE_FIRMWARE(FIRMWARE_POLARIS10); 73MODULE_FIRMWARE(FIRMWARE_POLARIS10);
72MODULE_FIRMWARE(FIRMWARE_POLARIS11); 74MODULE_FIRMWARE(FIRMWARE_POLARIS11);
73MODULE_FIRMWARE(FIRMWARE_POLARIS12); 75MODULE_FIRMWARE(FIRMWARE_POLARIS12);
76MODULE_FIRMWARE(FIRMWARE_VEGAM);
74 77
75MODULE_FIRMWARE(FIRMWARE_VEGA10); 78MODULE_FIRMWARE(FIRMWARE_VEGA10);
76MODULE_FIRMWARE(FIRMWARE_VEGA12); 79MODULE_FIRMWARE(FIRMWARE_VEGA12);
80MODULE_FIRMWARE(FIRMWARE_VEGA20);
77 81
78static void amdgpu_vce_idle_work_handler(struct work_struct *work); 82static 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;