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-bf537 | |
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-bf537')
-rw-r--r-- | arch/blackfin/mach-bf537/include/mach/cdefBF534.h | 91 |
1 files changed, 47 insertions, 44 deletions
diff --git a/arch/blackfin/mach-bf537/include/mach/cdefBF534.h b/arch/blackfin/mach-bf537/include/mach/cdefBF534.h index 88d491cd9f36..76135607e35b 100644 --- a/arch/blackfin/mach-bf537/include/mach/cdefBF534.h +++ b/arch/blackfin/mach-bf537/include/mach/cdefBF534.h | |||
@@ -40,55 +40,11 @@ | |||
40 | /* Include core specific register pointer definitions */ | 40 | /* Include core specific register pointer definitions */ |
41 | #include <asm/cdef_LPBlackfin.h> | 41 | #include <asm/cdef_LPBlackfin.h> |
42 | 42 | ||
43 | #include <asm/system.h> | ||
44 | |||
45 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ | 43 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ |
46 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 44 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
47 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ | ||
48 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
49 | { | ||
50 | unsigned long flags, iwr; | ||
51 | |||
52 | if (val == bfin_read_PLL_CTL()) | ||
53 | return; | ||
54 | |||
55 | local_irq_save(flags); | ||
56 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
57 | iwr = bfin_read32(SIC_IWR); | ||
58 | /* Only allow PPL Wakeup) */ | ||
59 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
60 | |||
61 | bfin_write16(PLL_CTL, val); | ||
62 | SSYNC(); | ||
63 | asm("IDLE;"); | ||
64 | |||
65 | bfin_write32(SIC_IWR, iwr); | ||
66 | local_irq_restore(flags); | ||
67 | } | ||
68 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 45 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
69 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) | 46 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) |
70 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 47 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
71 | /* Writing to VR_CTL initiates a PLL relock sequence. */ | ||
72 | static __inline__ void bfin_write_VR_CTL(unsigned int val) | ||
73 | { | ||
74 | unsigned long flags, iwr; | ||
75 | |||
76 | if (val == bfin_read_VR_CTL()) | ||
77 | return; | ||
78 | |||
79 | local_irq_save(flags); | ||
80 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
81 | iwr = bfin_read32(SIC_IWR); | ||
82 | /* Only allow PPL Wakeup) */ | ||
83 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
84 | |||
85 | bfin_write16(VR_CTL, val); | ||
86 | SSYNC(); | ||
87 | asm("IDLE;"); | ||
88 | |||
89 | bfin_write32(SIC_IWR, iwr); | ||
90 | local_irq_restore(flags); | ||
91 | } | ||
92 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 48 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
93 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) | 49 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) |
94 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) | 50 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) |
@@ -1816,4 +1772,51 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1816 | #define bfin_read_HMDMA1_BCOUNT() bfin_read16(HMDMA1_BCOUNT) | 1772 | #define bfin_read_HMDMA1_BCOUNT() bfin_read16(HMDMA1_BCOUNT) |
1817 | #define bfin_write_HMDMA1_BCOUNT(val) bfin_write16(HMDMA1_BCOUNT,val) | 1773 | #define bfin_write_HMDMA1_BCOUNT(val) bfin_write16(HMDMA1_BCOUNT,val) |
1818 | 1774 | ||
1775 | /* These need to be last due to the cdef/linux inter-dependencies */ | ||
1776 | #include <asm/system.h> | ||
1777 | |||
1778 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ | ||
1779 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
1780 | { | ||
1781 | unsigned long flags, iwr; | ||
1782 | |||
1783 | if (val == bfin_read_PLL_CTL()) | ||
1784 | return; | ||
1785 | |||
1786 | local_irq_save(flags); | ||
1787 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
1788 | iwr = bfin_read32(SIC_IWR); | ||
1789 | /* Only allow PPL Wakeup) */ | ||
1790 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
1791 | |||
1792 | bfin_write16(PLL_CTL, val); | ||
1793 | SSYNC(); | ||
1794 | asm("IDLE;"); | ||
1795 | |||
1796 | bfin_write32(SIC_IWR, iwr); | ||
1797 | local_irq_restore(flags); | ||
1798 | } | ||
1799 | |||
1800 | /* Writing to VR_CTL initiates a PLL relock sequence. */ | ||
1801 | static __inline__ void bfin_write_VR_CTL(unsigned int val) | ||
1802 | { | ||
1803 | unsigned long flags, iwr; | ||
1804 | |||
1805 | if (val == bfin_read_VR_CTL()) | ||
1806 | return; | ||
1807 | |||
1808 | local_irq_save(flags); | ||
1809 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
1810 | iwr = bfin_read32(SIC_IWR); | ||
1811 | /* Only allow PPL Wakeup) */ | ||
1812 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
1813 | |||
1814 | bfin_write16(VR_CTL, val); | ||
1815 | SSYNC(); | ||
1816 | asm("IDLE;"); | ||
1817 | |||
1818 | bfin_write32(SIC_IWR, iwr); | ||
1819 | local_irq_restore(flags); | ||
1820 | } | ||
1821 | |||
1819 | #endif /* _CDEF_BF534_H */ | 1822 | #endif /* _CDEF_BF534_H */ |