]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: rockchip: allow grf_type_sys lookup in aux_grf_table
authorDaniele Briguglio <hello@superkali.me>
Sun, 19 Apr 2026 11:43:07 +0000 (13:43 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Mon, 27 Apr 2026 11:32:10 +0000 (13:32 +0200)
Remove the grf_type_sys exclusion from the auxiliary GRF table lookup
in rockchip_clk_register_branches(). Previously, branches with
grf_type_sys always used ctx->grf directly, bypassing the aux_grf_table.

This is a problem on SoCs like RK3588 where ctx->grf points to the
PHP_GRF (set via the CRU's rockchip,grf phandle), but GATE_GRF clock
entries need to access the SYS_GRF instead.

With this change, grf_type_sys branches first check the aux_grf_table,
and fall back to ctx->grf if no entry is found. This is backwards
compatible: on SoCs that do not register grf_type_sys in the
aux_grf_table, the behavior is unchanged.

Reviewed-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Signed-off-by: Daniele Briguglio <hello@superkali.me>
Tested-by: Ricardo Pardini <ricardo@pardini.net>
Link: https://patch.msgid.link/20260419-rk3588-mclk-gate-grf-v4-2-513a42dd1dcc@superkali.me
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk.c

index e8b3b0b9a4f8fe995511078522723eb618933dc7..911e6b610618f71827aa95860c1500b2897d5196 100644 (file)
@@ -509,10 +509,9 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
                clk = NULL;
 
                /* for GRF-dependent branches, choose the right grf first */
-               if ((list->branch_type == branch_grf_mux ||
-                    list->branch_type == branch_grf_gate ||
-                    list->branch_type == branch_grf_mmc) &&
-                   list->grf_type != grf_type_sys) {
+               if (list->branch_type == branch_grf_mux ||
+                   list->branch_type == branch_grf_gate ||
+                   list->branch_type == branch_grf_mmc) {
                        hash_for_each_possible(ctx->aux_grf_table, agrf, node, list->grf_type) {
                                if (agrf->type == list->grf_type) {
                                        grf = agrf->grf;