aboutsummaryrefslogtreecommitdiff
path: root/src/registers/midr_el1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/registers/midr_el1.rs')
-rw-r--r--src/registers/midr_el1.rs96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/registers/midr_el1.rs b/src/registers/midr_el1.rs
new file mode 100644
index 0000000..10082e1
--- /dev/null
+++ b/src/registers/midr_el1.rs
@@ -0,0 +1,96 @@
+// 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>
+
+//! Main ID Register - EL1
+//!
+//! Provides identification information for the processor, including an implementer code for the
+//! device and a device ID number.
+
+use tock_registers::{interfaces::Readable, register_bitfields};
+
+register_bitfields! {u64,
+ pub MIDR_EL1 [
+ /// The Implementer code. This field must hold an implementer code that has been assigned by
+ /// Arm. Assigned codes include the following:
+ ///
+ /// Hex representation Implementer
+ /// 0x00 Reserved for software use
+ /// 0xC0 Ampere Computing
+ /// 0x41 Arm Limited
+ /// 0x42 Broadcom Corporation
+ /// 0x43 Cavium Inc.
+ /// 0x44 Digital Equipment Corporation
+ /// 0x46 Fujitsu Ltd.
+ /// 0x49 Infineon Technologies AG
+ /// 0x4D Motorola or Freescale Semiconductor Inc.
+ /// 0x4E NVIDIA Corporation
+ /// 0x50 Applied Micro Circuits Corporation
+ /// 0x51 Qualcomm Inc.
+ /// 0x56 Marvell International Ltd.
+ /// 0x69 Intel Corporation
+ ///
+ /// Arm can assign codes that are not published in this manual. All values not assigned by
+ /// Arm are reserved and must not be used.
+ Implementer OFFSET(24) NUMBITS(8) [
+ Reserved = 0x00,
+ Ampere = 0xC0,
+ Arm = 0x41,
+ Broadcom = 0x42,
+ Cavium = 0x43,
+ DigitalEquipment = 0x44,
+ Fujitsu = 0x46,
+ Infineon = 0x49,
+ MotorolaOrFreescale = 0x4D,
+ NVIDIA = 0x4E,
+ AppliedMicroCircuits = 0x50,
+ Qualcomm = 0x51,
+ Marvell = 0x56,
+ Intel = 0x69
+ ],
+
+ /// An IMPLEMENTATION DEFINED variant number. Typically, this field is used to distinguish
+ /// between different product variants, or major revisions of a product.
+ Variant OFFSET(20) NUMBITS(4) [],
+
+ /// The permitted values of this field are:
+ ///
+ /// 0001 Armv4.
+ /// 0010 Armv4T.
+ /// 0011 Armv5 (obsolete).
+ /// 0100 Armv5T.
+ /// 0101 Armv5TE.
+ /// 0110 Armv5TEJ.
+ /// 0111 Armv6.
+ /// 1111 Architectural features are individually identified in the ID_* registers, see ID
+ /// registers on page K14-8060.
+ ///
+ /// All other values are reserved.
+ Architecture OFFSET(16) NUMBITS(4) [
+ Individual = 0b1111
+ ],
+
+ /// An IMPLEMENTATION DEFINED primary part number for the device.
+ ///
+ /// On processors implemented by Arm, if the top four bits of the primary part number are
+ /// 0x0 or 0x7, the variant and architecture are encoded differently.
+ PartNum OFFSET(4) NUMBITS(12) [],
+
+ /// An IMPLEMENTATION DEFINED revision number for the device.
+ Revision OFFSET(0) NUMBITS(4) []
+ ]
+}
+
+pub struct Reg;
+
+impl Readable for Reg {
+ type T = u64;
+ type R = MIDR_EL1::Register;
+
+ sys_coproc_read_raw!(u64, "MIDR_EL1", "x");
+}
+
+pub const MIDR_EL1: Reg = Reg {};