diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_cp.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_cp.c | 36 | 
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 59a2132a8f5..dcebb4bee7a 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c @@ -653,15 +653,16 @@ static void radeon_cp_init_ring_buffer(struct drm_device * dev,  	RADEON_WRITE(RADEON_SCRATCH_UMSK, 0x7);  	/* Turn on bus mastering */ -	if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS400) || -	    ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || +	if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) ||  	    ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) { -		/* rs400, rs690/rs740 */ -		tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RS400_BUS_MASTER_DIS; +		/* rs600/rs690/rs740 */ +		tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RS600_BUS_MASTER_DIS;  		RADEON_WRITE(RADEON_BUS_CNTL, tmp); -	} else if (!(((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV380) || -		    ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R423))) { -		/* r1xx, r2xx, r300, r(v)350, r420/r481, rs480 */ +	} else if (((dev_priv->flags & RADEON_FAMILY_MASK) <= CHIP_RV350) || +		   ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R420) || +		   ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS400) || +		   ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS480)) { +		/* r1xx, r2xx, r300, r(v)350, r420/r481, rs400/rs480 */  		tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS;  		RADEON_WRITE(RADEON_BUS_CNTL, tmp);  	} /* PCIE cards appears to not need this */ @@ -1750,6 +1751,18 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)  	else  		dev_priv->flags |= RADEON_IS_PCI; +	ret = drm_addmap(dev, drm_get_resource_start(dev, 2), +			 drm_get_resource_len(dev, 2), _DRM_REGISTERS, +			 _DRM_READ_ONLY | _DRM_DRIVER, &dev_priv->mmio); +	if (ret != 0) +		return ret; + +	ret = drm_vblank_init(dev, 2); +	if (ret) { +		radeon_driver_unload(dev); +		return ret; +	} +  	DRM_DEBUG("%s card detected\n",  		  ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI"))));  	return ret; @@ -1766,12 +1779,6 @@ int radeon_driver_firstopen(struct drm_device *dev)  	dev_priv->gart_info.table_size = RADEON_PCIGART_TABLE_SIZE; -	ret = drm_addmap(dev, drm_get_resource_start(dev, 2), -			 drm_get_resource_len(dev, 2), _DRM_REGISTERS, -			 _DRM_READ_ONLY, &dev_priv->mmio); -	if (ret != 0) -		return ret; -  	dev_priv->fb_aper_offset = drm_get_resource_start(dev, 0);  	ret = drm_addmap(dev, dev_priv->fb_aper_offset,  			 drm_get_resource_len(dev, 0), _DRM_FRAME_BUFFER, @@ -1787,6 +1794,9 @@ int radeon_driver_unload(struct drm_device *dev)  	drm_radeon_private_t *dev_priv = dev->dev_private;  	DRM_DEBUG("\n"); + +	drm_rmmap(dev, dev_priv->mmio); +  	drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER);  	dev->dev_private = NULL;  |