On Wed, Jul 13, 2016 at 3:08 PM, Christian König <deathsimple at vodafone.de> wrote: > From: Christian König <christian.koenig at amd.com> > > Since we now raise the clocks from emit_fence() we don't need > a separate function for each hw generation any more. > > Signed-off-by: Christian König <christian.koenig at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 37 +++++++++++++++++++++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h | 1 + > drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 45 +-------------------------------- > drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 45 +-------------------------------- > drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 37 +-------------------------- > 5 files changed, 41 insertions(+), 124 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > index 078a7e4..69a8400 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c > @@ -1127,3 +1127,40 @@ void amdgpu_uvd_note_usage(struct amdgpu_device *adev) > } > } > } > + > +/** > + * amdgpu_uvd_ring_test_ib - test ib execution > + * > + * @ring: amdgpu_ring pointer > + * > + * Test if we can successfully execute an IB > + */ > +int amdgpu_uvd_ring_test_ib(struct amdgpu_ring *ring) > +{ > + struct amdgpu_device *adev = ring->adev; > + struct fence *fence = NULL; > + int r; > + > + r = amdgpu_uvd_get_create_msg(ring, 1, NULL); > + if (r) { > + DRM_ERROR("amdgpu: failed to get create msg (%d).\n", r); > + goto error; > + } > + > + r = amdgpu_uvd_get_destroy_msg(ring, 1, true, &fence); > + if (r) { > + DRM_ERROR("amdgpu: failed to get destroy ib (%d).\n", r); > + goto error; > + } > + > + r = fence_wait(fence, false); > + if (r) { > + DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); > + goto error; > + } > + DRM_INFO("ib test on ring %d succeeded\n", ring->idx); > +error: > + fence_put(fence); > + amdgpu_asic_set_uvd_clocks(adev, 0, 0); note_usage either sets the clocks or ungate/enables uvd dpm/etc. depending on what the asic supports. It would probably be better to call amdgpu_uvd_idle_work_handler() or something similar here rather than manually setting the clocks. Alex > + return r; > +} > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h > index 1375b21..03088fe 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.h > @@ -36,5 +36,6 @@ void amdgpu_uvd_free_handles(struct amdgpu_device *adev, > struct drm_file *filp); > int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx); > void amdgpu_uvd_note_usage(struct amdgpu_device *adev); > +int amdgpu_uvd_ring_test_ib(struct amdgpu_ring *ring); > > #endif > diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c > index a762158..d9bdd39 100644 > --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c > +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c > @@ -529,49 +529,6 @@ static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring, > } > > /** > - * uvd_v4_2_ring_test_ib - test ib execution > - * > - * @ring: amdgpu_ring pointer > - * > - * Test if we can successfully execute an IB > - */ > -static int uvd_v4_2_ring_test_ib(struct amdgpu_ring *ring) > -{ > - struct amdgpu_device *adev = ring->adev; > - struct fence *fence = NULL; > - int r; > - > - r = amdgpu_asic_set_uvd_clocks(adev, 53300, 40000); > - if (r) { > - DRM_ERROR("amdgpu: failed to raise UVD clocks (%d).\n", r); > - return r; > - } > - > - r = amdgpu_uvd_get_create_msg(ring, 1, NULL); > - if (r) { > - DRM_ERROR("amdgpu: failed to get create msg (%d).\n", r); > - goto error; > - } > - > - r = amdgpu_uvd_get_destroy_msg(ring, 1, true, &fence); > - if (r) { > - DRM_ERROR("amdgpu: failed to get destroy ib (%d).\n", r); > - goto error; > - } > - > - r = fence_wait(fence, false); > - if (r) { > - DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); > - goto error; > - } > - DRM_INFO("ib test on ring %d succeeded\n", ring->idx); > -error: > - fence_put(fence); > - amdgpu_asic_set_uvd_clocks(adev, 0, 0); > - return r; > -} > - > -/** > * uvd_v4_2_mc_resume - memory controller programming > * > * @adev: amdgpu_device pointer > @@ -796,7 +753,7 @@ static const struct amdgpu_ring_funcs uvd_v4_2_ring_funcs = { > .emit_hdp_flush = uvd_v4_2_ring_emit_hdp_flush, > .emit_hdp_invalidate = uvd_v4_2_ring_emit_hdp_invalidate, > .test_ring = uvd_v4_2_ring_test_ring, > - .test_ib = uvd_v4_2_ring_test_ib, > + .test_ib = amdgpu_ring_test_ib, > .insert_nop = amdgpu_ring_insert_nop, > .pad_ib = amdgpu_ring_generic_pad_ib, > }; > diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c > index b45fea9..d3909a7 100644 > --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c > @@ -579,49 +579,6 @@ static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring, > amdgpu_ring_write(ring, ib->length_dw); > } > > -/** > - * uvd_v5_0_ring_test_ib - test ib execution > - * > - * @ring: amdgpu_ring pointer > - * > - * Test if we can successfully execute an IB > - */ > -static int uvd_v5_0_ring_test_ib(struct amdgpu_ring *ring) > -{ > - struct amdgpu_device *adev = ring->adev; > - struct fence *fence = NULL; > - int r; > - > - r = amdgpu_asic_set_uvd_clocks(adev, 53300, 40000); > - if (r) { > - DRM_ERROR("amdgpu: failed to raise UVD clocks (%d).\n", r); > - return r; > - } > - > - r = amdgpu_uvd_get_create_msg(ring, 1, NULL); > - if (r) { > - DRM_ERROR("amdgpu: failed to get create msg (%d).\n", r); > - goto error; > - } > - > - r = amdgpu_uvd_get_destroy_msg(ring, 1, true, &fence); > - if (r) { > - DRM_ERROR("amdgpu: failed to get destroy ib (%d).\n", r); > - goto error; > - } > - > - r = fence_wait(fence, false); > - if (r) { > - DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); > - goto error; > - } > - DRM_INFO("ib test on ring %d succeeded\n", ring->idx); > -error: > - fence_put(fence); > - amdgpu_asic_set_uvd_clocks(adev, 0, 0); > - return r; > -} > - > static bool uvd_v5_0_is_idle(void *handle) > { > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > @@ -847,7 +804,7 @@ static const struct amdgpu_ring_funcs uvd_v5_0_ring_funcs = { > .emit_hdp_flush = uvd_v5_0_ring_emit_hdp_flush, > .emit_hdp_invalidate = uvd_v5_0_ring_emit_hdp_invalidate, > .test_ring = uvd_v5_0_ring_test_ring, > - .test_ib = uvd_v5_0_ring_test_ib, > + .test_ib = amdgpu_uvd_ring_test_ib, > .insert_nop = amdgpu_ring_insert_nop, > .pad_ib = amdgpu_ring_generic_pad_ib, > }; > diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c > index f643fec2..69439ab 100644 > --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c > @@ -682,41 +682,6 @@ static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring, > amdgpu_ring_write(ring, ib->length_dw); > } > > -/** > - * uvd_v6_0_ring_test_ib - test ib execution > - * > - * @ring: amdgpu_ring pointer > - * > - * Test if we can successfully execute an IB > - */ > -static int uvd_v6_0_ring_test_ib(struct amdgpu_ring *ring) > -{ > - struct fence *fence = NULL; > - int r; > - > - r = amdgpu_uvd_get_create_msg(ring, 1, NULL); > - if (r) { > - DRM_ERROR("amdgpu: failed to get create msg (%d).\n", r); > - goto error; > - } > - > - r = amdgpu_uvd_get_destroy_msg(ring, 1, true, &fence); > - if (r) { > - DRM_ERROR("amdgpu: failed to get destroy ib (%d).\n", r); > - goto error; > - } > - > - r = fence_wait(fence, false); > - if (r) { > - DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); > - goto error; > - } > - DRM_INFO("ib test on ring %d succeeded\n", ring->idx); > -error: > - fence_put(fence); > - return r; > -} > - > static bool uvd_v6_0_is_idle(void *handle) > { > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > @@ -963,7 +928,7 @@ static const struct amdgpu_ring_funcs uvd_v6_0_ring_funcs = { > .emit_hdp_flush = uvd_v6_0_ring_emit_hdp_flush, > .emit_hdp_invalidate = uvd_v6_0_ring_emit_hdp_invalidate, > .test_ring = uvd_v6_0_ring_test_ring, > - .test_ib = uvd_v6_0_ring_test_ib, > + .test_ib = amdgpu_uvd_ring_test_ib, > .insert_nop = amdgpu_ring_insert_nop, > .pad_ib = amdgpu_ring_generic_pad_ib, > }; > -- > 2.5.0 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx