Changes

Jump to navigation Jump to search
761 bytes added ,  07:50, 10 September 2019
Line 248: Line 248:  
     // Check what CPU we're running on to configure CPUECTLR, CPUACTLR appropriately.
 
     // Check what CPU we're running on to configure CPUECTLR, CPUACTLR appropriately.
 
     manufacture_id = MIDR_EL1;
 
     manufacture_id = MIDR_EL1;
     implemeter = manufacturer_id >> 24) & 0xFF;
+
     implementer = manufacturer_id >> 24) & 0xFF;
 +
   
 +
    // 9.0.0+: Save X19-X30 + SP, save context struct in TPIDR_EL1.
 +
    KernelLdr_SaveRegistersToTpidr();
 +
 
 
     if (implementer == 0x41) {
 
     if (implementer == 0x41) {
 
         // Implementer ID is 0x41 (ARM Limited).
 
         // Implementer ID is 0x41 (ARM Limited).
Line 261: Line 265:  
                 // If supported, disable load-pass DMB.
 
                 // If supported, disable load-pass DMB.
 
                 cpuactlr_value |= 0x800000000000000;
 
                 cpuactlr_value |= 0x800000000000000;
 +
            }
 +
            CPUACTLR_EL1 = cpuactlr_value;
 +
            if (CPUECTLR_EL1 != cpuectlr_value) {
 +
                CPUECTLR_EL1 = cpuectlr_value;
 +
            }
 +
        } else if (architecture == 0xD03) { // 9.0.0+
 +
            // Architecture is 0xD03 (Cortex-A53).
 +
            cpuactlr_value = 0x90CA000; // TODO: What is this?
 +
            cpuectlr_value = 0x40;      // TODO: What is this?
 +
            if (hw_variant != 0 || (hw_variant == 0 && hw_revision > 2)) {
 +
                // TODO: What is this?
 +
                cpuactlr_value |= 0x100000000000;
 
             }
 
             }
 
             CPUACTLR_EL1 = cpuactlr_value;
 
             CPUACTLR_EL1 = cpuactlr_value;
Line 268: Line 284:  
         }
 
         }
 
     }
 
     }
 +
 +
 +
    // 9.0.0+: Verify that TPIDR_EL1 is still set.
 +
    KernelLdr_VerifyTpidrEl1();
 
</pre>
 
</pre>
  

Navigation menu