diff options
Diffstat (limited to 'arch/mips/include/asm/mipsregs.h')
-rw-r--r-- | arch/mips/include/asm/mipsregs.h | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 48fa1f1f7f..f80311e64e 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
@@ -1013,9 +1013,7 @@ do { \ | |||
1013 | #define __read_64bit_c0_split(source, sel) \ | 1013 | #define __read_64bit_c0_split(source, sel) \ |
1014 | ({ \ | 1014 | ({ \ |
1015 | unsigned long long __val; \ | 1015 | unsigned long long __val; \ |
1016 | unsigned long __flags; \ | ||
1017 | \ | 1016 | \ |
1018 | local_irq_save(__flags); \ | ||
1019 | if (sel == 0) \ | 1017 | if (sel == 0) \ |
1020 | __asm__ __volatile__( \ | 1018 | __asm__ __volatile__( \ |
1021 | ".set\tmips64\n\t" \ | 1019 | ".set\tmips64\n\t" \ |
@@ -1034,16 +1032,12 @@ do { \ | |||
1034 | "dsra\t%L0, %L0, 32\n\t" \ | 1032 | "dsra\t%L0, %L0, 32\n\t" \ |
1035 | ".set\tmips0" \ | 1033 | ".set\tmips0" \ |
1036 | : "=r" (__val)); \ | 1034 | : "=r" (__val)); \ |
1037 | local_irq_restore(__flags); \ | ||
1038 | \ | 1035 | \ |
1039 | __val; \ | 1036 | __val; \ |
1040 | }) | 1037 | }) |
1041 | 1038 | ||
1042 | #define __write_64bit_c0_split(source, sel, val) \ | 1039 | #define __write_64bit_c0_split(source, sel, val) \ |
1043 | do { \ | 1040 | do { \ |
1044 | unsigned long __flags; \ | ||
1045 | \ | ||
1046 | local_irq_save(__flags); \ | ||
1047 | if (sel == 0) \ | 1041 | if (sel == 0) \ |
1048 | __asm__ __volatile__( \ | 1042 | __asm__ __volatile__( \ |
1049 | ".set\tmips64\n\t" \ | 1043 | ".set\tmips64\n\t" \ |
@@ -1064,7 +1058,6 @@ do { \ | |||
1064 | "dmtc0\t%L0, " #source ", " #sel "\n\t" \ | 1058 | "dmtc0\t%L0, " #source ", " #sel "\n\t" \ |
1065 | ".set\tmips0" \ | 1059 | ".set\tmips0" \ |
1066 | : : "r" (val)); \ | 1060 | : : "r" (val)); \ |
1067 | local_irq_restore(__flags); \ | ||
1068 | } while (0) | 1061 | } while (0) |
1069 | 1062 | ||
1070 | #define __readx_32bit_c0_register(source) \ | 1063 | #define __readx_32bit_c0_register(source) \ |
@@ -2005,6 +1998,17 @@ static inline unsigned int get_ebase_cpunum(void) | |||
2005 | return read_c0_ebase() & 0x3ff; | 1998 | return read_c0_ebase() & 0x3ff; |
2006 | } | 1999 | } |
2007 | 2000 | ||
2001 | static inline void write_one_tlb(int index, u32 pagemask, u32 hi, u32 low0, | ||
2002 | u32 low1) | ||
2003 | { | ||
2004 | write_c0_entrylo0(low0); | ||
2005 | write_c0_pagemask(pagemask); | ||
2006 | write_c0_entrylo1(low1); | ||
2007 | write_c0_entryhi(hi); | ||
2008 | write_c0_index(index); | ||
2009 | tlb_write_indexed(); | ||
2010 | } | ||
2011 | |||
2008 | #endif /* !__ASSEMBLY__ */ | 2012 | #endif /* !__ASSEMBLY__ */ |
2009 | 2013 | ||
2010 | #endif /* _ASM_MIPSREGS_H */ | 2014 | #endif /* _ASM_MIPSREGS_H */ |