diff options
Diffstat (limited to 'src/registers/mair_el1.rs')
-rw-r--r-- | src/registers/mair_el1.rs | 447 |
1 files changed, 447 insertions, 0 deletions
diff --git a/src/registers/mair_el1.rs b/src/registers/mair_el1.rs new file mode 100644 index 0000000..478a7c7 --- /dev/null +++ b/src/registers/mair_el1.rs @@ -0,0 +1,447 @@ +// SPDX-License-Identifier: Apache-2.0 OR MIT +// +// Copyright (c) 2018-2022 by the author(s) +// +// Author(s): +// - Andre Richter <andre.o.richter@gmail.com> +// - Erik Verbruggen <erik.verbruggen@me.com> + +//! Memory Attribute Indirection Register - EL1 +//! +//! Provides the memory attribute encodings corresponding to the possible AttrIndx values in a +//! Long-descriptor format translation table entry for stage 1 translations at EL1. + +use tock_registers::{ + interfaces::{Readable, Writeable}, + register_bitfields, +}; + +register_bitfields! {u64, + pub MAIR_EL1 [ + /// Attribute 7 + Attr7_Normal_Outer OFFSET(60) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr7_Device OFFSET(56) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr7_Normal_Inner OFFSET(56) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 6 + Attr6_Normal_Outer OFFSET(52) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr6_Device OFFSET(48) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr6_Normal_Inner OFFSET(48) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 5 + Attr5_Normal_Outer OFFSET(44) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr5_Device OFFSET(40) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr5_Normal_Inner OFFSET(40) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 4 + Attr4_Normal_Outer OFFSET(36) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr4_Device OFFSET(32) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr4_Normal_Inner OFFSET(32) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 3 + Attr3_Normal_Outer OFFSET(28) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr3_Device OFFSET(24) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr3_Normal_Inner OFFSET(24) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 2 + Attr2_Normal_Outer OFFSET(20) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr2_Device OFFSET(16) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr2_Normal_Inner OFFSET(16) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 1 + Attr1_Normal_Outer OFFSET(12) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr1_Device OFFSET(8) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr1_Normal_Inner OFFSET(8) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + + /// Attribute 0 + Attr0_Normal_Outer OFFSET(4) NUMBITS(4) [ + Device = 0b0000, + + WriteThrough_Transient_WriteAlloc = 0b0001, + WriteThrough_Transient_ReadAlloc = 0b0010, + WriteThrough_Transient_ReadWriteAlloc = 0b0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ], + Attr0_Device OFFSET(0) NUMBITS(8) [ + nonGathering_nonReordering_noEarlyWriteAck = 0b0000_0000, + nonGathering_nonReordering_EarlyWriteAck = 0b0000_0100, + nonGathering_Reordering_EarlyWriteAck = 0b0000_1000, + Gathering_Reordering_EarlyWriteAck = 0b0000_1100 + ], + Attr0_Normal_Inner OFFSET(0) NUMBITS(4) [ + WriteThrough_Transient = 0x0000, + WriteThrough_Transient_WriteAlloc = 0x0001, + WriteThrough_Transient_ReadAlloc = 0x0010, + WriteThrough_Transient_ReadWriteAlloc = 0x0011, + + NonCacheable = 0b0100, + WriteBack_Transient_WriteAlloc = 0b0101, + WriteBack_Transient_ReadAlloc = 0b0110, + WriteBack_Transient_ReadWriteAlloc = 0b0111, + + WriteThrough_NonTransient = 0b1000, + WriteThrough_NonTransient_WriteAlloc = 0b1001, + WriteThrough_NonTransient_ReadAlloc = 0b1010, + WriteThrough_NonTransient_ReadWriteAlloc = 0b1011, + + WriteBack_NonTransient = 0b1100, + WriteBack_NonTransient_WriteAlloc = 0b1101, + WriteBack_NonTransient_ReadAlloc = 0b1110, + WriteBack_NonTransient_ReadWriteAlloc = 0b1111 + ] + ] +} + +pub struct Reg; + +impl Readable for Reg { + type T = u64; + type R = MAIR_EL1::Register; + + sys_coproc_read_raw!(u64, "MAIR_EL1", "x"); +} + +impl Writeable for Reg { + type T = u64; + type R = MAIR_EL1::Register; + + sys_coproc_write_raw!(u64, "MAIR_EL1", "x"); +} + +pub const MAIR_EL1: Reg = Reg {}; |