6 class Mem_unit : public Mmu< Kmem::Cache_flush_area >
9 static void tlb_flush();
10 static void dtlb_flush( void* va );
11 static void dtlb_flush();
12 static void tlb_flush(unsigned long asid);
13 static void dtlb_flush(unsigned long asid);
16 //---------------------------------------------------------------------------
20 void Mem_unit::tlb_flush()
23 "mcr p15, 0, %0, c8, c7, 0x00 \n"
26 : "memory" ); // TLB flush
31 void Mem_unit::dtlb_flush( void* va )
34 "mcr p15, 0, %0, c8, c6, 0x01 \n"
36 : "r"((unsigned long)va & 0xfffff000)
37 : "memory" ); // TLB flush
41 void Mem_unit::dtlb_flush()
44 "mcr p15, 0, %0, c8, c6, 0x0 \n"
47 : "memory" ); // TLB flush
50 //---------------------------------------------------------------------------
51 IMPLEMENTATION [arm && armv5]:
54 void Mem_unit::tlb_flush( void* va, unsigned long)
57 "mcr p15, 0, %0, c8, c7, 0x01 \n"
59 : "r"((unsigned long)va & 0xfffff000)
60 : "memory" ); // TLB flush
65 void Mem_unit::tlb_flush(unsigned long)
68 "mcr p15, 0, r0, c8, c7, 0x00 \n"
71 : "memory" ); // TLB flush
75 void Mem_unit::dtlb_flush(unsigned long)
78 "mcr p15, 0, %0, c8, c6, 0x0 \n"
81 : "memory" ); // TLB flush
85 //---------------------------------------------------------------------------
86 IMPLEMENTATION [arm && (armv6 || armv7)]:
89 void Mem_unit::tlb_flush(void *va, unsigned long asid)
95 "mcr p15, 0, %1, c7, c10, 4 \n" // drain write buffer
96 "mcr p15, 0, %0, c8, c7, 1 \n" // flush both TLB entry
98 : "r"(((unsigned long)va & 0xfffff000) | (asid & 0xff)),
104 void Mem_unit::tlb_flush(unsigned long asid)
108 "mcr p15, 0, %1, c7, c10, 4 \n" // drain write buffer
109 "mcr p15, 0, %0, c8, c7, 2 \n" // flush both TLB with asid
117 void Mem_unit::dtlb_flush(unsigned long asid)
120 "mcr p15, 0, r0, c7, c10, 4 \n" // drain write buffer
121 "mcr p15, 0, %0, c8, c6, 2 \n" // flush data TLB with asid