diff options
| author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2009-09-15 17:43:54 -0400 |
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2009-11-11 22:43:15 -0500 |
| commit | 46d2293470c18c1bb632083bf0b589deff30ccae (patch) | |
| tree | f0f0382c718138e4d2852ff0b753d96b380d4be6 /arch | |
| parent | 0c7b87b0857f0e17be982fd840046444a83c3996 (diff) | |
powerpc/qe: QE also shuts down on MPC8568
It appears that QE shuts down on all MPC85xx CPUs (i.e. MPC8568 and
MPC8569) and thus needs reset upon resume.
So modify qe_alive_during_sleep() to account that.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/powerpc/include/asm/qe.h | 23 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/qe_lib/qe.c | 13 |
2 files changed, 22 insertions, 14 deletions
diff --git a/arch/powerpc/include/asm/qe.h b/arch/powerpc/include/asm/qe.h index 908f0b75745b..5e0e8b2b0aa1 100644 --- a/arch/powerpc/include/asm/qe.h +++ b/arch/powerpc/include/asm/qe.h | |||
| @@ -154,7 +154,28 @@ int qe_get_snum(void); | |||
| 154 | void qe_put_snum(u8 snum); | 154 | void qe_put_snum(u8 snum); |
| 155 | unsigned int qe_get_num_of_risc(void); | 155 | unsigned int qe_get_num_of_risc(void); |
| 156 | unsigned int qe_get_num_of_snums(void); | 156 | unsigned int qe_get_num_of_snums(void); |
| 157 | int qe_alive_during_sleep(void); | 157 | |
| 158 | static inline int qe_alive_during_sleep(void) | ||
| 159 | { | ||
| 160 | /* | ||
| 161 | * MPC8568E reference manual says: | ||
| 162 | * | ||
| 163 | * "...power down sequence waits for all I/O interfaces to become idle. | ||
| 164 | * In some applications this may happen eventually without actively | ||
| 165 | * shutting down interfaces, but most likely, software will have to | ||
| 166 | * take steps to shut down the eTSEC, QUICC Engine Block, and PCI | ||
| 167 | * interfaces before issuing the command (either the write to the core | ||
| 168 | * MSR[WE] as described above or writing to POWMGTCSR) to put the | ||
| 169 | * device into sleep state." | ||
| 170 | * | ||
| 171 | * MPC8569E reference manual has a similar paragraph. | ||
| 172 | */ | ||
| 173 | #ifdef CONFIG_PPC_85xx | ||
| 174 | return 0; | ||
| 175 | #else | ||
| 176 | return 1; | ||
| 177 | #endif | ||
| 178 | } | ||
| 158 | 179 | ||
| 159 | /* we actually use cpm_muram implementation, define this for convenience */ | 180 | /* we actually use cpm_muram implementation, define this for convenience */ |
| 160 | #define qe_muram_init cpm_muram_init | 181 | #define qe_muram_init cpm_muram_init |
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c index 1ed1a9fd9bcf..4eaf2a962914 100644 --- a/arch/powerpc/sysdev/qe_lib/qe.c +++ b/arch/powerpc/sysdev/qe_lib/qe.c | |||
| @@ -65,19 +65,6 @@ static unsigned int qe_num_of_snum; | |||
| 65 | 65 | ||
| 66 | static phys_addr_t qebase = -1; | 66 | static phys_addr_t qebase = -1; |
| 67 | 67 | ||
| 68 | int qe_alive_during_sleep(void) | ||
| 69 | { | ||
| 70 | static int ret = -1; | ||
| 71 | |||
| 72 | if (ret != -1) | ||
| 73 | return ret; | ||
| 74 | |||
| 75 | ret = !of_find_compatible_node(NULL, NULL, "fsl,mpc8569-pmc"); | ||
| 76 | |||
| 77 | return ret; | ||
| 78 | } | ||
| 79 | EXPORT_SYMBOL(qe_alive_during_sleep); | ||
| 80 | |||
| 81 | phys_addr_t get_qe_base(void) | 68 | phys_addr_t get_qe_base(void) |
| 82 | { | 69 | { |
| 83 | struct device_node *qe; | 70 | struct device_node *qe; |
