On Mon, Feb 15, 2016 at 10:54:47PM +0200, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Instead of repopulatin the rotation_info struct for the fb every time > we try to use the fb, we can just populate it once when creating the fb, > and later we can just copy the pre-populate struct into the gtt_view. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> Merged up to here. Thanks for the reviews. > --- > drivers/gpu/drm/i915/intel_display.c | 27 ++++++++++++++++----------- > drivers/gpu/drm/i915/intel_drv.h | 1 + > 2 files changed, 17 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 74252433b1ec..fddfc5875752 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -2309,18 +2309,20 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, > const struct drm_framebuffer *fb, > unsigned int rotation) > { > - struct drm_i915_private *dev_priv = to_i915(fb->dev); > - struct intel_rotation_info *info = &view->params.rotated; > - unsigned int tile_size, tile_width, tile_height, cpp; > - > - *view = i915_ggtt_view_normal; > - > - if (!intel_rotation_90_or_270(rotation)) > - return; > - > - *view = i915_ggtt_view_rotated; > + if (intel_rotation_90_or_270(rotation)) { > + *view = i915_ggtt_view_rotated; > + view->params.rotated = to_intel_framebuffer(fb)->rot_info; > + } else { > + *view = i915_ggtt_view_normal; > + } > +} > > - info->uv_offset = fb->offsets[1]; > +static void > +intel_fill_fb_info(struct drm_i915_private *dev_priv, > + struct drm_framebuffer *fb) > +{ > + struct intel_rotation_info *info = &to_intel_framebuffer(fb)->rot_info; > + unsigned int tile_size, tile_width, tile_height, cpp; > > tile_size = intel_tile_size(dev_priv); > > @@ -2336,6 +2338,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, > intel_tile_dims(dev_priv, &tile_width, &tile_height, > fb->modifier[1], cpp); > > + info->uv_offset = fb->offsets[1]; > info->plane[1].width = DIV_ROUND_UP(fb->pitches[1], tile_width * cpp); > info->plane[1].height = DIV_ROUND_UP(fb->height / 2, tile_height); > } > @@ -14891,6 +14894,8 @@ static int intel_framebuffer_init(struct drm_device *dev, > drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd); > intel_fb->obj = obj; > > + intel_fill_fb_info(dev_priv, &intel_fb->base); > + > ret = drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs); > if (ret) { > DRM_ERROR("framebuffer init failed %d\n", ret); > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 59bed59388ad..674afa1f9f97 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -118,6 +118,7 @@ enum intel_output_type { > struct intel_framebuffer { > struct drm_framebuffer base; > struct drm_i915_gem_object *obj; > + struct intel_rotation_info rot_info; > }; > > struct intel_fbdev { > -- > 2.4.10 -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx