]> rtime.felk.cvut.cz Git - l4.git/commitdiff
update
authorl4check <l4check@d050ee49-bd90-4346-b210-929a50b99cfc>
Sun, 19 Jan 2014 21:01:56 +0000 (21:01 +0000)
committerl4check <l4check@d050ee49-bd90-4346-b210-929a50b99cfc>
Sun, 19 Jan 2014 21:01:56 +0000 (21:01 +0000)
git-svn-id: http://svn.tudos.org/repos/oc/tudos/trunk@62 d050ee49-bd90-4346-b210-929a50b99cfc

kernel/fiasco/src/kern/arm/bootstrap.cpp
kernel/fiasco/src/kern/arm/fpu-arm.cpp

index 8b97c2d1c47b67ff5583edf2a75b959487404875..e3c3df0cfd070e561f4d44e0bebf2a4d71cb8c2e 100644 (file)
@@ -35,17 +35,28 @@ INTERFACE [arm && armv5]:
 namespace Bootstrap {
 inline void set_asid()
 {}
+
+inline void set_ttbcr()
+{}
 }
 
 //---------------------------------------------------------------------------
 INTERFACE [arm && (armv6 || armv7)]:
 
+#include "kmem_space.h"
+
 namespace Bootstrap {
 inline void
 set_asid()
 {
   asm volatile ("mcr p15, 0, %0, c13, c0, 1" : : "r" (0)); // ASID 0
 }
+
+inline void set_ttbcr()
+{
+  asm volatile("mcr p15, 0, %[ttbcr], c2, c0, 2" // TTBCR
+               : : [ttbcr] "r" (Page::Ttbcr_bits));
+}
 }
 
 //---------------------------------------------------------------------------
@@ -260,8 +271,7 @@ extern "C" void bootstrap_main()
   Bootstrap::do_arm_1176_cache_alias_workaround();
   Bootstrap::set_asid();
 
-  asm volatile("mcr p15, 0, %[ttbcr], c2, c0, 2" // TTBCR
-               : : [ttbcr] "r" (Page::Ttbcr_bits));
+  Bootstrap::set_ttbcr();
   Mem::dsb();
   asm volatile("mcr p15, 0, %[null], c8, c7, 0" // TLBIALL
                : : [null]  "r" (0));
index dede7c0ee30b4668b29d714e3ef4bb86b113522e..23207e5180b7561255142becdc4bc41fafb3cac2 100644 (file)
@@ -257,8 +257,9 @@ Fpu::init(Cpu_number cpu, bool resume)
 {
   copro_enable();
 
-  fpu.cpu(cpu)._fpsid = Fpsid(fpsid_read());
-  if (cpu == Cpu_number::boot_cpu())
+  Fpu &f = fpu.cpu(cpu);
+  f._fpsid = Fpsid(fpsid_read());
+  if (cpu == Cpu_number::boot_cpu() && f._fpsid.arch_version() > 1)
     save_32r = (mvfr0() & 0xf) == 2;
 
   if (!resume)
@@ -266,7 +267,7 @@ Fpu::init(Cpu_number cpu, bool resume)
 
   disable();
 
-  fpu.cpu(cpu).set_owner(0);
+  f.set_owner(0);
 }
 
 IMPLEMENT inline NEEDS ["fpu_state.h", "mem.h", "static_assert.h"]
@@ -285,7 +286,7 @@ Fpu::save_fpu_regs(Fpu_regs *r)
 {
   Mword tmp;
   asm volatile("stc p11, cr0, [%0], #128     \n"
-               "cmp    %1, #0                \n"
+               "cmp    %2, #0                \n"
                "stcnel p11, cr0, [%0], #128  \n"
                : "=r" (tmp) : "0" (r->state), "r" (save_32r));
 }
@@ -296,7 +297,7 @@ Fpu::restore_fpu_regs(Fpu_regs *r)
 {
   Mword tmp;
   asm volatile("ldc    p11, cr0, [%0], #128 \n"
-               "cmp    %1, #0               \n"
+               "cmp    %2, #0               \n"
                "ldcnel p11, cr0, [%0], #128 \n"
                : "=r" (tmp) : "0" (r->state), "r" (save_32r));
 }