Message ID | 1398673053-2463-1-git-send-email-deathsimple@vodafone.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Apr 28, 2014 at 4:17 AM, Christian König <deathsimple@vodafone.de> wrote: > From: Christian König <christian.koenig@amd.com> > > Some RV7xx generation hardware crashes after you > raise the UVD clocks for the first time. Try to > avoid this by using the lower clocks to boot these. > > Workaround for: https://bugzilla.kernel.org/show_bug.cgi?id=71891 > > v2: lower clocks on IB test as well > > Signed-off-by: Christian König <christian.koenig@amd.com> > Cc: stable@vger.kernel.org Any reason not to just always use lower clocks for the tests for all asics? Either way: Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > drivers/gpu/drm/radeon/uvd_v1_0.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c > index 0a243f0..be42c81 100644 > --- a/drivers/gpu/drm/radeon/uvd_v1_0.c > +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c > @@ -83,7 +83,10 @@ int uvd_v1_0_init(struct radeon_device *rdev) > int r; > > /* raise clocks while booting up the VCPU */ > - radeon_set_uvd_clocks(rdev, 53300, 40000); > + if (rdev->family < CHIP_RV740) > + radeon_set_uvd_clocks(rdev, 10000, 10000); > + else > + radeon_set_uvd_clocks(rdev, 53300, 40000); > > r = uvd_v1_0_start(rdev); > if (r) > @@ -407,7 +410,10 @@ int uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) > struct radeon_fence *fence = NULL; > int r; > > - r = radeon_set_uvd_clocks(rdev, 53300, 40000); > + if (rdev->family < CHIP_RV740) > + r = radeon_set_uvd_clocks(rdev, 10000, 10000); > + else > + r = radeon_set_uvd_clocks(rdev, 53300, 40000); > if (r) { > DRM_ERROR("radeon: failed to raise UVD clocks (%d).\n", r); > return r; > -- > 1.9.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
Am 28.04.2014 16:41, schrieb Alex Deucher: > On Mon, Apr 28, 2014 at 4:17 AM, Christian König > <deathsimple@vodafone.de> wrote: >> From: Christian König <christian.koenig@amd.com> >> >> Some RV7xx generation hardware crashes after you >> raise the UVD clocks for the first time. Try to >> avoid this by using the lower clocks to boot these. >> >> Workaround for: https://bugzilla.kernel.org/show_bug.cgi?id=71891 >> >> v2: lower clocks on IB test as well >> >> Signed-off-by: Christian König <christian.koenig@amd.com> >> Cc: stable@vger.kernel.org > Any reason not to just always use lower clocks for the tests for all > asics? Yeah, evergreen and BTC don't want to boot UVD with the lower clocks, no idea why. But essentially it's just a workaround, we should really try to figure out why this RV730 crashes so badly as soon as you raise the UVD clocks. > Either way: > > Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Thanks, Christian. > >> --- >> drivers/gpu/drm/radeon/uvd_v1_0.c | 10 ++++++++-- >> 1 file changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c >> index 0a243f0..be42c81 100644 >> --- a/drivers/gpu/drm/radeon/uvd_v1_0.c >> +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c >> @@ -83,7 +83,10 @@ int uvd_v1_0_init(struct radeon_device *rdev) >> int r; >> >> /* raise clocks while booting up the VCPU */ >> - radeon_set_uvd_clocks(rdev, 53300, 40000); >> + if (rdev->family < CHIP_RV740) >> + radeon_set_uvd_clocks(rdev, 10000, 10000); >> + else >> + radeon_set_uvd_clocks(rdev, 53300, 40000); >> >> r = uvd_v1_0_start(rdev); >> if (r) >> @@ -407,7 +410,10 @@ int uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) >> struct radeon_fence *fence = NULL; >> int r; >> >> - r = radeon_set_uvd_clocks(rdev, 53300, 40000); >> + if (rdev->family < CHIP_RV740) >> + r = radeon_set_uvd_clocks(rdev, 10000, 10000); >> + else >> + r = radeon_set_uvd_clocks(rdev, 53300, 40000); >> if (r) { >> DRM_ERROR("radeon: failed to raise UVD clocks (%d).\n", r); >> return r; >> -- >> 1.9.1 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/radeon/uvd_v1_0.c b/drivers/gpu/drm/radeon/uvd_v1_0.c index 0a243f0..be42c81 100644 --- a/drivers/gpu/drm/radeon/uvd_v1_0.c +++ b/drivers/gpu/drm/radeon/uvd_v1_0.c @@ -83,7 +83,10 @@ int uvd_v1_0_init(struct radeon_device *rdev) int r; /* raise clocks while booting up the VCPU */ - radeon_set_uvd_clocks(rdev, 53300, 40000); + if (rdev->family < CHIP_RV740) + radeon_set_uvd_clocks(rdev, 10000, 10000); + else + radeon_set_uvd_clocks(rdev, 53300, 40000); r = uvd_v1_0_start(rdev); if (r) @@ -407,7 +410,10 @@ int uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring) struct radeon_fence *fence = NULL; int r; - r = radeon_set_uvd_clocks(rdev, 53300, 40000); + if (rdev->family < CHIP_RV740) + r = radeon_set_uvd_clocks(rdev, 10000, 10000); + else + r = radeon_set_uvd_clocks(rdev, 53300, 40000); if (r) { DRM_ERROR("radeon: failed to raise UVD clocks (%d).\n", r); return r;