| From 461d1597ffad7a826f8aaa63ab0727c37b632e34 Mon Sep 17 00:00:00 2001 |
| From: Markos Chandras <markos.chandras@imgtec.com> |
| Date: Mon, 26 Jan 2015 09:40:34 +0000 |
| Subject: MIPS: asm: pgtable: Add c0 hazards on HTW start/stop sequences |
| |
| From: Markos Chandras <markos.chandras@imgtec.com> |
| |
| commit 461d1597ffad7a826f8aaa63ab0727c37b632e34 upstream. |
| |
| When we use htw_{start,stop}() outside of htw_reset(), we need |
| to ensure that c0 changes have been propagated properly before |
| we attempt to continue with subsequence memory operations. |
| |
| Signed-off-by: Markos Chandras <markos.chandras@imgtec.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/9114/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/mips/include/asm/pgtable.h | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/arch/mips/include/asm/pgtable.h |
| +++ b/arch/mips/include/asm/pgtable.h |
| @@ -99,16 +99,20 @@ extern void paging_init(void); |
| |
| #define htw_stop() \ |
| do { \ |
| - if (cpu_has_htw) \ |
| + if (cpu_has_htw) { \ |
| write_c0_pwctl(read_c0_pwctl() & \ |
| ~(1 << MIPS_PWCTL_PWEN_SHIFT)); \ |
| + back_to_back_c0_hazard(); \ |
| + } \ |
| } while(0) |
| |
| #define htw_start() \ |
| do { \ |
| - if (cpu_has_htw) \ |
| + if (cpu_has_htw) { \ |
| write_c0_pwctl(read_c0_pwctl() | \ |
| (1 << MIPS_PWCTL_PWEN_SHIFT)); \ |
| + back_to_back_c0_hazard(); \ |
| + } \ |
| } while(0) |
| |
| |
| @@ -116,9 +120,7 @@ do { \ |
| do { \ |
| if (cpu_has_htw) { \ |
| htw_stop(); \ |
| - back_to_back_c0_hazard(); \ |
| htw_start(); \ |
| - back_to_back_c0_hazard(); \ |
| } \ |
| } while(0) |
| |