From 5e3af39bdc58da3e9b31995b7b30d6fd6392801a Mon Sep 17 00:00:00 2001 From: Andre Richter Date: Sun, 6 Nov 2022 22:02:03 +0100 Subject: [PATCH] Change to aarch64-cpu crate --- 02_runtime_init/Cargo.lock | 8 +- 02_runtime_init/Cargo.toml | 2 +- 02_runtime_init/README.ES.md | 2 +- 02_runtime_init/README.md | 8 +- 02_runtime_init/src/_arch/aarch64/cpu.rs | 2 +- 03_hacky_hello_world/Cargo.lock | 8 +- 03_hacky_hello_world/Cargo.toml | 2 +- 03_hacky_hello_world/src/_arch/aarch64/cpu.rs | 2 +- 04_safe_globals/Cargo.lock | 8 +- 04_safe_globals/Cargo.toml | 2 +- 04_safe_globals/src/_arch/aarch64/cpu.rs | 2 +- 05_drivers_gpio_uart/Cargo.lock | 8 +- 05_drivers_gpio_uart/Cargo.toml | 2 +- 05_drivers_gpio_uart/README.md | 2 +- 05_drivers_gpio_uart/src/_arch/aarch64/cpu.rs | 2 +- 06_uart_chainloader/Cargo.lock | 8 +- 06_uart_chainloader/Cargo.toml | 2 +- 06_uart_chainloader/demo_payload_rpi3.img | Bin 7648 -> 9496 bytes 06_uart_chainloader/demo_payload_rpi4.img | Bin 7584 -> 9472 bytes 06_uart_chainloader/src/_arch/aarch64/cpu.rs | 2 +- 07_timestamps/Cargo.lock | 8 +- 07_timestamps/Cargo.toml | 2 +- 07_timestamps/README.md | 2 +- 07_timestamps/src/_arch/aarch64/cpu.rs | 2 +- 07_timestamps/src/_arch/aarch64/time.rs | 2 +- 08_hw_debug_JTAG/Cargo.lock | 8 +- 08_hw_debug_JTAG/Cargo.toml | 2 +- 08_hw_debug_JTAG/src/_arch/aarch64/cpu.rs | 2 +- 08_hw_debug_JTAG/src/_arch/aarch64/time.rs | 2 +- 09_privilege_level/Cargo.lock | 8 +- 09_privilege_level/Cargo.toml | 2 +- 09_privilege_level/README.md | 19 ++-- 09_privilege_level/src/_arch/aarch64/cpu.rs | 2 +- .../src/_arch/aarch64/cpu/boot.rs | 2 +- .../src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- 09_privilege_level/src/_arch/aarch64/time.rs | 2 +- .../Cargo.lock | 8 +- .../Cargo.toml | 2 +- .../README.md | 12 +-- .../src/_arch/aarch64/cpu.rs | 2 +- .../src/_arch/aarch64/cpu/boot.rs | 2 +- .../src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../src/_arch/aarch64/memory/mmu.rs | 2 +- .../src/_arch/aarch64/time.rs | 2 +- 11_exceptions_part1_groundwork/Cargo.lock | 8 +- 11_exceptions_part1_groundwork/Cargo.toml | 2 +- 11_exceptions_part1_groundwork/README.md | 4 +- .../src/_arch/aarch64/cpu.rs | 2 +- .../src/_arch/aarch64/cpu/boot.rs | 2 +- .../src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../src/_arch/aarch64/memory/mmu.rs | 2 +- .../src/_arch/aarch64/time.rs | 2 +- 12_integrated_testing/Cargo.lock | 8 +- 12_integrated_testing/kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- .../Cargo.lock | 8 +- 13_exceptions_part2_peripheral_IRQs/README.md | 11 +- .../kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- 14_virtual_mem_part2_mmio_remap/Cargo.lock | 8 +- 14_virtual_mem_part2_mmio_remap/README.md | 2 +- .../kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- .../Cargo.lock | 8 +- .../README.md | 2 +- .../kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- .../Cargo.lock | 8 +- .../kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- 17_kernel_symbols/Cargo.lock | 8 +- 17_kernel_symbols/README.md | 2 +- 17_kernel_symbols/kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- 18_backtrace/Cargo.lock | 8 +- 18_backtrace/README.md | 8 +- 18_backtrace/kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/backtrace.rs | 2 +- 18_backtrace/kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- 18_backtrace/kernel/src/_arch/aarch64/time.rs | 2 +- 19_kernel_heap/Cargo.lock | 8 +- 19_kernel_heap/kernel/Cargo.lock | 96 ------------------ 19_kernel_heap/kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/backtrace.rs | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- 20_timer_callbacks/Cargo.lock | 8 +- 20_timer_callbacks/README.md | 2 +- 20_timer_callbacks/kernel/Cargo.lock | 96 ------------------ 20_timer_callbacks/kernel/Cargo.toml | 2 +- .../kernel/src/_arch/aarch64/backtrace.rs | 2 +- .../kernel/src/_arch/aarch64/cpu.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/boot.rs | 2 +- .../kernel/src/_arch/aarch64/cpu/smp.rs | 2 +- .../kernel/src/_arch/aarch64/exception.rs | 2 +- .../_arch/aarch64/exception/asynchronous.rs | 2 +- .../kernel/src/_arch/aarch64/memory/mmu.rs | 2 +- .../kernel/src/_arch/aarch64/time.rs | 2 +- X1_JTAG_boot/Cargo.lock | 8 +- X1_JTAG_boot/Cargo.toml | 2 +- X1_JTAG_boot/jtag_boot_rpi3.img | Bin 8648 -> 10216 bytes X1_JTAG_boot/jtag_boot_rpi4.img | Bin 7744 -> 9368 bytes X1_JTAG_boot/src/_arch/aarch64/cpu.rs | 2 +- X1_JTAG_boot/src/_arch/aarch64/time.rs | 2 +- 152 files changed, 231 insertions(+), 423 deletions(-) delete mode 100644 19_kernel_heap/kernel/Cargo.lock delete mode 100644 20_timer_callbacks/kernel/Cargo.lock diff --git a/02_runtime_init/Cargo.lock b/02_runtime_init/Cargo.lock index 17e64197..e52e7fdf 100644 --- a/02_runtime_init/Cargo.lock +++ b/02_runtime_init/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.2.0" dependencies = [ - "cortex-a", + "aarch64-cpu", ] [[package]] diff --git a/02_runtime_init/Cargo.toml b/02_runtime_init/Cargo.toml index 59566db0..5946f43c 100644 --- a/02_runtime_init/Cargo.toml +++ b/02_runtime_init/Cargo.toml @@ -24,4 +24,4 @@ path = "src/main.rs" # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/02_runtime_init/README.ES.md b/02_runtime_init/README.ES.md index e1210e9b..2f93586f 100644 --- a/02_runtime_init/README.ES.md +++ b/02_runtime_init/README.ES.md @@ -28,7 +28,7 @@ * Llama a `kernel_init()`, que llama a `panic!()`, que al final también pone al núcleo 0 en pausa. -* La librería ahora usa el crate [cortex-a](https://github.com/rust-embedded/cortex-a), que nos da abstracciones sin coste y envuelve las partes que hacen uso de un `unsafe` (partes con código que no es seguro y podría causar errores) cuando se trabaja directamente con los recursos del procesador. +* La librería ahora usa el crate [aarch64-cpu](https://github.com/rust-embedded/aarch64-cpu), que nos da abstracciones sin coste y envuelve las partes que hacen uso de un `unsafe` (partes con código que no es seguro y podría causar errores) cuando se trabaja directamente con los recursos del procesador. * Lo puedes ver en acción en `_arch/__arch_name__/cpu.rs`. diff --git a/02_runtime_init/README.md b/02_runtime_init/README.md index 7b3fcd82..76fc07dd 100644 --- a/02_runtime_init/README.md +++ b/02_runtime_init/README.md @@ -19,12 +19,12 @@ 1. Jumps to the `_start_rust()` function, defined in `arch/__arch_name__/cpu/boot.rs`. - `_start_rust()`: - Calls `kernel_init()`, which calls `panic!()`, which eventually halts core0 as well. -- The library now uses the [cortex-a] crate, which provides zero-overhead abstractions and wraps +- The library now uses the [aarch64-cpu] crate, which provides zero-overhead abstractions and wraps `unsafe` parts when dealing with the CPU's resources. - See it in action in `_arch/__arch_name__/cpu.rs`. [bss]: https://en.wikipedia.org/wiki/.bss -[cortex-a]: https://github.com/rust-embedded/cortex-a +[aarch64-cpu]: https://github.com/rust-embedded/aarch64-cpu ## Diff to previous ```diff @@ -47,7 +47,7 @@ diff -uNr 01_wait_forever/Cargo.toml 02_runtime_init/Cargo.toml + +# Platform specific dependencies +[target.'cfg(target_arch = "aarch64")'.dependencies] -+cortex-a = { version = "8.x.x" } ++aarch64-cpu = { version = "9.x.x" } diff -uNr 01_wait_forever/Makefile 02_runtime_init/Makefile --- 01_wait_forever/Makefile @@ -165,7 +165,7 @@ diff -uNr 01_wait_forever/src/_arch/aarch64/cpu.rs 02_runtime_init/src/_arch/aar +//! +//! crate::cpu::arch_cpu + -+use cortex_a::asm; ++use aarch64_cpu::asm; + +//-------------------------------------------------------------------------------------------------- +// Public Code diff --git a/02_runtime_init/src/_arch/aarch64/cpu.rs b/02_runtime_init/src/_arch/aarch64/cpu.rs index 3b52e3a3..7872f85f 100644 --- a/02_runtime_init/src/_arch/aarch64/cpu.rs +++ b/02_runtime_init/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/03_hacky_hello_world/Cargo.lock b/03_hacky_hello_world/Cargo.lock index 6b68a92e..6e5873df 100644 --- a/03_hacky_hello_world/Cargo.lock +++ b/03_hacky_hello_world/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.3.0" dependencies = [ - "cortex-a", + "aarch64-cpu", ] [[package]] diff --git a/03_hacky_hello_world/Cargo.toml b/03_hacky_hello_world/Cargo.toml index e3e95003..a6d527c1 100644 --- a/03_hacky_hello_world/Cargo.toml +++ b/03_hacky_hello_world/Cargo.toml @@ -24,4 +24,4 @@ path = "src/main.rs" # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/03_hacky_hello_world/src/_arch/aarch64/cpu.rs b/03_hacky_hello_world/src/_arch/aarch64/cpu.rs index 3b52e3a3..7872f85f 100644 --- a/03_hacky_hello_world/src/_arch/aarch64/cpu.rs +++ b/03_hacky_hello_world/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/04_safe_globals/Cargo.lock b/04_safe_globals/Cargo.lock index 21c1ad6f..3d196407 100644 --- a/04_safe_globals/Cargo.lock +++ b/04_safe_globals/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.4.0" dependencies = [ - "cortex-a", + "aarch64-cpu", ] [[package]] diff --git a/04_safe_globals/Cargo.toml b/04_safe_globals/Cargo.toml index 51ddd52b..1d8ee6a7 100644 --- a/04_safe_globals/Cargo.toml +++ b/04_safe_globals/Cargo.toml @@ -24,4 +24,4 @@ path = "src/main.rs" # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/04_safe_globals/src/_arch/aarch64/cpu.rs b/04_safe_globals/src/_arch/aarch64/cpu.rs index 3b52e3a3..7872f85f 100644 --- a/04_safe_globals/src/_arch/aarch64/cpu.rs +++ b/04_safe_globals/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/05_drivers_gpio_uart/Cargo.lock b/05_drivers_gpio_uart/Cargo.lock index 93873c45..4514e882 100644 --- a/05_drivers_gpio_uart/Cargo.lock +++ b/05_drivers_gpio_uart/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.5.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/05_drivers_gpio_uart/Cargo.toml b/05_drivers_gpio_uart/Cargo.toml index 1f6db5de..c431e438 100644 --- a/05_drivers_gpio_uart/Cargo.toml +++ b/05_drivers_gpio_uart/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/05_drivers_gpio_uart/README.md b/05_drivers_gpio_uart/README.md index f53a330b..563af1a7 100644 --- a/05_drivers_gpio_uart/README.md +++ b/05_drivers_gpio_uart/README.md @@ -181,7 +181,7 @@ diff -uNr 04_safe_globals/Cargo.toml 05_drivers_gpio_uart/Cargo.toml + # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] - cortex-a = { version = "8.x.x" } + aarch64-cpu = { version = "9.x.x" } diff -uNr 04_safe_globals/Makefile 05_drivers_gpio_uart/Makefile --- 04_safe_globals/Makefile diff --git a/05_drivers_gpio_uart/src/_arch/aarch64/cpu.rs b/05_drivers_gpio_uart/src/_arch/aarch64/cpu.rs index 2ef860d2..2431d2d2 100644 --- a/05_drivers_gpio_uart/src/_arch/aarch64/cpu.rs +++ b/05_drivers_gpio_uart/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/06_uart_chainloader/Cargo.lock b/06_uart_chainloader/Cargo.lock index c26c68d1..047875fe 100644 --- a/06_uart_chainloader/Cargo.lock +++ b/06_uart_chainloader/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.6.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/06_uart_chainloader/Cargo.toml b/06_uart_chainloader/Cargo.toml index 8770d7a0..27b413a2 100644 --- a/06_uart_chainloader/Cargo.toml +++ b/06_uart_chainloader/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/06_uart_chainloader/demo_payload_rpi3.img b/06_uart_chainloader/demo_payload_rpi3.img index 20f13981c87fa20c518e3039149ff063beb0eb3d..8109de38e1ee46ee668b5b5fcaa068e973753192 100755 GIT binary patch literal 9496 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 UY8a5p({^JW*>$+Kc+S871rEAvc>n+a literal 7648 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 Ctze}9 literal 7584 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 diff --git a/06_uart_chainloader/src/_arch/aarch64/cpu.rs b/06_uart_chainloader/src/_arch/aarch64/cpu.rs index 2ef860d2..2431d2d2 100644 --- a/06_uart_chainloader/src/_arch/aarch64/cpu.rs +++ b/06_uart_chainloader/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/07_timestamps/Cargo.lock b/07_timestamps/Cargo.lock index 5155fff2..be8e7c13 100644 --- a/07_timestamps/Cargo.lock +++ b/07_timestamps/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.7.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/07_timestamps/Cargo.toml b/07_timestamps/Cargo.toml index 5997997a..f4e4bcf6 100644 --- a/07_timestamps/Cargo.toml +++ b/07_timestamps/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/07_timestamps/README.md b/07_timestamps/README.md index 236def5b..afa75ad9 100644 --- a/07_timestamps/README.md +++ b/07_timestamps/README.md @@ -272,12 +272,12 @@ diff -uNr 06_uart_chainloader/src/_arch/aarch64/time.rs 07_timestamps/src/_arch/ +//! crate::time::arch_time + +use crate::warn; ++use aarch64_cpu::{asm::barrier, registers::*}; +use core::{ + num::{NonZeroU128, NonZeroU32, NonZeroU64}, + ops::{Add, Div}, + time::Duration, +}; -+use cortex_a::{asm::barrier, registers::*}; +use tock_registers::interfaces::Readable; + +//-------------------------------------------------------------------------------------------------- diff --git a/07_timestamps/src/_arch/aarch64/cpu.rs b/07_timestamps/src/_arch/aarch64/cpu.rs index 4414ac6a..bbe7687a 100644 --- a/07_timestamps/src/_arch/aarch64/cpu.rs +++ b/07_timestamps/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/07_timestamps/src/_arch/aarch64/time.rs b/07_timestamps/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/07_timestamps/src/_arch/aarch64/time.rs +++ b/07_timestamps/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/08_hw_debug_JTAG/Cargo.lock b/08_hw_debug_JTAG/Cargo.lock index bcfb442a..9020b4f9 100644 --- a/08_hw_debug_JTAG/Cargo.lock +++ b/08_hw_debug_JTAG/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.8.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/08_hw_debug_JTAG/Cargo.toml b/08_hw_debug_JTAG/Cargo.toml index 55963c38..e310c371 100644 --- a/08_hw_debug_JTAG/Cargo.toml +++ b/08_hw_debug_JTAG/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/08_hw_debug_JTAG/src/_arch/aarch64/cpu.rs b/08_hw_debug_JTAG/src/_arch/aarch64/cpu.rs index 4414ac6a..bbe7687a 100644 --- a/08_hw_debug_JTAG/src/_arch/aarch64/cpu.rs +++ b/08_hw_debug_JTAG/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/08_hw_debug_JTAG/src/_arch/aarch64/time.rs b/08_hw_debug_JTAG/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/08_hw_debug_JTAG/src/_arch/aarch64/time.rs +++ b/08_hw_debug_JTAG/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/09_privilege_level/Cargo.lock b/09_privilege_level/Cargo.lock index 29c6ef54..12b21042 100644 --- a/09_privilege_level/Cargo.lock +++ b/09_privilege_level/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.9.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/09_privilege_level/Cargo.toml b/09_privilege_level/Cargo.toml index a89435bc..480508b5 100644 --- a/09_privilege_level/Cargo.toml +++ b/09_privilege_level/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/09_privilege_level/README.md b/09_privilege_level/README.md index 5710fdb8..e0f73b63 100644 --- a/09_privilege_level/README.md +++ b/09_privilege_level/README.md @@ -75,7 +75,7 @@ We are already using them since [tutorial 07](../07_timestamps/), so of course w Therefore we set the respective flags in the [Counter-timer Hypervisor Control register] and additionally set the virtual offset to zero so that we get the real physical value everytime: -[Counter-timer Hypervisor Control register]: https://docs.rs/cortex-a/5.1.2/src/cortex_a/regs/cnthctl_el2.rs.html +[Counter-timer Hypervisor Control register]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/cnthctl_el2.rs.html ```rust // Enable timer counter registers for EL1. @@ -88,7 +88,7 @@ CNTVOFF_EL2.set(0); Next, we configure the [Hypervisor Configuration Register] such that `EL1` runs in `AArch64` mode, and not in `AArch32`, which would also be possible. -[Hypervisor Configuration Register]: https://docs.rs/cortex-a/5.1.2/src/cortex_a/regs/hcr_el2.rs.html +[Hypervisor Configuration Register]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/hcr_el2.rs.html ```rust // Set EL1 execution state to AArch64. @@ -100,7 +100,7 @@ HCR_EL2.write(HCR_EL2::RW::EL1IsAarch64); There is actually only one way to transition from a higher EL to a lower EL, which is by way of executing the [ERET] instruction. -[ERET]: https://docs.rs/cortex-a/5.1.2/src/cortex_a/asm.rs.html#87-96 +[ERET]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/asm.rs.html#92-101 This instruction will copy the contents of the [Saved Program Status Register - EL2] to `Current Program Status Register - EL1` and jump to the instruction address that is stored in the [Exception @@ -109,8 +109,8 @@ Link Register - EL2]. This is basically the reverse of what is happening when an exception is taken. You'll learn about that in an upcoming tutorial. -[Saved Program Status Register - EL2]: https://docs.rs/cortex-a/5.1.2/src/cortex_a/regs/spsr_el2.rs.html -[Exception Link Register - EL2]: https://docs.rs/cortex-a/5.1.2/src/cortex_a/regs/elr_el2.rs.html +[Saved Program Status Register - EL2]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/spsr_el2.rs.html +[Exception Link Register - EL2]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/elr_el2.rs.html ```rust // Set up a simulated exception return. @@ -212,11 +212,12 @@ diff -uNr 08_hw_debug_JTAG/Cargo.toml 09_privilege_level/Cargo.toml diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/cpu/boot.rs 09_privilege_level/src/_arch/aarch64/cpu/boot.rs --- 08_hw_debug_JTAG/src/_arch/aarch64/cpu/boot.rs +++ 09_privilege_level/src/_arch/aarch64/cpu/boot.rs -@@ -12,21 +12,72 @@ +@@ -11,22 +11,73 @@ + //! //! crate::cpu::boot::arch_boot ++use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -+use cortex_a::{asm, registers::*}; +use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. @@ -348,7 +349,7 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 09_privil +//! +//! crate::exception::asynchronous::arch_asynchronous + -+use cortex_a::registers::*; ++use aarch64_cpu::registers::*; +use tock_registers::interfaces::Readable; + +//-------------------------------------------------------------------------------------------------- @@ -435,7 +436,7 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception.rs 09_privilege_level/src +//! +//! crate::exception::arch_exception + -+use cortex_a::registers::*; ++use aarch64_cpu::registers::*; +use tock_registers::interfaces::Readable; + +//-------------------------------------------------------------------------------------------------- diff --git a/09_privilege_level/src/_arch/aarch64/cpu.rs b/09_privilege_level/src/_arch/aarch64/cpu.rs index 4414ac6a..bbe7687a 100644 --- a/09_privilege_level/src/_arch/aarch64/cpu.rs +++ b/09_privilege_level/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/09_privilege_level/src/_arch/aarch64/cpu/boot.rs b/09_privilege_level/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/09_privilege_level/src/_arch/aarch64/cpu/boot.rs +++ b/09_privilege_level/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/09_privilege_level/src/_arch/aarch64/exception.rs b/09_privilege_level/src/_arch/aarch64/exception.rs index c8eac4f0..c2b7cea8 100644 --- a/09_privilege_level/src/_arch/aarch64/exception.rs +++ b/09_privilege_level/src/_arch/aarch64/exception.rs @@ -11,7 +11,7 @@ //! //! crate::exception::arch_exception -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs b/09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs index e3e3672e..0347dc3f 100644 --- a/09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs +++ b/09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs @@ -11,7 +11,7 @@ //! //! crate::exception::asynchronous::arch_asynchronous -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/09_privilege_level/src/_arch/aarch64/time.rs b/09_privilege_level/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/09_privilege_level/src/_arch/aarch64/time.rs +++ b/09_privilege_level/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/10_virtual_mem_part1_identity_mapping/Cargo.lock b/10_virtual_mem_part1_identity_mapping/Cargo.lock index 4bfff935..af2a0a5d 100644 --- a/10_virtual_mem_part1_identity_mapping/Cargo.lock +++ b/10_virtual_mem_part1_identity_mapping/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.10.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/10_virtual_mem_part1_identity_mapping/Cargo.toml b/10_virtual_mem_part1_identity_mapping/Cargo.toml index d3e2582d..6f12f98e 100644 --- a/10_virtual_mem_part1_identity_mapping/Cargo.toml +++ b/10_virtual_mem_part1_identity_mapping/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/10_virtual_mem_part1_identity_mapping/README.md b/10_virtual_mem_part1_identity_mapping/README.md index 946500dc..36c37c79 100644 --- a/10_virtual_mem_part1_identity_mapping/README.md +++ b/10_virtual_mem_part1_identity_mapping/README.md @@ -218,9 +218,9 @@ self.configure_translation_control(); Finally, the `MMU` is turned on through the [System Control Register - EL1]. The last step also enables caching for data and instructions. -[Translation Table Base Register 0 - EL1]: https://docs.rs/crate/cortex-a/5.1.2/source/src/regs/ttbr0_el1.rs -[Translation Control Register - EL1]: https://docs.rs/crate/cortex-a/5.1.2/source/src/regs/tcr_el1.rs -[System Control Register - EL1]: https://docs.rs/crate/cortex-a/5.1.2/source/src/regs/sctlr_el1.rs +[Translation Table Base Register 0 - EL1]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/ttbr0_el1.rs.html +[Translation Control Register - EL1]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/tcr_el1.rs.html +[System Control Register - EL1]: https://docs.rs/aarch64-cpu/9.0.0/src/aarch64_cpu/registers/sctlr_el1.rs.html ### `kernel.ld` @@ -257,11 +257,11 @@ The MMU init code is again a good example to see the great potential of Rust's z abstractions[[1]][[2]] for embedded programming. Let's take a look again at the piece of code for setting up the `MAIR_EL1` register using the -[cortex-a] crate: +[aarch64-cpu] crate: [1]: https://blog.rust-lang.org/2015/05/11/traits.html [2]: https://ruudvanasseldonk.com/2016/11/30/zero-cost-abstractions -[cortex-a]: https://crates.io/crates/cortex-a +[aarch64-cpu]: https://crates.io/crates/aarch64-cpu ```rust /// Setup function for the MAIR_EL1 register. @@ -681,8 +681,8 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu.rs 10_virtual_mem_part + bsp, memory, + memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, +}; ++use aarch64_cpu::{asm::barrier, registers::*}; +use core::intrinsics::unlikely; -+use cortex_a::{asm::barrier, registers::*}; +use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; + +//-------------------------------------------------------------------------------------------------- diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu.rs index 4414ac6a..bbe7687a 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu/boot.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu/boot.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs index c8eac4f0..c2b7cea8 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs @@ -11,7 +11,7 @@ //! //! crate::exception::arch_exception -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception/asynchronous.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception/asynchronous.rs index e3e3672e..0347dc3f 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception/asynchronous.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception/asynchronous.rs @@ -11,7 +11,7 @@ //! //! crate::exception::asynchronous::arch_asynchronous -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs index 3a965f71..e5e2653a 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/time.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/time.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/11_exceptions_part1_groundwork/Cargo.lock b/11_exceptions_part1_groundwork/Cargo.lock index c7bfdadd..dd741b8d 100644 --- a/11_exceptions_part1_groundwork/Cargo.lock +++ b/11_exceptions_part1_groundwork/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.11.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/11_exceptions_part1_groundwork/Cargo.toml b/11_exceptions_part1_groundwork/Cargo.toml index c8d3613f..22343d4c 100644 --- a/11_exceptions_part1_groundwork/Cargo.toml +++ b/11_exceptions_part1_groundwork/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/11_exceptions_part1_groundwork/README.md b/11_exceptions_part1_groundwork/README.md index 12812acb..0a9cc9fc 100644 --- a/11_exceptions_part1_groundwork/README.md +++ b/11_exceptions_part1_groundwork/README.md @@ -507,10 +507,10 @@ diff -uNr 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs 1 //! //! crate::exception::arch_exception --use cortex_a::registers::*; +-use aarch64_cpu::registers::*; -use tock_registers::interfaces::Readable; ++use aarch64_cpu::{asm::barrier, registers::*}; +use core::{arch::global_asm, cell::UnsafeCell, fmt}; -+use cortex_a::{asm::barrier, registers::*}; +use tock_registers::{ + interfaces::{Readable, Writeable}, + registers::InMemoryRegister, diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu.rs index 4414ac6a..bbe7687a 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu/boot.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu/boot.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs index c72fb885..165e0730 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs @@ -11,8 +11,8 @@ //! //! crate::exception::arch_exception +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/exception/asynchronous.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/exception/asynchronous.rs index e3e3672e..0347dc3f 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/exception/asynchronous.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/exception/asynchronous.rs @@ -11,7 +11,7 @@ //! //! crate::exception::asynchronous::arch_asynchronous -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs index 3a965f71..e5e2653a 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/time.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/time.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/12_integrated_testing/Cargo.lock b/12_integrated_testing/Cargo.lock index abe5ab82..8db3db87 100644 --- a/12_integrated_testing/Cargo.lock +++ b/12_integrated_testing/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.12.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "qemu-exit", "test-macros", "test-types", diff --git a/12_integrated_testing/kernel/Cargo.toml b/12_integrated_testing/kernel/Cargo.toml index 7bbca0b4..97dd972e 100644 --- a/12_integrated_testing/kernel/Cargo.toml +++ b/12_integrated_testing/kernel/Cargo.toml @@ -23,7 +23,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/cpu.rs b/12_integrated_testing/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/cpu.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/cpu/boot.rs b/12_integrated_testing/kernel/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/exception.rs b/12_integrated_testing/kernel/src/_arch/aarch64/exception.rs index 5664605e..84681bc7 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/exception.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/exception.rs @@ -11,8 +11,8 @@ //! //! crate::exception::arch_exception +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs b/12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs index e3e3672e..0347dc3f 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,7 +11,7 @@ //! //! crate::exception::asynchronous::arch_asynchronous -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/memory/mmu.rs b/12_integrated_testing/kernel/src/_arch/aarch64/memory/mmu.rs index 15a7faeb..fbd4992f 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/12_integrated_testing/kernel/src/_arch/aarch64/time.rs b/12_integrated_testing/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/12_integrated_testing/kernel/src/_arch/aarch64/time.rs +++ b/12_integrated_testing/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/13_exceptions_part2_peripheral_IRQs/Cargo.lock b/13_exceptions_part2_peripheral_IRQs/Cargo.lock index d893a0af..ad1e8660 100644 --- a/13_exceptions_part2_peripheral_IRQs/Cargo.lock +++ b/13_exceptions_part2_peripheral_IRQs/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.13.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "qemu-exit", "test-macros", "test-types", diff --git a/13_exceptions_part2_peripheral_IRQs/README.md b/13_exceptions_part2_peripheral_IRQs/README.md index a8c503d5..944001e7 100644 --- a/13_exceptions_part2_peripheral_IRQs/README.md +++ b/13_exceptions_part2_peripheral_IRQs/README.md @@ -802,7 +802,7 @@ diff -uNr 12_integrated_testing/kernel/src/_arch/aarch64/cpu/smp.rs 13_exception +//! +//! crate::cpu::smp::arch_smp + -+use cortex_a::registers::*; ++use aarch64_cpu::registers::*; +use tock_registers::interfaces::Readable; + +//-------------------------------------------------------------------------------------------------- @@ -823,13 +823,12 @@ diff -uNr 12_integrated_testing/kernel/src/_arch/aarch64/cpu/smp.rs 13_exception diff -uNr 12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs 13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs --- 12_integrated_testing/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ 13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs -@@ -11,13 +11,18 @@ - //! +@@ -12,12 +12,17 @@ //! crate::exception::asynchronous::arch_asynchronous -+use core::arch::asm; - use cortex_a::registers::*; + use aarch64_cpu::registers::*; -use tock_registers::interfaces::Readable; ++use core::arch::asm; +use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- @@ -913,8 +912,8 @@ diff -uNr 12_integrated_testing/kernel/src/_arch/aarch64/exception.rs 13_excepti //! crate::exception::arch_exception +use crate::exception; + use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; - use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ @@ -102,8 +103,9 @@ } diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/Cargo.toml b/13_exceptions_part2_peripheral_IRQs/kernel/Cargo.toml index 5f371dda..3b04b97b 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/Cargo.toml +++ b/13_exceptions_part2_peripheral_IRQs/kernel/Cargo.toml @@ -23,7 +23,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/boot.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/smp.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception.rs index 3aa6fb24..71831178 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::exception; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/memory/mmu.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/memory/mmu.rs index 15a7faeb..fbd4992f 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/time.rs b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/time.rs +++ b/13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/14_virtual_mem_part2_mmio_remap/Cargo.lock b/14_virtual_mem_part2_mmio_remap/Cargo.lock index dd14a9d7..eea03734 100644 --- a/14_virtual_mem_part2_mmio_remap/Cargo.lock +++ b/14_virtual_mem_part2_mmio_remap/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.14.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "qemu-exit", "test-macros", "test-types", diff --git a/14_virtual_mem_part2_mmio_remap/README.md b/14_virtual_mem_part2_mmio_remap/README.md index 61117358..7d16e69c 100644 --- a/14_virtual_mem_part2_mmio_remap/README.md +++ b/14_virtual_mem_part2_mmio_remap/README.md @@ -751,8 +751,8 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/kernel/src/_arch/aarch64/memory/mm - memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule}, + memory::{mmu::TranslationGranule, Address, Physical}, }; + use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; - use cortex_a::{asm::barrier, registers::*}; @@ -46,13 +46,6 @@ // Global instances //-------------------------------------------------------------------------------------------------- diff --git a/14_virtual_mem_part2_mmio_remap/kernel/Cargo.toml b/14_virtual_mem_part2_mmio_remap/kernel/Cargo.toml index fe4e48e7..b85ecbed 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/Cargo.toml +++ b/14_virtual_mem_part2_mmio_remap/kernel/Cargo.toml @@ -23,7 +23,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/boot.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/boot.rs index 0bf45b83..b458f0db 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/boot.rs @@ -11,8 +11,8 @@ //! //! crate::cpu::boot::arch_boot +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/smp.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception.rs index 3aa6fb24..71831178 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::exception; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception/asynchronous.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/memory/mmu.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/memory/mmu.rs index e2db2d23..aaec1925 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/time.rs b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/time.rs +++ b/14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/15_virtual_mem_part3_precomputed_tables/Cargo.lock b/15_virtual_mem_part3_precomputed_tables/Cargo.lock index 6863764a..1bef088b 100644 --- a/15_virtual_mem_part3_precomputed_tables/Cargo.lock +++ b/15_virtual_mem_part3_precomputed_tables/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.15.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "qemu-exit", "test-macros", "test-types", diff --git a/15_virtual_mem_part3_precomputed_tables/README.md b/15_virtual_mem_part3_precomputed_tables/README.md index c850992e..23210265 100644 --- a/15_virtual_mem_part3_precomputed_tables/README.md +++ b/15_virtual_mem_part3_precomputed_tables/README.md @@ -816,8 +816,8 @@ diff -uNr 14_virtual_mem_part2_mmio_remap/kernel/src/_arch/aarch64/cpu/boot.rs 1 //! crate::cpu::boot::arch_boot +use crate::{memory, memory::Address}; + use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; - use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; @@ -75,9 +76,16 @@ /// diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/Cargo.toml b/15_virtual_mem_part3_precomputed_tables/kernel/Cargo.toml index 9a0408ad..73b6feef 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/Cargo.toml +++ b/15_virtual_mem_part3_precomputed_tables/kernel/Cargo.toml @@ -23,7 +23,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/boot.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/boot.rs index a66c0cb3..fc70fe7f 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,8 +12,8 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/smp.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception.rs index 3aa6fb24..71831178 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::exception; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception/asynchronous.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/memory/mmu.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/memory/mmu.rs index e2db2d23..aaec1925 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/time.rs b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/time.rs +++ b/15_virtual_mem_part3_precomputed_tables/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/16_virtual_mem_part4_higher_half_kernel/Cargo.lock b/16_virtual_mem_part4_higher_half_kernel/Cargo.lock index 1cd1bc74..52d5b3fb 100644 --- a/16_virtual_mem_part4_higher_half_kernel/Cargo.lock +++ b/16_virtual_mem_part4_higher_half_kernel/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.16.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "qemu-exit", "test-macros", "test-types", diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/Cargo.toml b/16_virtual_mem_part4_higher_half_kernel/kernel/Cargo.toml index 06b2573c..857256cb 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/Cargo.toml +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/Cargo.toml @@ -23,7 +23,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/boot.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/boot.rs index 293d4608..2cad1ab6 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,8 +12,8 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/smp.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception.rs index 3aa6fb24..71831178 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::exception; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception/asynchronous.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/memory/mmu.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/memory/mmu.rs index 3d6c18b7..74a71d11 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/time.rs b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/time.rs +++ b/16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/17_kernel_symbols/Cargo.lock b/17_kernel_symbols/Cargo.lock index af229efe..382a3bda 100644 --- a/17_kernel_symbols/Cargo.lock +++ b/17_kernel_symbols/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -26,7 +26,7 @@ dependencies = [ name = "mingo" version = "0.17.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "debug-symbol-types", "qemu-exit", "test-macros", diff --git a/17_kernel_symbols/README.md b/17_kernel_symbols/README.md index 925ed689..aec53437 100644 --- a/17_kernel_symbols/README.md +++ b/17_kernel_symbols/README.md @@ -272,8 +272,8 @@ diff -uNr 16_virtual_mem_part4_higher_half_kernel/kernel/src/_arch/aarch64/excep -use crate::exception; +use crate::{exception, memory, symbols}; + use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; - use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ @@ -260,6 +260,14 @@ diff --git a/17_kernel_symbols/kernel/Cargo.toml b/17_kernel_symbols/kernel/Cargo.toml index a2a83aad..58bf54d2 100644 --- a/17_kernel_symbols/kernel/Cargo.toml +++ b/17_kernel_symbols/kernel/Cargo.toml @@ -24,7 +24,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs index 293d4608..2cad1ab6 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,8 +12,8 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::arch::global_asm; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/smp.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/exception.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/exception.rs index 1d720f3e..926d6d38 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/exception.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::{exception, memory, symbols}; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/exception/asynchronous.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/memory/mmu.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/memory/mmu.rs index 3d6c18b7..74a71d11 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/17_kernel_symbols/kernel/src/_arch/aarch64/time.rs b/17_kernel_symbols/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/17_kernel_symbols/kernel/src/_arch/aarch64/time.rs +++ b/17_kernel_symbols/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/Cargo.lock b/18_backtrace/Cargo.lock index 2b51ab72..701f10f1 100644 --- a/18_backtrace/Cargo.lock +++ b/18_backtrace/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -26,7 +26,7 @@ dependencies = [ name = "mingo" version = "0.18.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "debug-symbol-types", "qemu-exit", "test-macros", diff --git a/18_backtrace/README.md b/18_backtrace/README.md index 837d0161..542fdfbb 100644 --- a/18_backtrace/README.md +++ b/18_backtrace/README.md @@ -415,7 +415,7 @@ diff -uNr 17_kernel_symbols/kernel/src/_arch/aarch64/backtrace.rs 18_backtrace/k + backtrace::BacktraceItem, + memory::{Address, Virtual}, +}; -+use cortex_a::registers::*; ++use aarch64_cpu::registers::*; +use tock_registers::interfaces::Readable; + +//-------------------------------------------------------------------------------------------------- @@ -538,18 +538,18 @@ diff -uNr 17_kernel_symbols/kernel/src/_arch/aarch64/backtrace.rs 18_backtrace/k diff -uNr 17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs 18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs --- 17_kernel_symbols/kernel/src/_arch/aarch64/cpu/boot.rs +++ 18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs -@@ -12,7 +12,10 @@ - //! crate::cpu::boot::arch_boot +@@ -13,7 +13,10 @@ use crate::{memory, memory::Address}; + use aarch64_cpu::{asm, registers::*}; -use core::arch::global_asm; +use core::{ + arch::global_asm, + sync::atomic::{compiler_fence, Ordering}, +}; - use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; + // Assembly counterpart to this file. @@ -67,6 +70,18 @@ SP_EL1.set(virt_boot_core_stack_end_exclusive_addr); } diff --git a/18_backtrace/kernel/Cargo.toml b/18_backtrace/kernel/Cargo.toml index 5a443538..bba97b8d 100644 --- a/18_backtrace/kernel/Cargo.toml +++ b/18_backtrace/kernel/Cargo.toml @@ -24,7 +24,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/18_backtrace/kernel/src/_arch/aarch64/backtrace.rs b/18_backtrace/kernel/src/_arch/aarch64/backtrace.rs index e8860984..3511c918 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/backtrace.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/backtrace.rs @@ -15,7 +15,7 @@ use crate::{ backtrace::BacktraceItem, memory::{Address, Virtual}, }; -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/kernel/src/_arch/aarch64/cpu.rs b/18_backtrace/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/cpu.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs b/18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs index 15ab92b6..d9662d3a 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,11 +12,11 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::{ arch::global_asm, sync::atomic::{compiler_fence, Ordering}, }; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/18_backtrace/kernel/src/_arch/aarch64/cpu/smp.rs b/18_backtrace/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/kernel/src/_arch/aarch64/exception.rs b/18_backtrace/kernel/src/_arch/aarch64/exception.rs index e03e382f..a8bc0d2f 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/exception.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::{exception, memory, symbols}; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/18_backtrace/kernel/src/_arch/aarch64/exception/asynchronous.rs b/18_backtrace/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/kernel/src/_arch/aarch64/memory/mmu.rs b/18_backtrace/kernel/src/_arch/aarch64/memory/mmu.rs index 3d6c18b7..74a71d11 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/18_backtrace/kernel/src/_arch/aarch64/time.rs b/18_backtrace/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/18_backtrace/kernel/src/_arch/aarch64/time.rs +++ b/18_backtrace/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/Cargo.lock b/19_kernel_heap/Cargo.lock index eb80ffea..0f642903 100644 --- a/19_kernel_heap/Cargo.lock +++ b/19_kernel_heap/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -32,7 +32,7 @@ checksum = "e322f259d225fbae43a1b053b2dc6a5968a6bdf8b205f5de684dab485b95030e" name = "mingo" version = "0.19.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "debug-symbol-types", "linked_list_allocator", "qemu-exit", diff --git a/19_kernel_heap/kernel/Cargo.lock b/19_kernel_heap/kernel/Cargo.lock deleted file mode 100644 index 9149faf0..00000000 --- a/19_kernel_heap/kernel/Cargo.lock +++ /dev/null @@ -1,96 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "cortex-a" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27bd91f65ccd348bb2d043d98c5b34af141ecef7f102147f59bf5898f6e734ad" -dependencies = [ - "tock-registers", -] - -[[package]] -name = "debug-symbol-types" -version = "0.1.0" - -[[package]] -name = "linked_list_allocator" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549ce1740e46b291953c4340adcd74c59bcf4308f4cac050fd33ba91b7168f4a" - -[[package]] -name = "mingo" -version = "0.19.0" -dependencies = [ - "cortex-a", - "debug-symbol-types", - "linked_list_allocator", - "qemu-exit", - "test-macros", - "test-types", - "tock-registers", -] - -[[package]] -name = "proc-macro2" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "qemu-exit" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" - -[[package]] -name = "quote" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "test-macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "test-types", -] - -[[package]] -name = "test-types" -version = "0.1.0" - -[[package]] -name = "tock-registers" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee8fba06c1f4d0b396ef61a54530bb6b28f0dc61c38bc8bc5a5a48161e6282e" - -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" diff --git a/19_kernel_heap/kernel/Cargo.toml b/19_kernel_heap/kernel/Cargo.toml index bccd0882..03ebfc02 100644 --- a/19_kernel_heap/kernel/Cargo.toml +++ b/19_kernel_heap/kernel/Cargo.toml @@ -26,7 +26,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/backtrace.rs b/19_kernel_heap/kernel/src/_arch/aarch64/backtrace.rs index e8860984..3511c918 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/backtrace.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/backtrace.rs @@ -15,7 +15,7 @@ use crate::{ backtrace::BacktraceItem, memory::{Address, Virtual}, }; -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/cpu.rs b/19_kernel_heap/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/cpu.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/cpu/boot.rs b/19_kernel_heap/kernel/src/_arch/aarch64/cpu/boot.rs index 15ab92b6..d9662d3a 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,11 +12,11 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::{ arch::global_asm, sync::atomic::{compiler_fence, Ordering}, }; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/cpu/smp.rs b/19_kernel_heap/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/exception.rs b/19_kernel_heap/kernel/src/_arch/aarch64/exception.rs index e03e382f..a8bc0d2f 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/exception.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::{exception, memory, symbols}; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/exception/asynchronous.rs b/19_kernel_heap/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/memory/mmu.rs b/19_kernel_heap/kernel/src/_arch/aarch64/memory/mmu.rs index 3d6c18b7..74a71d11 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/19_kernel_heap/kernel/src/_arch/aarch64/time.rs b/19_kernel_heap/kernel/src/_arch/aarch64/time.rs index 1e2efbec..94d02379 100644 --- a/19_kernel_heap/kernel/src/_arch/aarch64/time.rs +++ b/19_kernel_heap/kernel/src/_arch/aarch64/time.rs @@ -12,12 +12,12 @@ //! crate::time::arch_time use crate::warn; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/20_timer_callbacks/Cargo.lock b/20_timer_callbacks/Cargo.lock index 8f9eae58..754ed74d 100644 --- a/20_timer_callbacks/Cargo.lock +++ b/20_timer_callbacks/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -32,7 +32,7 @@ checksum = "e322f259d225fbae43a1b053b2dc6a5968a6bdf8b205f5de684dab485b95030e" name = "mingo" version = "0.20.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "debug-symbol-types", "linked_list_allocator", "qemu-exit", diff --git a/20_timer_callbacks/README.md b/20_timer_callbacks/README.md index 7d944b99..da5a5510 100644 --- a/20_timer_callbacks/README.md +++ b/20_timer_callbacks/README.md @@ -40,12 +40,12 @@ diff -uNr 19_kernel_heap/kernel/src/_arch/aarch64/time.rs 20_timer_callbacks/ker + bsp::{self, exception}, + warn, +}; + use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; - use cortex_a::{asm::barrier, registers::*}; -use tock_registers::interfaces::Readable; +use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; diff --git a/20_timer_callbacks/kernel/Cargo.lock b/20_timer_callbacks/kernel/Cargo.lock deleted file mode 100644 index 740209d0..00000000 --- a/20_timer_callbacks/kernel/Cargo.lock +++ /dev/null @@ -1,96 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "cortex-a" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" -dependencies = [ - "tock-registers", -] - -[[package]] -name = "debug-symbol-types" -version = "0.1.0" - -[[package]] -name = "linked_list_allocator" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322f259d225fbae43a1b053b2dc6a5968a6bdf8b205f5de684dab485b95030e" - -[[package]] -name = "mingo" -version = "0.20.0" -dependencies = [ - "cortex-a", - "debug-symbol-types", - "linked_list_allocator", - "qemu-exit", - "test-macros", - "test-types", - "tock-registers", -] - -[[package]] -name = "proc-macro2" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "qemu-exit" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff023245bfcc73fb890e1f8d5383825b3131cc920020a5c487d6f113dfc428a" - -[[package]] -name = "quote" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "test-macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "test-types", -] - -[[package]] -name = "test-types" -version = "0.1.0" - -[[package]] -name = "tock-registers" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "696941a0aee7e276a165a978b37918fd5d22c55c3d6bda197813070ca9c0f21c" - -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" diff --git a/20_timer_callbacks/kernel/Cargo.toml b/20_timer_callbacks/kernel/Cargo.toml index e127a857..87c9cbb6 100644 --- a/20_timer_callbacks/kernel/Cargo.toml +++ b/20_timer_callbacks/kernel/Cargo.toml @@ -26,7 +26,7 @@ qemu-exit = { version = "3.x.x", optional = true } # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } ##-------------------------------------------------------------------------------------------------- ## Testing diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/backtrace.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/backtrace.rs index e8860984..3511c918 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/backtrace.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/backtrace.rs @@ -15,7 +15,7 @@ use crate::{ backtrace::BacktraceItem, memory::{Address, Virtual}, }; -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu.rs index 66da661c..7eb7f010 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::arch_cpu -use cortex_a::asm; +use aarch64_cpu::asm; //-------------------------------------------------------------------------------------------------- // Public Code diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/boot.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/boot.rs index 15ab92b6..d9662d3a 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/boot.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/boot.rs @@ -12,11 +12,11 @@ //! crate::cpu::boot::arch_boot use crate::{memory, memory::Address}; +use aarch64_cpu::{asm, registers::*}; use core::{ arch::global_asm, sync::atomic::{compiler_fence, Ordering}, }; -use cortex_a::{asm, registers::*}; use tock_registers::interfaces::Writeable; // Assembly counterpart to this file. diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/smp.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/smp.rs index 351fde62..9d304d65 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/smp.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/cpu/smp.rs @@ -11,7 +11,7 @@ //! //! crate::cpu::smp::arch_smp -use cortex_a::registers::*; +use aarch64_cpu::registers::*; use tock_registers::interfaces::Readable; //-------------------------------------------------------------------------------------------------- diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/exception.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/exception.rs index e03e382f..a8bc0d2f 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/exception.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/exception.rs @@ -12,8 +12,8 @@ //! crate::exception::arch_exception use crate::{exception, memory, symbols}; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{arch::global_asm, cell::UnsafeCell, fmt}; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::{ interfaces::{Readable, Writeable}, registers::InMemoryRegister, diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/exception/asynchronous.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/exception/asynchronous.rs index cf6f97ac..f545a3e1 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/exception/asynchronous.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/exception/asynchronous.rs @@ -11,8 +11,8 @@ //! //! crate::exception::asynchronous::arch_asynchronous +use aarch64_cpu::registers::*; use core::arch::asm; -use cortex_a::registers::*; use tock_registers::interfaces::{Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/memory/mmu.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/memory/mmu.rs index 3d6c18b7..74a71d11 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/memory/mmu.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/memory/mmu.rs @@ -17,8 +17,8 @@ use crate::{ bsp, memory, memory::{mmu::TranslationGranule, Address, Physical}, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::intrinsics::unlikely; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/20_timer_callbacks/kernel/src/_arch/aarch64/time.rs b/20_timer_callbacks/kernel/src/_arch/aarch64/time.rs index 5479deb4..2807bc32 100644 --- a/20_timer_callbacks/kernel/src/_arch/aarch64/time.rs +++ b/20_timer_callbacks/kernel/src/_arch/aarch64/time.rs @@ -15,12 +15,12 @@ use crate::{ bsp::{self, exception}, warn, }; +use aarch64_cpu::{asm::barrier, registers::*}; use core::{ num::{NonZeroU128, NonZeroU32, NonZeroU64}, ops::{Add, Div}, time::Duration, }; -use cortex_a::{asm::barrier, registers::*}; use tock_registers::interfaces::{ReadWriteable, Readable, Writeable}; //-------------------------------------------------------------------------------------------------- diff --git a/X1_JTAG_boot/Cargo.lock b/X1_JTAG_boot/Cargo.lock index bcfb442a..9020b4f9 100644 --- a/X1_JTAG_boot/Cargo.lock +++ b/X1_JTAG_boot/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[package]] -name = "cortex-a" -version = "8.0.0" +name = "aarch64-cpu" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd4524931a4e0ec50ae91f0d55f571f31ffe11dd9ce2f9905b8343c018c25bb" +checksum = "3aceb88e55ba626a5479279268d009a92d9d00eacce0de1b8c236c7ad31b7225" dependencies = [ "tock-registers", ] @@ -15,7 +15,7 @@ dependencies = [ name = "mingo" version = "0.8.0" dependencies = [ - "cortex-a", + "aarch64-cpu", "tock-registers", ] diff --git a/X1_JTAG_boot/Cargo.toml b/X1_JTAG_boot/Cargo.toml index 55963c38..e310c371 100644 --- a/X1_JTAG_boot/Cargo.toml +++ b/X1_JTAG_boot/Cargo.toml @@ -27,4 +27,4 @@ tock-registers = { version = "0.8.x", default-features = false, features = ["reg # Platform specific dependencies [target.'cfg(target_arch = "aarch64")'.dependencies] -cortex-a = { version = "8.x.x" } +aarch64-cpu = { version = "9.x.x" } diff --git a/X1_JTAG_boot/jtag_boot_rpi3.img b/X1_JTAG_boot/jtag_boot_rpi3.img index 8c67b2dd87ca95ac69ab1567d94595d9cb5bc53f..f472e76666034632af74963b83585ad4e6ebcece 100755 GIT binary patch literal 10216 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 a`v!VCH%6Ql^mxmdRHC9-^j^m|y8i|t>7AJX delta 5231 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