diff mbox

drm/radeon/uvd: use lower clocks on old UVD to boot v2

Message ID 1398673053-2463-1-git-send-email-deathsimple@vodafone.de (mailing list archive)
State New, archived
Headers show

Commit Message

Christian König April 28, 2014, 8:17 a.m. UTC
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
---
 drivers/gpu/drm/radeon/uvd_v1_0.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Alex Deucher April 28, 2014, 2:41 p.m. UTC | #1
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
Christian König April 29, 2014, 10:35 a.m. UTC | #2
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 mbox

Patch

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;