diff options
author | Michael Hennerich <michael.hennerich@analog.com> | 2008-08-06 05:55:32 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-08-06 05:55:32 -0400 |
commit | 56f5f59052bb662a77d5ffd6cbe5861a2ef2407c (patch) | |
tree | 4c645e253579fa7d3e912144bd317a0236f27a5a | |
parent | 15b07536892284449ac5cd9488a8da1054b4295b (diff) |
Blackfin arch: Fix Bug - System with EMAC driver enabled - Core not idling
- Disable all bits in SIC_IWR unless we are going into a real (DPMC)
power saving mode. Any Interrupt can wake the core form it's idle state.
- Remove deep sleep mode as it is not going to be used anywhere:
We support sleep, sleep deeper and hibernate.
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
-rw-r--r-- | arch/blackfin/mach-bf527/head.S | 7 | ||||
-rw-r--r-- | arch/blackfin/mach-bf533/head.S | 7 | ||||
-rw-r--r-- | arch/blackfin/mach-bf537/head.S | 7 | ||||
-rw-r--r-- | arch/blackfin/mach-bf548/head.S | 7 | ||||
-rw-r--r-- | arch/blackfin/mach-common/dpmc_modes.S | 56 | ||||
-rw-r--r-- | arch/blackfin/mach-common/ints-priority.c | 8 | ||||
-rw-r--r-- | arch/blackfin/mach-common/pm.c | 8 | ||||
-rw-r--r-- | include/asm-blackfin/dpmc.h | 1 |
8 files changed, 8 insertions, 93 deletions
diff --git a/arch/blackfin/mach-bf527/head.S b/arch/blackfin/mach-bf527/head.S index af20183d0d94..2cc46f8fa9a7 100644 --- a/arch/blackfin/mach-bf527/head.S +++ b/arch/blackfin/mach-bf527/head.S | |||
@@ -183,13 +183,6 @@ ENTRY(_start_dma_code) | |||
183 | [P2] = R1; | 183 | [P2] = R1; |
184 | SSYNC; | 184 | SSYNC; |
185 | 185 | ||
186 | p0.h = hi(SIC_IWR0); | ||
187 | p0.l = lo(SIC_IWR0); | ||
188 | r0.l = lo(IWR_ENABLE_ALL); | ||
189 | r0.h = hi(IWR_ENABLE_ALL); | ||
190 | [p0] = r0; | ||
191 | SSYNC; | ||
192 | |||
193 | RTS; | 186 | RTS; |
194 | ENDPROC(_start_dma_code) | 187 | ENDPROC(_start_dma_code) |
195 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ | 188 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ |
diff --git a/arch/blackfin/mach-bf533/head.S b/arch/blackfin/mach-bf533/head.S index 6603967367ec..184296bee3c9 100644 --- a/arch/blackfin/mach-bf533/head.S +++ b/arch/blackfin/mach-bf533/head.S | |||
@@ -177,13 +177,6 @@ ENTRY(_start_dma_code) | |||
177 | [P2] = R1; | 177 | [P2] = R1; |
178 | SSYNC; | 178 | SSYNC; |
179 | 179 | ||
180 | p0.h = hi(SIC_IWR); | ||
181 | p0.l = lo(SIC_IWR); | ||
182 | r0.l = lo(IWR_ENABLE_ALL); | ||
183 | r0.h = hi(IWR_ENABLE_ALL); | ||
184 | [p0] = r0; | ||
185 | SSYNC; | ||
186 | |||
187 | RTS; | 180 | RTS; |
188 | ENDPROC(_start_dma_code) | 181 | ENDPROC(_start_dma_code) |
189 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ | 182 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ |
diff --git a/arch/blackfin/mach-bf537/head.S b/arch/blackfin/mach-bf537/head.S index 6a02e472587a..c02c8ce2d96f 100644 --- a/arch/blackfin/mach-bf537/head.S +++ b/arch/blackfin/mach-bf537/head.S | |||
@@ -197,13 +197,6 @@ ENTRY(_start_dma_code) | |||
197 | [P2] = R1; | 197 | [P2] = R1; |
198 | SSYNC; | 198 | SSYNC; |
199 | 199 | ||
200 | p0.h = hi(SIC_IWR); | ||
201 | p0.l = lo(SIC_IWR); | ||
202 | r0.l = lo(IWR_ENABLE_ALL); | ||
203 | r0.h = hi(IWR_ENABLE_ALL); | ||
204 | [p0] = r0; | ||
205 | SSYNC; | ||
206 | |||
207 | RTS; | 200 | RTS; |
208 | ENDPROC(_start_dma_code) | 201 | ENDPROC(_start_dma_code) |
209 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ | 202 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ |
diff --git a/arch/blackfin/mach-bf548/head.S b/arch/blackfin/mach-bf548/head.S index cf94e1e222b8..0b18196df869 100644 --- a/arch/blackfin/mach-bf548/head.S +++ b/arch/blackfin/mach-bf548/head.S | |||
@@ -201,13 +201,6 @@ ENTRY(_start_dma_code) | |||
201 | SSYNC; | 201 | SSYNC; |
202 | #endif | 202 | #endif |
203 | 203 | ||
204 | p0.h = hi(SIC_IWR0); | ||
205 | p0.l = lo(SIC_IWR0); | ||
206 | r0.l = lo(IWR_ENABLE_ALL); | ||
207 | r0.h = hi(IWR_ENABLE_ALL); | ||
208 | [p0] = r0; | ||
209 | SSYNC; | ||
210 | |||
211 | RTS; | 204 | RTS; |
212 | ENDPROC(_start_dma_code) | 205 | ENDPROC(_start_dma_code) |
213 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ | 206 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ |
diff --git a/arch/blackfin/mach-common/dpmc_modes.S b/arch/blackfin/mach-common/dpmc_modes.S index 5e3f1d8a4fb8..838b0b2ce9a5 100644 --- a/arch/blackfin/mach-common/dpmc_modes.S +++ b/arch/blackfin/mach-common/dpmc_modes.S | |||
@@ -78,62 +78,6 @@ ENTRY(_hibernate_mode) | |||
78 | jump .Lforever; | 78 | jump .Lforever; |
79 | ENDPROC(_hibernate_mode) | 79 | ENDPROC(_hibernate_mode) |
80 | 80 | ||
81 | ENTRY(_deep_sleep) | ||
82 | [--SP] = ( R7:0, P5:0 ); | ||
83 | [--SP] = RETS; | ||
84 | |||
85 | CLI R4; | ||
86 | |||
87 | R0 = IWR_ENABLE(0); | ||
88 | R1 = IWR_DISABLE_ALL; | ||
89 | R2 = IWR_DISABLE_ALL; | ||
90 | |||
91 | call _set_sic_iwr; | ||
92 | |||
93 | call _set_dram_srfs; | ||
94 | |||
95 | /* Clear all the interrupts,bits sticky */ | ||
96 | R0 = 0xFFFF (Z); | ||
97 | call _set_rtc_istat | ||
98 | |||
99 | P0.H = hi(PLL_CTL); | ||
100 | P0.L = lo(PLL_CTL); | ||
101 | R0 = W[P0](z); | ||
102 | BITSET (R0, 5); | ||
103 | W[P0] = R0.L; | ||
104 | |||
105 | call _test_pll_locked; | ||
106 | |||
107 | SSYNC; | ||
108 | IDLE; | ||
109 | |||
110 | call _unset_dram_srfs; | ||
111 | |||
112 | call _test_pll_locked; | ||
113 | |||
114 | R0 = IWR_ENABLE(0); | ||
115 | R1 = IWR_DISABLE_ALL; | ||
116 | R2 = IWR_DISABLE_ALL; | ||
117 | |||
118 | call _set_sic_iwr; | ||
119 | |||
120 | P0.H = hi(PLL_CTL); | ||
121 | P0.L = lo(PLL_CTL); | ||
122 | R0 = w[p0](z); | ||
123 | BITCLR (R0, 3); | ||
124 | BITCLR (R0, 5); | ||
125 | BITCLR (R0, 8); | ||
126 | w[p0] = R0; | ||
127 | IDLE; | ||
128 | call _test_pll_locked; | ||
129 | |||
130 | STI R4; | ||
131 | |||
132 | RETS = [SP++]; | ||
133 | ( R7:0, P5:0 ) = [SP++]; | ||
134 | RTS; | ||
135 | ENDPROC(_deep_sleep) | ||
136 | |||
137 | ENTRY(_sleep_deeper) | 81 | ENTRY(_sleep_deeper) |
138 | [--SP] = ( R7:0, P5:0 ); | 82 | [--SP] = ( R7:0, P5:0 ); |
139 | [--SP] = RETS; | 83 | [--SP] = RETS; |
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index e713b9db867d..4271ef3f201a 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c | |||
@@ -1068,13 +1068,13 @@ int __init init_arch_irq(void) | |||
1068 | IMASK_IVG10 | IMASK_IVG9 | IMASK_IVG8 | IMASK_IVG7 | IMASK_IVGHW; | 1068 | IMASK_IVG10 | IMASK_IVG9 | IMASK_IVG8 | IMASK_IVG7 | IMASK_IVGHW; |
1069 | 1069 | ||
1070 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561) | 1070 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561) |
1071 | bfin_write_SIC_IWR0(IWR_ENABLE_ALL); | 1071 | bfin_write_SIC_IWR0(IWR_DISABLE_ALL); |
1072 | bfin_write_SIC_IWR1(IWR_ENABLE_ALL); | 1072 | bfin_write_SIC_IWR1(IWR_DISABLE_ALL); |
1073 | # ifdef CONFIG_BF54x | 1073 | # ifdef CONFIG_BF54x |
1074 | bfin_write_SIC_IWR2(IWR_ENABLE_ALL); | 1074 | bfin_write_SIC_IWR2(IWR_DISABLE_ALL); |
1075 | # endif | 1075 | # endif |
1076 | #else | 1076 | #else |
1077 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); | 1077 | bfin_write_SIC_IWR(IWR_DISABLE_ALL); |
1078 | #endif | 1078 | #endif |
1079 | 1079 | ||
1080 | return 0; | 1080 | return 0; |
diff --git a/arch/blackfin/mach-common/pm.c b/arch/blackfin/mach-common/pm.c index 143134b852ea..a17ace3e0e41 100644 --- a/arch/blackfin/mach-common/pm.c +++ b/arch/blackfin/mach-common/pm.c | |||
@@ -83,13 +83,13 @@ void bfin_pm_suspend_standby_enter(void) | |||
83 | bfin_pm_standby_restore(); | 83 | bfin_pm_standby_restore(); |
84 | 84 | ||
85 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561) | 85 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561) |
86 | bfin_write_SIC_IWR0(IWR_ENABLE_ALL); | 86 | bfin_write_SIC_IWR0(IWR_DISABLE_ALL); |
87 | bfin_write_SIC_IWR1(IWR_ENABLE_ALL); | 87 | bfin_write_SIC_IWR1(IWR_DISABLE_ALL); |
88 | # ifdef CONFIG_BF54x | 88 | # ifdef CONFIG_BF54x |
89 | bfin_write_SIC_IWR2(IWR_ENABLE_ALL); | 89 | bfin_write_SIC_IWR2(IWR_DISABLE_ALL); |
90 | # endif | 90 | # endif |
91 | #else | 91 | #else |
92 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); | 92 | bfin_write_SIC_IWR(IWR_DISABLE_ALL); |
93 | #endif | 93 | #endif |
94 | 94 | ||
95 | local_irq_restore(flags); | 95 | local_irq_restore(flags); |
diff --git a/include/asm-blackfin/dpmc.h b/include/asm-blackfin/dpmc.h index de28e6e018b3..96e8208f929a 100644 --- a/include/asm-blackfin/dpmc.h +++ b/include/asm-blackfin/dpmc.h | |||
@@ -11,7 +11,6 @@ | |||
11 | #ifndef __ASSEMBLY__ | 11 | #ifndef __ASSEMBLY__ |
12 | 12 | ||
13 | void sleep_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); | 13 | void sleep_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); |
14 | void deep_sleep(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); | ||
15 | void hibernate_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); | 14 | void hibernate_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); |
16 | void sleep_deeper(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); | 15 | void sleep_deeper(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2); |
17 | void do_hibernate(int wakeup); | 16 | void do_hibernate(int wakeup); |