summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/arch-rockchip/clock.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/include/asm/arch-rockchip/clock.h')
-rw-r--r--arch/arm/include/asm/arch-rockchip/clock.h82
1 files changed, 76 insertions, 6 deletions
diff --git a/arch/arm/include/asm/arch-rockchip/clock.h b/arch/arm/include/asm/arch-rockchip/clock.h
index 0eb19ca86f..8f7fc86a9e 100644
--- a/arch/arm/include/asm/arch-rockchip/clock.h
+++ b/arch/arm/include/asm/arch-rockchip/clock.h
@@ -9,6 +9,7 @@
/* define pll mode */
#define RKCLK_PLL_MODE_SLOW 0
#define RKCLK_PLL_MODE_NORMAL 1
+#define RKCLK_PLL_MODE_DEEP 2
enum {
ROCKCHIP_SYSCON_NOC,
@@ -33,6 +34,81 @@ enum rk_clk_id {
CLK_COUNT,
};
+#define PLL(_type, _id, _con, _mode, _mshift, \
+ _lshift, _pflags, _rtable) \
+ { \
+ .id = _id, \
+ .type = _type, \
+ .con_offset = _con, \
+ .mode_offset = _mode, \
+ .mode_shift = _mshift, \
+ .lock_shift = _lshift, \
+ .pll_flags = _pflags, \
+ .rate_table = _rtable, \
+ }
+
+#define RK3036_PLL_RATE(_rate, _refdiv, _fbdiv, _postdiv1, \
+ _postdiv2, _dsmpd, _frac) \
+{ \
+ .rate = _rate##U, \
+ .fbdiv = _fbdiv, \
+ .postdiv1 = _postdiv1, \
+ .refdiv = _refdiv, \
+ .postdiv2 = _postdiv2, \
+ .dsmpd = _dsmpd, \
+ .frac = _frac, \
+}
+
+struct rockchip_pll_rate_table {
+ unsigned long rate;
+ unsigned int nr;
+ unsigned int nf;
+ unsigned int no;
+ unsigned int nb;
+ /* for RK3036/RK3399 */
+ unsigned int fbdiv;
+ unsigned int postdiv1;
+ unsigned int refdiv;
+ unsigned int postdiv2;
+ unsigned int dsmpd;
+ unsigned int frac;
+};
+
+enum rockchip_pll_type {
+ pll_rk3036,
+ pll_rk3066,
+ pll_rk3328,
+ pll_rk3366,
+ pll_rk3399,
+};
+
+struct rockchip_pll_clock {
+ unsigned int id;
+ unsigned int con_offset;
+ unsigned int mode_offset;
+ unsigned int mode_shift;
+ unsigned int lock_shift;
+ enum rockchip_pll_type type;
+ unsigned int pll_flags;
+ struct rockchip_pll_rate_table *rate_table;
+ unsigned int mode_mask;
+};
+
+struct rockchip_cpu_rate_table {
+ unsigned long rate;
+ unsigned int aclk_div;
+ unsigned int pclk_div;
+};
+
+int rockchip_pll_set_rate(struct rockchip_pll_clock *pll,
+ void __iomem *base, ulong clk_id,
+ ulong drate);
+ulong rockchip_pll_get_rate(struct rockchip_pll_clock *pll,
+ void __iomem *base, ulong clk_id);
+const struct rockchip_cpu_rate_table *
+rockchip_get_cpu_settings(struct rockchip_cpu_rate_table *cpu_table,
+ ulong rate);
+
static inline int rk_pll_id(enum rk_clk_id clk_id)
{
return clk_id - 1;
@@ -43,12 +119,6 @@ struct sysreset_reg {
unsigned int glb_srst_snd_value;
};
-struct softreset_reg {
- void __iomem *base;
- unsigned int sf_reset_offset;
- unsigned int sf_reset_num;
-};
-
/**
* clk_get_divisor() - Calculate the required clock divisior
*