Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: drm/radeon: fix problem with changing active VRAM size. (v2)
This commit is contained in:
commit
215fd2fa88
|
@ -2194,7 +2194,6 @@ int evergreen_mc_init(struct radeon_device *rdev)
|
|||
rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024;
|
||||
}
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
r700_vram_gtt_location(rdev, &rdev->mc);
|
||||
radeon_update_bandwidth_info(rdev);
|
||||
|
||||
|
@ -2934,7 +2933,7 @@ static int evergreen_startup(struct radeon_device *rdev)
|
|||
/* XXX: ontario has problems blitting to gart at the moment */
|
||||
if (rdev->family == CHIP_PALM) {
|
||||
rdev->asic->copy = NULL;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
}
|
||||
|
||||
/* allocate wb buffer */
|
||||
|
|
|
@ -623,7 +623,7 @@ done:
|
|||
dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
|
||||
return r;
|
||||
}
|
||||
rdev->mc.active_vram_size = rdev->mc.real_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -631,7 +631,7 @@ void evergreen_blit_fini(struct radeon_device *rdev)
|
|||
{
|
||||
int r;
|
||||
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
if (rdev->r600_blit.shader_obj == NULL)
|
||||
return;
|
||||
/* If we can't reserve the bo, unref should be enough to destroy
|
||||
|
|
|
@ -1024,7 +1024,7 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
|
|||
return r;
|
||||
}
|
||||
rdev->cp.ready = true;
|
||||
rdev->mc.active_vram_size = rdev->mc.real_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1042,7 +1042,7 @@ void r100_cp_fini(struct radeon_device *rdev)
|
|||
void r100_cp_disable(struct radeon_device *rdev)
|
||||
{
|
||||
/* Disable ring */
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
rdev->cp.ready = false;
|
||||
WREG32(RADEON_CP_CSQ_MODE, 0);
|
||||
WREG32(RADEON_CP_CSQ_CNTL, 0);
|
||||
|
@ -2312,7 +2312,6 @@ void r100_vram_init_sizes(struct radeon_device *rdev)
|
|||
/* FIXME we don't use the second aperture yet when we could use it */
|
||||
if (rdev->mc.visible_vram_size > rdev->mc.aper_size)
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
config_aper_size = RREG32(RADEON_CONFIG_APER_SIZE);
|
||||
if (rdev->flags & RADEON_IS_IGP) {
|
||||
uint32_t tom;
|
||||
|
|
|
@ -1255,7 +1255,6 @@ int r600_mc_init(struct radeon_device *rdev)
|
|||
rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
|
||||
rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
r600_vram_gtt_location(rdev, &rdev->mc);
|
||||
|
||||
if (rdev->flags & RADEON_IS_IGP) {
|
||||
|
@ -1937,7 +1936,7 @@ void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
|
|||
*/
|
||||
void r600_cp_stop(struct radeon_device *rdev)
|
||||
{
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1));
|
||||
WREG32(SCRATCH_UMSK, 0);
|
||||
}
|
||||
|
|
|
@ -558,7 +558,7 @@ done:
|
|||
dev_err(rdev->dev, "(%d) pin blit object failed\n", r);
|
||||
return r;
|
||||
}
|
||||
rdev->mc.active_vram_size = rdev->mc.real_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -566,7 +566,7 @@ void r600_blit_fini(struct radeon_device *rdev)
|
|||
{
|
||||
int r;
|
||||
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
if (rdev->r600_blit.shader_obj == NULL)
|
||||
return;
|
||||
/* If we can't reserve the bo, unref should be enough to destroy
|
||||
|
|
|
@ -345,7 +345,6 @@ struct radeon_mc {
|
|||
* about vram size near mc fb location */
|
||||
u64 mc_vram_size;
|
||||
u64 visible_vram_size;
|
||||
u64 active_vram_size;
|
||||
u64 gtt_size;
|
||||
u64 gtt_start;
|
||||
u64 gtt_end;
|
||||
|
@ -1448,6 +1447,7 @@ extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *m
|
|||
extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
|
||||
extern int radeon_resume_kms(struct drm_device *dev);
|
||||
extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state);
|
||||
extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size);
|
||||
|
||||
/* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */
|
||||
extern bool r600_card_posted(struct radeon_device *rdev);
|
||||
|
|
|
@ -156,9 +156,12 @@ int radeon_gem_info_ioctl(struct drm_device *dev, void *data,
|
|||
{
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_radeon_gem_info *args = data;
|
||||
struct ttm_mem_type_manager *man;
|
||||
|
||||
man = &rdev->mman.bdev.man[TTM_PL_VRAM];
|
||||
|
||||
args->vram_size = rdev->mc.real_vram_size;
|
||||
args->vram_visible = rdev->mc.real_vram_size;
|
||||
args->vram_visible = (u64)man->size << PAGE_SHIFT;
|
||||
if (rdev->stollen_vga_memory)
|
||||
args->vram_visible -= radeon_bo_size(rdev->stollen_vga_memory);
|
||||
args->vram_visible -= radeon_fbdev_total_size(rdev);
|
||||
|
|
|
@ -589,6 +589,20 @@ void radeon_ttm_fini(struct radeon_device *rdev)
|
|||
DRM_INFO("radeon: ttm finalized\n");
|
||||
}
|
||||
|
||||
/* this should only be called at bootup or when userspace
|
||||
* isn't running */
|
||||
void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size)
|
||||
{
|
||||
struct ttm_mem_type_manager *man;
|
||||
|
||||
if (!rdev->mman.initialized)
|
||||
return;
|
||||
|
||||
man = &rdev->mman.bdev.man[TTM_PL_VRAM];
|
||||
/* this just adjusts TTM size idea, which sets lpfn to the correct value */
|
||||
man->size = size >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
static struct vm_operations_struct radeon_ttm_vm_ops;
|
||||
static const struct vm_operations_struct *ttm_vm_ops = NULL;
|
||||
|
||||
|
|
|
@ -751,7 +751,6 @@ void rs600_mc_init(struct radeon_device *rdev)
|
|||
rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE);
|
||||
rdev->mc.mc_vram_size = rdev->mc.real_vram_size;
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev);
|
||||
base = RREG32_MC(R_000004_MC_FB_LOCATION);
|
||||
base = G_000004_MC_FB_START(base) << 16;
|
||||
|
|
|
@ -157,7 +157,6 @@ void rs690_mc_init(struct radeon_device *rdev)
|
|||
rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
|
||||
rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
base = RREG32_MC(R_000100_MCCFG_FB_LOCATION);
|
||||
base = G_000100_MC_FB_START(base) << 16;
|
||||
rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev);
|
||||
|
|
|
@ -307,7 +307,7 @@ static void rv770_mc_program(struct radeon_device *rdev)
|
|||
*/
|
||||
void r700_cp_stop(struct radeon_device *rdev)
|
||||
{
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||
WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
|
||||
WREG32(SCRATCH_UMSK, 0);
|
||||
}
|
||||
|
@ -1123,7 +1123,6 @@ int rv770_mc_init(struct radeon_device *rdev)
|
|||
rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
|
||||
rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
|
||||
rdev->mc.visible_vram_size = rdev->mc.aper_size;
|
||||
rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
|
||||
r700_vram_gtt_location(rdev, &rdev->mc);
|
||||
radeon_update_bandwidth_info(rdev);
|
||||
|
||||
|
|
Loading…
Reference in New Issue