drivers/gpu/drm/openchrome/via_display.c | 14 ++- drivers/gpu/drm/openchrome/via_fb.c | 115 +++++++++++++++---------------- 2 files changed, 66 insertions(+), 63 deletions(-)
New commits: commit cc7124bc65aa04bb03338d8ff11c54e81da8650e Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Aug 22 12:41:41 2017 -0700 Rename viafb_ops to via_fb_ops Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fb.c b/drivers/gpu/drm/openchrome/via_fb.c index 80d6d72ba93a..49de88037ae5 100644 --- a/drivers/gpu/drm/openchrome/via_fb.c +++ b/drivers/gpu/drm/openchrome/via_fb.c @@ -1029,6 +1029,20 @@ int drmfb_helper_pan_display(struct fb_var_screeninfo *var, return ret; } +static struct fb_ops via_fb_ops = { + .owner = THIS_MODULE, + .fb_check_var = drm_fb_helper_check_var, + .fb_set_par = drm_fb_helper_set_par, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, + .fb_pan_display = drmfb_helper_pan_display, + .fb_blank = drm_fb_helper_blank, + .fb_setcmap = drm_fb_helper_setcmap, + .fb_debug_enter = drm_fb_helper_debug_enter, + .fb_debug_leave = drm_fb_helper_debug_leave, +}; + static int via_fb_probe(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes) @@ -1158,20 +1172,6 @@ static struct drm_fb_helper_funcs via_fb_helper_funcs = { .fb_probe = via_fb_probe, }; -static struct fb_ops viafb_ops = { - .owner = THIS_MODULE, - .fb_check_var = drm_fb_helper_check_var, - .fb_set_par = drm_fb_helper_set_par, - .fb_fillrect = cfb_fillrect, - .fb_copyarea = cfb_copyarea, - .fb_imageblit = cfb_imageblit, - .fb_pan_display = drmfb_helper_pan_display, - .fb_blank = drm_fb_helper_blank, - .fb_setcmap = drm_fb_helper_setcmap, - .fb_debug_enter = drm_fb_helper_debug_enter, - .fb_debug_leave = drm_fb_helper_debug_leave, -}; - int via_fbdev_init(struct drm_device *dev, struct drm_fb_helper **ptr) { @@ -1194,7 +1194,7 @@ via_fbdev_init(struct drm_device *dev, struct drm_fb_helper **ptr) strcpy(info->fix.id, dev->driver->name); strcat(info->fix.id, "drmfb"); info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT; - info->fbops = &viafb_ops; + info->fbops = &via_fb_ops; info->pixmap.size = 64*1024; info->pixmap.buf_align = 8; commit 6ea961502c12e21d80a8f0ddf446d79a94b24df2 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Aug 22 12:39:17 2017 -0700 Move drmfb_helper_pan_display to another part of the file Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fb.c b/drivers/gpu/drm/openchrome/via_fb.c index 41b1bca0b44c..80d6d72ba93a 100644 --- a/drivers/gpu/drm/openchrome/via_fb.c +++ b/drivers/gpu/drm/openchrome/via_fb.c @@ -990,6 +990,45 @@ static const struct drm_mode_config_funcs via_mode_funcs = { .output_poll_changed = via_output_poll_changed }; +int drmfb_helper_pan_display(struct fb_var_screeninfo *var, + struct fb_info *info) +{ + struct drm_fb_helper *fb_helper = info->par; + struct drm_crtc_helper_funcs *crtc_funcs; + struct drm_device *dev = fb_helper->dev; + struct drm_mode_set *modeset; + struct drm_crtc *crtc; + int ret = -ENXIO, i; + + mutex_lock(&dev->mode_config.mutex); + for (i = 0; i < fb_helper->crtc_count; i++) { + crtc = fb_helper->crtc_info[i].mode_set.crtc; + crtc_funcs = crtc->helper_private; + + if (!crtc_funcs->mode_set_base) + continue; + + modeset = &fb_helper->crtc_info[i].mode_set; + modeset->x = var->xoffset; + modeset->y = var->yoffset; + + if (modeset->num_connectors) { + ret = crtc_funcs->mode_set_base(crtc, modeset->x, + modeset->y, + crtc->primary->fb); + if (!ret) { + info->flags |= FBINFO_HWACCEL_YPAN; + info->var.xoffset = var->xoffset; + info->var.yoffset = var->yoffset; + } + } + } + if (ret) + info->flags &= ~FBINFO_HWACCEL_YPAN; + mutex_unlock(&dev->mode_config.mutex); + return ret; +} + static int via_fb_probe(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes) @@ -1119,46 +1158,6 @@ static struct drm_fb_helper_funcs via_fb_helper_funcs = { .fb_probe = via_fb_probe, }; -int -drmfb_helper_pan_display(struct fb_var_screeninfo *var, - struct fb_info *info) -{ - struct drm_fb_helper *fb_helper = info->par; - struct drm_crtc_helper_funcs *crtc_funcs; - struct drm_device *dev = fb_helper->dev; - struct drm_mode_set *modeset; - struct drm_crtc *crtc; - int ret = -ENXIO, i; - - mutex_lock(&dev->mode_config.mutex); - for (i = 0; i < fb_helper->crtc_count; i++) { - crtc = fb_helper->crtc_info[i].mode_set.crtc; - crtc_funcs = crtc->helper_private; - - if (!crtc_funcs->mode_set_base) - continue; - - modeset = &fb_helper->crtc_info[i].mode_set; - modeset->x = var->xoffset; - modeset->y = var->yoffset; - - if (modeset->num_connectors) { - ret = crtc_funcs->mode_set_base(crtc, modeset->x, - modeset->y, - crtc->primary->fb); - if (!ret) { - info->flags |= FBINFO_HWACCEL_YPAN; - info->var.xoffset = var->xoffset; - info->var.yoffset = var->yoffset; - } - } - } - if (ret) - info->flags &= ~FBINFO_HWACCEL_YPAN; - mutex_unlock(&dev->mode_config.mutex); - return ret; -} - static struct fb_ops viafb_ops = { .owner = THIS_MODULE, .fb_check_var = drm_fb_helper_check_var, commit 0432ca0c343cbd55ebffb5d096e99f86be8e0ac0 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Aug 22 12:37:16 2017 -0700 Alter the error handling of via_fbdev_init() Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_display.c b/drivers/gpu/drm/openchrome/via_display.c index dc52b3195193..e22113436b0b 100644 --- a/drivers/gpu/drm/openchrome/via_display.c +++ b/drivers/gpu/drm/openchrome/via_display.c @@ -539,7 +539,7 @@ via_modeset_init(struct drm_device *dev) /* Set up the framebuffer device */ ret = via_fbdev_init(dev, &dev_priv->helper); - if (!ret) { + if (ret) { goto exit; } commit bc968b4688636f989074a7a79b16c43f3f9fd850 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Aug 22 11:35:14 2017 -0700 Calling drm_kms_helper_poll_init() from via_modeset_init Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_display.c b/drivers/gpu/drm/openchrome/via_display.c index 324d47d23e64..dc52b3195193 100644 --- a/drivers/gpu/drm/openchrome/via_display.c +++ b/drivers/gpu/drm/openchrome/via_display.c @@ -496,6 +496,7 @@ int via_modeset_init(struct drm_device *dev) { struct via_device *dev_priv = dev->dev_private; + int ret = 0; int i; drm_mode_config_init(dev); @@ -536,10 +537,15 @@ via_modeset_init(struct drm_device *dev) break; } - /* - * Set up the framebuffer device - */ - return via_fbdev_init(dev, &dev_priv->helper); + /* Set up the framebuffer device */ + ret = via_fbdev_init(dev, &dev_priv->helper); + if (!ret) { + goto exit; + } + + drm_kms_helper_poll_init(dev); +exit: + return ret; } void via_modeset_fini(struct drm_device *dev) diff --git a/drivers/gpu/drm/openchrome/via_fb.c b/drivers/gpu/drm/openchrome/via_fb.c index c9182d9ce0b7..41b1bca0b44c 100644 --- a/drivers/gpu/drm/openchrome/via_fb.c +++ b/drivers/gpu/drm/openchrome/via_fb.c @@ -1218,7 +1218,6 @@ via_fbdev_init(struct drm_device *dev, struct drm_fb_helper **ptr) drm_fb_helper_single_add_all_connectors(&helper->base); drm_helper_disable_unused_functions(dev); drm_fb_helper_initial_config(&helper->base, 32); - drm_kms_helper_poll_init(dev); *ptr = (struct drm_fb_helper *) helper; out_err: if (ret) commit 45ac5c19022551ce2c5ad7fb7339b808217755e6 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Aug 22 11:32:48 2017 -0700 Calling drm_helper_mode_fill_fb_struct before FB initialization This bug is a logical (design) bug. drm_helper_mode_fill_fb_struct needs to be called before calling drm_framebuffer_init. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/via_fb.c b/drivers/gpu/drm/openchrome/via_fb.c index fbbe710c4c70..c9182d9ce0b7 100644 --- a/drivers/gpu/drm/openchrome/via_fb.c +++ b/drivers/gpu/drm/openchrome/via_fb.c @@ -974,6 +974,7 @@ via_user_framebuffer_create(struct drm_device *dev, via_fb->gem_obj = gem_obj; + drm_helper_mode_fill_fb_struct(&via_fb->fb, mode_cmd); ret = drm_framebuffer_init(dev, &via_fb->fb, &via_fb_funcs); if (ret) { drm_gem_object_unreference(gem_obj); @@ -981,8 +982,6 @@ via_user_framebuffer_create(struct drm_device *dev, return ERR_PTR(ret); } - drm_helper_mode_fill_fb_struct(&via_fb->fb, mode_cmd); - return &via_fb->fb; } @@ -1038,6 +1037,7 @@ via_fb_probe(struct drm_fb_helper *helper, if (unlikely(ret)) goto out_err; + drm_helper_mode_fill_fb_struct(&via_fb->fb, &mode_cmd); ret = drm_framebuffer_init(helper->dev, &via_fb->fb, &via_fb_funcs); if (unlikely(ret)) goto out_err; @@ -1045,7 +1045,6 @@ via_fb_probe(struct drm_fb_helper *helper, via_fb->gem_obj = gem_obj; ttmfb->base.fb = &via_fb->fb; - drm_helper_mode_fill_fb_struct(&via_fb->fb, &mode_cmd); info->fix.smem_start = kmap->bo->mem.bus.base + kmap->bo->mem.bus.offset; info->fix.smem_len = info->screen_size = size; _______________________________________________ Openchrome-devel mailing list Openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel