Upgrade to cortex-a 4.x.x

pull/84/head
Andre Richter 4 years ago
parent 690716e4af
commit e7a13e81b8
No known key found for this signature in database
GPG Key ID: 2116C1AB102F615E

@ -2,33 +2,31 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,4 +13,4 @@ bsp_rpi4 = ["cortex-a"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }

@ -25,7 +25,7 @@ diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.tom
[dependencies] [dependencies]
+ +
+# Optional dependencies +# Optional dependencies
+cortex-a = { version = "3.0.x", optional = true } +cortex-a = { version = "4.x.x", optional = true }
diff -uNr 03_hacky_hello_world/src/_arch/aarch64/cpu/smp.rs 04_zero_overhead_abstraction/src/_arch/aarch64/cpu/smp.rs diff -uNr 03_hacky_hello_world/src/_arch/aarch64/cpu/smp.rs 04_zero_overhead_abstraction/src/_arch/aarch64/cpu/smp.rs
--- 03_hacky_hello_world/src/_arch/aarch64/cpu/smp.rs --- 03_hacky_hello_world/src/_arch/aarch64/cpu/smp.rs

@ -2,33 +2,31 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,4 +13,4 @@ bsp_rpi4 = ["cortex-a"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -106,7 +106,7 @@ diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
+register = { version = "0.5.x", optional = true } +register = { version = "0.5.x", optional = true }
diff -uNr 05_safe_globals/src/_arch/aarch64/cpu.rs 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs diff -uNr 05_safe_globals/src/_arch/aarch64/cpu.rs 06_drivers_gpio_uart/src/_arch/aarch64/cpu.rs

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -122,7 +122,7 @@ diff -uNr 07_uart_chainloader/src/_arch/aarch64/cpu.rs 08_timestamps/src/_arch/a
diff -uNr 07_uart_chainloader/src/_arch/aarch64/time.rs 08_timestamps/src/_arch/aarch64/time.rs diff -uNr 07_uart_chainloader/src/_arch/aarch64/time.rs 08_timestamps/src/_arch/aarch64/time.rs
--- 07_uart_chainloader/src/_arch/aarch64/time.rs --- 07_uart_chainloader/src/_arch/aarch64/time.rs
+++ 08_timestamps/src/_arch/aarch64/time.rs +++ 08_timestamps/src/_arch/aarch64/time.rs
@@ -0,0 +1,97 @@ @@ -0,0 +1,98 @@
+// SPDX-License-Identifier: MIT OR Apache-2.0 +// SPDX-License-Identifier: MIT OR Apache-2.0
+// +//
+// Copyright (c) 2018-2020 Andre Richter <andre.o.richter@gmail.com> +// Copyright (c) 2018-2020 Andre Richter <andre.o.richter@gmail.com>
@ -193,6 +193,7 @@ diff -uNr 07_uart_chainloader/src/_arch/aarch64/time.rs 08_timestamps/src/_arch/
+ // Check if it is within supported bounds. + // Check if it is within supported bounds.
+ let warn: Option<&str> = if tval == 0 { + let warn: Option<&str> = if tval == 0 {
+ Some("smaller") + Some("smaller")
+ // The upper 32 bits of CNTP_TVAL_EL0 are reserved.
+ } else if tval > u32::max_value().into() { + } else if tval > u32::max_value().into() {
+ Some("bigger") + Some("bigger")
+ } else { + } else {
@ -208,7 +209,7 @@ diff -uNr 07_uart_chainloader/src/_arch/aarch64/time.rs 08_timestamps/src/_arch/
+ } + }
+ +
+ // Set the compare value register. + // Set the compare value register.
+ CNTP_TVAL_EL0.set(tval as u32); + CNTP_TVAL_EL0.set(tval);
+ +
+ // Kick off the counting. // Disable timer interrupt. + // Kick off the counting. // Disable timer interrupt.
+ CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); + CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -308,7 +308,7 @@ diff -uNr 09_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 10_privil
+//-------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------
+ +
+trait DaifField { +trait DaifField {
+ fn daif_field() -> register::Field<u32, DAIF::Register>; + fn daif_field() -> register::Field<u64, DAIF::Register>;
+} +}
+ +
+struct Debug; +struct Debug;
@ -321,25 +321,25 @@ diff -uNr 09_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 10_privil
+//-------------------------------------------------------------------------------------------------- +//--------------------------------------------------------------------------------------------------
+ +
+impl DaifField for Debug { +impl DaifField for Debug {
+ fn daif_field() -> register::Field<u32, DAIF::Register> { + fn daif_field() -> register::Field<u64, DAIF::Register> {
+ DAIF::D + DAIF::D
+ } + }
+} +}
+ +
+impl DaifField for SError { +impl DaifField for SError {
+ fn daif_field() -> register::Field<u32, DAIF::Register> { + fn daif_field() -> register::Field<u64, DAIF::Register> {
+ DAIF::A + DAIF::A
+ } + }
+} +}
+ +
+impl DaifField for IRQ { +impl DaifField for IRQ {
+ fn daif_field() -> register::Field<u32, DAIF::Register> { + fn daif_field() -> register::Field<u64, DAIF::Register> {
+ DAIF::I + DAIF::I
+ } + }
+} +}
+ +
+impl DaifField for FIQ { +impl DaifField for FIQ {
+ fn daif_field() -> register::Field<u32, DAIF::Register> { + fn daif_field() -> register::Field<u64, DAIF::Register> {
+ DAIF::F + DAIF::F
+ } + }
+} +}

