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.
Signed-off-by: Jonas Karlman jonas@kwiboo.se --- 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,
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.
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?
Heiko
Signed-off-by: Jonas Karlman jonas@kwiboo.se
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,
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/rockc...
Regards, Jonas
Heiko
Signed-off-by: Jonas Karlman jonas@kwiboo.se
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,
dri-devel@lists.freedesktop.org