forked from Minki/linux
drm/vc4: hdmi: Properly compute the BVB clock rate
The BVB clock rate computation doesn't take into account a mode clock of 594MHz that we're going to need to support 4k60. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20210507150515.257424-9-maxime@cerno.tech
This commit is contained in:
parent
7c9005703f
commit
7d9061e097
@ -91,7 +91,6 @@
|
|||||||
# define VC4_HD_M_ENABLE BIT(0)
|
# define VC4_HD_M_ENABLE BIT(0)
|
||||||
|
|
||||||
#define CEC_CLOCK_FREQ 40000
|
#define CEC_CLOCK_FREQ 40000
|
||||||
#define VC4_HSM_MID_CLOCK 149985000
|
|
||||||
|
|
||||||
#define HDMI_14_MAX_TMDS_CLK (340 * 1000 * 1000)
|
#define HDMI_14_MAX_TMDS_CLK (340 * 1000 * 1000)
|
||||||
|
|
||||||
@ -795,7 +794,7 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
|
|||||||
conn_state_to_vc4_hdmi_conn_state(conn_state);
|
conn_state_to_vc4_hdmi_conn_state(conn_state);
|
||||||
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||||
unsigned long pixel_rate, hsm_rate;
|
unsigned long bvb_rate, pixel_rate, hsm_rate;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = pm_runtime_get_sync(&vc4_hdmi->pdev->dev);
|
ret = pm_runtime_get_sync(&vc4_hdmi->pdev->dev);
|
||||||
@ -849,12 +848,14 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
|
|||||||
|
|
||||||
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
|
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
|
||||||
|
|
||||||
/*
|
if (pixel_rate > 297000000)
|
||||||
* FIXME: When the pixel freq is 594MHz (4k60), this needs to be setup
|
bvb_rate = 300000000;
|
||||||
* at 300MHz.
|
else if (pixel_rate > 148500000)
|
||||||
*/
|
bvb_rate = 150000000;
|
||||||
ret = clk_set_min_rate(vc4_hdmi->pixel_bvb_clock,
|
else
|
||||||
(hsm_rate > VC4_HSM_MID_CLOCK ? 150000000 : 75000000));
|
bvb_rate = 75000000;
|
||||||
|
|
||||||
|
ret = clk_set_min_rate(vc4_hdmi->pixel_bvb_clock, bvb_rate);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DRM_ERROR("Failed to set pixel bvb clock rate: %d\n", ret);
|
DRM_ERROR("Failed to set pixel bvb clock rate: %d\n", ret);
|
||||||
clk_disable_unprepare(vc4_hdmi->hsm_clock);
|
clk_disable_unprepare(vc4_hdmi->hsm_clock);
|
||||||
|
Loading…
Reference in New Issue
Block a user