Message ID | HE1PR06MB40111E90F5DA4718126E6A92AC3C0@HE1PR06MB4011.eurprd06.prod.outlook.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support more HDMI modes on RK3228/RK3328 | expand |
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/rockchip_drm_vop.c#L329-L332 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, >>
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,
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(+)