On Wed, Mar 11, 2015 at 5:13 PM, Daniel Vetter <daniel@xxxxxxxx> wrote: > 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. > yeah, I was going with the "lines were already too long to begin with, and adding some line breaks made it more ugly" exception ;-) BR, -R > 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