aos/devices/arm.dev
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

138 lines
3.6 KiB
Plaintext

/*
* Copyright (c) 2008, ETH Zurich. All rights reserved.
*
* This file is distributed under the terms in the attached LICENSE file.
* If you do not find this file, copies can be found by writing to:
* ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
*/
/*
* arm.dev
*
* DESCRIPTION: ARM architecture definitions
*
* See:
* ARM Architecture Reference Manual
*/
device arm msbfirst () "ARM architecture" {
// A.2.5
regtype status "Status register" {
n 1 "Negative result";
z 1 "Zero result";
c 1 "Carry";
v 1 "Overflow";
q 1 "DSP overflow";
_ 19;
i 1 "IRQ disable";
f 1 "FIQ disable";
t 1 "Thumb mode";
m 5 type(cpu_mode) "Mode";
};
constants cpu_mode "CPU mode bits" {
user = 0b10000 "User";
fiq = 0b10001 "FIQ";
irq = 0b10010 "IRQ";
super = 0b10011 "Supervisor";
abort = 0b10111 "Abort";
undef = 0b11011 "Undefined";
system = 0b11111 "System";
};
// A.2.6
constants exc_vector "Exception vector addresses" {
vec_reset = 0x00000000 "Reset";
vec_undef = 0x00000004 "Undefined instruction";
vec_swi = 0x00000008 "Software interrupt";
vec_pref_abort = 0x0000000C "Prefetch abort";
vec_data_abort = 0x00000010 "Data abort";
vec_irq = 0x00000018 "Interrupt";
vec_fiq = 0x0000001C "Fast interrupt";
};
space cp15(reg, opcode) valuewise "Coprocessor 15";
// B.2.4
register control rw cp15(0x01) "CP15 control register" {
_ 16 mbz;
l4 1 "Backwards compatible loads";
rr 1 "Predictable cache replacement strategy";
v 1 "High exception vectors enable";
i 1 "Instruction cache enable";
z 1 "Branch prediction enable";
f 1 "Implementation defined";
r 1 "ROM protection bit";
s 1 "System protection bit";
b 1 "Big endian";
l 1 "Late abort model";
d 1 "26-bit address exception checking";
p 1 "26/32-bit exception handler mode";
w 1 "Write buffer enable";
c 1 "Data or unified cache enable";
a 1 "Alignment fault checking enable";
m 1 "MMU enable";
};
//
// Memory Management Unit functions
//
// B.3.6.1
constants fault_type "Faulting access type" {
terminal = 0b0010 "Terminal exception";
vector = 0b0000 "Vector exception";
alignment = 0b0001 "Alignment";
alignment_2 = 0b0011 "Alternate alignment";
l1extabort = 0b1100 "Level 1 external abort on translation";
l2extabort = 0b1110 "Level 2 external abort on translation";
sec_trans = 0b0101 "Section translation";
page_trans = 0b0111 "Page transation";
sec_dom = 0b1001 "Section domain";
page_dom = 0b1011 "Page domain";
sec_perm = 0b1101 "Section permissions";
page_perm = 0b1111 "Page permissions";
sec_linef = 0b0100 "Section external abort on linefetch";
page_linef = 0b0110 "Page external abort on linefetch";
sec_nlinef = 0b1000 "Section external abort on non-linefetch";
page_nlinef = 0b1010 "Page external abort on non-linefetch";
};
// B.3.7.2
register ttbase rw cp15(0x02) "Translation table base" {
base 18 "Base address high bits";
_ 14 mbz;
};
// B.3.7.3
register domacc rw cp15(0x03) "Domain access control" type(uint32);
// B.3.7.5
register faultstat rw cp15(0x05) "Fault status" {
_ 23 mbz;
_ 1 mbz;
domain 4 "Faulting domain";
status 4 type(fault_type) "Access type";
};
// 3.7.6
register faultaddr rw cp15(6) "Fault address" type(uint32);
// 3.7.7 XXX opcode2, and CRm dependent
register tlbfunc wo cp15(8) "TLB functions" type(uint32);
// 3.7.8 XXX opcode2, and CRm dependent
register tlblock rw cp15(10) "TLB lockdown" {
entry 31 "Base and victim (variable width)";
p 1 "Protected from CP8 invalidates";
};
};