From 2c3f7050518a3aba2dd1b22e13c671b6e9246e65 Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Mon, 23 Nov 2020 22:34:20 +0100 Subject: [PATCH] Update dependencies register-rs 1.0.0 now uses UnsafeCell internally, which means we lost the Copy derive on InMemoryRegister. Therefore, a small set of changes was needed in the MMU driver to dance around the static array init depending on a Copy type. --- 04_zero_overhead_abstraction/Cargo.lock | 12 ++++---- 04_zero_overhead_abstraction/Cargo.toml | 2 +- 04_zero_overhead_abstraction/README.md | 2 +- 05_safe_globals/Cargo.lock | 12 ++++---- 05_safe_globals/Cargo.toml | 2 +- 06_drivers_gpio_uart/Cargo.lock | 12 ++++---- 06_drivers_gpio_uart/Cargo.toml | 4 +-- 06_drivers_gpio_uart/README.md | 4 +-- 07_uart_chainloader/Cargo.lock | 12 ++++---- 07_uart_chainloader/Cargo.toml | 4 +-- 08_timestamps/Cargo.lock | 12 ++++---- 08_timestamps/Cargo.toml | 4 +-- 09_hw_debug_JTAG/Cargo.lock | 12 ++++---- 09_hw_debug_JTAG/Cargo.toml | 4 +-- 10_privilege_level/Cargo.lock | 12 ++++---- 10_privilege_level/Cargo.toml | 4 +-- .../Cargo.lock | 12 ++++---- .../Cargo.toml | 4 +-- .../README.md | 12 ++++---- .../src/_arch/aarch64/memory/mmu.rs | 12 ++++---- 12_exceptions_part1_groundwork/Cargo.lock | 12 ++++---- 12_exceptions_part1_groundwork/Cargo.toml | 4 +-- .../src/_arch/aarch64/memory/mmu.rs | 12 ++++---- 13_integrated_testing/Cargo.lock | 16 +++++------ 13_integrated_testing/Cargo.toml | 6 ++-- 13_integrated_testing/README.md | 8 +++--- .../src/_arch/aarch64/memory/mmu.rs | 12 ++++---- .../Cargo.lock | 16 +++++------ .../Cargo.toml | 6 ++-- .../src/_arch/aarch64/memory/mmu.rs | 12 ++++---- 15_virtual_mem_part2_mmio_remap/Cargo.lock | 16 +++++------ 15_virtual_mem_part2_mmio_remap/Cargo.toml | 6 ++-- 15_virtual_mem_part2_mmio_remap/README.md | 27 +++++++++--------- .../src/_arch/aarch64/memory/mmu.rs | 15 +++++----- X1_JTAG_boot/Cargo.lock | 4 +-- X1_JTAG_boot/jtag_boot_rpi4.img | Bin 7384 -> 7384 bytes 36 files changed, 164 insertions(+), 162 deletions(-) diff --git a/04_zero_overhead_abstraction/Cargo.lock b/04_zero_overhead_abstraction/Cargo.lock index 9f7767f8..fd6d5c73 100644 --- a/04_zero_overhead_abstraction/Cargo.lock +++ b/04_zero_overhead_abstraction/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -18,15 +18,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/04_zero_overhead_abstraction/Cargo.toml b/04_zero_overhead_abstraction/Cargo.toml index c4b9e0b8..b0b0e9fb 100644 --- a/04_zero_overhead_abstraction/Cargo.toml +++ b/04_zero_overhead_abstraction/Cargo.toml @@ -18,5 +18,5 @@ bsp_rpi4 = [] # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/04_zero_overhead_abstraction/README.md b/04_zero_overhead_abstraction/README.md index 19d66e55..2721ea34 100644 --- a/04_zero_overhead_abstraction/README.md +++ b/04_zero_overhead_abstraction/README.md @@ -20,7 +20,7 @@ diff -uNr 03_hacky_hello_world/Cargo.toml 04_zero_overhead_abstraction/Cargo.tom + +# Platform specific dependencies +[target.'cfg(target_arch = "aarch64")'.dependencies] -+cortex-a = { version = "4.x.x" } ++cortex-a = { version = "5.x.x" } + diff -uNr 03_hacky_hello_world/src/_arch/aarch64/cpu/smp.rs 04_zero_overhead_abstraction/src/_arch/aarch64/cpu/smp.rs diff --git a/05_safe_globals/Cargo.lock b/05_safe_globals/Cargo.lock index 9f7767f8..fd6d5c73 100644 --- a/05_safe_globals/Cargo.lock +++ b/05_safe_globals/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -18,15 +18,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/05_safe_globals/Cargo.toml b/05_safe_globals/Cargo.toml index c4b9e0b8..b0b0e9fb 100644 --- a/05_safe_globals/Cargo.toml +++ b/05_safe_globals/Cargo.toml @@ -18,5 +18,5 @@ bsp_rpi4 = [] # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/06_drivers_gpio_uart/Cargo.lock b/06_drivers_gpio_uart/Cargo.lock index ab29d823..7b2456e1 100644 --- a/06_drivers_gpio_uart/Cargo.lock +++ b/06_drivers_gpio_uart/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/06_drivers_gpio_uart/Cargo.toml b/06_drivers_gpio_uart/Cargo.toml index 33dbda85..afa9688b 100644 --- a/06_drivers_gpio_uart/Cargo.toml +++ b/06_drivers_gpio_uart/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/06_drivers_gpio_uart/README.md b/06_drivers_gpio_uart/README.md index d0909a3c..11601304 100644 --- a/06_drivers_gpio_uart/README.md +++ b/06_drivers_gpio_uart/README.md @@ -121,11 +121,11 @@ diff -uNr 05_safe_globals/Cargo.toml 06_drivers_gpio_uart/Cargo.toml [dependencies] +# Optional dependencies -+register = { version = "0.5.x", optional = true } ++register = { version = "1.x.x", optional = true } + # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] - cortex-a = { version = "4.x.x" } + cortex-a = { version = "5.x.x" } diff -uNr 05_safe_globals/Makefile 06_drivers_gpio_uart/Makefile --- 05_safe_globals/Makefile diff --git a/07_uart_chainloader/Cargo.lock b/07_uart_chainloader/Cargo.lock index ab29d823..7b2456e1 100644 --- a/07_uart_chainloader/Cargo.lock +++ b/07_uart_chainloader/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/07_uart_chainloader/Cargo.toml b/07_uart_chainloader/Cargo.toml index 33dbda85..afa9688b 100644 --- a/07_uart_chainloader/Cargo.toml +++ b/07_uart_chainloader/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/08_timestamps/Cargo.lock b/08_timestamps/Cargo.lock index ab29d823..7b2456e1 100644 --- a/08_timestamps/Cargo.lock +++ b/08_timestamps/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/08_timestamps/Cargo.toml b/08_timestamps/Cargo.toml index 33dbda85..afa9688b 100644 --- a/08_timestamps/Cargo.toml +++ b/08_timestamps/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/09_hw_debug_JTAG/Cargo.lock b/09_hw_debug_JTAG/Cargo.lock index ab29d823..7b2456e1 100644 --- a/09_hw_debug_JTAG/Cargo.lock +++ b/09_hw_debug_JTAG/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/09_hw_debug_JTAG/Cargo.toml b/09_hw_debug_JTAG/Cargo.toml index 33dbda85..afa9688b 100644 --- a/09_hw_debug_JTAG/Cargo.toml +++ b/09_hw_debug_JTAG/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/10_privilege_level/Cargo.lock b/10_privilege_level/Cargo.lock index ab29d823..7b2456e1 100644 --- a/10_privilege_level/Cargo.lock +++ b/10_privilege_level/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/10_privilege_level/Cargo.toml b/10_privilege_level/Cargo.toml index 33dbda85..afa9688b 100644 --- a/10_privilege_level/Cargo.toml +++ b/10_privilege_level/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/11_virtual_mem_part1_identity_mapping/Cargo.lock b/11_virtual_mem_part1_identity_mapping/Cargo.lock index ab29d823..7b2456e1 100644 --- a/11_virtual_mem_part1_identity_mapping/Cargo.lock +++ b/11_virtual_mem_part1_identity_mapping/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/11_virtual_mem_part1_identity_mapping/Cargo.toml b/11_virtual_mem_part1_identity_mapping/Cargo.toml index 33dbda85..afa9688b 100644 --- a/11_virtual_mem_part1_identity_mapping/Cargo.toml +++ b/11_virtual_mem_part1_identity_mapping/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/11_virtual_mem_part1_identity_mapping/README.md b/11_virtual_mem_part1_identity_mapping/README.md index 0474bfbc..4d9299a2 100644 --- a/11_virtual_mem_part1_identity_mapping/README.md +++ b/11_virtual_mem_part1_identity_mapping/README.md @@ -394,14 +394,14 @@ diff -uNr 10_privilege_level/src/_arch/aarch64/memory/mmu.rs 11_virtual_mem_part +/// The output points to the next table. +#[derive(Copy, Clone)] +#[repr(transparent)] -+struct TableDescriptor(InMemoryRegister); ++struct TableDescriptor(u64); + +/// A page descriptor with 64 KiB aperture. +/// +/// The output points to physical memory. +#[derive(Copy, Clone)] +#[repr(transparent)] -+struct PageDescriptor(InMemoryRegister); ++struct PageDescriptor(u64); + +/// Big monolithic struct for storing the translation tables. Individual levels must be 64 KiB +/// aligned, hence the "reverse" order of appearance. @@ -472,7 +472,7 @@ diff -uNr 10_privilege_level/src/_arch/aarch64/memory/mmu.rs 11_virtual_mem_part + + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), + ); + -+ TableDescriptor(val) ++ TableDescriptor(val.get()) + } +} + @@ -524,7 +524,7 @@ diff -uNr 10_privilege_level/src/_arch/aarch64/memory/mmu.rs 11_virtual_mem_part + + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), + ); + -+ Self(val) ++ Self(val.get()) + } +} + @@ -534,8 +534,8 @@ diff -uNr 10_privilege_level/src/_arch/aarch64/memory/mmu.rs 11_virtual_mem_part + assert!(NUM_TABLES > 0); + + Self { -+ lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], -+ lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], ++ lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], ++ lvl2: [TableDescriptor(0); NUM_TABLES], + } + } +} diff --git a/11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs b/11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs index 80b03e8a..ff653a09 100644 --- a/11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs +++ b/11_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs @@ -89,14 +89,14 @@ const FIVETWELVE_MIB_SHIFT: usize = 29; // log2(512 * 1024 * 1024) /// The output points to the next table. #[derive(Copy, Clone)] #[repr(transparent)] -struct TableDescriptor(InMemoryRegister); +struct TableDescriptor(u64); /// A page descriptor with 64 KiB aperture. /// /// The output points to physical memory. #[derive(Copy, Clone)] #[repr(transparent)] -struct PageDescriptor(InMemoryRegister); +struct PageDescriptor(u64); /// Big monolithic struct for storing the translation tables. Individual levels must be 64 KiB /// aligned, hence the "reverse" order of appearance. @@ -167,7 +167,7 @@ impl convert::From for TableDescriptor { + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), ); - TableDescriptor(val) + TableDescriptor(val.get()) } } @@ -219,7 +219,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } } @@ -229,8 +229,8 @@ impl FixedSizeTranslationTable<{ NUM_TABLES }> { assert!(NUM_TABLES > 0); Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], } } } diff --git a/12_exceptions_part1_groundwork/Cargo.lock b/12_exceptions_part1_groundwork/Cargo.lock index ab29d823..7b2456e1 100644 --- a/12_exceptions_part1_groundwork/Cargo.lock +++ b/12_exceptions_part1_groundwork/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -19,15 +19,15 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" diff --git a/12_exceptions_part1_groundwork/Cargo.toml b/12_exceptions_part1_groundwork/Cargo.toml index 33dbda85..afa9688b 100644 --- a/12_exceptions_part1_groundwork/Cargo.toml +++ b/12_exceptions_part1_groundwork/Cargo.toml @@ -17,9 +17,9 @@ bsp_rpi4 = ["register"] [dependencies] # Optional dependencies -register = { version = "0.5.x", optional = true } +register = { version = "1.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } diff --git a/12_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs b/12_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs index 80b03e8a..ff653a09 100644 --- a/12_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs +++ b/12_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs @@ -89,14 +89,14 @@ const FIVETWELVE_MIB_SHIFT: usize = 29; // log2(512 * 1024 * 1024) /// The output points to the next table. #[derive(Copy, Clone)] #[repr(transparent)] -struct TableDescriptor(InMemoryRegister); +struct TableDescriptor(u64); /// A page descriptor with 64 KiB aperture. /// /// The output points to physical memory. #[derive(Copy, Clone)] #[repr(transparent)] -struct PageDescriptor(InMemoryRegister); +struct PageDescriptor(u64); /// Big monolithic struct for storing the translation tables. Individual levels must be 64 KiB /// aligned, hence the "reverse" order of appearance. @@ -167,7 +167,7 @@ impl convert::From for TableDescriptor { + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), ); - TableDescriptor(val) + TableDescriptor(val.get()) } } @@ -219,7 +219,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } } @@ -229,8 +229,8 @@ impl FixedSizeTranslationTable<{ NUM_TABLES }> { assert!(NUM_TABLES > 0); Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], } } } diff --git a/13_integrated_testing/Cargo.lock b/13_integrated_testing/Cargo.lock index b7cf3d96..8930bc96 100644 --- a/13_integrated_testing/Cargo.lock +++ b/13_integrated_testing/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -46,18 +46,18 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "syn" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "443b4178719c5a851e1bde36ce12da21d74a0e60b4d982ec3385a933c812f0f6" dependencies = [ "proc-macro2", "quote", @@ -80,9 +80,9 @@ version = "0.1.0" [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" [[package]] name = "unicode-xid" diff --git a/13_integrated_testing/Cargo.toml b/13_integrated_testing/Cargo.toml index 7ec46f55..cd196bd9 100644 --- a/13_integrated_testing/Cargo.toml +++ b/13_integrated_testing/Cargo.toml @@ -15,15 +15,15 @@ bsp_rpi4 = ["register"] ##-------------------------------------------------------------------------------------------------- [dependencies] -qemu-exit = "1.0.x" +qemu-exit = "1.x.x" test-types = { path = "test-types" } # Optional dependencies -register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } +register = { version = "1.x.x", features = ["no_std_unit_tests"], optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/13_integrated_testing/README.md b/13_integrated_testing/README.md index 854d9a63..69114d1e 100644 --- a/13_integrated_testing/README.md +++ b/13_integrated_testing/README.md @@ -801,16 +801,16 @@ diff -uNr 12_exceptions_part1_groundwork/Cargo.toml 13_integrated_testing/Cargo. ##-------------------------------------------------------------------------------------------------- [dependencies] -+qemu-exit = "1.0.x" ++qemu-exit = "1.x.x" +test-types = { path = "test-types" } # Optional dependencies --register = { version = "0.5.x", optional = true } -+register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } +-register = { version = "1.x.x", optional = true } ++register = { version = "1.x.x", features = ["no_std_unit_tests"], optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] - cortex-a = { version = "4.x.x" } + cortex-a = { version = "5.x.x" } +##-------------------------------------------------------------------------------------------------- +## Testing diff --git a/13_integrated_testing/src/_arch/aarch64/memory/mmu.rs b/13_integrated_testing/src/_arch/aarch64/memory/mmu.rs index b9b2f8a0..1ccb3fd7 100644 --- a/13_integrated_testing/src/_arch/aarch64/memory/mmu.rs +++ b/13_integrated_testing/src/_arch/aarch64/memory/mmu.rs @@ -89,14 +89,14 @@ const FIVETWELVE_MIB_SHIFT: usize = 29; // log2(512 * 1024 * 1024) /// The output points to the next table. #[derive(Copy, Clone)] #[repr(transparent)] -struct TableDescriptor(InMemoryRegister); +struct TableDescriptor(u64); /// A page descriptor with 64 KiB aperture. /// /// The output points to physical memory. #[derive(Copy, Clone)] #[repr(transparent)] -struct PageDescriptor(InMemoryRegister); +struct PageDescriptor(u64); /// Big monolithic struct for storing the translation tables. Individual levels must be 64 KiB /// aligned, hence the "reverse" order of appearance. @@ -167,7 +167,7 @@ impl convert::From for TableDescriptor { + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), ); - TableDescriptor(val) + TableDescriptor(val.get()) } } @@ -219,7 +219,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } } @@ -229,8 +229,8 @@ impl FixedSizeTranslationTable<{ NUM_TABLES }> { assert!(NUM_TABLES > 0); Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], } } } diff --git a/14_exceptions_part2_peripheral_IRQs/Cargo.lock b/14_exceptions_part2_peripheral_IRQs/Cargo.lock index b7cf3d96..8930bc96 100644 --- a/14_exceptions_part2_peripheral_IRQs/Cargo.lock +++ b/14_exceptions_part2_peripheral_IRQs/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -46,18 +46,18 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "syn" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "443b4178719c5a851e1bde36ce12da21d74a0e60b4d982ec3385a933c812f0f6" dependencies = [ "proc-macro2", "quote", @@ -80,9 +80,9 @@ version = "0.1.0" [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" [[package]] name = "unicode-xid" diff --git a/14_exceptions_part2_peripheral_IRQs/Cargo.toml b/14_exceptions_part2_peripheral_IRQs/Cargo.toml index 7ec46f55..cd196bd9 100644 --- a/14_exceptions_part2_peripheral_IRQs/Cargo.toml +++ b/14_exceptions_part2_peripheral_IRQs/Cargo.toml @@ -15,15 +15,15 @@ bsp_rpi4 = ["register"] ##-------------------------------------------------------------------------------------------------- [dependencies] -qemu-exit = "1.0.x" +qemu-exit = "1.x.x" test-types = { path = "test-types" } # Optional dependencies -register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } +register = { version = "1.x.x", features = ["no_std_unit_tests"], optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs b/14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs index b9b2f8a0..1ccb3fd7 100644 --- a/14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs +++ b/14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs @@ -89,14 +89,14 @@ const FIVETWELVE_MIB_SHIFT: usize = 29; // log2(512 * 1024 * 1024) /// The output points to the next table. #[derive(Copy, Clone)] #[repr(transparent)] -struct TableDescriptor(InMemoryRegister); +struct TableDescriptor(u64); /// A page descriptor with 64 KiB aperture. /// /// The output points to physical memory. #[derive(Copy, Clone)] #[repr(transparent)] -struct PageDescriptor(InMemoryRegister); +struct PageDescriptor(u64); /// Big monolithic struct for storing the translation tables. Individual levels must be 64 KiB /// aligned, hence the "reverse" order of appearance. @@ -167,7 +167,7 @@ impl convert::From for TableDescriptor { + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), ); - TableDescriptor(val) + TableDescriptor(val.get()) } } @@ -219,7 +219,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } } @@ -229,8 +229,8 @@ impl FixedSizeTranslationTable<{ NUM_TABLES }> { assert!(NUM_TABLES > 0); Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], } } } diff --git a/15_virtual_mem_part2_mmio_remap/Cargo.lock b/15_virtual_mem_part2_mmio_remap/Cargo.lock index b7cf3d96..8930bc96 100644 --- a/15_virtual_mem_part2_mmio_remap/Cargo.lock +++ b/15_virtual_mem_part2_mmio_remap/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "626fdbb0f6fa1e6be6df0e94795998894c4ad08d3221e12209a6c0b4f546a0c4" dependencies = [ "register", ] @@ -46,18 +46,18 @@ dependencies = [ [[package]] name = "register" -version = "0.5.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba5b0e477d21f61a57504bb5cef4a1e86de30300b457d38971c1cfc98b815" +checksum = "185fff3cbc031a1d17b86a980f8014002da35f9187cf4370728e0eb1eeff6829" dependencies = [ "tock-registers", ] [[package]] name = "syn" -version = "1.0.48" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "443b4178719c5a851e1bde36ce12da21d74a0e60b4d982ec3385a933c812f0f6" dependencies = [ "proc-macro2", "quote", @@ -80,9 +80,9 @@ version = "0.1.0" [[package]] name = "tock-registers" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70323afdb8082186c0986da0e10f6e4ed103d681c921c00597e98d9806dac20f" +checksum = "f521a79accce68c417c9c77ce22108056b626126da1932f7e2e9b5bbffee0cea" [[package]] name = "unicode-xid" diff --git a/15_virtual_mem_part2_mmio_remap/Cargo.toml b/15_virtual_mem_part2_mmio_remap/Cargo.toml index 7ec46f55..cd196bd9 100644 --- a/15_virtual_mem_part2_mmio_remap/Cargo.toml +++ b/15_virtual_mem_part2_mmio_remap/Cargo.toml @@ -15,15 +15,15 @@ bsp_rpi4 = ["register"] ##-------------------------------------------------------------------------------------------------- [dependencies] -qemu-exit = "1.0.x" +qemu-exit = "1.x.x" test-types = { path = "test-types" } # Optional dependencies -register = { version = "0.5.x", features = ["no_std_unit_tests"], optional = true } +register = { version = "1.x.x", features = ["no_std_unit_tests"], optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "4.x.x" } +cortex-a = { version = "5.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/15_virtual_mem_part2_mmio_remap/README.md b/15_virtual_mem_part2_mmio_remap/README.md index c68880d3..44a9eebd 100644 --- a/15_virtual_mem_part2_mmio_remap/README.md +++ b/15_virtual_mem_part2_mmio_remap/README.md @@ -367,7 +367,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 /// The output points to the next table. @@ -98,36 +105,65 @@ #[repr(transparent)] - struct PageDescriptor(InMemoryRegister); + struct PageDescriptor(u64); +#[derive(Copy, Clone)] +enum Granule512MiB {} @@ -488,7 +488,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 val.write( STAGE1_TABLE_DESCRIPTOR::VALID::True + STAGE1_TABLE_DESCRIPTOR::TYPE::Table -@@ -207,23 +246,32 @@ +@@ -207,23 +246,33 @@ impl PageDescriptor { /// Create an instance. @@ -507,12 +507,13 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } + + /// Returns the valid bit. + fn is_valid(&self) -> bool { -+ self.0.is_set(STAGE1_PAGE_DESCRIPTOR::VALID) ++ InMemoryRegister::::new(self.0) ++ .is_set(STAGE1_PAGE_DESCRIPTOR::VALID) + } } @@ -524,10 +525,10 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 /// Create an instance. pub const fn new() -> Self { assert!(NUM_TABLES > 0); -@@ -231,7 +279,55 @@ +@@ -231,7 +280,55 @@ Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], + cur_l3_mmio_index: 0, + initialized: false, + } @@ -580,7 +581,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 } } -@@ -248,28 +344,6 @@ +@@ -248,28 +345,6 @@ ); } @@ -609,7 +610,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 /// Configure various settings of stage 1 of the EL1 translation regime. fn configure_translation_control() { let ips = ID_AA64MMFR0_EL1.read(ID_AA64MMFR0_EL1::PARange); -@@ -282,7 +356,7 @@ +@@ -282,7 +357,7 @@ + TCR_EL1::ORGN0::WriteBack_ReadAlloc_WriteAlloc_Cacheable + TCR_EL1::IRGN0::WriteBack_ReadAlloc_WriteAlloc_Cacheable + TCR_EL1::EPD0::EnableTTBR0Walks @@ -618,7 +619,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 ); } -@@ -290,17 +364,126 @@ +@@ -290,17 +365,126 @@ // Public Code //-------------------------------------------------------------------------------------------------- @@ -748,7 +749,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 // Fail early if translation granule is not supported. Both RPis support it, though. if !ID_AA64MMFR0_EL1.matches_all(ID_AA64MMFR0_EL1::TGran64::Supported) { return Err("Translation granule not supported in HW"); -@@ -309,11 +492,8 @@ +@@ -309,11 +493,8 @@ // Prepare the memory attribute indirection register. set_up_mair(); @@ -761,7 +762,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 configure_translation_control(); -@@ -337,6 +517,9 @@ +@@ -337,6 +518,9 @@ //-------------------------------------------------------------------------------------------------- #[cfg(test)] @@ -771,7 +772,7 @@ diff -uNr 14_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu.rs 15 mod tests { use super::*; use test_macros::kernel_test; -@@ -363,7 +546,7 @@ +@@ -363,7 +547,7 @@ #[kernel_test] fn kernel_tables_in_bss() { let bss_range = bsp::memory::bss_range_inclusive(); diff --git a/15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu.rs b/15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu.rs index b20edf0a..cf0989be 100644 --- a/15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu.rs +++ b/15_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu.rs @@ -96,14 +96,14 @@ register_bitfields! {u64, /// The output points to the next table. #[derive(Copy, Clone)] #[repr(transparent)] -struct TableDescriptor(InMemoryRegister); +struct TableDescriptor(u64); /// A page descriptor with 64 KiB aperture. /// /// The output points to physical memory. #[derive(Copy, Clone)] #[repr(transparent)] -struct PageDescriptor(InMemoryRegister); +struct PageDescriptor(u64); #[derive(Copy, Clone)] enum Granule512MiB {} @@ -206,7 +206,7 @@ impl convert::From for TableDescriptor { + STAGE1_TABLE_DESCRIPTOR::NEXT_LEVEL_TABLE_ADDR_64KiB.val(shifted as u64), ); - TableDescriptor(val) + TableDescriptor(val.get()) } } @@ -258,12 +258,13 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::OUTPUT_ADDR_64KiB.val(shifted), ); - Self(val) + Self(val.get()) } /// Returns the valid bit. fn is_valid(&self) -> bool { - self.0.is_set(STAGE1_PAGE_DESCRIPTOR::VALID) + InMemoryRegister::::new(self.0) + .is_set(STAGE1_PAGE_DESCRIPTOR::VALID) } } @@ -277,8 +278,8 @@ impl FixedSizeTranslationTable<{ NUM_TABLES }> { assert!(NUM_TABLES > 0); Self { - lvl3: [[PageDescriptor(InMemoryRegister::new(0)); 8192]; NUM_TABLES], - lvl2: [TableDescriptor(InMemoryRegister::new(0)); NUM_TABLES], + lvl3: [[PageDescriptor(0); 8192]; NUM_TABLES], + lvl2: [TableDescriptor(0); NUM_TABLES], cur_l3_mmio_index: 0, initialized: false, } diff --git a/X1_JTAG_boot/Cargo.lock b/X1_JTAG_boot/Cargo.lock index ab29d823..102e5730 100644 --- a/X1_JTAG_boot/Cargo.lock +++ b/X1_JTAG_boot/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "cortex-a" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda21b8ec67b82099401559fe28cea4508eb1e33217b4dacf60ba22e39b486b1" +checksum = "a389514c1229e12a03c0e8de8b357671b71e1d1bdab3a4f5b591abc94169cba8" dependencies = [ "register", ] diff --git a/X1_JTAG_boot/jtag_boot_rpi4.img b/X1_JTAG_boot/jtag_boot_rpi4.img index 5f1bf1230cafde5677c72084507d5cfd33e3d69a..242b815921a9fddd8f18ab19c44e2dd051e11b4f 100755 GIT binary patch delta 49 zcmV-10M7r|IoLU{4Fmy!vkn9+0s+CZItFF|7UBZ|st5!?so(<$s_Oy(6aWA~`A-0| Hwg(~=g3Aun delta 49 zcmV-10M7r|IoLU{4Fmz9vkn9+0s(=uItFF|761T1`BMM@6ygH`st5!?so(<$s_6o= Hwg(~=aG?&i