diff options
author | Mike Frysinger <vapier.adi@gmail.com> | 2008-11-18 04:48:22 -0500 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-11-18 04:48:22 -0500 |
commit | 53442e1cbdc1559cd39e0076adae6df64af36a3e (patch) | |
tree | 6513ffea1fcfdf488d5ec5e96f78fb2c2bc4b9f2 /arch/blackfin/mach-bf527 | |
parent | b94919e2da2f7acde842972a57fcd6dcc4a528db (diff) |
Blackfin arch: delay PLL_CTL/VR_CTL wrappers
Delay PLL_CTL/VR_CTL wrappers as much as possible to avoid
the inter-dependency problems with cdef and common headers
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Diffstat (limited to 'arch/blackfin/mach-bf527')
-rw-r--r-- | arch/blackfin/mach-bf527/include/mach/cdefBF52x_base.h | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/arch/blackfin/mach-bf527/include/mach/cdefBF52x_base.h b/arch/blackfin/mach-bf527/include/mach/cdefBF52x_base.h index 9a814b9a12b9..008603f332a6 100644 --- a/arch/blackfin/mach-bf527/include/mach/cdefBF52x_base.h +++ b/arch/blackfin/mach-bf527/include/mach/cdefBF52x_base.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #ifndef _CDEF_BF52X_H | 31 | #ifndef _CDEF_BF52X_H |
32 | #define _CDEF_BF52X_H | 32 | #define _CDEF_BF52X_H |
33 | 33 | ||
34 | #include <asm/system.h> | ||
35 | #include <asm/blackfin.h> | 34 | #include <asm/blackfin.h> |
36 | 35 | ||
37 | #include "defBF52x_base.h" | 36 | #include "defBF52x_base.h" |
@@ -43,57 +42,9 @@ | |||
43 | 42 | ||
44 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ | 43 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ |
45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 44 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
46 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ | ||
47 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
48 | { | ||
49 | unsigned long flags, iwr0, iwr1; | ||
50 | |||
51 | if (val == bfin_read_PLL_CTL()) | ||
52 | return; | ||
53 | |||
54 | local_irq_save(flags); | ||
55 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
56 | iwr0 = bfin_read32(SIC_IWR0); | ||
57 | iwr1 = bfin_read32(SIC_IWR1); | ||
58 | /* Only allow PPL Wakeup) */ | ||
59 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
60 | bfin_write32(SIC_IWR1, 0); | ||
61 | |||
62 | bfin_write16(PLL_CTL, val); | ||
63 | SSYNC(); | ||
64 | asm("IDLE;"); | ||
65 | |||
66 | bfin_write32(SIC_IWR0, iwr0); | ||
67 | bfin_write32(SIC_IWR1, iwr1); | ||
68 | local_irq_restore(flags); | ||
69 | } | ||
70 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 45 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
71 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) | 46 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) |
72 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 47 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
73 | /* Writing to VR_CTL initiates a PLL relock sequence. */ | ||
74 | static __inline__ void bfin_write_VR_CTL(unsigned int val) | ||
75 | { | ||
76 | unsigned long flags, iwr0, iwr1; | ||
77 | |||
78 | if (val == bfin_read_VR_CTL()) | ||
79 | return; | ||
80 | |||
81 | local_irq_save(flags); | ||
82 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
83 | iwr0 = bfin_read32(SIC_IWR0); | ||
84 | iwr1 = bfin_read32(SIC_IWR1); | ||
85 | /* Only allow PPL Wakeup) */ | ||
86 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
87 | bfin_write32(SIC_IWR1, 0); | ||
88 | |||
89 | bfin_write16(VR_CTL, val); | ||
90 | SSYNC(); | ||
91 | asm("IDLE;"); | ||
92 | |||
93 | bfin_write32(SIC_IWR0, iwr0); | ||
94 | bfin_write32(SIC_IWR1, iwr1); | ||
95 | local_irq_restore(flags); | ||
96 | } | ||
97 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 48 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
98 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) | 49 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) |
99 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) | 50 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) |
@@ -1201,4 +1152,57 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1201 | #define bfin_read_NFC_DATA_RD() bfin_read16(NFC_DATA_RD) | 1152 | #define bfin_read_NFC_DATA_RD() bfin_read16(NFC_DATA_RD) |
1202 | #define bfin_write_NFC_DATA_RD(val) bfin_write16(NFC_DATA_RD, val) | 1153 | #define bfin_write_NFC_DATA_RD(val) bfin_write16(NFC_DATA_RD, val) |
1203 | 1154 | ||
1155 | /* These need to be last due to the cdef/linux inter-dependencies */ | ||
1156 | #include <asm/system.h> | ||
1157 | |||
1158 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ | ||
1159 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
1160 | { | ||
1161 | unsigned long flags, iwr0, iwr1; | ||
1162 | |||
1163 | if (val == bfin_read_PLL_CTL()) | ||
1164 | return; | ||
1165 | |||
1166 | local_irq_save(flags); | ||
1167 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
1168 | iwr0 = bfin_read32(SIC_IWR0); | ||
1169 | iwr1 = bfin_read32(SIC_IWR1); | ||
1170 | /* Only allow PPL Wakeup) */ | ||
1171 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
1172 | bfin_write32(SIC_IWR1, 0); | ||
1173 | |||
1174 | bfin_write16(PLL_CTL, val); | ||
1175 | SSYNC(); | ||
1176 | asm("IDLE;"); | ||
1177 | |||
1178 | bfin_write32(SIC_IWR0, iwr0); | ||
1179 | bfin_write32(SIC_IWR1, iwr1); | ||
1180 | local_irq_restore(flags); | ||
1181 | } | ||
1182 | |||
1183 | /* Writing to VR_CTL initiates a PLL relock sequence. */ | ||
1184 | static __inline__ void bfin_write_VR_CTL(unsigned int val) | ||
1185 | { | ||
1186 | unsigned long flags, iwr0, iwr1; | ||
1187 | |||
1188 | if (val == bfin_read_VR_CTL()) | ||
1189 | return; | ||
1190 | |||
1191 | local_irq_save(flags); | ||
1192 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
1193 | iwr0 = bfin_read32(SIC_IWR0); | ||
1194 | iwr1 = bfin_read32(SIC_IWR1); | ||
1195 | /* Only allow PPL Wakeup) */ | ||
1196 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
1197 | bfin_write32(SIC_IWR1, 0); | ||
1198 | |||
1199 | bfin_write16(VR_CTL, val); | ||
1200 | SSYNC(); | ||
1201 | asm("IDLE;"); | ||
1202 | |||
1203 | bfin_write32(SIC_IWR0, iwr0); | ||
1204 | bfin_write32(SIC_IWR1, iwr1); | ||
1205 | local_irq_restore(flags); | ||
1206 | } | ||
1207 | |||
1204 | #endif /* _CDEF_BF52X_H */ | 1208 | #endif /* _CDEF_BF52X_H */ |