On Tue, Aug 3, 2010 at 8:01 AM, James Simmons <jsimmons at infradead.org> wrote: > > This patch uses the much lighter mode_set_base instead of calling a full > mode set. Tested on a i915 netbook. Patch should be against drm-core-next.
The kms code should always fallback if appropriate, I've definitely seen some modesets I thought were triggered by the pan_display codepath, so I'd expect if we add this, we might some base sets at the wrong time. Unless we can prove we only get pan_displays when expected. Dave. > > Signed-By: James Simmons <jsimmons at infradead.org> > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index 7196620..99889e3 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -730,15 +730,20 @@ int drm_fb_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 = 0; > + ? ? ? int ret = -ENXIO; > ? ? ? ?int 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; > > @@ -746,7 +751,8 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo > *var, > ? ? ? ? ? ? ? ?modeset->y = var->yoffset; > > ? ? ? ? ? ? ? ?if (modeset->num_connectors) { > - ? ? ? ? ? ? ? ? ? ? ? ret = crtc->funcs->set_config(modeset); > + ? ? ? ? ? ? ? ? ? ? ? ret = crtc_funcs->mode_set_base(crtc, modeset->x, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? modeset->y, crtc->fb); > ? ? ? ? ? ? ? ? ? ? ? ?if (!ret) { > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?info->var.xoffset = var->xoffset; > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?info->var.yoffset = var->yoffset; > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel >