]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: renesas: rzg2l: Make use of CLK_MON registers optional
authorPhil Edworthy <phil.edworthy@renesas.com>
Tue, 3 May 2022 11:55:53 +0000 (12:55 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Thu, 5 May 2022 10:12:33 +0000 (12:12 +0200)
The RZ/V2M SoC doesn't use CLK_MON registers, so make them optional.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://lore.kernel.org/r/20220503115557.53370-9-phil.edworthy@renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
drivers/clk/renesas/r9a07g043-cpg.c
drivers/clk/renesas/r9a07g044-cpg.c
drivers/clk/renesas/rzg2l-cpg.c
drivers/clk/renesas/rzg2l-cpg.h

index 53a58034bef45bc08d00f7302481714e99157434..33c2bd8df2e52bf2e7c75b9656a8a3ea57d2acb5 100644 (file)
@@ -315,4 +315,6 @@ const struct rzg2l_cpg_info r9a07g043_cpg_info = {
        /* Resets */
        .resets = r9a07g043_resets,
        .num_resets = R9A07G043_TSU_PRESETN + 1, /* Last reset ID + 1 */
+
+       .has_clk_mon_regs = true,
 };
index 8255b39dc147c561288414b25cfc6c94e2a63138..b288897852c744a59c552c014af754238ae8a4b7 100644 (file)
@@ -418,6 +418,8 @@ const struct rzg2l_cpg_info r9a07g044_cpg_info = {
        /* Resets */
        .resets = r9a07g044_resets,
        .num_resets = R9A07G044_TSU_PRESETN + 1, /* Last reset ID + 1 */
+
+       .has_clk_mon_regs = true,
 };
 
 #ifdef CONFIG_CLK_R9A07G054
@@ -440,5 +442,7 @@ const struct rzg2l_cpg_info r9a07g054_cpg_info = {
        /* Resets */
        .resets = r9a07g044_resets,
        .num_resets = R9A07G054_STPAI_ARESETN + 1, /* Last reset ID + 1 */
+
+       .has_clk_mon_regs = true,
 };
 #endif
index a1e1fee9f4832737eb2037dcc7a84a0283b6fe78..48265276d16934bfc151a232467c68b6ac79b620 100644 (file)
@@ -926,6 +926,9 @@ static int rzg2l_mod_clock_endisable(struct clk_hw *hw, bool enable)
        if (!enable)
                return 0;
 
+       if (!priv->info->has_clk_mon_regs)
+               return 0;
+
        for (i = 1000; i > 0; --i) {
                if (((readl(priv->base + CLK_MON_R(reg))) & bitmask))
                        break;
@@ -996,7 +999,10 @@ static int rzg2l_mod_clock_is_enabled(struct clk_hw *hw)
        if (clock->sibling)
                return clock->enabled;
 
-       value = readl(priv->base + CLK_MON_R(clock->off));
+       if (priv->info->has_clk_mon_regs)
+               value = readl(priv->base + CLK_MON_R(clock->off));
+       else
+               value = readl(priv->base + clock->off);
 
        return value & bitmask;
 }
index 59bbc8942e1db741d69e33d5b49a5d874fa30d3a..43ce319a477f5719a64c59378bfcd8a533bec228 100644 (file)
@@ -236,6 +236,7 @@ struct rzg2l_reset {
  * @crit_mod_clks: Array with Module Clock IDs of critical clocks that
  *                 should not be disabled without a knowledgeable driver
  * @num_crit_mod_clks: Number of entries in crit_mod_clks[]
+ * @has_clk_mon_regs: Flag indicating whether the SoC has CLK_MON registers
  */
 struct rzg2l_cpg_info {
        /* Core Clocks */
@@ -256,6 +257,8 @@ struct rzg2l_cpg_info {
        /* Critical Module Clocks that should not be disabled */
        const unsigned int *crit_mod_clks;
        unsigned int num_crit_mod_clks;
+
+       bool has_clk_mon_regs;
 };
 
 extern const struct rzg2l_cpg_info r9a07g043_cpg_info;