[PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Michel Dänzer
On Mon, 2012-07-09 at 17:22 +0200, Christian K?nig wrote: 
> On 09.07.2012 17:06, Michel D?nzer wrote:
> > On Mon, 2012-07-09 at 12:42 +0200, Christian K?nig wrote:
> >> Making it easier to controlwhen it is executed.
> >>
> >> Signed-off-by: Christian K?nig 
> > [...]
> >> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
> >> b/drivers/gpu/drm/radeon/radeon_device.c
> >> index 254fdb4..bbd0971 100644
> >> --- a/drivers/gpu/drm/radeon/radeon_device.c
> >> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> >> @@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
> >>if (r)
> >>return r;
> >>   
> >> +  r = radeon_ib_ring_tests(rdev);
> >> +  if (r)
> >> +  DRM_ERROR("ib ring test failed (%d).\n", r);
> >> +
> >>if (rdev->flags & RADEON_IS_AGP && !rdev->accel_working) {
> >>/* Acceleration not working on AGP card try again
> >> * with fallback to PCI or PCIE GART
> > I think this needs to set rdev->accel_working = false on failure, so the
> > AGP -> PCI(e) fallback can kick in.
> 
> See the implementation of radeon_ib_ring_tests, it is already handling 
> that internally.

Oops, I actually did check this when writing the above, but somehow I
failed to see what I was looking for. :}


-- 
Earthling Michel D?nzer   |   http://www.amd.com
Libre software enthusiast |  Debian, X and DRI developer


[PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Christian König
On 09.07.2012 17:06, Michel D?nzer wrote:
> On Mon, 2012-07-09 at 12:42 +0200, Christian K?nig wrote:
>> Making it easier to controlwhen it is executed.
>>
>> Signed-off-by: Christian K?nig 
> [...]
>> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
>> b/drivers/gpu/drm/radeon/radeon_device.c
>> index 254fdb4..bbd0971 100644
>> --- a/drivers/gpu/drm/radeon/radeon_device.c
>> +++ b/drivers/gpu/drm/radeon/radeon_device.c
>> @@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
>>  if (r)
>>  return r;
>>   
>> +r = radeon_ib_ring_tests(rdev);
>> +if (r)
>> +DRM_ERROR("ib ring test failed (%d).\n", r);
>> +
>>  if (rdev->flags & RADEON_IS_AGP && !rdev->accel_working) {
>>  /* Acceleration not working on AGP card try again
>>   * with fallback to PCI or PCIE GART
> I think this needs to set rdev->accel_working = false on failure, so the
> AGP -> PCI(e) fallback can kick in.

See the implementation of radeon_ib_ring_tests, it is already handling 
that internally.

> Not sure about the other places where you're adding
> radeon_ib_ring_tests() calls, might need more error handling as well.
radeon_ib_ring_tests is already handling most errors internally, e. g. 
it sets the accel_working and the ring->ready flags to false if anything 
goes wrong. The return value is mostly for the case where we want to try 
the reset a second time if restoring the ring commands leads to another 
lockup. I just doesn't want to ignore the result completely, so the 
additional error message.

Christian.



[PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Michel Dänzer
On Mon, 2012-07-09 at 12:42 +0200, Christian K?nig wrote: 
> Making it easier to controlwhen it is executed.
> 
> Signed-off-by: Christian K?nig 
[...] 
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
> b/drivers/gpu/drm/radeon/radeon_device.c
> index 254fdb4..bbd0971 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
>   if (r)
>   return r;
>  
> + r = radeon_ib_ring_tests(rdev);
> + if (r)
> + DRM_ERROR("ib ring test failed (%d).\n", r);
> +
>   if (rdev->flags & RADEON_IS_AGP && !rdev->accel_working) {
>   /* Acceleration not working on AGP card try again
>* with fallback to PCI or PCIE GART

I think this needs to set rdev->accel_working = false on failure, so the
AGP -> PCI(e) fallback can kick in.

Not sure about the other places where you're adding
radeon_ib_ring_tests() calls, might need more error handling as well.


-- 
Earthling Michel D?nzer   |   http://www.amd.com
Libre software enthusiast |  Debian, X and DRI developer


[PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Christian König
Making it easier to controlwhen it is executed.

Signed-off-by: Christian K?nig 
---
 drivers/gpu/drm/radeon/evergreen.c |4 
 drivers/gpu/drm/radeon/ni.c|4 
 drivers/gpu/drm/radeon/r100.c  |4 
 drivers/gpu/drm/radeon/r300.c  |4 
 drivers/gpu/drm/radeon/r420.c  |4 
 drivers/gpu/drm/radeon/r520.c  |4 
 drivers/gpu/drm/radeon/r600.c  |4 
 drivers/gpu/drm/radeon/radeon_device.c |   15 +++
 drivers/gpu/drm/radeon/rs400.c |4 
 drivers/gpu/drm/radeon/rs600.c |4 
 drivers/gpu/drm/radeon/rs690.c |4 
 drivers/gpu/drm/radeon/rv515.c |4 
 drivers/gpu/drm/radeon/rv770.c |4 
 drivers/gpu/drm/radeon/si.c|   21 -
 14 files changed, 15 insertions(+), 69 deletions(-)

diff --git a/drivers/gpu/drm/radeon/evergreen.c 
b/drivers/gpu/drm/radeon/evergreen.c
index 82f7aea..f39b900 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3093,10 +3093,6 @@ static int evergreen_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = r600_audio_init(rdev);
if (r) {
DRM_ERROR("radeon: audio init failed\n");
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index ec5307c..f2afefb 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1276,10 +1276,6 @@ static int cayman_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = radeon_vm_manager_init(rdev);
if (r) {
dev_err(rdev->dev, "vm manager initialization failed (%d).\n", 
r);
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 9524bd4..e0f5ae8 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -3887,10 +3887,6 @@ static int r100_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }

diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index b396e34..646a192 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1397,10 +1397,6 @@ static int r300_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }

diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index 0062938..f2f5bf6 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -281,10 +281,6 @@ static int r420_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }

diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
index 6df3e51..079d3c5 100644
--- a/drivers/gpu/drm/radeon/r520.c
+++ b/drivers/gpu/drm/radeon/r520.c
@@ -209,10 +209,6 @@ static int r520_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }

diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index af2f74a..c808fa9 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2395,10 +2395,6 @@ int r600_startup(struct radeon_device *rdev)
return r;
}

-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = r600_audio_init(rdev);
if (r) {
DRM_ERROR("radeon: audio init failed\n");
diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
index 254fdb4..bbd0971 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
if (r)
return r;

+   r = radeon_ib_ring_tests(rdev);
+   if (r)
+   DRM_ERROR("ib ring test failed (%d).\n", r);
+
if (rdev->flags & RADEON_IS_AGP && !rdev->accel_working) {
/* Acceleration not working on AGP card try again
 * with fallback to PCI or PCIE GART
@@ -946,6 +950,7 @@ int radeon_resume_kms(struct drm_device *dev)
 {
struct drm_connector *connector;
struct radeon_device *rdev = dev->dev_private;
+   int r;

if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
@@ -960,6 +965,11 @@ int radeon_resume_kms(struct drm_device *dev)
/* resume AGP if in use */
radeon_agp_resume(rdev);
 

[PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Christian König
Making it easier to controlwhen it is executed.

Signed-off-by: Christian König deathsim...@vodafone.de
---
 drivers/gpu/drm/radeon/evergreen.c |4 
 drivers/gpu/drm/radeon/ni.c|4 
 drivers/gpu/drm/radeon/r100.c  |4 
 drivers/gpu/drm/radeon/r300.c  |4 
 drivers/gpu/drm/radeon/r420.c  |4 
 drivers/gpu/drm/radeon/r520.c  |4 
 drivers/gpu/drm/radeon/r600.c  |4 
 drivers/gpu/drm/radeon/radeon_device.c |   15 +++
 drivers/gpu/drm/radeon/rs400.c |4 
 drivers/gpu/drm/radeon/rs600.c |4 
 drivers/gpu/drm/radeon/rs690.c |4 
 drivers/gpu/drm/radeon/rv515.c |4 
 drivers/gpu/drm/radeon/rv770.c |4 
 drivers/gpu/drm/radeon/si.c|   21 -
 14 files changed, 15 insertions(+), 69 deletions(-)

diff --git a/drivers/gpu/drm/radeon/evergreen.c 
b/drivers/gpu/drm/radeon/evergreen.c
index 82f7aea..f39b900 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3093,10 +3093,6 @@ static int evergreen_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = r600_audio_init(rdev);
if (r) {
DRM_ERROR(radeon: audio init failed\n);
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index ec5307c..f2afefb 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1276,10 +1276,6 @@ static int cayman_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = radeon_vm_manager_init(rdev);
if (r) {
dev_err(rdev-dev, vm manager initialization failed (%d).\n, 
r);
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 9524bd4..e0f5ae8 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -3887,10 +3887,6 @@ static int r100_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }
 
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index b396e34..646a192 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1397,10 +1397,6 @@ static int r300_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }
 
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index 0062938..f2f5bf6 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -281,10 +281,6 @@ static int r420_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }
 
diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
index 6df3e51..079d3c5 100644
--- a/drivers/gpu/drm/radeon/r520.c
+++ b/drivers/gpu/drm/radeon/r520.c
@@ -209,10 +209,6 @@ static int r520_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
return 0;
 }
 
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index af2f74a..c808fa9 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2395,10 +2395,6 @@ int r600_startup(struct radeon_device *rdev)
return r;
}
 
