On Tue, Aug 10, 2010 at 5:41 PM,  <glisse at freedesktop.org> wrote:
> From: Jerome Glisse <jglisse at redhat.com>
>
> 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 at redhat.com>
> ---
> ?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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

Reply via email to