aspeed: Make SCU lock/unlock functions part of SCU API
authormaxims@google.com <maxims@google.com>
Mon, 17 Apr 2017 19:00:23 +0000 (12:00 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 8 May 2017 15:57:31 +0000 (11:57 -0400)
Make functions for locking and unlocking SCU part of SCU API.
Many drivers need to modify settings in SCU and thus need to unlock it
first. This change makes it possible.

Signed-off-by: Maxim Sloyko <maxims@google.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/arm/include/asm/arch-aspeed/scu_ast2500.h
arch/arm/mach-aspeed/ast2500/clk_ast2500.c
drivers/clk/aspeed/clk_ast2500.c

index fc0c01ae3303c36431099db5fbf7ff2473563954..0fa3ecb9b917b31a498a75b4f4902081e386cac2 100644 (file)
@@ -120,6 +120,20 @@ int ast_get_clk(struct udevice **devp);
  */
 void *ast_get_scu(void);
 
+/**
+ * ast_scu_unlock() - unlock protected registers
+ *
+ * @scu, pointer to ast2500_scu
+ */
+void ast_scu_unlock(struct ast2500_scu *scu);
+
+/**
+ * ast_scu_lock() - lock protected registers
+ *
+ * @scu, pointer to ast2500_scu
+ */
+void ast_scu_lock(struct ast2500_scu *scu);
+
 #endif  /* __ASSEMBLY__ */
 
 #endif  /* _ASM_ARCH_SCU_AST2500_H */
index 079909fa6462218a93ada767df11349657c443f2..30cfac1af0fabe94c48563f82a0b0e9d0127152e 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <asm/io.h>
 #include <asm/arch/scu_ast2500.h>
 
 int ast_get_clk(struct udevice **devp)
@@ -28,3 +29,17 @@ void *ast_get_scu(void)
 
        return priv->scu;
 }
+
+void ast_scu_unlock(struct ast2500_scu *scu)
+{
+       writel(SCU_UNLOCK_VALUE, &scu->protection_key);
+       while (!readl(&scu->protection_key))
+               ;
+}
+
+void ast_scu_lock(struct ast2500_scu *scu)
+{
+       writel(~SCU_UNLOCK_VALUE, &scu->protection_key);
+       while (readl(&scu->protection_key))
+               ;
+}
index 26a5e58221cc155f5c95d09761600cc316c5b9ae..504731271c386b7cf3f5bff8c24dcb0c92d769c3 100644 (file)
@@ -132,20 +132,6 @@ static ulong ast2500_clk_get_rate(struct clk *clk)
        return rate;
 }
 
-static void ast2500_scu_unlock(struct ast2500_scu *scu)
-{
-       writel(SCU_UNLOCK_VALUE, &scu->protection_key);
-       while (!readl(&scu->protection_key))
-               ;
-}
-
-static void ast2500_scu_lock(struct ast2500_scu *scu)
-{
-       writel(~SCU_UNLOCK_VALUE, &scu->protection_key);
-       while (readl(&scu->protection_key))
-               ;
-}
-
 static ulong ast2500_configure_ddr(struct ast2500_scu *scu, ulong rate)
 {
        ulong clkin = ast2500_get_clkin(scu);
@@ -197,9 +183,9 @@ static ulong ast2500_configure_ddr(struct ast2500_scu *scu, ulong rate)
            | (best_num << SCU_MPLL_NUM_SHIFT)
            | (best_denum << SCU_MPLL_DENUM_SHIFT);
 
-       ast2500_scu_unlock(scu);
+       ast_scu_unlock(scu);
        writel(mpll_reg, &scu->m_pll_param);
-       ast2500_scu_lock(scu);
+       ast_scu_lock(scu);
 
        return ast2500_get_mpll_rate(clkin, mpll_reg);
 }