@ -11,7 +11,7 @@ use cortex_a::regs::*;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -24,25 +24,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -11,7 +11,7 @@ use cortex_a::regs::*;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -24,25 +24,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

@ -499,7 +499,7 @@ diff -uNr 11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs 1
+ +
+/// Wrapper struct for memory copy of SPSR_EL1. +/// Wrapper struct for memory copy of SPSR_EL1.
+#[repr(transparent)] +#[repr(transparent)]
+struct SpsrEL1(InMemoryRegister<u32, SPSR_EL1::Register>); +struct SpsrEL1(InMemoryRegister<u64, SPSR_EL1::Register>);
+ +
+/// The exception context as it is stored on the stack on exception entry. +/// The exception context as it is stored on the stack on exception entry.
+#[repr(C)] +#[repr(C)]
@ -774,7 +774,7 @@ diff -uNr 11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.S 12
+ mrs x2, SPSR_EL1 + mrs x2, SPSR_EL1
+ +
+ stp lr, x1, [sp, #16 * 15] + stp lr, x1, [sp, #16 * 15]
+ str w2, [sp, #16 * 16] + str x2, [sp, #16 * 16]
+ +
+ // x0 is the first argument for the function called through `\handler`. + // x0 is the first argument for the function called through `\handler`.
+ mov x0, sp + mov x0, sp

@ -30,7 +30,7 @@
mrs x2, SPSR_EL1 mrs x2, SPSR_EL1
stp lr, x1, [sp, #16 * 15] stp lr, x1, [sp, #16 * 15]
str w2, [sp, #16 * 16] str x2, [sp, #16 * 16]
// x0 is the first argument for the function called through `\handler`. // x0 is the first argument for the function called through `\handler`.
mov x0, sp mov x0, sp

@ -17,7 +17,7 @@ global_asm!(include_str!("exception.S"));
/// Wrapper struct for memory copy of SPSR_EL1. /// Wrapper struct for memory copy of SPSR_EL1.
#[repr(transparent)] #[repr(transparent)]
struct SpsrEL1(InMemoryRegister<u32, SPSR_EL1::Register>); struct SpsrEL1(InMemoryRegister<u64, SPSR_EL1::Register>);
/// The exception context as it is stored on the stack on exception entry. /// The exception context as it is stored on the stack on exception entry.
#[repr(C)] #[repr(C)]

@ -11,7 +11,7 @@ use cortex_a::regs::*;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -24,25 +24,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,9 +2,9 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80" checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register", "register",
] ]
@ -22,9 +22,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.23" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51ef7cd2518ead700af67bf9d1a658d90b6037d77110fd9c0445429d0ba1c6c9" checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
@ -55,9 +55,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.42" version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

@ -15,7 +15,7 @@ qemu-exit = "1.0.x"
test-types = { path = "test-types" } test-types = { path = "test-types" }
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true }
##-------------------------------------------------------------------------------------------------- ##--------------------------------------------------------------------------------------------------

@ -805,7 +805,7 @@ diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo.
+test-types = { path = "test-types" } +test-types = { path = "test-types" }
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
-register = { version = "0.5.x", optional = true } -register = { version = "0.5.x", optional = true }
+register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } +register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true }
+ +