-   r = radeon_ib_ring_tests(rdev);
-   if (r)
-   return r;
-
r = r600_audio_init(rdev);
if (r) {
DRM_ERROR(radeon: audio init failed\n);
diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
index 254fdb4..bbd0971 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
if (r)
return r;
 
+   r = radeon_ib_ring_tests(rdev);
+   if (r)
+   DRM_ERROR(ib ring test failed (%d).\n, r);
+
if (rdev-flags  RADEON_IS_AGP  !rdev-accel_working) {
/* Acceleration not working on AGP card try again
 * with fallback to PCI or PCIE GART
@@ -946,6 +950,7 @@ int radeon_resume_kms(struct drm_device *dev)
 {
struct drm_connector *connector;
struct radeon_device *rdev = dev-dev_private;
+   int r;
 
if (dev-switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
@@ -960,6 +965,11 @@ int radeon_resume_kms(struct drm_device *dev)
/* resume AGP if in use */

Re: [PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Michel Dänzer
On Mon, 2012-07-09 at 12:42 +0200, Christian König wrote: 
 Making it easier to controlwhen it is executed.
 
 Signed-off-by: Christian König deathsim...@vodafone.de
[...] 
 diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
 b/drivers/gpu/drm/radeon/radeon_device.c
 index 254fdb4..bbd0971 100644
 --- a/drivers/gpu/drm/radeon/radeon_device.c
 +++ b/drivers/gpu/drm/radeon/radeon_device.c
 @@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
   if (r)
   return r;
  
 + r = radeon_ib_ring_tests(rdev);
 + if (r)
 + DRM_ERROR(ib ring test failed (%d).\n, r);
 +
   if (rdev-flags  RADEON_IS_AGP  !rdev-accel_working) {
   /* Acceleration not working on AGP card try again
* with fallback to PCI or PCIE GART

I think this needs to set rdev-accel_working = false on failure, so the
AGP - PCI(e) fallback can kick in.

Not sure about the other places where you're adding
radeon_ib_ring_tests() calls, might need more error handling as well.


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast |  Debian, X and DRI developer
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Christian König

On 09.07.2012 17:06, Michel Dänzer wrote:

On Mon, 2012-07-09 at 12:42 +0200, Christian König wrote:

Making it easier to controlwhen it is executed.

Signed-off-by: Christian König deathsim...@vodafone.de

[...]

diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
index 254fdb4..bbd0971 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
if (r)
return r;
  
+	r = radeon_ib_ring_tests(rdev);

+   if (r)
+   DRM_ERROR(ib ring test failed (%d).\n, r);
+
if (rdev-flags  RADEON_IS_AGP  !rdev-accel_working) {
/* Acceleration not working on AGP card try again
 * with fallback to PCI or PCIE GART

I think this needs to set rdev-accel_working = false on failure, so the
AGP - PCI(e) fallback can kick in.


See the implementation of radeon_ib_ring_tests, it is already handling 
that internally.



Not sure about the other places where you're adding
radeon_ib_ring_tests() calls, might need more error handling as well.
radeon_ib_ring_tests is already handling most errors internally, e. g. 
it sets the accel_working and the ring-ready flags to false if anything 
goes wrong. The return value is mostly for the case where we want to try 
the reset a second time if restoring the ring commands leads to another 
lockup. I just doesn't want to ignore the result completely, so the 
additional error message.


Christian.

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH 13/16] drm/radeon: move radeon_ib_ring_tests out of chipset code

2012-07-09 Thread Michel Dänzer
On Mon, 2012-07-09 at 17:22 +0200, Christian König wrote: 
 On 09.07.2012 17:06, Michel Dänzer wrote:
  On Mon, 2012-07-09 at 12:42 +0200, Christian König wrote:
  Making it easier to controlwhen it is executed.
 
  Signed-off-by: Christian König deathsim...@vodafone.de
  [...]
  diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
  b/drivers/gpu/drm/radeon/radeon_device.c
  index 254fdb4..bbd0971 100644
  --- a/drivers/gpu/drm/radeon/radeon_device.c
  +++ b/drivers/gpu/drm/radeon/radeon_device.c
  @@ -822,6 +822,10 @@ int radeon_device_init(struct radeon_device *rdev,
 if (r)
 return r;

  +  r = radeon_ib_ring_tests(rdev);
  +  if (r)
  +  DRM_ERROR(ib ring test failed (%d).\n, r);
  +
 if (rdev-flags  RADEON_IS_AGP  !rdev-accel_working) {
 /* Acceleration not working on AGP card try again
  * with fallback to PCI or PCIE GART
  I think this needs to set rdev-accel_working = false on failure, so the
  AGP - PCI(e) fallback can kick in.
 
 See the implementation of radeon_ib_ring_tests, it is already handling 
 that internally.

Oops, I actually did check this when writing the above, but somehow I
failed to see what I was looking for. :}


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast |  Debian, X and DRI developer
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel