drm/radeon/kms: Remove old init path as no hw use it anymore
[deliverable/linux.git] / drivers / gpu / drm / radeon / rv770.c
index a6399662a8432c88a0e8186c068c69b234c6f307..867d04bc4d3933f7e59f3cd221347860da5d9d47 100644 (file)
 #include <linux/platform_device.h>
 #include "drmP.h"
 #include "radeon.h"
+#include "radeon_drm.h"
 #include "rv770d.h"
-#include "avivod.h"
 #include "atom.h"
+#include "avivod.h"
 
 #define R700_PFP_UCODE_SIZE 848
 #define R700_PM4_UCODE_SIZE 1360
@@ -55,8 +56,6 @@ int rv770_pcie_gart_enable(struct radeon_device *rdev)
        r = radeon_gart_table_vram_pin(rdev);
        if (r)
                return r;
-       for (i = 0; i < rdev->gart.num_gpu_pages; i++)
-               r600_gart_clear_page(rdev, i);
        /* Setup L2 cache */
        WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING |
                                ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
@@ -232,7 +231,7 @@ static void rv770_mc_resume(struct radeon_device *rdev)
 
        /* we need to own VRAM, so turn off the VGA renderer here
         * to stop it overwriting our objects */
-       radeon_avivo_vga_render_disable(rdev);
+       rv515_vga_render_disable(rdev);
 }
 
 
@@ -680,11 +679,11 @@ static void rv770_gpu_init(struct radeon_device *rdev)
        WREG32(SQ_CONFIG, sq_config);
 
        WREG32(SQ_GPR_RESOURCE_MGMT_1,  (NUM_PS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
-                                                   NUM_VS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
-                                                   NUM_CLAUSE_TEMP_GPRS(((rdev->config.rv770.max_gprs * 24)/64)/2)));
+                                        NUM_VS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
+                                        NUM_CLAUSE_TEMP_GPRS(((rdev->config.rv770.max_gprs * 24)/64)/2)));
 
        WREG32(SQ_GPR_RESOURCE_MGMT_2,  (NUM_GS_GPRS((rdev->config.rv770.max_gprs * 7)/64) |
-                                                   NUM_ES_GPRS((rdev->config.rv770.max_gprs * 7)/64)));
+                                        NUM_ES_GPRS((rdev->config.rv770.max_gprs * 7)/64)));
 
        sq_thread_resource_mgmt = (NUM_PS_THREADS((rdev->config.rv770.max_threads * 4)/8) |
                                   NUM_VS_THREADS((rdev->config.rv770.max_threads * 2)/8) |
@@ -716,14 +715,14 @@ static void rv770_gpu_init(struct radeon_device *rdev)
        WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_7, sq_dyn_gpr_size_simd_ab_0);
 
        WREG32(PA_SC_FORCE_EOV_MAX_CNTS, (FORCE_EOV_MAX_CLK_CNT(4095) |
-                                                    FORCE_EOV_MAX_REZ_CNT(255)));
+                                         FORCE_EOV_MAX_REZ_CNT(255)));
 
        if (rdev->family == CHIP_RV710)
                WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(TC_ONLY) |
-                                                          AUTO_INVLD_EN(ES_AND_GS_AUTO)));
+                                               AUTO_INVLD_EN(ES_AND_GS_AUTO)));
        else
                WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(VC_AND_TC) |
-                                                          AUTO_INVLD_EN(ES_AND_GS_AUTO)));
+                                               AUTO_INVLD_EN(ES_AND_GS_AUTO)));
 
        switch (rdev->family) {
        case CHIP_RV770:
@@ -802,6 +801,13 @@ int rv770_mc_init(struct radeon_device *rdev)
        /* Setup GPU memory space */
        rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
        rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
+
+       if (rdev->mc.mc_vram_size > rdev->mc.aper_size)
+               rdev->mc.mc_vram_size = rdev->mc.aper_size;
+
+       if (rdev->mc.real_vram_size > rdev->mc.aper_size)
+               rdev->mc.real_vram_size = rdev->mc.aper_size;
+
        if (rdev->flags & RADEON_IS_AGP) {
                r = radeon_agp_init(rdev);
                if (r)
@@ -847,19 +853,28 @@ int rv770_mc_init(struct radeon_device *rdev)
 }
 int rv770_gpu_reset(struct radeon_device *rdev)
 {
-       /* FIXME: implement */
-       return 0;
+       /* FIXME: implement any rv770 specific bits */
+       return r600_gpu_reset(rdev);
 }
 
 static int rv770_startup(struct radeon_device *rdev)
 {
        int r;
 
+       radeon_gpu_reset(rdev);
        rv770_mc_resume(rdev);
        r = rv770_pcie_gart_enable(rdev);
        if (r)
                return r;
        rv770_gpu_init(rdev);
+
+       r = radeon_object_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
+                             &rdev->r600_blit.shader_gpu_addr);
+       if (r) {
+               DRM_ERROR("failed to pin blit object %d\n", r);
+               return r;
+       }
+
        r = radeon_ring_init(rdev, rdev->cp.ring_size);
        if (r)
                return r;
@@ -900,7 +915,7 @@ int rv770_resume(struct radeon_device *rdev)
                return r;
        }
 
-       r = radeon_ib_test(rdev);
+       r = r600_ib_test(rdev);
        if (r) {
                DRM_ERROR("radeon: failled testing IB (%d).\n", r);
                return r;
@@ -913,7 +928,11 @@ int rv770_suspend(struct radeon_device *rdev)
 {
        /* FIXME: we should wait for ring to be empty */
        r700_cp_stop(rdev);
+       rdev->cp.ready = false;
        rv770_pcie_gart_disable(rdev);
+
+       /* unpin shaders bo */
+        radeon_object_unpin(rdev->r600_blit.shader_obj);
        return 0;
 }
 
@@ -927,7 +946,6 @@ int rv770_init(struct radeon_device *rdev)
 {
        int r;
 
-       rdev->new_init_path = true;
        r = radeon_dummy_page_init(rdev);
        if (r)
                return r;
@@ -993,6 +1011,12 @@ int rv770_init(struct radeon_device *rdev)
                return r;
 
        rdev->accel_working = true;
+       r = r600_blit_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: failled blitter (%d).\n", r);
+               rdev->accel_working = false;
+       }
+
        r = rv770_startup(rdev);
        if (r) {
                if (rdev->flags & RADEON_IS_AGP) {
@@ -1004,17 +1028,12 @@ int rv770_init(struct radeon_device *rdev)
                rdev->accel_working = false;
        }
        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);
+               r = r600_ib_test(rdev);
                if (r) {
                        DRM_ERROR("radeon: failled testing IB (%d).\n", r);
                        rdev->accel_working = false;
@@ -1025,6 +1044,8 @@ int rv770_init(struct radeon_device *rdev)
 
 void rv770_fini(struct radeon_device *rdev)
 {
+       rv770_suspend(rdev);
+
        r600_blit_fini(rdev);
        radeon_ring_fini(rdev);
        rv770_pcie_gart_fini(rdev);
This page took 0.053832 seconds and 5 git commands to generate.