@ -30,7 +30,7 @@
mrs x2, SPSR_EL1 mrs x2, SPSR_EL1
stp lr, x1, [sp, #16 * 15] stp lr, x1, [sp, #16 * 15]
str w2, [sp, #16 * 16] str x2, [sp, #16 * 16]
// x0 is the first argument for the function called through `\handler`. // x0 is the first argument for the function called through `\handler`.
mov x0, sp mov x0, sp

@ -17,7 +17,7 @@ global_asm!(include_str!("exception.S"));
/// Wrapper struct for memory copy of SPSR_EL1. /// Wrapper struct for memory copy of SPSR_EL1.
#[repr(transparent)] #[repr(transparent)]
struct SpsrEL1(InMemoryRegister<u32, SPSR_EL1::Register>); struct SpsrEL1(InMemoryRegister<u64, SPSR_EL1::Register>);
/// The exception context as it is stored on the stack on exception entry. /// The exception context as it is stored on the stack on exception entry.
#[repr(C)] #[repr(C)]

@ -11,7 +11,7 @@ use cortex_a::regs::*;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -24,25 +24,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,9 +2,9 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80" checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register", "register",
] ]
@ -22,9 +22,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.23" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51ef7cd2518ead700af67bf9d1a658d90b6037d77110fd9c0445429d0ba1c6c9" checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
@ -55,9 +55,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.42" version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

@ -15,7 +15,7 @@ qemu-exit = "1.0.x"
test-types = { path = "test-types" } test-types = { path = "test-types" }
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true }
##-------------------------------------------------------------------------------------------------- ##--------------------------------------------------------------------------------------------------

