fixed: rk3288 pm clkgating pll pd
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rockchip / pm.h
1 #ifndef __MACH_ROCKCHIP_PM_H
2 #define __MACH_ROCKCHIP_PM_H
3
4 #include <dt-bindings/suspend/rockchip-pm.h>
5
6
7
8
9 #define RKPM_LOOPS_PER_USEC     24
10 #define RKPM_LOOP(loops)        do { unsigned int i = (loops); if (i < 7) i = 7; barrier(); asm volatile(".align 4; 1: subs %0, %0, #1; bne 1b;" : "+r" (i)); } while (0)
11 /* delay on slow mode */
12 #define rkpm_udelay(usecs)      RKPM_LOOP((usecs)*RKPM_LOOPS_PER_USEC)
13 /* delay on deep slow mode */
14 #define rkpm_32k_udelay(usecs)  RKPM_LOOP(((usecs)*RKPM_LOOPS_PER_USEC)/(24000000/32768))
15
16
17
18 typedef void (*rkpm_ops_void_callback)(void);
19 typedef void (*rkpm_ops_printch_callback)(char byte);
20 typedef void (*rkpm_ops_paramter_u32_cb)(u32 val);
21 typedef void (*rkpm_sram_suspend_arg_cb)(void *arg);
22
23 // ops in ddr callback
24 struct rkpm_ops {
25
26         rkpm_ops_void_callback prepare;
27         rkpm_ops_void_callback finish;
28         rkpm_ops_void_callback regs_pread;
29
30         rkpm_ops_void_callback pwr_dmns;
31         rkpm_ops_void_callback re_pwr_dmns;
32
33         rkpm_ops_void_callback gtclks;
34         rkpm_ops_void_callback re_gtclks;
35
36
37         rkpm_ops_void_callback plls;
38         rkpm_ops_void_callback re_plls;
39         
40         rkpm_ops_void_callback  gpios;
41         rkpm_ops_void_callback  re_gpios;
42     
43         rkpm_ops_printch_callback printch;
44
45 };
46
47
48 // ops in intmen callback
49 struct rkpm_sram_ops{
50
51         rkpm_ops_void_callback volts;
52         rkpm_ops_void_callback re_volts;
53
54         rkpm_ops_void_callback gtclks;
55         rkpm_ops_void_callback re_gtclks;
56
57         rkpm_ops_paramter_u32_cb sysclk;
58         rkpm_ops_paramter_u32_cb re_sysclk;
59
60         rkpm_ops_void_callback pmic;
61         rkpm_ops_void_callback re_pmic;
62         
63         rkpm_ops_void_callback ddr;
64         rkpm_ops_void_callback re_ddr;
65     
66         rkpm_ops_printch_callback printch;
67 };
68
69 #if 0
70 struct rkpm_gpios_info_st{
71     u32 pins;
72     u32 in_out;
73     u32 level_pull;
74 };
75 #endif
76
77 /******************ctr bits setting  ************************/
78 #define rkpm_chk_val_ctrbit(val,bit) ((val)&(bit))//check bit
79 #define rkpm_chk_val_ctrbits(val,bits) ((val)&(bits))  //check bits
80
81 /************************************reg ops*****************************************************/
82 #define cru_readl(offset)       readl_relaxed(RK_CRU_VIRT + offset)
83 #define cru_writel(v, offset)   do { writel_relaxed(v, RK_CRU_VIRT + offset); dsb(); } while (0)
84
85 #define pmu_readl(offset)       readl_relaxed(RK_PMU_VIRT + offset)
86 #define pmu_writel(v,offset)    do { writel_relaxed(v, RK_PMU_VIRT + offset); dsb(); } while (0)
87
88 #define grf_readl(offset)       readl_relaxed(RK_GRF_VIRT + offset)
89 #define grf_writel(v, offset)   do { writel_relaxed(v, RK_GRF_VIRT + offset); dsb(); } while (0)
90
91 #define reg_readl(base) readl_relaxed(base)
92 #define reg_writel(v, base)     do { writel_relaxed(v, base); dsb(); } while (0)
93
94 #if 0
95 #define PM_ERR(fmt, args...) printk(KERN_ERR fmt, ##args)
96 #define PM_LOG(fmt, args...) printk(KERN_ERR fmt, ##args)
97 #define PM_WARNING(fmt, args...) printk(KERN_WARNING fmt, ##args)
98 #else
99
100 #define PM_ERR(fmt, args...) printk(fmt, ##args)
101 #define PM_LOG(fmt, args...) printk(fmt, ##args)
102 #define PM_WARNING(fmt, args...) printk(fmt, ##args)
103 #endif
104
105 /*********************************pm control******************************************/
106 extern void rkpm_ddr_reg_offset_dump(void __iomem * base_addr,u32 _offset);
107 extern void  rkpm_ddr_regs_dump(void __iomem * base_addr,u32 start_offset,u32 end_offset);
108
109 extern void rkpm_set_pie_info(struct rkpm_sram_ops *pm_sram_ops,rkpm_sram_suspend_arg_cb pie_cb);
110 extern void rkpm_set_ops_prepare_finish(rkpm_ops_void_callback prepare,rkpm_ops_void_callback finish);
111 extern void rkpm_set_ops_pwr_dmns(rkpm_ops_void_callback pwr_dmns,rkpm_ops_void_callback re_pwr_dmns);
112 extern void rkpm_set_ops_gtclks(rkpm_ops_void_callback gtclks,rkpm_ops_void_callback re_gtclks);
113 extern void rkpm_set_ops_plls(rkpm_ops_void_callback plls,rkpm_ops_void_callback re_plls);
114 extern void rkpm_set_ops_gpios(rkpm_ops_void_callback gpios,rkpm_ops_void_callback re_gpios);
115 extern void rkpm_set_ops_printch(rkpm_ops_printch_callback printch);
116 extern void rkpm_set_ops_regs_pread(rkpm_ops_void_callback regs_pread);
117
118 extern void rkpm_set_sram_ops_volt(rkpm_ops_void_callback volts,rkpm_ops_void_callback re_volts);
119 extern void rkpm_set_sram_ops_gtclks(rkpm_ops_void_callback gtclks,rkpm_ops_void_callback re_gtclks);
120 extern void rkpm_set_sram_ops_sysclk(rkpm_ops_paramter_u32_cb sysclk,rkpm_ops_paramter_u32_cb re_sysclk);
121 extern void rkpm_set_sram_ops_pmic(rkpm_ops_void_callback pmic,rkpm_ops_void_callback re_pmic);
122 extern void rkpm_set_sram_ops_ddr(rkpm_ops_void_callback ddr,rkpm_ops_void_callback re_ddr);
123 extern void rkpm_set_sram_ops_printch(rkpm_ops_printch_callback printch);
124
125 extern void inline rkpm_set_ctrbits(u32 bits);
126 extern u32  inline rkpm_get_ctrbits(void);
127 extern void inline  rkpm_set_ctrbit(int idxs);
128 extern u32 inline  rkpm_get_ctrbit(int idxs);
129 extern void inline rkpm_clr_ctrbit(int idxs);//clear
130
131 extern void rkpm_ddr_printch(char byte);
132 extern void rkpm_ddr_printascii(const char *s);
133 extern void  rkpm_ddr_printhex(unsigned int hex);
134
135 extern u32 clk_suspend_clkgt_info_get(u32 *clk_ungt_msk,u32 *clk_gt_last_set,u32 buf_cnt);
136
137
138 /********************************sram print**********************************/
139 #include "sram.h"
140
141 #if 1//def CPU
142 extern void PIE_FUNC(rkpm_sram_printch_pie)(char byte);
143 extern void  PIE_FUNC(rkpm_sram_printhex_pie)(unsigned int hex);
144
145 #define rkpm_sram_printch(byte)  FUNC(rkpm_sram_printch_pie)(byte)
146 //void __sramfunc rkpm_sram_printascii(const char *s);
147 #define rkpm_sram_printhex(hex) FUNC(rkpm_sram_printhex_pie)(hex)
148 #endif
149
150 #endif
151