[PATCH v2 7/7] drm/fb: handle tiled connectors better

Rob Clark robdclark at gmail.com
Wed Mar 11 14:21:49 PDT 2015


On Wed, Mar 11, 2015 at 5:13 PM, Daniel Vetter <daniel at ffwll.ch> 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 at gmail.com>
>> Tested-by: Hai Li <hali at codeaurora.org>
>
> 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


More information about the dri-devel mailing list