Re: [PATCH] drm/radeon/kms: don't fail if we fail to init GPU acceleration

2009-09-18 Thread Dave Airlie


 kernel failed to initialize KMS. This should allow to give a
 working KMS setup in all case (even with non functionning accel).
 
 Signed-off-by: Jerome Glisse jgli...@redhat.com

Applied thanks,

Dave.

--
Come build with us! The BlackBerryreg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9#45;12, 2009. Register now#33;
http://p.sf.net/sfu/devconf
--
___
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel


[PATCH] drm/radeon/kms: don't fail if we fail to init GPU acceleration

2009-09-16 Thread Jerome Glisse
Userspace can query if acceleration is working or not true get
info ioctl and could fallback to software if for some reason
kernel failed to initialize KMS. This should allow to give a
working KMS setup in all case (even with non functionning accel).

Signed-off-by: Jerome Glisse jgli...@redhat.com
---
 drivers/gpu/drm/radeon/r420.c  |2 +
 drivers/gpu/drm/radeon/r600.c  |   33 +---
 drivers/gpu/drm/radeon/radeon.h|1 +
 drivers/gpu/drm/radeon/radeon_device.c |   44 +---
 drivers/gpu/drm/radeon/radeon_kms.c|3 ++
 drivers/gpu/drm/radeon/rv770.c |   33 +---
 include/drm/radeon_drm.h   |1 +
 7 files changed, 61 insertions(+), 56 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index 33a25a4..2142a47 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -329,6 +329,7 @@ int r420_init(struct radeon_device *rdev)
return r;
}
r300_set_reg_safe(rdev);
+   rdev-accel_working = true;
r = r420_resume(rdev);
if (r) {
/* Somethings want wront with the accel init stop accel */
@@ -343,6 +344,7 @@ int r420_init(struct radeon_device *rdev)
r100_pci_gart_fini(rdev);
radeon_agp_fini(rdev);
radeon_irq_kms_fini(rdev);
+   rdev-accel_working = false;
}
return 0;
 }
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 65699e9..af430d7 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1573,6 +1573,7 @@ int r600_init(struct radeon_device *rdev)
if (r)
return r;
 
+   rdev-accel_working = true;
r = r600_resume(rdev);
if (r) {
if (rdev-flags  RADEON_IS_AGP) {
@@ -1581,22 +1582,24 @@ int r600_init(struct radeon_device *rdev)
rdev-flags = ~RADEON_IS_AGP;
return r600_init(rdev);
}
-   return r;
-   }
-   r = radeon_ib_pool_init(rdev);
-   if (r) {
-   DRM_ERROR(radeon: failled initializing IB pool (%d).\n, r);
-   return r;
+   rdev-accel_working = false;
}
-   r = r600_blit_init(rdev);
-   if (r) {
-   DRM_ERROR(radeon: failled blitter (%d).\n, r);
-   return r;
-   }
-   r = radeon_ib_test(rdev);
-   if (r) {
-   DRM_ERROR(radeon: failled testing IB (%d).\n, r);
-   return r;
+   if (rdev-accel_working) {
+   r = radeon_ib_pool_init(rdev);
+   if (r) {
+   DRM_ERROR(radeon: failled initializing IB pool 
(%d).\n, r);
+   rdev-accel_working = false;
+   }
+   r = r600_blit_init(rdev);
+   if (r) {
+   DRM_ERROR(radeon: failled blitter (%d).\n, r);
+   rdev-accel_working = false;
+   }
+   r = radeon_ib_test(rdev);
+   if (r) {
+   DRM_ERROR(radeon: failled testing IB (%d).\n, r);
+   rdev-accel_working = false;
+   }
}
return 0;
 }
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5bfc056..d7c4efd 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -793,6 +793,7 @@ struct radeon_device {
boolsuspend;
boolneed_dma32;
boolnew_init_path;
+   boolaccel_working;
struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES];
const struct firmware *me_fw;   /* all family ME firmware */
const struct firmware *pfp_fw;  /* r6/700 PFP firmware */
diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
b/drivers/gpu/drm/radeon/radeon_device.c
index db5ae73..0b5014c 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -504,6 +504,7 @@ int radeon_device_init(struct radeon_device *rdev,
rdev-usec_timeout = RADEON_MAX_USEC_TIMEOUT;
rdev-mc.gtt_size = radeon_gart_size * 1024 * 1024;
rdev-gpu_lockup = false;
+   rdev-accel_working = false;
/* mutex initialization are all done here so we
 * can recall function without having locking issues */
mutex_init(rdev-cs_mutex);
@@ -649,35 +650,26 @@ int radeon_device_init(struct radeon_device *rdev,
/* Initialize GART (initialize after TTM so we can allocate
 * memory through TTM but finalize after TTM) */
r = radeon_gart_enable(rdev);
-   if (!r) {
+   if (r)
+   return 0;