Commit 0424d7ba authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman

staging: vboxvideo: Init fb_info.fix.smem once from fbdev_create

The fbdev compat fb gets pinned into VRAM at creation and then gets pinned
a second time when set as scanout buffer and unpinned when replaced, this
means its pin count never becomes less then 1, so it is always at the same
address and there is no need for the vbox_fbdev_set_base() call.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cb5eaf18
...@@ -201,7 +201,6 @@ int vbox_framebuffer_init(struct vbox_private *vbox, ...@@ -201,7 +201,6 @@ int vbox_framebuffer_init(struct vbox_private *vbox,
int vbox_fbdev_init(struct vbox_private *vbox); int vbox_fbdev_init(struct vbox_private *vbox);
void vbox_fbdev_fini(struct vbox_private *vbox); void vbox_fbdev_fini(struct vbox_private *vbox);
void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr);
struct vbox_bo { struct vbox_bo {
struct ttm_buffer_object bo; struct ttm_buffer_object bo;
......
...@@ -80,6 +80,7 @@ static int vboxfb_create(struct drm_fb_helper *helper, ...@@ -80,6 +80,7 @@ static int vboxfb_create(struct drm_fb_helper *helper,
struct drm_gem_object *gobj; struct drm_gem_object *gobj;
struct vbox_bo *bo; struct vbox_bo *bo;
int size, ret; int size, ret;
u64 gpu_addr;
u32 pitch; u32 pitch;
mode_cmd.width = sizes->surface_width; mode_cmd.width = sizes->surface_width;
...@@ -107,7 +108,7 @@ static int vboxfb_create(struct drm_fb_helper *helper, ...@@ -107,7 +108,7 @@ static int vboxfb_create(struct drm_fb_helper *helper,
if (ret) if (ret)
return ret; return ret;
ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, NULL); ret = vbox_bo_pin(bo, TTM_PL_FLAG_VRAM, &gpu_addr);
if (ret) { if (ret) {
vbox_bo_unreserve(bo); vbox_bo_unreserve(bo);
return ret; return ret;
...@@ -152,6 +153,9 @@ static int vboxfb_create(struct drm_fb_helper *helper, ...@@ -152,6 +153,9 @@ static int vboxfb_create(struct drm_fb_helper *helper,
drm_fb_helper_fill_var(info, &fbdev->helper, sizes->fb_width, drm_fb_helper_fill_var(info, &fbdev->helper, sizes->fb_width,
sizes->fb_height); sizes->fb_height);
info->fix.smem_start = info->apertures->ranges[0].base + gpu_addr;
info->fix.smem_len = vbox->available_vram_size - gpu_addr;
info->screen_base = (char __iomem *)bo->kmap.virtual; info->screen_base = (char __iomem *)bo->kmap.virtual;
info->screen_size = size; info->screen_size = size;
...@@ -241,11 +245,3 @@ int vbox_fbdev_init(struct vbox_private *vbox) ...@@ -241,11 +245,3 @@ int vbox_fbdev_init(struct vbox_private *vbox)
drm_fb_helper_fini(&fbdev->helper); drm_fb_helper_fini(&fbdev->helper);
return ret; return ret;
} }
void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr)
{
struct fb_info *fbdev = vbox->fbdev->helper.fbdev;
fbdev->fix.smem_start = fbdev->apertures->ranges[0].base + gpu_addr;
fbdev->fix.smem_len = vbox->available_vram_size - gpu_addr;
}
...@@ -276,9 +276,6 @@ static int vbox_crtc_set_base_and_mode(struct drm_crtc *crtc, ...@@ -276,9 +276,6 @@ static int vbox_crtc_set_base_and_mode(struct drm_crtc *crtc,
/* Commit: Update hardware to use the new fb */ /* Commit: Update hardware to use the new fb */
mutex_lock(&vbox->hw_mutex); mutex_lock(&vbox->hw_mutex);
if (&vbox->fbdev->afb == to_vbox_framebuffer(new_fb))
vbox_fbdev_set_base(vbox, gpu_addr);
vbox_crtc->fb_offset = gpu_addr; vbox_crtc->fb_offset = gpu_addr;
/* vbox_do_modeset() checks vbox->single_framebuffer so update it now */ /* vbox_do_modeset() checks vbox->single_framebuffer so update it now */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment