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 */
                        r100_pci_gart_fini(rdev);
                radeon_agp_fini(rdev);
                radeon_irq_kms_fini(rdev);
+               rdev->accel_working = false;
        }
        return 0;
 }
 
        if (r)
                return r;
 
+       rdev->accel_working = true;
        r = r600_resume(rdev);
        if (r) {
                if (rdev->flags & RADEON_IS_AGP) {
                        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;
 }
 
        bool                            suspend;
        bool                            need_dma32;
        bool                            new_init_path;
+       bool                            accel_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 */
 
        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);
                /* 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;
                        r = radeon_gem_init(rdev);
-               }
+               if (r)
+                       return 0;
 
                /* 1M ring buffer */
-               if (!r) {
-                       r = radeon_cp_init(rdev, 1024 * 1024);
-               }
-               if (!r) {
-                       r = radeon_wb_init(rdev);
-                       if (r) {
-                               DRM_ERROR("radeon: failled initializing WB (%d).\n", r);
-                               return r;
-                       }
-               }
-               if (!r) {
-                       r = radeon_ib_pool_init(rdev);
-                       if (r) {
-                               DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
-                               return r;
-                       }
-               }
-               if (!r) {
-                       r = radeon_ib_test(rdev);
-                       if (r) {
-                               DRM_ERROR("radeon: failled testing IB (%d).\n", r);
-                               return r;
-                       }
-               }
+               r = radeon_cp_init(rdev, 1024 * 1024);
+               if (r)
+                       return 0;
+               r = radeon_wb_init(rdev);
+               if (r)
+                       DRM_ERROR("radeon: failled initializing WB (%d).\n", r);
+               r = radeon_ib_pool_init(rdev);
+               if (r)
+                       return 0;
+               r = radeon_ib_test(rdev);
+               if (r)
+                       return 0;
+               rdev->accel_working = true;
        }
        DRM_INFO("radeon: kernel modesetting successfully initialized.\n");
        if (radeon_testing) {
 
        case RADEON_INFO_NUM_Z_PIPES:
                value = rdev->num_z_pipes;
                break;
+       case RADEON_INFO_ACCEL_WORKING:
+               value = rdev->accel_working;
+               break;
        default:
                DRM_DEBUG("Invalid request %d\n", info->request);
                return -EINVAL;
 
        if (r)
                return r;
 
+       rdev->accel_working = true;
        r = rv770_resume(rdev);
        if (r) {
                if (rdev->flags & RADEON_IS_AGP) {
                        rdev->flags &= ~RADEON_IS_AGP;
                        return rv770_init(rdev);
                }
-               return r;
-       }
-       r = r600_blit_init(rdev);
-       if (r) {
-               DRM_ERROR("radeon: failled blitter (%d).\n", r);
-               return r;
+               rdev->accel_working = false;
        }
-       r = radeon_ib_pool_init(rdev);
-       if (r) {
-               DRM_ERROR("radeon: failled initializing IB pool (%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 = r600_blit_init(rdev);
+               if (r) {
+                       DRM_ERROR("radeon: failled blitter (%d).\n", r);
+                       rdev->accel_working = false;
+               }
+               r = radeon_ib_pool_init(rdev);
+               if (r) {
+                       DRM_ERROR("radeon: failled initializing IB pool (%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;
 }
 
 #define RADEON_INFO_DEVICE_ID          0x00
 #define RADEON_INFO_NUM_GB_PIPES       0x01
 #define RADEON_INFO_NUM_Z_PIPES        0x02
+#define RADEON_INFO_ACCEL_WORKING      0x03
 
 struct drm_radeon_info {
        uint32_t                request;