On Tue, Aug 10, 2010 at 5:41 PM, <glisse@xxxxxxxxxxxxxxx> wrote: > From: Jerome Glisse <jglisse@xxxxxxxxxx> > > We should not allocate any object into unmappable vram if we > have no means to access them which on all GPU means having the > CP running and on newer GPU having the blit utility working. > > This patch limit the vram allocation to visible vram until > we have acceleration up and running. > > Note that it's more than unlikely that we run into any issue > related to that as when acceleration is not woring userspace > should allocate any object in vram beside front buffer which > should fit in visible vram. > > V2 use real_vram_size as mc_vram_size could be bigger than > the actual amount of vram > > Signed-off-by: Jerome Glisse <jglisse@xxxxxxxxxx> > --- > drivers/gpu/drm/radeon/evergreen.c | 1 + > drivers/gpu/drm/radeon/r100.c | 3 +++ > drivers/gpu/drm/radeon/r600.c | 2 ++ > drivers/gpu/drm/radeon/r600_blit_kms.c | 2 ++ > drivers/gpu/drm/radeon/radeon.h | 1 + > drivers/gpu/drm/radeon/radeon_object.c | 2 +- > drivers/gpu/drm/radeon/rs600.c | 1 + > drivers/gpu/drm/radeon/rs690.c | 1 + > drivers/gpu/drm/radeon/rv770.c | 1 + > 9 files changed, 13 insertions(+), 1 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c > index 957d506..4243344 100644 > --- a/drivers/gpu/drm/radeon/evergreen.c > +++ b/drivers/gpu/drm/radeon/evergreen.c > @@ -1359,6 +1359,7 @@ int evergreen_mc_init(struct radeon_device *rdev) > rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; > 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; > r600_vram_gtt_location(rdev, &rdev->mc); > radeon_update_bandwidth_info(rdev); > > diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c > index e817a0b..566c1e5 100644 > --- a/drivers/gpu/drm/radeon/r100.c > +++ b/drivers/gpu/drm/radeon/r100.c > @@ -1030,6 +1030,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; > return 0; > } > > @@ -1047,6 +1048,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; > rdev->cp.ready = false; > WREG32(RADEON_CP_CSQ_MODE, 0); > WREG32(RADEON_CP_CSQ_CNTL, 0); > @@ -2306,6 +2308,7 @@ 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; > diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c > index d0ebae9..acc71f2 100644 > --- a/drivers/gpu/drm/radeon/r600.c > +++ b/drivers/gpu/drm/radeon/r600.c > @@ -1248,6 +1248,7 @@ 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) { > @@ -1917,6 +1918,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; > WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); > } > r700_cp_stop needs to be updated as well. Other than that looks good. Alex > diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c > index d13622a..968ff3a 100644 > --- a/drivers/gpu/drm/radeon/r600_blit_kms.c > +++ b/drivers/gpu/drm/radeon/r600_blit_kms.c > @@ -507,6 +507,7 @@ int r600_blit_init(struct radeon_device *rdev) > memcpy(ptr + rdev->r600_blit.ps_offset, r6xx_ps, r6xx_ps_size * 4); > radeon_bo_kunmap(rdev->r600_blit.shader_obj); > radeon_bo_unreserve(rdev->r600_blit.shader_obj); > + rdev->mc.active_vram_size = rdev->mc.real_vram_size; > return 0; > } > > @@ -514,6 +515,7 @@ void r600_blit_fini(struct radeon_device *rdev) > { > int r; > > + rdev->mc.active_vram_size = 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 > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 3cd1c47..feeac20 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -344,6 +344,7 @@ 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; > diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c > index 0afd1e6..b3b5306 100644 > --- a/drivers/gpu/drm/radeon/radeon_object.c > +++ b/drivers/gpu/drm/radeon/radeon_object.c > @@ -69,7 +69,7 @@ void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain) > u32 c = 0; > > rbo->placement.fpfn = 0; > - rbo->placement.lpfn = 0; > + rbo->placement.lpfn = rbo->rdev->mc.active_vram_size >> PAGE_SHIFT; > rbo->placement.placement = rbo->placements; > rbo->placement.busy_placement = rbo->placements; > if (domain & RADEON_GEM_DOMAIN_VRAM) > diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c > index cc05b23..51d5f7b 100644 > --- a/drivers/gpu/drm/radeon/rs600.c > +++ b/drivers/gpu/drm/radeon/rs600.c > @@ -693,6 +693,7 @@ 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; > diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c > index 3e3f757..4dc2a87 100644 > --- a/drivers/gpu/drm/radeon/rs690.c > +++ b/drivers/gpu/drm/radeon/rs690.c > @@ -157,6 +157,7 @@ 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); > diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c > index f1c79681..3e6293e 100644 > --- a/drivers/gpu/drm/radeon/rv770.c > +++ b/drivers/gpu/drm/radeon/rv770.c > @@ -944,6 +944,7 @@ 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; > r600_vram_gtt_location(rdev, &rdev->mc); > radeon_update_bandwidth_info(rdev); > > -- > 1.7.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel