linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour
@ 2022-10-13  9:13 Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node() Maxime Ripard
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

Hi,

Those patches used to be part of a larger clock fixes series:
https://lore.kernel.org/linux-clk/20220715160014.2623107-1-maxime@cerno.tech/

However, that series doesn't seem to be getting anywhere, so I've split out
these patches that fix a regression that has been there since 5.18 and that
prevents the 4k output from working on the RaspberryPi4.

Hopefully, we will be able to merge those patches through the DRM tree to avoid
any further disruption.

Let me know what you think,
Maxime

To: Florian Fainelli <f.fainelli@gmail.com>
To: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
To: Ray Jui <rjui@broadcom.com>
To: Scott Branden <sbranden@broadcom.com>
To: Michael Turquette <mturquette@baylibre.com>
To: Stephen Boyd <sboyd@kernel.org>
To: Emma Anholt <emma@anholt.net>
To: Maxime Ripard <mripard@kernel.org>
To: David Airlie <airlied@linux.ie>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Stefan Wahren <stefan.wahren@i2se.com>
Cc: linux-rpi-kernel@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-clk@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org
Cc: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>

---
Changes in v3:
- Return UINT_MAX when the firmware call fails in the _get_max_rate function
- Link to v2: https://lore.kernel.org/r/20220815-rpi-fix-4k-60-v2-0-983276b83f62@cerno.tech

Changes in v2:
- Dropped the clock patches, made an ad-hoc function in the firmware driver
- Link to v1: https://lore.kernel.org/r/20220815-rpi-fix-4k-60-v1-0-c52bd642f7c6@cerno.tech

---
Dom Cobley (1):
      drm/vc4: hdmi: Add more checks for 4k resolutions

Maxime Ripard (6):
      firmware: raspberrypi: Introduce rpi_firmware_find_node()
      firmware: raspberrypi: Move the clock IDs to the firmware header
      firmware: raspberrypi: Provide a helper to query a clock max rate
      drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection
      drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection code
      drm/vc4: Make sure we don't end up with a core clock too high

 drivers/clk/bcm/clk-raspberrypi.c          | 18 -----------
 drivers/firmware/raspberrypi.c             | 27 ++++++++++++++++
 drivers/gpu/drm/vc4/vc4_drv.h              | 16 ++++++++++
 drivers/gpu/drm/vc4/vc4_hdmi.c             | 25 ++++++++-------
 drivers/gpu/drm/vc4/vc4_hdmi.h             |  8 -----
 drivers/gpu/drm/vc4/vc4_hvs.c              | 26 +++++++++++++++
 drivers/gpu/drm/vc4/vc4_kms.c              | 13 +++++---
 include/soc/bcm2835/raspberrypi-firmware.h | 51 ++++++++++++++++++++++++++++++
 8 files changed, 141 insertions(+), 43 deletions(-)
---
base-commit: 4fe89d07dcc2804c8b562f6c7896a45643d34b2f
change-id: 20220815-rpi-fix-4k-60-17273650429d

