diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r520.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/r520.c | 51 | 
1 files changed, 37 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c index 3c8677f9e38..98d6053c36c 100644 --- a/drivers/gpu/drm/radeon/r520.c +++ b/drivers/gpu/drm/radeon/r520.c @@ -25,7 +25,7 @@   *          Alex Deucher   *          Jerome Glisse   */ -#include "drmP.h" +#include <drm/drmP.h>  #include "radeon.h"  #include "radeon_asic.h"  #include "atom.h" @@ -33,7 +33,7 @@  /* This files gather functions specifics to: r520,rv530,rv560,rv570,r580 */ -static int r520_mc_wait_for_idle(struct radeon_device *rdev) +int r520_mc_wait_for_idle(struct radeon_device *rdev)  {  	unsigned i;  	uint32_t tmp; @@ -79,8 +79,8 @@ static void r520_gpu_init(struct radeon_device *rdev)  		WREG32(0x4128, 0xFF);  	}  	r420_pipes_init(rdev); -	gb_pipe_select = RREG32(0x402C); -	tmp = RREG32(0x170C); +	gb_pipe_select = RREG32(R400_GB_PIPE_SELECT); +	tmp = RREG32(R300_DST_PIPE_CONFIG);  	pipe_select_current = (tmp >> 2) & 3;  	tmp = (1 << pipe_select_current) |  	      (((gb_pipe_select >> 8) & 0xF) << 4); @@ -119,7 +119,7 @@ static void r520_vram_get_type(struct radeon_device *rdev)  		rdev->mc.vram_width *= 2;  } -void r520_mc_init(struct radeon_device *rdev) +static void r520_mc_init(struct radeon_device *rdev)  {  	r520_vram_get_type(rdev); @@ -131,7 +131,7 @@ void r520_mc_init(struct radeon_device *rdev)  	radeon_update_bandwidth_info(rdev);  } -void r520_mc_program(struct radeon_device *rdev) +static void r520_mc_program(struct radeon_device *rdev)  {  	struct rv515_mc_save save; @@ -187,25 +187,41 @@ static int r520_startup(struct radeon_device *rdev)  	if (r)  		return r; +	r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX); +	if (r) { +		dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); +		return r; +	} +  	/* Enable IRQ */ +	if (!rdev->irq.installed) { +		r = radeon_irq_kms_init(rdev); +		if (r) +			return r; +	} +  	rs600_irq_set(rdev);  	rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);  	/* 1M ring buffer */  	r = r100_cp_init(rdev, 1024 * 1024);  	if (r) { -		dev_err(rdev->dev, "failled initializing CP (%d).\n", r); +		dev_err(rdev->dev, "failed initializing CP (%d).\n", r);  		return r;  	} -	r = r100_ib_init(rdev); + +	r = radeon_ib_pool_init(rdev);  	if (r) { -		dev_err(rdev->dev, "failled initializing IB (%d).\n", r); +		dev_err(rdev->dev, "IB initialization failed (%d).\n", r);  		return r;  	} +  	return 0;  }  int r520_resume(struct radeon_device *rdev)  { +	int r; +  	/* Make sur GART are not working */  	if (rdev->flags & RADEON_IS_PCIE)  		rv370_pcie_gart_disable(rdev); @@ -223,7 +239,13 @@ int r520_resume(struct radeon_device *rdev)  	rv515_clock_startup(rdev);  	/* Initialize surface registers */  	radeon_surface_init(rdev); -	return r520_startup(rdev); + +	rdev->accel_working = true; +	r = r520_startup(rdev); +	if (r) { +		rdev->accel_working = false; +	} +	return r;  }  int r520_init(struct radeon_device *rdev) @@ -281,9 +303,6 @@ int r520_init(struct radeon_device *rdev)  	r = radeon_fence_driver_init(rdev);  	if (r)  		return r; -	r = radeon_irq_kms_init(rdev); -	if (r) -		return r;  	/* Memory manager */  	r = radeon_bo_init(rdev);  	if (r) @@ -292,6 +311,10 @@ int r520_init(struct radeon_device *rdev)  	if (r)  		return r;  	rv515_set_safe_registers(rdev); + +	/* Initialize power management */ +	radeon_pm_init(rdev); +  	rdev->accel_working = true;  	r = r520_startup(rdev);  	if (r) { @@ -299,7 +322,7 @@ int r520_init(struct radeon_device *rdev)  		dev_err(rdev->dev, "Disabling GPU acceleration\n");  		r100_cp_fini(rdev);  		radeon_wb_fini(rdev); -		r100_ib_fini(rdev); +		radeon_ib_pool_fini(rdev);  		radeon_irq_kms_fini(rdev);  		rv370_pcie_gart_fini(rdev);  		radeon_agp_fini(rdev);  | 
