Message ID | 20220815-rpi-fix-4k-60-v4-4-a1b40526df3e@cerno.tech |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp151129wrs; Thu, 20 Oct 2022 02:21:15 -0700 (PDT) X-Google-Smtp-Source: AMsMyM50C2P1CaWRA6wQa2W9Mp6pEwe06D/0Be841YLm0Bqk8b+GO/jtiaUyncbn4URUHLK5nAxk X-Received: by 2002:a17:907:1c98:b0:78d:3b06:dc8f with SMTP id nb24-20020a1709071c9800b0078d3b06dc8fmr9863445ejc.58.1666257674842; Thu, 20 Oct 2022 02:21:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666257674; cv=none; d=google.com; s=arc-20160816; b=HaA7KZ0aXQxAsP4SYC3eT+RtTWskYhlYSAjCmMCTQEOsmYWwnhabjgHitUha6WEhwy LG2aCsTAusgf02ep9Db9k153EoWTWklRWN+YY5bnOOKDd8EqXXzIIMksRN/RLUlMeegu fHH4/9SvjTpX4fAGSj88D3AtupoI2v/wBWSd3evQKxKWu8JjtbryrZtY8499jMPYyH1l +KQSUJSMk9YLK5fW1syqy3A/sxFe5cayTbbN2nVVEkTyYthU+ZciPdCRl+lt8EmGRPPD VC/MIQB54pSkhom/mQxKdP0cUGpIccTTyvZMaFwYzO0lx8WbItzS2Z23N1rm6/BFS8Sm tzKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :feedback-id:dkim-signature:dkim-signature; bh=R9HharCQOI9TrJb7L8LG1ocNL0PwXIwue7dcYvnXGEI=; b=qoXtxWnhaYfcpLhG8ngAuD/QZIY5mYnIlW4oYSZfApBeavYRS06biWGjrzdIp50Si9 ds/Z8SCWhNUFqoym1jYNU45GXx4BIInUavjXYnu6ZbUwQAWTc5b04cOJ/arFIce7IwAP Q19LdjwvDt80Tfl1QKHlJWMPZSe/EvWgybScvjPr/zibby+oLlf8jkSFCVTHcEXBe51z py/5wckUPwRS2iz0rDa+/kTArEimErD4kCKJwcjBMJrKIdKlCzx8XHhi0CgrqUFbAbPT 9AkdgrwgLcWzjvJntWf3ik+MgOiB8zFl8laQ6Ahdk/k8sRuuIzExilpB+mH0DZqpfTku OVyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm3 header.b=P6E14Vtc; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=EUhuMgTL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jg16-20020a170907971000b00782686da1d1si15358653ejc.761.2022.10.20.02.20.49; Thu, 20 Oct 2022 02:21:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm3 header.b=P6E14Vtc; dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=EUhuMgTL; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230323AbiJTJNw (ORCPT <rfc822;realc9580@gmail.com> + 99 others); Thu, 20 Oct 2022 05:13:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57624 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229866AbiJTJNn (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 20 Oct 2022 05:13:43 -0400 Received: from wnew2-smtp.messagingengine.com (wnew2-smtp.messagingengine.com [64.147.123.27]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BFBDB1AAE73; Thu, 20 Oct 2022 02:13:42 -0700 (PDT) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailnew.west.internal (Postfix) with ESMTP id C37A52B05D99; Thu, 20 Oct 2022 05:13:39 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Thu, 20 Oct 2022 05:13:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1666257219; x= 1666264419; bh=R9HharCQOI9TrJb7L8LG1ocNL0PwXIwue7dcYvnXGEI=; b=P 6E14VtcV4tD4OHapRYW1LQXA2qEoPTFsRT0tCxyATp4fCtFUnH4Ubslomc3ArezC TtP0ouQEf+Co1coPtjFwYR2bLqOCSdNxZ05CatpiJ7cZmKV0UJYYeFpUdYRbEy1+ RFQ8obhgceNnEQtDcsxVWYwfVwpo5lqkP5Xdm9RLWP/Aa4qQgSupV4FBcIlHBnkk o1rjuBpNB7Mz0Mf2MaxlEKmTr7eoHkNy2eZX/mi3JOVwEJOtDbyezPsxRTUQJLbI 7QDSrlBInnAdgRS4BQIExBIkrqDX0ouabfrTPNv3Ja4M8Epk5I6FUKxToiiY6I5m 7zcyIL9pu3EiouQSaWpvg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1666257219; x= 1666264419; bh=R9HharCQOI9TrJb7L8LG1ocNL0PwXIwue7dcYvnXGEI=; b=E UhuMgTLVUlMJX/vkOmRLo4UAcodx9cJzfthoGQGlrr8q9rh1mCMN3iBtlk0jmfIk UH2o/bjkosD62d5dYt7bE0eTOKL0mebB7L6vwqlEuaKGUlxr6+XbgqMG6/ARDEid lbZea53mRisxsk0PBxOGrn+r6uedGW9b8IuMKaVo5yysqQ+4e08ZtpjIh2pJO+1u 2Xvtv452d9UTdVCo3PPxRlx8HLm9kbbrhubQ/RMthb17KWx5z/VhJl9fxc1xhB3N UjfAeD0FmOar8fUDEsNUNo1ZNXUT0pYnyIgzR6NvUuDlL9xMY3qdbp20ClxkZV1H /20pcSRftyKED30ehVFwA== X-ME-Sender: <xms:QxFRY3DjWpCt7R8MBn0L_g_XjhPmbEnISR25aRZMhVcsBDzdENruiA> <xme:QxFRY9iSPzIq3fM4wu-i2Ckl6B4BGIPpTzL72vdUOgJQTo0Ljd-gMPMYWg86ijHxG pK_W-6RR22Gtr6Uwxk> X-ME-Received: <xmr:QxFRYynufykL6mObNkHk8H5r4L5VXyIkTQetn0nyBO3eBqJgUmmtPL4ITo3a4v3sTkz8aUm6dyUNqX6fLpT7RHWz7E0lW4gyi6w7X189Few8kA> X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrfeeliedgudefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephfffufggtgfgkfhfjgfvvefosehtkeertdertdejnecuhfhrohhmpehmrgig ihhmvgestggvrhhnohdrthgvtghhnecuggftrfgrthhtvghrnhepfeduhfegveehhfeftd euveeuleduuddttedutddvvdegkeehleevhfetkeetiefhnecuvehluhhsthgvrhfuihii vgeptdenucfrrghrrghmpehmrghilhhfrhhomhepmhgrgihimhgvsegtvghrnhhordhtvg gthh X-ME-Proxy: <xmx:QxFRY5ypIPxF5q-gpL1csN7wg0yu92ZUDa2QYTRlGRVN4LSein5wwQ> <xmx:QxFRY8QjXpIbWHx6Ed2L0cp5aCT4RLG44HWyhycM_1kj0uzR_QfURw> <xmx:QxFRY8buzVdQIoicrvxOE2qZTGCGvhPnddQUGEM1nWkBZs-5GM9yXw> <xmx:QxFRY8yCz64DCv8plhobIBMDqedSqkzhlOxgdAyVQRdlRWxqRCSnL4vecMs> Feedback-ID: i8771445c:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 20 Oct 2022 05:13:38 -0400 (EDT) From: maxime@cerno.tech Date: Thu, 20 Oct 2022 11:12:12 +0200 Subject: [PATCH v4 4/7] drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20220815-rpi-fix-4k-60-v4-4-a1b40526df3e@cerno.tech> References: <20220815-rpi-fix-4k-60-v4-0-a1b40526df3e@cerno.tech> In-Reply-To: <20220815-rpi-fix-4k-60-v4-0-a1b40526df3e@cerno.tech> To: Daniel Vetter <daniel@ffwll.ch>, Emma Anholt <emma@anholt.net>, Michael Turquette <mturquette@baylibre.com>, Stephen Boyd <sboyd@kernel.org>, Maxime Ripard <mripard@kernel.org>, Ray Jui <rjui@broadcom.com>, Florian Fainelli <f.fainelli@gmail.com>, David Airlie <airlied@linux.ie>, Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>, Scott Branden <sbranden@broadcom.com> Cc: Stefan Wahren <stefan.wahren@i2se.com>, Maxime Ripard <maxime@cerno.tech>, linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, Dom Cobley <popcornmix@gmail.com>, linux-rpi-kernel@lists.infradead.org X-Mailer: b4 0.10.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1903; i=maxime@cerno.tech; h=from:subject:message-id; bh=Po/0zWeG0J9jRRowzpJU7mdz3tNlPWD94CHiLGqKoOU=; b=owGbwMvMwCX2+D1vfrpE4FHG02pJDMmBAq8WZaV4Ltdy2HTqus7G+QFxGto/lu9ZKXNPPSPFkvGr jI59RykLgxgXg6yYIkuMsPmSuFOzXney8c2DmcPKBDKEgYtTACbitJ+RofNDwr0NE4oXiKxamPc8Lc hb6uKmR9lpC/qknU2zVnYEH2T4K3X1QjJfxtPIi91ziiQWyZ04N9XUw0E5ImCSH/P+mutr+AA= X-Developer-Key: i=maxime@cerno.tech; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747197807578924122?= X-GMAIL-MSGID: =?utf-8?q?1747197807578924122?= |
Series |
drm/vc4: Fix the core clock behaviour
|
|
Commit Message
Maxime Ripard
Oct. 20, 2022, 9:12 a.m. UTC
In order to support higher HDMI frequencies, users have to set the
hdmi_enable_4kp60 parameter in their config.txt file.
We were detecting this so far by calling clk_round_rate() on the core
clock with the frequency we're supposed to run at when one of those
modes is enabled. Whether or not the parameter was enabled could then be
inferred by the returned rate since the maximum clock rate reported by
the firmware was one of the side effect of setting that parameter.
However, the recent clock rework we did changed what clk_round_rate()
was returning to always return the minimum allowed, and thus this test
wasn't reliable anymore.
Let's use the new clk_get_max_rate() function to reliably determine the
maximum rate allowed on that clock and fix the 4k@60Hz output.
Fixes: e9d6cea2af1c ("clk: bcm: rpi: Run some clocks at the minimum rate allowed")
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
drivers/gpu/drm/vc4/vc4_hdmi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
On Thu, 20 Oct 2022 at 10:14, <maxime@cerno.tech> wrote: > > In order to support higher HDMI frequencies, users have to set the > hdmi_enable_4kp60 parameter in their config.txt file. > > We were detecting this so far by calling clk_round_rate() on the core > clock with the frequency we're supposed to run at when one of those > modes is enabled. Whether or not the parameter was enabled could then be > inferred by the returned rate since the maximum clock rate reported by > the firmware was one of the side effect of setting that parameter. > > However, the recent clock rework we did changed what clk_round_rate() > was returning to always return the minimum allowed, and thus this test > wasn't reliable anymore. > > Let's use the new clk_get_max_rate() function to reliably determine the > maximum rate allowed on that clock and fix the 4k@60Hz output. > > Fixes: e9d6cea2af1c ("clk: bcm: rpi: Run some clocks at the minimum rate allowed") > Signed-off-by: Maxime Ripard <maxime@cerno.tech> Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > --- > drivers/gpu/drm/vc4/vc4_hdmi.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index 64f9feabf43e..87961d4de5aa 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -46,6 +46,7 @@ > #include <linux/pm_runtime.h> > #include <linux/rational.h> > #include <linux/reset.h> > +#include <soc/bcm2835/raspberrypi-clocks.h> > #include <sound/dmaengine_pcm.h> > #include <sound/hdmi-codec.h> > #include <sound/pcm_drm_eld.h> > @@ -3429,7 +3430,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) > > if (variant->max_pixel_clock == 600000000) { > struct vc4_dev *vc4 = to_vc4_dev(drm); > - long max_rate = clk_round_rate(vc4->hvs->core_clk, 550000000); > + unsigned long max_rate = rpi_firmware_clk_get_max_rate(vc4->hvs->core_clk); > > if (max_rate < 550000000) > vc4_hdmi->disable_4kp60 = true; > > -- > b4 0.10.1
On Wed, 26 Oct 2022 at 16:27, Dave Stevenson <dave.stevenson@raspberrypi.com> wrote: > > On Thu, 20 Oct 2022 at 10:14, <maxime@cerno.tech> wrote: > > > > In order to support higher HDMI frequencies, users have to set the > > hdmi_enable_4kp60 parameter in their config.txt file. > > > > We were detecting this so far by calling clk_round_rate() on the core > > clock with the frequency we're supposed to run at when one of those > > modes is enabled. Whether or not the parameter was enabled could then be > > inferred by the returned rate since the maximum clock rate reported by > > the firmware was one of the side effect of setting that parameter. > > > > However, the recent clock rework we did changed what clk_round_rate() > > was returning to always return the minimum allowed, and thus this test > > wasn't reliable anymore. > > > > Let's use the new clk_get_max_rate() function to reliably determine the > > maximum rate allowed on that clock and fix the 4k@60Hz output. > > > > Fixes: e9d6cea2af1c ("clk: bcm: rpi: Run some clocks at the minimum rate allowed") > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > > Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > --- > > drivers/gpu/drm/vc4/vc4_hdmi.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > > index 64f9feabf43e..87961d4de5aa 100644 > > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > > @@ -46,6 +46,7 @@ > > #include <linux/pm_runtime.h> > > #include <linux/rational.h> > > #include <linux/reset.h> > > +#include <soc/bcm2835/raspberrypi-clocks.h> > > #include <sound/dmaengine_pcm.h> > > #include <sound/hdmi-codec.h> > > #include <sound/pcm_drm_eld.h> > > @@ -3429,7 +3430,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) > > > > if (variant->max_pixel_clock == 600000000) { > > struct vc4_dev *vc4 = to_vc4_dev(drm); > > - long max_rate = clk_round_rate(vc4->hvs->core_clk, 550000000); > > + unsigned long max_rate = rpi_firmware_clk_get_max_rate(vc4->hvs->core_clk); Actually minor nit: rpi_firmware_clk_get_max_rate returns an unsigned int. AFAICT we don't need the range of unsigned long in any subsequent code, so I think it could just be unsigned int here. clk_round_rate returned a long, and therefore previously it did have to be that. Dave > > if (max_rate < 550000000) > > vc4_hdmi->disable_4kp60 = true; > > > > -- > > b4 0.10.1
Hi Dave, Thanks for your review On Wed, Oct 26, 2022 at 04:36:04PM +0100, Dave Stevenson wrote: > On Wed, 26 Oct 2022 at 16:27, Dave Stevenson > <dave.stevenson@raspberrypi.com> wrote: > > > > On Thu, 20 Oct 2022 at 10:14, <maxime@cerno.tech> wrote: > > > > > > In order to support higher HDMI frequencies, users have to set the > > > hdmi_enable_4kp60 parameter in their config.txt file. > > > > > > We were detecting this so far by calling clk_round_rate() on the core > > > clock with the frequency we're supposed to run at when one of those > > > modes is enabled. Whether or not the parameter was enabled could then be > > > inferred by the returned rate since the maximum clock rate reported by > > > the firmware was one of the side effect of setting that parameter. > > > > > > However, the recent clock rework we did changed what clk_round_rate() > > > was returning to always return the minimum allowed, and thus this test > > > wasn't reliable anymore. > > > > > > Let's use the new clk_get_max_rate() function to reliably determine the > > > maximum rate allowed on that clock and fix the 4k@60Hz output. > > > > > > Fixes: e9d6cea2af1c ("clk: bcm: rpi: Run some clocks at the minimum rate allowed") > > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > > > > Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > > --- > > > drivers/gpu/drm/vc4/vc4_hdmi.c | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > > > index 64f9feabf43e..87961d4de5aa 100644 > > > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > > > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > > > @@ -46,6 +46,7 @@ > > > #include <linux/pm_runtime.h> > > > #include <linux/rational.h> > > > #include <linux/reset.h> > > > +#include <soc/bcm2835/raspberrypi-clocks.h> > > > #include <sound/dmaengine_pcm.h> > > > #include <sound/hdmi-codec.h> > > > #include <sound/pcm_drm_eld.h> > > > @@ -3429,7 +3430,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) > > > > > > if (variant->max_pixel_clock == 600000000) { > > > struct vc4_dev *vc4 = to_vc4_dev(drm); > > > - long max_rate = clk_round_rate(vc4->hvs->core_clk, 550000000); > > > + unsigned long max_rate = rpi_firmware_clk_get_max_rate(vc4->hvs->core_clk); > > Actually minor nit: > rpi_firmware_clk_get_max_rate returns an unsigned int. > AFAICT we don't need the range of unsigned long in any subsequent > code, so I think it could just be unsigned int here. > > clk_round_rate returned a long, and therefore previously it did have to be that. Yeah, I was actually two-minded about this. rpi_firmware_clk_get_max_rate() indeed returns an unsigned long, because that's what the firmware returns. But the clock framework uses unsigned long to store all its frequencies, and in our case here in clk_set_min_rate(). I don't mind changing it to unsigned int here if you prefer to, and if you're fine with the rest of the patches I can fix it up while applying the patches. Maxime
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 64f9feabf43e..87961d4de5aa 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -46,6 +46,7 @@ #include <linux/pm_runtime.h> #include <linux/rational.h> #include <linux/reset.h> +#include <soc/bcm2835/raspberrypi-clocks.h> #include <sound/dmaengine_pcm.h> #include <sound/hdmi-codec.h> #include <sound/pcm_drm_eld.h> @@ -3429,7 +3430,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) if (variant->max_pixel_clock == 600000000) { struct vc4_dev *vc4 = to_vc4_dev(drm); - long max_rate = clk_round_rate(vc4->hvs->core_clk, 550000000); + unsigned long max_rate = rpi_firmware_clk_get_max_rate(vc4->hvs->core_clk); if (max_rate < 550000000) vc4_hdmi->disable_4kp60 = true;