[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