On Wed, Mar 11, 2015 at 10:23:14AM -0400, Rob Clark wrote: > We don't want tile 0,0 to artificially constrain the size of the legacy > fbdev device. Instead when reducing fb_size to be the minimum of all > displays, only consider the rightmost and bottommost tiles. > > Signed-off-by: Rob Clark <robdclark@xxxxxxxxx> > Tested-by: Hai Li <hali@xxxxxxxxxxxxxx> Yeah checkpatch isn't really happy about this and the previous one now, but I didn't really see a easy way to fix it and it's late ;-) So pulled them all into drm-misc. Thanks, Daniel > --- > drivers/gpu/drm/drm_fb_helper.c | 26 +++++++++++++++++++++++--- > 1 file changed, 23 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index dca98a4..1a20db7 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -1034,9 +1034,16 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper, > crtc_count = 0; > for (i = 0; i < fb_helper->crtc_count; i++) { > struct drm_display_mode *desired_mode; > - int x, y; > + struct drm_mode_set *mode_set; > + int x, y, j; > + /* in case of tile group, are we the last tile vert or horiz? > + * If no tile group you are always the last one both vertically > + * and horizontally > + */ > + bool lastv = true, lasth = true; > > desired_mode = fb_helper->crtc_info[i].desired_mode; > + mode_set = &fb_helper->crtc_info[i].mode_set; > > if (!desired_mode) > continue; > @@ -1051,8 +1058,21 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper, > > sizes.surface_width = max_t(u32, desired_mode->hdisplay + x, sizes.surface_width); > sizes.surface_height = max_t(u32, desired_mode->vdisplay + y, sizes.surface_height); > - sizes.fb_width = min_t(u32, desired_mode->hdisplay + x, sizes.fb_width); > - sizes.fb_height = min_t(u32, desired_mode->vdisplay + y, sizes.fb_height); > + > + for (j = 0; j < mode_set->num_connectors; j++) { > + struct drm_connector *connector = mode_set->connectors[j]; > + if (connector->has_tile) { > + lasth = (connector->tile_h_loc == (connector->num_h_tile - 1)); > + lastv = (connector->tile_v_loc == (connector->num_v_tile - 1)); > + /* cloning to multiple tiles is just crazy-talk, so: */ > + break; > + } > + } > + > + if (lasth) > + sizes.fb_width = min_t(u32, desired_mode->hdisplay + x, sizes.fb_width); > + if (lastv) > + sizes.fb_height = min_t(u32, desired_mode->vdisplay + y, sizes.fb_height); > } > > if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) { > -- > 2.1.0 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel