* [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support
@ 2023-02-08 9:08 Sascha Hauer
2023-02-08 9:08 ` [PATCH v5 1/4] drm/rockchip: vop: limit maximium resolution to hardware capabilities Sascha Hauer
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Sascha Hauer @ 2023-02-08 9:08 UTC (permalink / raw)
To: dri-devel
Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy,
Dan Johansen, FUKAUMI Naoki, Sascha Hauer
Some more small changes to this series, see changelog.
Sascha
Changes since v4:
- Use struct vop_reg to store resolutions
- Only check for valid clock rates when clock != NULL
Changes since v3
- Add patch to limit VOP resolutions to hardware capabilitie
Changes since v2:
- Use correct register values for mpll_cfg
- Add patch to discard modes we cannot achieve
Changes since v1:
- Allow non standard clock rates only on Synopsys phy as suggested by
Robin Murphy
Sascha Hauer (4):
drm/rockchip: vop: limit maximium resolution to hardware capabilities
drm/rockchip: dw_hdmi: relax mode_valid hook
drm/rockchip: dw_hdmi: Add support for 4k@30 resolution
drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 41 ++++++++++++++++----
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 +++++++
drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 6 +++
drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 5 ---
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 18 +++++++++
5 files changed, 73 insertions(+), 12 deletions(-)
--
2.30.2
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v5 1/4] drm/rockchip: vop: limit maximium resolution to hardware capabilities 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer @ 2023-02-08 9:08 ` Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 2/4] drm/rockchip: dw_hdmi: relax mode_valid hook Sascha Hauer ` (3 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2023-02-08 9:08 UTC (permalink / raw) To: dri-devel Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, FUKAUMI Naoki, Sascha Hauer The different VOP variants support different maximum resolutions. Reject resolutions that are not supported by a specific variant. This hasn't been a problem in the upstream driver so far as 1920x1080 has been the maximum resolution supported by the HDMI driver and that resolution is supported by all VOP variants. Now with higher resolutions supported in the HDMI driver we have to limit the resolutions to the ones supported by the VOP. The actual maximum resolutions are taken from the Rockchip downstream Kernel. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- Notes: Changes since v4: - Use struct vop_rect for storing resolution Changes since v3: - new patch drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 +++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 6 ++++++ drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 5 ----- drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 18 ++++++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index fa1f4ee6d1950..3033ab1b52dd9 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -1174,6 +1174,20 @@ static void vop_crtc_disable_vblank(struct drm_crtc *crtc) spin_unlock_irqrestore(&vop->irq_lock, flags); } +static enum drm_mode_status vop_crtc_mode_valid(struct drm_crtc *crtc, + const struct drm_display_mode *mode) +{ + struct vop *vop = to_vop(crtc); + + if (vop->data->max_output.width && mode->hdisplay > vop->data->max_output.height) + return MODE_BAD_HVALUE; + + if (vop->data->max_output.height && mode->vdisplay > vop->data->max_output.height) + return MODE_BAD_VVALUE; + + 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) @@ -1585,6 +1599,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.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h index 8502849833d93..5f56e0597df84 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -42,6 +42,11 @@ enum vop_data_format { VOP_FMT_YUV444SP, }; +struct vop_rect { + int width; + int height; +}; + struct vop_reg { uint32_t mask; uint16_t offset; @@ -225,6 +230,7 @@ struct vop_data { const struct vop_win_data *win; unsigned int win_size; unsigned int lut_size; + struct vop_rect max_output; #define VOP_FEATURE_OUTPUT_RGB10 BIT(0) #define VOP_FEATURE_INTERNAL_RGB BIT(1) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h index c727093a06d68..f1234a151130f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h @@ -27,11 +27,6 @@ enum win_dly_mode { VOP2_DLY_MODE_MAX, }; -struct vop_rect { - int width; - int height; -}; - enum vop2_scale_up_mode { VOP2_SCALE_UP_NRST_NBOR, VOP2_SCALE_UP_BIL, diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index 014f99e8928e3..20ac7811c5eb7 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -181,6 +181,7 @@ static const struct vop_data rk3036_vop = { .output = &rk3036_output, .win = rk3036_vop_win_data, .win_size = ARRAY_SIZE(rk3036_vop_win_data), + .max_output = { 1920, 1080 }, }; static const struct vop_win_phy rk3126_win1_data = { @@ -213,6 +214,7 @@ static const struct vop_data rk3126_vop = { .output = &rk3036_output, .win = rk3126_vop_win_data, .win_size = ARRAY_SIZE(rk3126_vop_win_data), + .max_output = { 1920, 1080 }, }; static const int px30_vop_intrs[] = { @@ -340,6 +342,7 @@ static const struct vop_data px30_vop_big = { .output = &px30_output, .win = px30_vop_big_win_data, .win_size = ARRAY_SIZE(px30_vop_big_win_data), + .max_output = { 1920, 1080 }, }; static const struct vop_win_data px30_vop_lit_win_data[] = { @@ -356,6 +359,7 @@ static const struct vop_data px30_vop_lit = { .output = &px30_output, .win = px30_vop_lit_win_data, .win_size = ARRAY_SIZE(px30_vop_lit_win_data), + .max_output = { 1920, 1080 }, }; static const struct vop_scl_regs rk3066_win_scl = { @@ -479,6 +483,7 @@ static const struct vop_data rk3066_vop = { .output = &rk3066_output, .win = rk3066_vop_win_data, .win_size = ARRAY_SIZE(rk3066_vop_win_data), + .max_output = { 1920, 1080 }, }; static const struct vop_scl_regs rk3188_win_scl = { @@ -585,6 +590,7 @@ static const struct vop_data rk3188_vop = { .win = rk3188_vop_win_data, .win_size = ARRAY_SIZE(rk3188_vop_win_data), .feature = VOP_FEATURE_INTERNAL_RGB, + .max_output = { 2048, 1536 }, }; static const struct vop_scl_extension rk3288_win_full_scl_ext = { @@ -732,6 +738,12 @@ static const struct vop_data rk3288_vop = { .win = rk3288_vop_win_data, .win_size = ARRAY_SIZE(rk3288_vop_win_data), .lut_size = 1024, + /* + * This is the maximum resolution for the VOPB, the VOPL can only do + * 2560x1600, but we can't distinguish them as they have the same + * compatible. + */ + .max_output = { 3840, 2160 }, }; static const int rk3368_vop_intrs[] = { @@ -833,6 +845,7 @@ static const struct vop_data rk3368_vop = { .misc = &rk3368_misc, .win = rk3368_vop_win_data, .win_size = ARRAY_SIZE(rk3368_vop_win_data), + .max_output = { 4096, 2160 }, }; static const struct vop_intr rk3366_vop_intr = { @@ -854,6 +867,7 @@ static const struct vop_data rk3366_vop = { .misc = &rk3368_misc, .win = rk3368_vop_win_data, .win_size = ARRAY_SIZE(rk3368_vop_win_data), + .max_output = { 4096, 2160 }, }; static const struct vop_output rk3399_output = { @@ -984,6 +998,7 @@ static const struct vop_data rk3399_vop_big = { .win_size = ARRAY_SIZE(rk3399_vop_win_data), .win_yuv2yuv = rk3399_vop_big_win_yuv2yuv_data, .lut_size = 1024, + .max_output = { 4096, 2160 }, }; static const struct vop_win_data rk3399_vop_lit_win_data[] = { @@ -1010,6 +1025,7 @@ static const struct vop_data rk3399_vop_lit = { .win_size = ARRAY_SIZE(rk3399_vop_lit_win_data), .win_yuv2yuv = rk3399_vop_lit_win_yuv2yuv_data, .lut_size = 256, + .max_output = { 2560, 1600 }, }; static const struct vop_win_data rk3228_vop_win_data[] = { @@ -1029,6 +1045,7 @@ static const struct vop_data rk3228_vop = { .misc = &rk3368_misc, .win = rk3228_vop_win_data, .win_size = ARRAY_SIZE(rk3228_vop_win_data), + .max_output = { 4096, 2160 }, }; static const struct vop_modeset rk3328_modeset = { @@ -1100,6 +1117,7 @@ static const struct vop_data rk3328_vop = { .misc = &rk3328_misc, .win = rk3328_vop_win_data, .win_size = ARRAY_SIZE(rk3328_vop_win_data), + .max_output = { 4096, 2160 }, }; static const struct of_device_id vop_driver_dt_match[] = { -- 2.30.2 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 2/4] drm/rockchip: dw_hdmi: relax mode_valid hook 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 1/4] drm/rockchip: vop: limit maximium resolution to hardware capabilities Sascha Hauer @ 2023-02-08 9:08 ` Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 3/4] drm/rockchip: dw_hdmi: Add support for 4k@30 resolution Sascha Hauer ` (2 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2023-02-08 9:08 UTC (permalink / raw) To: dri-devel Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, FUKAUMI Naoki, Sascha Hauer, Nicolas Frattaroli The driver checks if the pixel clock of the given mode matches an entry in the mpll config table. At least for the Synopsys phy the frequencies in the mpll table are meant as a frequency range up to which the entry works, not as a frequency that must match the pixel clock. Return MODE_OK when the pixelclock is smaller than one of the mpll frequencies to allow for more display resolutions. Limit this behaviour to the Synopsys phy at the moment and keep the current behaviour of forcing exact pixelclock rates for the other phys until it has been sorted out how and if the vendor specific phys work with non standard clock rates. Tested-by: Michael Riesch <michael.riesch@wolfvision.net> Link: https://lore.kernel.org/r/20220926080435.259617-2-s.hauer@pengutronix.de Tested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com> Tested-by: Dan Johansen <strit@manjaro.org> Link: https://lore.kernel.org/r/20230118132213.2911418-2-s.hauer@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 2f4b8f64cbad3..7d8bf292fedce 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -74,6 +74,7 @@ struct rockchip_hdmi { struct regmap *regmap; struct rockchip_encoder encoder; const struct rockchip_hdmi_chip_data *chip_data; + const struct dw_hdmi_plat_data *plat_data; struct clk *ref_clk; struct clk *grf_clk; struct dw_hdmi *hdmi; @@ -241,23 +242,32 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi) } static enum drm_mode_status -dw_hdmi_rockchip_mode_valid(struct dw_hdmi *hdmi, void *data, +dw_hdmi_rockchip_mode_valid(struct dw_hdmi *dw_hdmi, void *data, const struct drm_display_info *info, const struct drm_display_mode *mode) { + struct rockchip_hdmi *hdmi = data; const struct dw_hdmi_mpll_config *mpll_cfg = rockchip_mpll_cfg; int pclk = mode->clock * 1000; - bool valid = false; + bool exact_match = hdmi->plat_data->phy_force_vendor; int i; for (i = 0; mpll_cfg[i].mpixelclock != (~0UL); i++) { - if (pclk == mpll_cfg[i].mpixelclock) { - valid = true; - break; - } + /* + * For vendor specific phys force an exact match of the pixelclock + * to preserve the original behaviour of the driver. + */ + if (exact_match && pclk == mpll_cfg[i].mpixelclock) + return MODE_OK; + /* + * The Synopsys phy can work with pixelclocks up to the value given + * in the corresponding mpll_cfg entry. + */ + if (!exact_match && pclk <= mpll_cfg[i].mpixelclock) + return MODE_OK; } - return (valid) ? MODE_OK : MODE_BAD; + return MODE_BAD; } static void dw_hdmi_rockchip_encoder_disable(struct drm_encoder *encoder) @@ -546,8 +556,10 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, return -ENOMEM; hdmi->dev = &pdev->dev; + hdmi->plat_data = plat_data; hdmi->chip_data = plat_data->phy_data; plat_data->phy_data = hdmi; + plat_data->priv_data = hdmi; encoder = &hdmi->encoder.encoder; encoder->possible_crtcs = drm_of_find_possible_crtcs(drm, dev->of_node); -- 2.30.2 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 3/4] drm/rockchip: dw_hdmi: Add support for 4k@30 resolution 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 1/4] drm/rockchip: vop: limit maximium resolution to hardware capabilities Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 2/4] drm/rockchip: dw_hdmi: relax mode_valid hook Sascha Hauer @ 2023-02-08 9:08 ` Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 4/4] drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks Sascha Hauer 2023-02-13 7:11 ` [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support FUKAUMI Naoki 4 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2023-02-08 9:08 UTC (permalink / raw) To: dri-devel Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, FUKAUMI Naoki, Sascha Hauer, Nicolas Frattaroli This adds the PLL/phy settings to support higher resolutions like 4k@30. The values were taken from the Rockchip downstream Kernel. Tested-by: Michael Riesch <michael.riesch@wolfvision.net> Link: https://lore.kernel.org/r/20220926080435.259617-3-s.hauer@pengutronix.de Tested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com> Tested-by: Dan Johansen <strit@manjaro.org> Link: https://lore.kernel.org/r/20230118132213.2911418-3-s.hauer@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- Notes: Changes since v2: - Use correct mpll_cfg values, previously the 420 values were used drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 7d8bf292fedce..feba6b9becd6c 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -161,6 +161,12 @@ static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = { { 0x214c, 0x0003}, { 0x4064, 0x0003} }, + }, { + 340000000, { + { 0x0040, 0x0003 }, + { 0x3b4c, 0x0003 }, + { 0x5a64, 0x0003 }, + }, }, { ~0UL, { { 0x00a0, 0x000a }, @@ -186,6 +192,8 @@ static const struct dw_hdmi_curr_ctrl rockchip_cur_ctr[] = { 146250000, { 0x0038, 0x0038, 0x0038 }, }, { 148500000, { 0x0000, 0x0038, 0x0038 }, + }, { + 600000000, { 0x0000, 0x0000, 0x0000 }, }, { ~0UL, { 0x0000, 0x0000, 0x0000}, } -- 2.30.2 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v5 4/4] drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer ` (2 preceding siblings ...) 2023-02-08 9:08 ` [PATCH v5 3/4] drm/rockchip: dw_hdmi: Add support for 4k@30 resolution Sascha Hauer @ 2023-02-08 9:08 ` Sascha Hauer 2023-02-13 7:11 ` [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support FUKAUMI Naoki 4 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2023-02-08 9:08 UTC (permalink / raw) To: dri-devel Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, FUKAUMI Naoki, Sascha Hauer, Nicolas Frattaroli The Rockchip PLL drivers are currently table based and support only the most common pixelclocks. Discard all modes we cannot achieve at all. Normally the desired pixelclocks have an exact match in the PLL driver, nevertheless allow for a 0.1% error just in case. Tested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com> Tested-by: Michael Riesch <michael.riesch@wolfvision.net> Tested-by: Dan Johansen <strit@manjaro.org> Link: https://lore.kernel.org/r/20230118132213.2911418-4-s.hauer@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- Notes: Changes since v3: - only check for rate when clk != NULL Changes since v2: - new patch drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index feba6b9becd6c..293dcf0f05931 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -260,6 +260,13 @@ dw_hdmi_rockchip_mode_valid(struct dw_hdmi *dw_hdmi, void *data, bool exact_match = hdmi->plat_data->phy_force_vendor; int i; + if (hdmi->ref_clk) { + int rpclk = clk_round_rate(hdmi->ref_clk, pclk); + + if (abs(rpclk - pclk) > pclk / 1000) + return MODE_NOCLOCK; + } + for (i = 0; mpll_cfg[i].mpixelclock != (~0UL); i++) { /* * For vendor specific phys force an exact match of the pixelclock -- 2.30.2 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer ` (3 preceding siblings ...) 2023-02-08 9:08 ` [PATCH v5 4/4] drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks Sascha Hauer @ 2023-02-13 7:11 ` FUKAUMI Naoki 2023-02-14 15:43 ` Sascha Hauer 4 siblings, 1 reply; 8+ messages in thread From: FUKAUMI Naoki @ 2023-02-13 7:11 UTC (permalink / raw) To: Sascha Hauer, dri-devel Cc: Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen hi, on my rk3399 boards(ROCK Pi 4B+ and ROCK 4C+), fb0 is configured as 1920x1080, and nothing is displayed... "no signal" on display. -- FUKAUMI Naoki On 2/8/23 18:08, Sascha Hauer wrote: > Some more small changes to this series, see changelog. > > Sascha > > Changes since v4: > - Use struct vop_reg to store resolutions > - Only check for valid clock rates when clock != NULL > > Changes since v3 > - Add patch to limit VOP resolutions to hardware capabilitie > > Changes since v2: > - Use correct register values for mpll_cfg > - Add patch to discard modes we cannot achieve > > Changes since v1: > - Allow non standard clock rates only on Synopsys phy as suggested by > Robin Murphy > > Sascha Hauer (4): > drm/rockchip: vop: limit maximium resolution to hardware capabilities > drm/rockchip: dw_hdmi: relax mode_valid hook > drm/rockchip: dw_hdmi: Add support for 4k@30 resolution > drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks > > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 41 ++++++++++++++++---- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 +++++++ > drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 6 +++ > drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 5 --- > drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 18 +++++++++ > 5 files changed, 73 insertions(+), 12 deletions(-) > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support 2023-02-13 7:11 ` [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support FUKAUMI Naoki @ 2023-02-14 15:43 ` Sascha Hauer 2023-02-15 9:22 ` FUKAUMI Naoki 0 siblings, 1 reply; 8+ messages in thread From: Sascha Hauer @ 2023-02-14 15:43 UTC (permalink / raw) To: FUKAUMI Naoki Cc: dri-devel, Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, Daniel Stone On Mon, Feb 13, 2023 at 04:11:46PM +0900, FUKAUMI Naoki wrote: > hi, > > on my rk3399 boards(ROCK Pi 4B+ and ROCK 4C+), fb0 is configured as > 1920x1080, and nothing is displayed... "no signal" on display. I can confirm this. First of all there is a stupid bug in my patch: > + if (vop->data->max_output.width && mode->hdisplay > vop->data->max_output.height) > + return MODE_BAD_HVALUE; The comparison should be against the width here of course, not against the height. Fixing this should at least allow you to display something when a 1080p display is connected. The other problem comes with the legacy fbdev emulation. I think failure is pretty much expected here. The fbdev emulation happens to use the VOPL to display a 4k picture, but the VOPL can only do up to 2560x1600 and so the mode is denied in vop_crtc_mode_valid(). Quoting Daniel Stone on this topic: > You've done the right thing. Userspace should detect this and try with > alternative CRTC routing. The kernel shouldn't be trying to solve this > problem. Trying an alternative CRTC routing is exactly what the fbdev emulation doesn't do. Now my "userspace" is in kernel and the kernel shouldn't try to solve this problem. We're trapped :-/ Sascha > > -- > FUKAUMI Naoki > > On 2/8/23 18:08, Sascha Hauer wrote: > > Some more small changes to this series, see changelog. > > > > Sascha > > > > Changes since v4: > > - Use struct vop_reg to store resolutions > > - Only check for valid clock rates when clock != NULL > > > > Changes since v3 > > - Add patch to limit VOP resolutions to hardware capabilitie > > > > Changes since v2: > > - Use correct register values for mpll_cfg > > - Add patch to discard modes we cannot achieve > > > > Changes since v1: > > - Allow non standard clock rates only on Synopsys phy as suggested by > > Robin Murphy > > > > Sascha Hauer (4): > > drm/rockchip: vop: limit maximium resolution to hardware capabilities > > drm/rockchip: dw_hdmi: relax mode_valid hook > > drm/rockchip: dw_hdmi: Add support for 4k@30 resolution > > drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks > > > > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 41 ++++++++++++++++---- > > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 +++++++ > > drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 6 +++ > > drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 5 --- > > drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 18 +++++++++ > > 5 files changed, 73 insertions(+), 12 deletions(-) > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support 2023-02-14 15:43 ` Sascha Hauer @ 2023-02-15 9:22 ` FUKAUMI Naoki 0 siblings, 0 replies; 8+ messages in thread From: FUKAUMI Naoki @ 2023-02-15 9:22 UTC (permalink / raw) To: Sascha Hauer Cc: dri-devel, Sandy Huang, linux-rockchip, Michael Riesch, kernel, Robin Murphy, Dan Johansen, Daniel Stone hi, On 2/15/23 00:43, Sascha Hauer wrote: > On Mon, Feb 13, 2023 at 04:11:46PM +0900, FUKAUMI Naoki wrote: >> hi, >> >> on my rk3399 boards(ROCK Pi 4B+ and ROCK 4C+), fb0 is configured as >> 1920x1080, and nothing is displayed... "no signal" on display. > > I can confirm this. > > First of all there is a stupid bug in my patch: > >> + if (vop->data->max_output.width && mode->hdisplay > vop->data->max_output.height) >> + return MODE_BAD_HVALUE; > > The comparison should be against the width here of course, not against > the height. Fixing this should at least allow you to display something > when a 1080p display is connected. with above fix, and modified dts either VOPL or VOPB enabled, I could get expected resolution on the display. thank you so much for your nice work :) -- FUKAUMI Naoki > The other problem comes with the legacy fbdev emulation. I think failure > is pretty much expected here. The fbdev emulation happens to use the > VOPL to display a 4k picture, but the VOPL can only do up to 2560x1600 > and so the mode is denied in vop_crtc_mode_valid(). Quoting Daniel Stone > on this topic: > >> You've done the right thing. Userspace should detect this and try with >> alternative CRTC routing. The kernel shouldn't be trying to solve this >> problem. > > Trying an alternative CRTC routing is exactly what the fbdev emulation > doesn't do. Now my "userspace" is in kernel and the kernel shouldn't try > to solve this problem. We're trapped :-/ > > Sascha > >> >> -- >> FUKAUMI Naoki >> >> On 2/8/23 18:08, Sascha Hauer wrote: >>> Some more small changes to this series, see changelog. >>> >>> Sascha >>> >>> Changes since v4: >>> - Use struct vop_reg to store resolutions >>> - Only check for valid clock rates when clock != NULL >>> >>> Changes since v3 >>> - Add patch to limit VOP resolutions to hardware capabilitie >>> >>> Changes since v2: >>> - Use correct register values for mpll_cfg >>> - Add patch to discard modes we cannot achieve >>> >>> Changes since v1: >>> - Allow non standard clock rates only on Synopsys phy as suggested by >>> Robin Murphy >>> >>> Sascha Hauer (4): >>> drm/rockchip: vop: limit maximium resolution to hardware capabilities >>> drm/rockchip: dw_hdmi: relax mode_valid hook >>> drm/rockchip: dw_hdmi: Add support for 4k@30 resolution >>> drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks >>> >>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 41 ++++++++++++++++---- >>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 15 +++++++ >>> drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 6 +++ >>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 5 --- >>> drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 18 +++++++++ >>> 5 files changed, 73 insertions(+), 12 deletions(-) >>> >> > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-02-15 9:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-02-08 9:08 [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 1/4] drm/rockchip: vop: limit maximium resolution to hardware capabilities Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 2/4] drm/rockchip: dw_hdmi: relax mode_valid hook Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 3/4] drm/rockchip: dw_hdmi: Add support for 4k@30 resolution Sascha Hauer 2023-02-08 9:08 ` [PATCH v5 4/4] drm/rockchip: dw_hdmi: discard modes with unachievable pixelclocks Sascha Hauer 2023-02-13 7:11 ` [PATCH v5 0/4] drm/rockchip: dw_hdmi: Add 4k@30 support FUKAUMI Naoki 2023-02-14 15:43 ` Sascha Hauer 2023-02-15 9:22 ` FUKAUMI Naoki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox