From: Thomas Zimmermann <tzimmermann@suse.de>
To: alexander.deucher@amd.com, christian.koenig@amd.com,
airlied@linux.ie, daniel@ffwll.ch,
maarten.lankhorst@linux.intel.com, mripard@kernel.org
Cc: Thomas Zimmermann <tzimmermann@suse.de>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [PATCH 6/7] drm/radeon: Use fbdev shadow fb
Date: Thu, 12 Nov 2020 14:21:16 +0100 [thread overview]
Message-ID: <20201112132117.27228-7-tzimmermann@suse.de> (raw)
In-Reply-To: <20201112132117.27228-1-tzimmermann@suse.de>
Fbdev framebuffer addresses are exported and mmap'ed to userspace, so the
framebuffer may not change its location. This creates memory pressure on
devices with little video RAM. Radeon mitigates this problem by reducing
the framebuffer's color depth on devices with 32 MiB or less.
Fully resolve the problem by enabling generic fbdev's shadow FB. All
userspace-visible memory is located in the shadow buffer. The underlying
BO can be evicted to system memory as needed, thus freeing video RAM for
more important uses.
Switching to a shadow framebuffer also allows to remove a special case in
BO handling, where the fbdev's BO was not evicted. Fbdev should now be
treated an any other framebuffer BO
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/radeon/radeon_device.c | 11 ++++-------
drivers/gpu/drm/radeon/radeon_fb.c | 17 ++---------------
drivers/gpu/drm/radeon/radeon_mode.h | 1 -
3 files changed, 6 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 266e3cbbd09b..87c14f6369ee 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1605,13 +1605,10 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend,
continue;
}
robj = gem_to_radeon_bo(fb->obj[0]);
- /* don't unpin kernel fb objects */
- if (!radeon_fbdev_robj_is_fb(rdev, robj)) {
- r = radeon_bo_reserve(robj, false);
- if (r == 0) {
- radeon_bo_unpin(robj);
- radeon_bo_unreserve(robj);
- }
+ r = radeon_bo_reserve(robj, false);
+ if (r == 0) {
+ radeon_bo_unpin(robj);
+ radeon_bo_unreserve(robj);
}
}
/* evict vram memory */
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index 50fdc2aaa463..c687d14a1b93 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -59,14 +59,12 @@ void radeon_fbdev_init(struct radeon_device *rdev)
struct drm_device *ddev = rdev->ddev;
int bpp_sel = 32;
- /* select 8 bpp console on 8MB cards, or 16 bpp on RN50 or 32MB */
- if (rdev->mc.real_vram_size <= (8*1024*1024))
- bpp_sel = 8;
- else if (ASIC_IS_RN50(rdev) || rdev->mc.real_vram_size <= (32*1024*1024))
+ if (ASIC_IS_RN50(rdev))
bpp_sel = 16;
/* radeon resume is fragile and needs a vt switch to help it along */
ddev->mode_config.require_vt_switch_fbdev = true;
+ ddev->mode_config.prefer_shadow_fbdev = true;
drm_fbdev_generic_setup(ddev, bpp_sel);
}
@@ -75,14 +73,3 @@ void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state)
{
drm_fb_helper_set_suspend(rdev->ddev->fb_helper, state);
}
-
-bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)
-{
- if (!rdev->ddev->fb_helper)
- return false;
-
- if (gem_to_radeon_bo(rdev->ddev->fb_helper->buffer->gem) != robj)
- return false;
-
- return true;
-}
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index fe192ef0aafa..197423ad42c1 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -977,7 +977,6 @@ void dce8_program_fmt(struct drm_encoder *encoder);
/* fbdev layer */
void radeon_fbdev_init(struct radeon_device *rdev);
void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state);
-bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj);
void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id);
--
2.29.2
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2020-11-12 13:21 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-12 13:21 [PATCH 0/7] drm/radeon: Convert to generic fbdev emulation Thomas Zimmermann
2020-11-12 13:21 ` [PATCH 1/7] drm/fb-helper: Set framebuffer for vga-switcheroo clients Thomas Zimmermann
2020-11-12 13:21 ` [PATCH 2/7] drm/fb-helper: Add hint to enable VT switching during suspend/resume Thomas Zimmermann
2020-11-12 13:21 ` [PATCH 3/7] drm/radeon: Whitespace fixes Thomas Zimmermann
2020-11-12 13:21 ` [PATCH 4/7] drm/radeon: Pin buffers while they are vmap'ed Thomas Zimmermann
2020-11-12 17:16 ` Christian König
2020-11-13 7:59 ` Thomas Zimmermann
2020-11-16 11:28 ` Christian König
2020-11-13 16:27 ` Thomas Zimmermann
2020-11-16 20:07 ` Thomas Zimmermann
2020-11-24 9:16 ` Thomas Zimmermann
2020-11-24 11:30 ` Christian König
2020-11-24 11:44 ` Thomas Zimmermann
2020-11-24 11:54 ` Christian König
2020-11-24 12:15 ` Thomas Zimmermann
2020-11-24 13:36 ` Christian König
2020-11-24 13:56 ` Thomas Zimmermann
2020-11-24 14:06 ` Christian König
2020-11-25 8:28 ` Thomas Zimmermann
2020-11-24 14:09 ` Daniel Vetter
2020-11-25 8:37 ` Thomas Zimmermann
2020-11-25 10:13 ` Christian König
2020-11-25 10:36 ` Daniel Vetter
2020-11-25 10:57 ` Christian König
2020-11-25 11:38 ` Thomas Zimmermann
2020-11-25 16:32 ` Daniel Vetter
2020-11-26 10:15 ` Thomas Zimmermann
2020-11-26 11:04 ` Daniel Vetter
2020-11-26 11:28 ` Christian König
2020-11-26 11:42 ` Thomas Zimmermann
2020-11-26 11:59 ` Thomas Zimmermann
2020-11-26 12:08 ` Christian König
2020-11-26 12:14 ` Thomas Zimmermann
2020-11-26 12:16 ` Christian König
2020-11-12 13:21 ` [PATCH 5/7] drm/radeon: Replace framebuffer console with generic implementation Thomas Zimmermann
2020-11-12 13:21 ` Thomas Zimmermann [this message]
2020-11-12 13:21 ` [PATCH 7/7] drm/radeon: Move radeon_align_pitch() next to its only caller Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201112132117.27228-7-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@linux.ie \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox