Re: [PATCH 06/15] drm/rockchip: vop: limit resolution width to 3840

From: Jonas Karlman
Date: Mon Jan 06 2020 - 16:34:55 EST


On 2020-01-06 22:18, Heiko Stübner wrote:
> Hi Jonas,
>
> Am Montag, 6. Januar 2020, 21:48:25 CET schrieb Jonas Karlman:
>> Using a destination width that is more then 3840 pixels
>> is not supported in scl_vop_cal_scl_fac().
>>
>> Work around this limitation by filtering all modes with
>> a width above 3840 pixels.
> could you try to send the whole series to people? I only get this patch6
> of a series of 15 and that is way confusing not knowing what you want
> to actually achieve.

Very strange, you are the recipient of all patches, and they where delivered to
patchworks at [1] and [2], I also have a copy of this series at [3].

This is part of a series for adding support for more HDMI modes on the RK3228/RK3328.
Also preparation for adding bus format negotiation for YUV420 and 10-bit output mode,
early bus format work is located at [4].

[1] https://patchwork.kernel.org/cover/11320061/
[2] https://patchwork.freedesktop.org/series/71675/
[3] https://github.com/Kwiboo/linux-rockchip/commits/next-20200106-inno-hdmi-phy
[4] https://github.com/Kwiboo/linux-rockchip/commits/next-20200106-bus-format

>
> Hence I can also just point to rk3229, rk3328, rk3368 and rk3399 that
> report a max output of 4096x2160 , which would be larger than that
> 3840 value?

Currently the scaling code in rockchip drm driver is limiting the use of large framebuffers at [5].
This scaling limitation made it impossible for me to use any 4096x mode that my TV supports.

if (dst_w > 3840) {
    DRM_DEV_ERROR(vop->dev, "Maximum dst width (3840) exceeded\n");

[5] https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/rockchip/rockchip_drm_vop.c#L329-L332

Regards,
Jonas

>
>
> Heiko
>
>
>> Signed-off-by: Jonas Karlman <jonas@xxxxxxxxx>
>> ---
>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
>> index d04b3492bdac..f181897cbfad 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
>> @@ -1036,6 +1036,15 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc)
>> spin_unlock_irqrestore(&vop->irq_lock, flags);
>> }
>>
>> +enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc,
>> + const struct drm_display_mode *mode)
>> +{
>> + if (mode->hdisplay > 3840)
>> + return MODE_BAD_HVALUE;
>> +
>> + return MODE_OK;
>> +}
>> +
>> static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
>> const struct drm_display_mode *mode,
>> struct drm_display_mode *adjusted_mode)
>> @@ -1377,6 +1386,7 @@ static void vop_crtc_atomic_flush(struct drm_crtc *crtc,
>> }
>>
>> static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
>> + .mode_valid = vop_crtc_mode_valid,
>> .mode_fixup = vop_crtc_mode_fixup,
>> .atomic_check = vop_crtc_atomic_check,
>> .atomic_begin = vop_crtc_atomic_begin,
>>