Best regards,
-- 
Maxime Ripard <maxime@cerno.tech>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node()
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-14 19:43   ` Florian Fainelli
  2022-10-13  9:13 ` [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header Maxime Ripard
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

A significant number of RaspberryPi drivers using the firmware don't
have a phandle to it, so end up scanning the device tree to find a node
with the firmware compatible.

That code is duplicated everywhere, so let's introduce a helper instead.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/firmware/raspberrypi.c             | 7 +++++++
 include/soc/bcm2835/raspberrypi-firmware.h | 7 +++++++
 2 files changed, 14 insertions(+)

diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
index 4b8978b254f9..b916e1e171f8 100644
--- a/drivers/firmware/raspberrypi.c
+++ b/drivers/firmware/raspberrypi.c
@@ -311,6 +311,13 @@ static int rpi_firmware_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static const struct of_device_id rpi_firmware_of_match[];
+struct device_node *rpi_firmware_find_node(void)
+{
+	return of_find_matching_node(NULL, rpi_firmware_of_match);
+}
+EXPORT_SYMBOL_GPL(rpi_firmware_find_node);
+
 /**
  * rpi_firmware_get - Get pointer to rpi_firmware structure.
  * @firmware_node:    Pointer to the firmware Device Tree node.
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index 811ea668c4a1..63426082bcb9 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -142,6 +142,7 @@ int rpi_firmware_property(struct rpi_firmware *fw,
 int rpi_firmware_property_list(struct rpi_firmware *fw,
 			       void *data, size_t tag_size);
 void rpi_firmware_put(struct rpi_firmware *fw);
+struct device_node *rpi_firmware_find_node(void);
 struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node);
 struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
 					   struct device_node *firmware_node);
@@ -159,6 +160,12 @@ static inline int rpi_firmware_property_list(struct rpi_firmware *fw,
 }
 
 static inline void rpi_firmware_put(struct rpi_firmware *fw) { }
+
+static inline struct device_node *rpi_firmware_find_node(void)
+{
+	return NULL;
+}
+
 static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node)
 {
 	return NULL;

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node() Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-14 19:31   ` Stephen Boyd
  2022-10-14 19:44   ` Florian Fainelli
  2022-10-13  9:13 ` [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate Maxime Ripard
                   ` (4 subsequent siblings)
  6 siblings, 2 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

We'll need the clock IDs in more drivers than just the clock driver from
now on, so let's move them in the firmware header.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/clk/bcm/clk-raspberrypi.c          | 18 ------------------
 include/soc/bcm2835/raspberrypi-firmware.h | 18 ++++++++++++++++++
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c
index 876b37b8683c..1f5e6a1554e6 100644
--- a/drivers/clk/bcm/clk-raspberrypi.c
+++ b/drivers/clk/bcm/clk-raspberrypi.c
@@ -18,24 +18,6 @@
 
 #include <soc/bcm2835/raspberrypi-firmware.h>
 
-enum rpi_firmware_clk_id {
-	RPI_FIRMWARE_EMMC_CLK_ID = 1,
-	RPI_FIRMWARE_UART_CLK_ID,
-	RPI_FIRMWARE_ARM_CLK_ID,
-	RPI_FIRMWARE_CORE_CLK_ID,
-	RPI_FIRMWARE_V3D_CLK_ID,
-	RPI_FIRMWARE_H264_CLK_ID,
-	RPI_FIRMWARE_ISP_CLK_ID,
-	RPI_FIRMWARE_SDRAM_CLK_ID,
-	RPI_FIRMWARE_PIXEL_CLK_ID,
-	RPI_FIRMWARE_PWM_CLK_ID,
-	RPI_FIRMWARE_HEVC_CLK_ID,
-	RPI_FIRMWARE_EMMC2_CLK_ID,
-	RPI_FIRMWARE_M2MC_CLK_ID,
-	RPI_FIRMWARE_PIXEL_BVB_CLK_ID,
-	RPI_FIRMWARE_NUM_CLK_ID,
-};
-
 static char *rpi_firmware_clk_names[] = {
 	[RPI_FIRMWARE_EMMC_CLK_ID]	= "emmc",
 	[RPI_FIRMWARE_UART_CLK_ID]	= "uart",
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index 63426082bcb9..74c7bcc1ac2a 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -136,6 +136,24 @@ enum rpi_firmware_property_tag {
 	RPI_FIRMWARE_GET_DMA_CHANNELS =                       0x00060001,
 };
 
+enum rpi_firmware_clk_id {
+	RPI_FIRMWARE_EMMC_CLK_ID = 1,
+	RPI_FIRMWARE_UART_CLK_ID,
+	RPI_FIRMWARE_ARM_CLK_ID,
+	RPI_FIRMWARE_CORE_CLK_ID,
+	RPI_FIRMWARE_V3D_CLK_ID,
+	RPI_FIRMWARE_H264_CLK_ID,
+	RPI_FIRMWARE_ISP_CLK_ID,
+	RPI_FIRMWARE_SDRAM_CLK_ID,
+	RPI_FIRMWARE_PIXEL_CLK_ID,
+	RPI_FIRMWARE_PWM_CLK_ID,
+	RPI_FIRMWARE_HEVC_CLK_ID,
+	RPI_FIRMWARE_EMMC2_CLK_ID,
+	RPI_FIRMWARE_M2MC_CLK_ID,
+	RPI_FIRMWARE_PIXEL_BVB_CLK_ID,
+	RPI_FIRMWARE_NUM_CLK_ID,
+};
+
 #if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
 int rpi_firmware_property(struct rpi_firmware *fw,
 			  u32 tag, void *data, size_t len);

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node() Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-14 19:45   ` Florian Fainelli
  2022-10-13  9:13 ` [PATCH v3 4/7] drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection Maxime Ripard
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

The firmware allows to query for its clocks the operating range of a
given clock. We'll need this for some drivers (KMS, in particular) to
infer the state of some configuration options, so let's create a
function to do so.

Acked-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/firmware/raspberrypi.c             | 20 ++++++++++++++++++++
 include/soc/bcm2835/raspberrypi-firmware.h | 26 ++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
index b916e1e171f8..1353ec2f9b53 100644
--- a/drivers/firmware/raspberrypi.c
+++ b/drivers/firmware/raspberrypi.c
@@ -228,6 +228,26 @@ static void rpi_register_clk_driver(struct device *dev)
 						-1, NULL, 0);
 }
 
+unsigned int rpi_firmware_clk_get_max_rate(struct rpi_firmware *fw, unsigned int id)
+{
+	struct rpi_firmware_clk_rate_request msg =
+		RPI_FIRMWARE_CLK_RATE_REQUEST(id);
+	int ret;
+
+	ret = rpi_firmware_property(fw, RPI_FIRMWARE_GET_MAX_CLOCK_RATE,
+				    &msg, sizeof(msg));
+	if (ret)
+		/*
+		 * If our firmware doesn't support that operation, or fails, we
+		 * assume the maximum clock rate is absolute maximum we can
+		 * store over our type.
+		 */
+		 return UINT_MAX;
+
+	return le32_to_cpu(msg.rate);
+}
+EXPORT_SYMBOL_GPL(rpi_firmware_clk_get_max_rate);
+
 static void rpi_firmware_delete(struct kref *kref)
 {
 	struct rpi_firmware *fw = container_of(kref, struct rpi_firmware,
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index 74c7bcc1ac2a..10248c370229 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -154,12 +154,32 @@ enum rpi_firmware_clk_id {
 	RPI_FIRMWARE_NUM_CLK_ID,
 };
 
+/**
+ * struct rpi_firmware_clk_rate_request - Firmware Request for a rate
+ * @id:	ID of the clock being queried
+ * @rate: Rate in Hertz. Set by the firmware.
+ *
+ * Used by @RPI_FIRMWARE_GET_CLOCK_RATE, @RPI_FIRMWARE_GET_CLOCK_MEASURED,
+ * @RPI_FIRMWARE_GET_MAX_CLOCK_RATE and @RPI_FIRMWARE_GET_MIN_CLOCK_RATE.
+ */
+struct rpi_firmware_clk_rate_request {
+	__le32 id;
+	__le32 rate;
+} __packed;
+
+#define RPI_FIRMWARE_CLK_RATE_REQUEST(_id)	\
+	{					\
+		.id = _id,			\
+	}
+
 #if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
 int rpi_firmware_property(struct rpi_firmware *fw,
 			  u32 tag, void *data, size_t len);
 int rpi_firmware_property_list(struct rpi_firmware *fw,
 			       void *data, size_t tag_size);
 void rpi_firmware_put(struct rpi_firmware *fw);
+unsigned int rpi_firmware_clk_get_max_rate(struct rpi_firmware *fw,
+					   unsigned int id);
 struct device_node *rpi_firmware_find_node(void);
 struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node);
 struct rpi_firmware *devm_rpi_firmware_get(struct device *dev,
@@ -179,6 +199,12 @@ static inline int rpi_firmware_property_list(struct rpi_firmware *fw,
 
 static inline void rpi_firmware_put(struct rpi_firmware *fw) { }
 
+static inline unsigned int rpi_firmware_clk_get_max_rate(struct rpi_firmware *fw,
+							 unsigned int id)
+{
+	return UINT_MAX;
+}
+
 static inline struct device_node *rpi_firmware_find_node(void)
 {
 	return NULL;

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 4/7] drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
                   ` (2 preceding siblings ...)
  2022-10-13  9:13 ` [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 5/7] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection code Maxime Ripard
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

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(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 1e5f68704d7d..3b75ac6fa0db 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>
@@ -2966,7 +2967,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.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 5/7] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection code
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
                   ` (3 preceding siblings ...)
  2022-10-13  9:13 ` [PATCH v3 4/7] drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 6/7] drm/vc4: hdmi: Add more checks for 4k resolutions Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 7/7] drm/vc4: Make sure we don't end up with a core clock too high Maxime Ripard
  6 siblings, 0 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

In order to support higher HDMI frequencies, users have to set the
hdmi_enable_4kp60 parameter in their config.txt file.

This will have the side-effect of raising the maximum of the core clock,
tied to the HVS, and managed by the HVS driver.

However, we are querying this in the HDMI driver by poking into the HVS
structure to get our struct clk handle.

Let's make this part of the HVS bind implementation to have all the core
clock related setup in the same place.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_drv.h  | 10 ++++++++++
 drivers/gpu/drm/vc4/vc4_hdmi.c | 15 ++++-----------
 drivers/gpu/drm/vc4/vc4_hdmi.h |  8 --------
 drivers/gpu/drm/vc4/vc4_hvs.c  | 23 +++++++++++++++++++++++
 4 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 1beb96b77b8c..09cdbdb7fff0 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -328,6 +328,8 @@ struct vc4_hvs {
 
 	struct clk *core_clk;
 
+	unsigned long max_core_rate;
+
 	/* Memory manager for CRTCs to allocate space in the display
 	 * list.  Units are dwords.
 	 */
@@ -339,6 +341,14 @@ struct vc4_hvs {
 	struct drm_mm_node mitchell_netravali_filter;
 
 	struct debugfs_regset32 regset;
+
+	/*
+	 * Even if HDMI0 on the RPi4 can output modes requiring a pixel
+	 * rate higher than 297MHz, it needs some adjustments in the
+	 * config.txt file to be able to do so and thus won't always be
+	 * available.
+	 */
+	bool vc5_hdmi_enable_scrambling;
 };
 
 struct vc4_plane {
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 3b75ac6fa0db..f367f93ca832 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -46,7 +46,6 @@
 #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>
@@ -277,6 +276,7 @@ static void vc4_hdmi_connector_destroy(struct drm_connector *connector)
 static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
 {
 	struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
+	struct vc4_dev *vc4 = to_vc4_dev(connector->dev);
 	int ret = 0;
 	struct edid *edid;
 
@@ -293,7 +293,7 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
 	ret = drm_add_edid_modes(connector, edid);
 	kfree(edid);
 
-	if (vc4_hdmi->disable_4kp60) {
+	if (!vc4->hvs->vc5_hdmi_enable_scrambling) {
 		struct drm_device *drm = connector->dev;
 		struct drm_display_mode *mode;
 
@@ -1480,11 +1480,12 @@ vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
 {
 	const struct drm_connector *connector = &vc4_hdmi->connector;
 	const struct drm_display_info *info = &connector->display_info;
+	struct vc4_dev *vc4 = to_vc4_dev(connector->dev);
 
 	if (clock > vc4_hdmi->variant->max_pixel_clock)
 		return MODE_CLOCK_HIGH;
 
-	if (vc4_hdmi->disable_4kp60 && clock > HDMI_14_MAX_TMDS_CLK)
+	if (!vc4->hvs->vc5_hdmi_enable_scrambling && clock > HDMI_14_MAX_TMDS_CLK)
 		return MODE_CLOCK_HIGH;
 
 	if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
@@ -2965,14 +2966,6 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
 	vc4_hdmi->disable_wifi_frequencies =
 		of_property_read_bool(dev->of_node, "wifi-2.4ghz-coexistence");
 
-	if (variant->max_pixel_clock == 600000000) {
-		struct vc4_dev *vc4 = to_vc4_dev(drm);
-		unsigned long max_rate = rpi_firmware_clk_get_max_rate(vc4->hvs->core_clk);
-
-		if (max_rate < 550000000)
-			vc4_hdmi->disable_4kp60 = true;
-	}
-
 	pm_runtime_enable(dev);
 
 	/*
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
index c3ed2b07df23..7506943050cf 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
@@ -155,14 +155,6 @@ struct vc4_hdmi {
 	 */
 	bool disable_wifi_frequencies;
 
-	/*
-	 * Even if HDMI0 on the RPi4 can output modes requiring a pixel
-	 * rate higher than 297MHz, it needs some adjustments in the
-	 * config.txt file to be able to do so and thus won't always be
-	 * available.
-	 */
-	bool disable_4kp60;
-
 	struct cec_adapter *cec_adap;
 	struct cec_msg cec_rx_msg;
 	bool cec_tx_ok;
diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c
index fbaa741dda5f..e28a13a75ec2 100644
--- a/drivers/gpu/drm/vc4/vc4_hvs.c
+++ b/drivers/gpu/drm/vc4/vc4_hvs.c
@@ -27,6 +27,8 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_vblank.h>
 
+#include <soc/bcm2835/raspberrypi-firmware.h>
+
 #include "vc4_drv.h"
 #include "vc4_regs.h"
 
@@ -671,12 +673,33 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data)
 	hvs->regset.nregs = ARRAY_SIZE(hvs_regs);
 
 	if (vc4->is_vc5) {
+		struct rpi_firmware *firmware;
+		struct device_node *node;
+		unsigned long max_rate;
+
+		node = rpi_firmware_find_node();
+		if (!node)
+			return -EINVAL;
+
+		firmware = rpi_firmware_get(node);
+		of_node_put(node);
+		if (!firmware)
+			return -EPROBE_DEFER;
+
 		hvs->core_clk = devm_clk_get(&pdev->dev, NULL);
 		if (IS_ERR(hvs->core_clk)) {
 			dev_err(&pdev->dev, "Couldn't get core clock\n");
 			return PTR_ERR(hvs->core_clk);
 		}
 
+		max_rate = rpi_firmware_clk_get_max_rate(firmware,
+							 RPI_FIRMWARE_CORE_CLK_ID);
+		rpi_firmware_put(firmware);
+		if (max_rate >= 550000000)
+			hvs->vc5_hdmi_enable_scrambling = true;
+
+		hvs->max_core_rate = max_rate;
+
 		ret = clk_prepare_enable(hvs->core_clk);
 		if (ret) {
 			dev_err(&pdev->dev, "Couldn't enable the core clock\n");

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 6/7] drm/vc4: hdmi: Add more checks for 4k resolutions
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
                   ` (4 preceding siblings ...)
  2022-10-13  9:13 ` [PATCH v3 5/7] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection code Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  2022-10-13  9:13 ` [PATCH v3 7/7] drm/vc4: Make sure we don't end up with a core clock too high Maxime Ripard
  6 siblings, 0 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

From: Dom Cobley <popcornmix@gmail.com>

At least the 4096x2160@60Hz mode requires some overclocking that isn't
available by default, even if hdmi_enable_4kp60 is enabled.

Let's add some logic to detect whether we can satisfy the core clock
requirements for that mode, and prevent it from being used otherwise.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_drv.h  |  6 ++++++
 drivers/gpu/drm/vc4/vc4_hdmi.c | 11 +++++++++--
 drivers/gpu/drm/vc4/vc4_hvs.c  |  3 +++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 09cdbdb7fff0..094ebe8567e2 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -349,6 +349,12 @@ struct vc4_hvs {
 	 * available.
 	 */
 	bool vc5_hdmi_enable_scrambling;
+
+	/*
+	 * 4096x2160@60 requires a core overclock to work, so register
+	 * whether that is sufficient.
+	 */
+	bool vc5_hdmi_enable_4096by2160;
 };
 
 struct vc4_plane {
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index f367f93ca832..cf1fee6c29f3 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1476,6 +1476,7 @@ vc4_hdmi_sink_supports_format_bpc(const struct vc4_hdmi *vc4_hdmi,
 
 static enum drm_mode_status
 vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
+			     const struct drm_display_mode *mode,
 			     unsigned long long clock)
 {
 	const struct drm_connector *connector = &vc4_hdmi->connector;
@@ -1488,6 +1489,12 @@ vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
 	if (!vc4->hvs->vc5_hdmi_enable_scrambling && clock > HDMI_14_MAX_TMDS_CLK)
 		return MODE_CLOCK_HIGH;
 
+	/* 4096x2160@60 is not reliable without overclocking core */
+	if (!vc4->hvs->vc5_hdmi_enable_4096by2160 &&
+	    mode->hdisplay > 3840 && mode->vdisplay >= 2160 &&
+	    drm_mode_vrefresh(mode) >= 50)
+		return MODE_CLOCK_HIGH;
+
 	if (info->max_tmds_clock && clock > (info->max_tmds_clock * 1000))
 		return MODE_CLOCK_HIGH;
 
@@ -1522,7 +1529,7 @@ vc4_hdmi_encoder_compute_clock(const struct vc4_hdmi *vc4_hdmi,
 	unsigned long long clock;
 
 	clock = vc4_hdmi_encoder_compute_mode_clock(mode, bpc, fmt);
-	if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, clock) != MODE_OK)
+	if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, mode, clock) != MODE_OK)
 		return -EINVAL;
 
 	vc4_state->tmds_char_rate = clock;
@@ -1685,7 +1692,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
 	     (mode->hsync_end % 2) || (mode->htotal % 2)))
 		return MODE_H_ILLEGAL;
 
-	return vc4_hdmi_encoder_clock_valid(vc4_hdmi, mode->clock * 1000);
+	return vc4_hdmi_encoder_clock_valid(vc4_hdmi, mode, mode->clock * 1000);
 }
 
 static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c
index e28a13a75ec2..32f5ab937ace 100644
--- a/drivers/gpu/drm/vc4/vc4_hvs.c
+++ b/drivers/gpu/drm/vc4/vc4_hvs.c
@@ -698,6 +698,9 @@ static int vc4_hvs_bind(struct device *dev, struct device *master, void *data)
 		if (max_rate >= 550000000)
 			hvs->vc5_hdmi_enable_scrambling = true;
 
+		if (max_rate >= 600000000)
+			hvs->vc5_hdmi_enable_4096by2160 = true;
+
 		hvs->max_core_rate = max_rate;
 
 		ret = clk_prepare_enable(hvs->core_clk);

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH v3 7/7] drm/vc4: Make sure we don't end up with a core clock too high
  2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
                   ` (5 preceding siblings ...)
  2022-10-13  9:13 ` [PATCH v3 6/7] drm/vc4: hdmi: Add more checks for 4k resolutions Maxime Ripard
@ 2022-10-13  9:13 ` Maxime Ripard
  6 siblings, 0 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-13  9:13 UTC (permalink / raw)
  To: Florian Fainelli, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

Following the clock rate range improvements to the clock framework,
trying to set a disjoint range on a clock will now result in an error.

Thus, we can't set a minimum rate higher than the maximum reported by
the firmware, or clk_set_min_rate() will fail.

Thus we need to clamp the rate we are about to ask for to the maximum
rate possible on that clock.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_kms.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index b45dcdfd7306..d241620fd5a7 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -397,8 +397,8 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)
 	if (vc4->is_vc5) {
 		unsigned long state_rate = max(old_hvs_state->core_clock_rate,
 					       new_hvs_state->core_clock_rate);
-		unsigned long core_rate = max_t(unsigned long,
-						500000000, state_rate);
+		unsigned long core_rate = clamp_t(unsigned long, state_rate,
+						  500000000, hvs->max_core_rate);
 
 		drm_dbg(dev, "Raising the core clock at %lu Hz\n", core_rate);
 
@@ -432,14 +432,17 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)
 	drm_atomic_helper_cleanup_planes(dev, state);
 
 	if (vc4->is_vc5) {
-		drm_dbg(dev, "Running the core clock at %lu Hz\n",
-			new_hvs_state->core_clock_rate);
+		unsigned long core_rate = min_t(unsigned long,
+						hvs->max_core_rate,
+						new_hvs_state->core_clock_rate);
+
+		drm_dbg(dev, "Running the core clock at %lu Hz\n", core_rate);
 
 		/*
 		 * Request a clock rate based on the current HVS
 		 * requirements.
 		 */
-		WARN_ON(clk_set_min_rate(hvs->core_clk, new_hvs_state->core_clock_rate));
+		WARN_ON(clk_set_min_rate(hvs->core_clk, core_rate));
 
 		drm_dbg(dev, "Core clock actual rate: %lu Hz\n",
 			clk_get_rate(hvs->core_clk));

-- 
b4 0.11.0-dev-7da52

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header
  2022-10-13  9:13 ` [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header Maxime Ripard
@ 2022-10-14 19:31   ` Stephen Boyd
  2022-10-14 19:44   ` Florian Fainelli
  1 sibling, 0 replies; 13+ messages in thread
From: Stephen Boyd @ 2022-10-14 19:31 UTC (permalink / raw)
  To: Broadcom internal kernel review list, Daniel Vetter,
	David Airlie, Emma Anholt, Florian Fainelli, Maxime Ripard,
	Maxime Ripard, Michael Turquette, Ray Jui, Scott Branden
  Cc: linux-kernel, linux-arm-kernel, Maxime Ripard, Stefan Wahren,
	linux-clk, linux-rpi-kernel, Dom Cobley, dri-devel

Quoting Maxime Ripard (2022-10-13 02:13:09)
> We'll need the clock IDs in more drivers than just the clock driver from
> now on, so let's move them in the firmware header.
> 
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> ---

Acked-by: Stephen Boyd <sboyd@kernel.org>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node()
  2022-10-13  9:13 ` [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node() Maxime Ripard
@ 2022-10-14 19:43   ` Florian Fainelli
  2022-10-18  7:32     ` Maxime Ripard
  0 siblings, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2022-10-14 19:43 UTC (permalink / raw)
  To: Maxime Ripard, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Stefan Wahren, linux-clk,
	linux-rpi-kernel, Dom Cobley, dri-devel

On 10/13/22 02:13, Maxime Ripard wrote:
> A significant number of RaspberryPi drivers using the firmware don't
> have a phandle to it, so end up scanning the device tree to find a node
> with the firmware compatible.
> 
> That code is duplicated everywhere, so let's introduce a helper instead.
> 
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> ---
>   drivers/firmware/raspberrypi.c             | 7 +++++++
>   include/soc/bcm2835/raspberrypi-firmware.h | 7 +++++++
>   2 files changed, 14 insertions(+)
> 
> diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
> index 4b8978b254f9..b916e1e171f8 100644
> --- a/drivers/firmware/raspberrypi.c
> +++ b/drivers/firmware/raspberrypi.c
> @@ -311,6 +311,13 @@ static int rpi_firmware_remove(struct platform_device *pdev)
>   	return 0;
>   }
>   
> +static const struct of_device_id rpi_firmware_of_match[];

This shadows the same variable that is used later for matching the 
firmware driver and probe it as a platform_driver, what am I missing here?
-- 
Florian

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header
  2022-10-13  9:13 ` [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header Maxime Ripard
  2022-10-14 19:31   ` Stephen Boyd
@ 2022-10-14 19:44   ` Florian Fainelli
  1 sibling, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-10-14 19:44 UTC (permalink / raw)
  To: Maxime Ripard, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Stefan Wahren, linux-clk,
	linux-rpi-kernel, Dom Cobley, dri-devel

On 10/13/22 02:13, Maxime Ripard wrote:
> We'll need the clock IDs in more drivers than just the clock driver from
> now on, so let's move them in the firmware header.
> 
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate
  2022-10-13  9:13 ` [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate Maxime Ripard
@ 2022-10-14 19:45   ` Florian Fainelli
  0 siblings, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2022-10-14 19:45 UTC (permalink / raw)
  To: Maxime Ripard, Michael Turquette, Emma Anholt, Stephen Boyd,
	Ray Jui, Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, Maxime Ripard
  Cc: linux-kernel, linux-arm-kernel, Stefan Wahren, linux-clk,
	linux-rpi-kernel, Dom Cobley, dri-devel

On 10/13/22 02:13, Maxime Ripard wrote:
> The firmware allows to query for its clocks the operating range of a
> given clock. We'll need this for some drivers (KMS, in particular) to
> infer the state of some configuration options, so let's create a
> function to do so.
> 
> Acked-by: Stephen Boyd <sboyd@kernel.org>
> Signed-off-by: Maxime Ripard <maxime@cerno.tech>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node()
  2022-10-14 19:43   ` Florian Fainelli
@ 2022-10-18  7:32     ` Maxime Ripard
  0 siblings, 0 replies; 13+ messages in thread
From: Maxime Ripard @ 2022-10-18  7:32 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Michael Turquette, Emma Anholt, Stephen Boyd, Ray Jui,
	Scott Branden, Broadcom internal kernel review list,
	Daniel Vetter, David Airlie, linux-kernel, linux-arm-kernel,
	Stefan Wahren, linux-clk, linux-rpi-kernel, Dom Cobley,
	dri-devel

Hi Florian

On Fri, Oct 14, 2022 at 12:43:38PM -0700, Florian Fainelli wrote:
> On 10/13/22 02:13, Maxime Ripard wrote:
> > A significant number of RaspberryPi drivers using the firmware don't
> > have a phandle to it, so end up scanning the device tree to find a node
> > with the firmware compatible.
> > 
> > That code is duplicated everywhere, so let's introduce a helper instead.
> > 
> > Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> > ---
> >   drivers/firmware/raspberrypi.c             | 7 +++++++
> >   include/soc/bcm2835/raspberrypi-firmware.h | 7 +++++++
> >   2 files changed, 14 insertions(+)
> > 
> > diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
> > index 4b8978b254f9..b916e1e171f8 100644
> > --- a/drivers/firmware/raspberrypi.c
> > +++ b/drivers/firmware/raspberrypi.c
> > @@ -311,6 +311,13 @@ static int rpi_firmware_remove(struct platform_device *pdev)
> >   	return 0;
> >   }
> > +static const struct of_device_id rpi_firmware_of_match[];
> 
> This shadows the same variable that is used later for matching the firmware
> driver and probe it as a platform_driver, what am I missing here?

I'm not shadowing the variable, but it's a forward-declaration.

Maxime

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-10-18  7:32 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-13  9:13 [PATCH v3 0/7] drm/vc4: Fix the core clock behaviour Maxime Ripard
2022-10-13  9:13 ` [PATCH v3 1/7] firmware: raspberrypi: Introduce rpi_firmware_find_node() Maxime Ripard
2022-10-14 19:43   ` Florian Fainelli
2022-10-18  7:32     ` Maxime Ripard
2022-10-13  9:13 ` [PATCH v3 2/7] firmware: raspberrypi: Move the clock IDs to the firmware header Maxime Ripard
2022-10-14 19:31   ` Stephen Boyd
2022-10-14 19:44   ` Florian Fainelli
2022-10-13  9:13 ` [PATCH v3 3/7] firmware: raspberrypi: Provide a helper to query a clock max rate Maxime Ripard
2022-10-14 19:45   ` Florian Fainelli
2022-10-13  9:13 ` [PATCH v3 4/7] drm/vc4: hdmi: Fix hdmi_enable_4kp60 detection Maxime Ripard
2022-10-13  9:13 ` [PATCH v3 5/7] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection code Maxime Ripard
2022-10-13  9:13 ` [PATCH v3 6/7] drm/vc4: hdmi: Add more checks for 4k resolutions Maxime Ripard
2022-10-13  9:13 ` [PATCH v3 7/7] drm/vc4: Make sure we don't end up with a core clock too high Maxime Ripard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).