diff options
author | Leo Liu <leo.liu@amd.com> | 2017-02-21 15:21:18 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-24 17:41:40 -0400 |
commit | 101c6fee53f6a73c0d044cf890cd8b1b07cf5801 (patch) | |
tree | c62071138a6cc7206df1a34d2df5210c476c668c /drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |
parent | 3639f7d855746406c1c1df81560b4d1d83e8c5a4 (diff) |
drm/amdgpu: add vcn enc rings
Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 2e650685e35a..b8f4e7713921 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |||
@@ -51,6 +51,8 @@ static int vcn_v1_0_early_init(void *handle) | |||
51 | { | 51 | { |
52 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 52 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
53 | 53 | ||
54 | adev->vcn.num_enc_rings = 2; | ||
55 | |||
54 | vcn_v1_0_set_dec_ring_funcs(adev); | 56 | vcn_v1_0_set_dec_ring_funcs(adev); |
55 | vcn_v1_0_set_irq_funcs(adev); | 57 | vcn_v1_0_set_irq_funcs(adev); |
56 | 58 | ||
@@ -67,7 +69,7 @@ static int vcn_v1_0_early_init(void *handle) | |||
67 | static int vcn_v1_0_sw_init(void *handle) | 69 | static int vcn_v1_0_sw_init(void *handle) |
68 | { | 70 | { |
69 | struct amdgpu_ring *ring; | 71 | struct amdgpu_ring *ring; |
70 | int r; | 72 | int i, r; |
71 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 73 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
72 | 74 | ||
73 | /* VCN TRAP */ | 75 | /* VCN TRAP */ |
@@ -86,6 +88,16 @@ static int vcn_v1_0_sw_init(void *handle) | |||
86 | ring = &adev->vcn.ring_dec; | 88 | ring = &adev->vcn.ring_dec; |
87 | sprintf(ring->name, "vcn_dec"); | 89 | sprintf(ring->name, "vcn_dec"); |
88 | r = amdgpu_ring_init(adev, ring, 512, &adev->vcn.irq, 0); | 90 | r = amdgpu_ring_init(adev, ring, 512, &adev->vcn.irq, 0); |
91 | if (r) | ||
92 | return r; | ||
93 | |||
94 | for (i = 0; i < adev->vcn.num_enc_rings; ++i) { | ||
95 | ring = &adev->vcn.ring_enc[i]; | ||
96 | sprintf(ring->name, "vcn_enc%d", i); | ||
97 | r = amdgpu_ring_init(adev, ring, 512, &adev->vcn.irq, 0); | ||
98 | if (r) | ||
99 | return r; | ||
100 | } | ||
89 | 101 | ||
90 | return r; | 102 | return r; |
91 | } | 103 | } |
@@ -401,6 +413,20 @@ static int vcn_v1_0_start(struct amdgpu_device *adev) | |||
401 | WREG32_P(SOC15_REG_OFFSET(UVD, 0, mmUVD_RBC_RB_CNTL), 0, | 413 | WREG32_P(SOC15_REG_OFFSET(UVD, 0, mmUVD_RBC_RB_CNTL), 0, |
402 | ~UVD_RBC_RB_CNTL__RB_NO_FETCH_MASK); | 414 | ~UVD_RBC_RB_CNTL__RB_NO_FETCH_MASK); |
403 | 415 | ||
416 | ring = &adev->vcn.ring_enc[0]; | ||
417 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_RPTR), lower_32_bits(ring->wptr)); | ||
418 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_WPTR), lower_32_bits(ring->wptr)); | ||
419 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_BASE_LO), ring->gpu_addr); | ||
420 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_BASE_HI), upper_32_bits(ring->gpu_addr)); | ||
421 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_SIZE), ring->ring_size / 4); | ||
422 | |||
423 | ring = &adev->vcn.ring_enc[1]; | ||
424 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_RPTR2), lower_32_bits(ring->wptr)); | ||
425 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_WPTR2), lower_32_bits(ring->wptr)); | ||
426 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_BASE_LO2), ring->gpu_addr); | ||
427 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_BASE_HI2), upper_32_bits(ring->gpu_addr)); | ||
428 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_RB_SIZE2), ring->ring_size / 4); | ||
429 | |||
404 | return 0; | 430 | return 0; |
405 | } | 431 | } |
406 | 432 | ||