-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rockchip64-6.14: add patch to fix rk3588 multi hdmi pll clk
- Loading branch information
1 parent
bc9ed05
commit 9c05cfa
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
52 changes: 52 additions & 0 deletions
52
...ve/rockchip64-6.14/rk3588-0134-clk-check-for-disabled-clock-provider-in-of_clk_get_.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Heiko Stuebner <heiko@sntech.de> | ||
Date: Thu, 20 Feb 2025 23:54:48 +0100 | ||
Subject: clk: check for disabled clock-provider in of_clk_get_hw_from_clkspec | ||
|
||
of_clk_get_hw_from_clkspec checks all available clock-providers by | ||
compairing their of-nodes to the one from the clkspec. If no matching | ||
clock-provider is found, the function returns EPROBE_DEFER to cause a | ||
re-check at a later date. | ||
|
||
If a matching clock-provider is found, a authoritative answer can be | ||
retrieved from it whether the clock exists or not. | ||
|
||
This does not take into account that the clock-provider may never appear, | ||
because it's node is disabled. This can happen for example when a clock | ||
is optional, provided by a separate block which just never gets enabled. | ||
|
||
One example of this happening is the rk3588's VOP, which has optional | ||
additional display-clock-supplies coming from PLLs inside the hdmiphy | ||
blocks. These can be used for better rates, but the system will also | ||
work without them. | ||
|
||
The problem around that is described in the followups to: | ||
https://lore.kernel.org/dri-devel/20250215-vop2-hdmi1-disp-modes-v1-3-81962a7151d6@collabora.com/ | ||
|
||
As we already know the of-node of the presumed clock-provider, just add | ||
a check via of_device_is_available whether this is a "valid" device node. | ||
This prevents ethernal defer-loops. | ||
|
||
Signed-off-by: Heiko Stuebner <heiko@sntech.de> | ||
--- | ||
drivers/clk/clk.c | 4 ++++ | ||
1 file changed, 4 insertions(+) | ||
|
||
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c | ||
index 111111111111..222222222222 100644 | ||
--- a/drivers/clk/clk.c | ||
+++ b/drivers/clk/clk.c | ||
@@ -5258,6 +5258,10 @@ of_clk_get_hw_from_clkspec(struct of_phandle_args *clkspec) | ||
if (!clkspec) | ||
return ERR_PTR(-EINVAL); | ||
|
||
+ /* Check if node in clkspec is in disabled/fail state */ | ||
+ if (!of_device_is_available(clkspec->np)) | ||
+ return ERR_PTR(-ENOENT); | ||
+ | ||
mutex_lock(&of_clk_mutex); | ||
list_for_each_entry(provider, &of_clk_providers, link) { | ||
if (provider->node == clkspec->np) { | ||
-- | ||
Armbian | ||
|