1/* swift.h: Specific definitions for the _broken_ Swift SRMMU 2 * MMU module. 3 * 4 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 5 */ 6 7#ifndef _SPARC_SWIFT_H 8#define _SPARC_SWIFT_H 9 10/* Swift is so brain damaged, here is the mmu control register. */ 11#define SWIFT_ST 0x00800000 /* SW tablewalk enable */ 12#define SWIFT_WP 0x00400000 /* Watchpoint enable */ 13 14/* Branch folding (buggy, disable on production systems!) */ 15#define SWIFT_BF 0x00200000 16#define SWIFT_PMC 0x00180000 /* Page mode control */ 17#define SWIFT_PE 0x00040000 /* Parity enable */ 18#define SWIFT_PC 0x00020000 /* Parity control */ 19#define SWIFT_AP 0x00010000 /* Graphics page mode control (TCX/SX) */ 20#define SWIFT_AC 0x00008000 /* Alternate Cacheability (see viking.h) */ 21#define SWIFT_BM 0x00004000 /* Boot mode */ 22#define SWIFT_RC 0x00003c00 /* DRAM refresh control */ 23#define SWIFT_IE 0x00000200 /* Instruction cache enable */ 24#define SWIFT_DE 0x00000100 /* Data cache enable */ 25#define SWIFT_SA 0x00000080 /* Store Allocate */ 26#define SWIFT_NF 0x00000002 /* No fault mode */ 27#define SWIFT_EN 0x00000001 /* MMU enable */ 28 29/* Bits [13:5] select one of 512 instruction cache tags */ 30extern __inline__ void swift_inv_insn_tag(unsigned long addr) 31{ 32 __asm__ __volatile__("sta %%g0, [%0] %1\n\t" : : 33 "r" (addr), "i" (ASI_M_TXTC_TAG)); 34} 35 36/* Bits [12:4] select one of 512 data cache tags */ 37extern __inline__ void swift_inv_data_tag(unsigned long addr) 38{ 39 __asm__ __volatile__("sta %%g0, [%0] %1\n\t" : : 40 "r" (addr), "i" (ASI_M_DATAC_TAG)); 41} 42 43extern __inline__ void swift_flush_dcache(void) 44{ 45 unsigned long addr; 46 47 for(addr = 0; addr < 0x2000; addr += 0x10) 48 swift_inv_data_tag(addr); 49} 50 51extern __inline__ void swift_flush_icache(void) 52{ 53 unsigned long addr; 54 55 for(addr = 0; addr < 0x4000; addr += 0x20) 56 swift_inv_insn_tag(addr); 57} 58 59extern __inline__ void swift_idflash_clear(void) 60{ 61 unsigned long addr; 62 63 for(addr = 0; addr < 0x2000; addr += 0x10) { 64 swift_inv_insn_tag(addr<<1); 65 swift_inv_data_tag(addr); 66 } 67} 68 69/* Swift is so broken, it isn't even safe to use the following. */ 70extern __inline__ void swift_flush_page(unsigned long page) 71{ 72 __asm__ __volatile__("sta %%g0, [%0] %1\n\t" : : 73 "r" (page), "i" (ASI_M_FLUSH_PAGE)); 74} 75 76extern __inline__ void swift_flush_segment(unsigned long addr) 77{ 78 __asm__ __volatile__("sta %%g0, [%0] %1\n\t" : : 79 "r" (addr), "i" (ASI_M_FLUSH_SEG)); 80} 81 82extern __inline__ void swift_flush_region(unsigned long addr) 83{ 84 __asm__ __volatile__("sta %%g0, [%0] %1\n\t" : : 85 "r" (addr), "i" (ASI_M_FLUSH_REGION)); 86} 87 88extern __inline__ void swift_flush_context(void) 89{ 90 __asm__ __volatile__("sta %%g0, [%%g0] %0\n\t" : : 91 "i" (ASI_M_FLUSH_CTX)); 92} 93 94#endif /* !(_SPARC_SWIFT_H) */ 95