0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _SPARC_TURBOSPARC_H
0009 #define _SPARC_TURBOSPARC_H
0010
0011 #include <asm/asi.h>
0012 #include <asm/pgtsrmmu.h>
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #define TURBOSPARC_MMUENABLE 0x00000001
0037 #define TURBOSPARC_NOFAULT 0x00000002
0038 #define TURBOSPARC_ICSNOOP 0x00000004
0039 #define TURBOSPARC_PSO 0x00000080
0040 #define TURBOSPARC_DCENABLE 0x00000100
0041 #define TURBOSPARC_ICENABLE 0x00000200
0042 #define TURBOSPARC_BMODE 0x00004000
0043 #define TURBOSPARC_PARITYODD 0x00020000
0044 #define TURBOSPARC_PCENABLE 0x00040000
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 #define TURBOSPARC_SCENABLE 0x00000008
0056 #define TURBOSPARC_uS2 0x00000010
0057 #define TURBOSPARC_WTENABLE 0x00000020
0058 #define TURBOSPARC_SNENABLE 0x40000000
0059
0060 #ifndef __ASSEMBLY__
0061
0062
0063 static inline void turbosparc_inv_insn_tag(unsigned long addr)
0064 {
0065 __asm__ __volatile__("sta %%g0, [%0] %1\n\t"
0066 :
0067 : "r" (addr), "i" (ASI_M_TXTC_TAG)
0068 : "memory");
0069 }
0070
0071
0072 static inline void turbosparc_inv_data_tag(unsigned long addr)
0073 {
0074 __asm__ __volatile__("sta %%g0, [%0] %1\n\t"
0075 :
0076 : "r" (addr), "i" (ASI_M_DATAC_TAG)
0077 : "memory");
0078 }
0079
0080 static inline void turbosparc_flush_icache(void)
0081 {
0082 unsigned long addr;
0083
0084 for (addr = 0; addr < 0x4000; addr += 0x20)
0085 turbosparc_inv_insn_tag(addr);
0086 }
0087
0088 static inline void turbosparc_flush_dcache(void)
0089 {
0090 unsigned long addr;
0091
0092 for (addr = 0; addr < 0x4000; addr += 0x20)
0093 turbosparc_inv_data_tag(addr);
0094 }
0095
0096 static inline void turbosparc_idflash_clear(void)
0097 {
0098 unsigned long addr;
0099
0100 for (addr = 0; addr < 0x4000; addr += 0x20) {
0101 turbosparc_inv_insn_tag(addr);
0102 turbosparc_inv_data_tag(addr);
0103 }
0104 }
0105
0106 static inline void turbosparc_set_ccreg(unsigned long regval)
0107 {
0108 __asm__ __volatile__("sta %0, [%1] %2\n\t"
0109 :
0110 : "r" (regval), "r" (0x600), "i" (ASI_M_MMUREGS)
0111 : "memory");
0112 }
0113
0114 static inline unsigned long turbosparc_get_ccreg(void)
0115 {
0116 unsigned long regval;
0117
0118 __asm__ __volatile__("lda [%1] %2, %0\n\t"
0119 : "=r" (regval)
0120 : "r" (0x600), "i" (ASI_M_MMUREGS));
0121 return regval;
0122 }
0123
0124 #endif
0125
0126 #endif