@ -770,7 +770,7 @@ diff -uNr 13_integrated_testing/src/_arch/aarch64/exception/asynchronous.rs 14_e
+} +}
+ +
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
@@ -55,6 +59,71 @@ @@ -55,6 +59,71 @@
// Public Code // Public Code
@ -823,7 +823,7 @@ diff -uNr 13_integrated_testing/src/_arch/aarch64/exception/asynchronous.rs 14_e
+/// +///
+/// - Changes the HW state of the executing core. +/// - Changes the HW state of the executing core.
+#[inline(always)] +#[inline(always)]
+pub unsafe fn local_irq_mask_save() -> u32 { +pub unsafe fn local_irq_mask_save() -> u64 {
+ let saved = DAIF.get(); + let saved = DAIF.get();
+ local_irq_mask(); + local_irq_mask();
+ +
@ -837,7 +837,7 @@ diff -uNr 13_integrated_testing/src/_arch/aarch64/exception/asynchronous.rs 14_e
+/// - Changes the HW state of the executing core. +/// - Changes the HW state of the executing core.
+/// - No sanity checks on the input. +/// - No sanity checks on the input.
+#[inline(always)] +#[inline(always)]
+pub unsafe fn local_irq_restore(saved: u32) { +pub unsafe fn local_irq_restore(saved: u64) {
+ DAIF.set(saved); + DAIF.set(saved);
+} +}
+ +

@ -30,7 +30,7 @@
mrs x2, SPSR_EL1 mrs x2, SPSR_EL1
stp lr, x1, [sp, #16 * 15] stp lr, x1, [sp, #16 * 15]
str w2, [sp, #16 * 16] str x2, [sp, #16 * 16]
// x0 is the first argument for the function called through `\handler`. // x0 is the first argument for the function called through `\handler`.
mov x0, sp mov x0, sp

@ -18,7 +18,7 @@ global_asm!(include_str!("exception.S"));
/// Wrapper struct for memory copy of SPSR_EL1. /// Wrapper struct for memory copy of SPSR_EL1.
#[repr(transparent)] #[repr(transparent)]
struct SpsrEL1(InMemoryRegister<u32, SPSR_EL1::Register>); struct SpsrEL1(InMemoryRegister<u64, SPSR_EL1::Register>);
/// The exception context as it is stored on the stack on exception entry. /// The exception context as it is stored on the stack on exception entry.
#[repr(C)] #[repr(C)]

@ -15,7 +15,7 @@ mod daif_bits {
} }
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -28,25 +28,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }
@ -106,7 +106,7 @@ pub unsafe fn local_irq_mask() {
/// ///
/// - Changes the HW state of the executing core. /// - Changes the HW state of the executing core.
#[inline(always)] #[inline(always)]
pub unsafe fn local_irq_mask_save() -> u32 { pub unsafe fn local_irq_mask_save() -> u64 {
let saved = DAIF.get(); let saved = DAIF.get();
local_irq_mask(); local_irq_mask();
@ -120,7 +120,7 @@ pub unsafe fn local_irq_mask_save() -> u32 {
/// - Changes the HW state of the executing core. /// - Changes the HW state of the executing core.
/// - No sanity checks on the input. /// - No sanity checks on the input.
#[inline(always)] #[inline(always)]
pub unsafe fn local_irq_restore(saved: u32) { pub unsafe fn local_irq_restore(saved: u64) {
DAIF.set(saved); DAIF.set(saved);
} }

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,9 +2,9 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80" checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register", "register",
] ]
@ -22,9 +22,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.23" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51ef7cd2518ead700af67bf9d1a658d90b6037d77110fd9c0445429d0ba1c6c9" checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
@ -55,9 +55,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.42" version = "1.0.48"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

@ -15,7 +15,7 @@ qemu-exit = "1.0.x"
test-types = { path = "test-types" } test-types = { path = "test-types" }
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true }
##-------------------------------------------------------------------------------------------------- ##--------------------------------------------------------------------------------------------------

@ -782,6 +782,19 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15
assert!(bss_range.contains(&kernel_tables_addr)); assert!(bss_range.contains(&kernel_tables_addr));
} }
diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/time.rs 15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/time.rs
--- 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/time.rs
+++ 15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/time.rs
@@ -55,7 +55,7 @@
}
// Calculate the register compare value.
- let frq = CNTFRQ_EL0.get() as u64;
+ let frq = CNTFRQ_EL0.get();
let x = match frq.checked_mul(duration.as_nanos() as u64) {
None => {
warn!("Spin duration too long, skipping");
diff -uNr 14_exceptions_part2_peripheral_IRQs/src/bsp/device_driver/arm/gicv2/gicc.rs 15_virtual_mem_part2_mmio_remap/src/bsp/device_driver/arm/gicv2/gicc.rs diff -uNr 14_exceptions_part2_peripheral_IRQs/src/bsp/device_driver/arm/gicv2/gicc.rs 15_virtual_mem_part2_mmio_remap/src/bsp/device_driver/arm/gicv2/gicc.rs
--- 14_exceptions_part2_peripheral_IRQs/src/bsp/device_driver/arm/gicv2/gicc.rs --- 14_exceptions_part2_peripheral_IRQs/src/bsp/device_driver/arm/gicv2/gicc.rs
+++ 15_virtual_mem_part2_mmio_remap/src/bsp/device_driver/arm/gicv2/gicc.rs +++ 15_virtual_mem_part2_mmio_remap/src/bsp/device_driver/arm/gicv2/gicc.rs

@ -30,7 +30,7 @@
mrs x2, SPSR_EL1 mrs x2, SPSR_EL1
stp lr, x1, [sp, #16 * 15] stp lr, x1, [sp, #16 * 15]
str w2, [sp, #16 * 16] str x2, [sp, #16 * 16]
// x0 is the first argument for the function called through `\handler`. // x0 is the first argument for the function called through `\handler`.
mov x0, sp mov x0, sp

@ -18,7 +18,7 @@ global_asm!(include_str!("exception.S"));
/// Wrapper struct for memory copy of SPSR_EL1. /// Wrapper struct for memory copy of SPSR_EL1.
#[repr(transparent)] #[repr(transparent)]
struct SpsrEL1(InMemoryRegister<u32, SPSR_EL1::Register>); struct SpsrEL1(InMemoryRegister<u64, SPSR_EL1::Register>);
/// The exception context as it is stored on the stack on exception entry. /// The exception context as it is stored on the stack on exception entry.
#[repr(C)] #[repr(C)]

@ -15,7 +15,7 @@ mod daif_bits {
} }
trait DaifField { trait DaifField {
fn daif_field() -> register::Field<u32, DAIF::Register>; fn daif_field() -> register::Field<u64, DAIF::Register>;
} }
struct Debug; struct Debug;
@ -28,25 +28,25 @@ struct FIQ;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
impl DaifField for Debug { impl DaifField for Debug {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::D DAIF::D
} }
} }
impl DaifField for SError { impl DaifField for SError {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::A DAIF::A
} }
} }
impl DaifField for IRQ { impl DaifField for IRQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::I DAIF::I
} }
} }
impl DaifField for FIQ { impl DaifField for FIQ {
fn daif_field() -> register::Field<u32, DAIF::Register> { fn daif_field() -> register::Field<u64, DAIF::Register> {
DAIF::F DAIF::F
} }
} }
@ -106,7 +106,7 @@ pub unsafe fn local_irq_mask() {
/// ///
/// - Changes the HW state of the executing core. /// - Changes the HW state of the executing core.
#[inline(always)] #[inline(always)]
pub unsafe fn local_irq_mask_save() -> u32 { pub unsafe fn local_irq_mask_save() -> u64 {
let saved = DAIF.get(); let saved = DAIF.get();
local_irq_mask(); local_irq_mask();
@ -120,7 +120,7 @@ pub unsafe fn local_irq_mask_save() -> u32 {
/// - Changes the HW state of the executing core. /// - Changes the HW state of the executing core.
/// - No sanity checks on the input. /// - No sanity checks on the input.
#[inline(always)] #[inline(always)]
pub unsafe fn local_irq_restore(saved: u32) { pub unsafe fn local_irq_restore(saved: u64) {
DAIF.set(saved); DAIF.set(saved);
} }

@ -55,7 +55,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Calculate the register compare value. // Calculate the register compare value.
let frq = CNTFRQ_EL0.get() as u64; let frq = CNTFRQ_EL0.get();
let x = match frq.checked_mul(duration.as_nanos() as u64) { let x = match frq.checked_mul(duration.as_nanos() as u64) {
None => { None => {
warn!("Spin duration too long, skipping"); warn!("Spin duration too long, skipping");
@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

@ -2,34 +2,32 @@
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] [[package]]
name = "cortex-a" name = "cortex-a"
version = "3.0.4" version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1"
dependencies = [ dependencies = [
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "kernel" name = "kernel"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "cortex-a",
"register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "register",
] ]
[[package]] [[package]]
name = "register" name = "register"
version = "0.5.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
dependencies = [ dependencies = [
"tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "tock-registers",
] ]
[[package]] [[package]]
name = "tock-registers" name = "tock-registers"
version = "0.5.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"
[metadata]
"checksum cortex-a 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6922a40af4d1a2deac8c963b9f3e57311b8912490740234f1ad182425c547f80"
"checksum register 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815"
"checksum tock-registers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f"

@ -13,5 +13,5 @@ bsp_rpi4 = ["cortex-a", "register"]
[dependencies] [dependencies]
# Optional dependencies # Optional dependencies
cortex-a = { version = "3.0.x", optional = true } cortex-a = { version = "4.x.x", optional = true }
register = { version = "0.5.x", optional = true } register = { version = "0.5.x", optional = true }

Binary file not shown.

Binary file not shown.

@ -68,6 +68,7 @@ impl time::interface::TimeManager for GenericTimer {
// Check if it is within supported bounds. // Check if it is within supported bounds.
let warn: Option<&str> = if tval == 0 { let warn: Option<&str> = if tval == 0 {
Some("smaller") Some("smaller")
// The upper 32 bits of CNTP_TVAL_EL0 are reserved.
} else if tval > u32::max_value().into() { } else if tval > u32::max_value().into() {
Some("bigger") Some("bigger")
} else { } else {
@ -83,7 +84,7 @@ impl time::interface::TimeManager for GenericTimer {
} }
// Set the compare value register. // Set the compare value register.
CNTP_TVAL_EL0.set(tval as u32); CNTP_TVAL_EL0.set(tval);
// Kick off the counting. // Disable timer interrupt. // Kick off the counting. // Disable timer interrupt.
CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET); CNTP_CTL_EL0.modify(CNTP_CTL_EL0::ENABLE::SET + CNTP_CTL_EL0::IMASK::SET);

Loading…
Cancel
Save