diff --git a/Cargo.lock b/Cargo.lock index 1cc3500..986e410 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,11 +23,11 @@ dependencies = [ [[package]] name = "arm-gic" -version = "0.8.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84372c6068152f635a04870779f0fa0d1b0273dd09dbe1c6747688693d061f06" +checksum = "aae38b5192f8463cef6c94ec9804774c2b106b16b0bb7c41401f9457d5e99229" dependencies = [ - "arm-sysregs 0.2.9", + "arm-sysregs", "bitflags", "safe-mmio", "thiserror", @@ -61,24 +61,68 @@ dependencies = [ [[package]] name = "arm-sysregs" -version = "0.2.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27f98a99c7c6da5d54aa4d6e54504956aade8cdb0de9cd9a2363eb66b1d659a9" +checksum = "eea2d77c3eac6be0a300ba179e7bf051ffaec797c39dee0b631c21668b12e1f3" dependencies = [ + "arm-sysregs-aarch32", + "arm-sysregs-common", + "arm-sysregs-el0", + "arm-sysregs-el1", + "arm-sysregs-el2", +] + +[[package]] +name = "arm-sysregs-aarch32" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeac85b36432f9427827c31c2da2b42fe4928e35b3dbedbe9c9ded5e4d013789" +dependencies = [ + "arm-sysregs-common", "bitflags", +] + +[[package]] +name = "arm-sysregs-common" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11447113c834b1cb206262297477a467c090a3768765bef861858b6098dcac39" +dependencies = [ "num_enum", - "paste", + "pastey", ] [[package]] -name = "arm-sysregs" -version = "0.3.0" +name = "arm-sysregs-el0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1ab4219ed830e610ebf45350dd1bd688accfb1d34612ccd7ad73966a8ab908" +checksum = "a680f4741d246b3f72f977da72f7df76cb9c3227e565acad801ca3c504947d92" dependencies = [ + "arm-sysregs-aarch32", + "arm-sysregs-common", + "bitflags", +] + +[[package]] +name = "arm-sysregs-el1" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dcc832aff5e63bad65c4cdcb17a7a5c07a711a4ce365d7a69785efb3a64fc47" +dependencies = [ + "arm-sysregs-common", + "arm-sysregs-el0", + "bitflags", +] + +[[package]] +name = "arm-sysregs-el2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4749bc9818f7ebef235bab12e818fdd4081dfffe44491c941b6f6530ee960686" +dependencies = [ + "arm-sysregs-common", + "arm-sysregs-el1", "bitflags", - "num_enum", - "paste", ] [[package]] @@ -89,9 +133,9 @@ checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "buddy_system_allocator" @@ -99,7 +143,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1af5a01adeeade54c9f5060300227a8ee64c05b6376f28e9b8ee3b72dd2056f" dependencies = [ - "spin 0.10.0", + "spin 0.10.1", ] [[package]] @@ -145,15 +189,15 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown", @@ -165,7 +209,7 @@ version = "0.1.0" dependencies = [ "aarch64-rt", "arm-pl011-uart", - "arm-sysregs 0.3.0", + "arm-sysregs", "smccc", "spin 0.12.3", ] @@ -213,14 +257,14 @@ checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] [[package]] -name = "paste" -version = "1.0.15" +name = "pastey" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" [[package]] name = "percore" @@ -233,9 +277,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -248,7 +292,7 @@ dependencies = [ "arm-gic", "arm-pl011-uart", "arm-psci", - "arm-sysregs 0.3.0", + "arm-sysregs", "percore", "smccc", "spin 0.12.3", @@ -256,9 +300,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -271,7 +315,7 @@ dependencies = [ "aarch64-rt", "arm-pl011-uart", "arm-psci", - "arm-sysregs 0.3.0", + "arm-sysregs", "arrayvec", "buddy_system_allocator", "dtoolkit", @@ -286,15 +330,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "safe-mmio" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5e4ed477d6ebc07e01ce97b87fe319e6b62d0ab2564594db6a8c4cdc29ffd9" +checksum = "e885ed64c91774b671612cb99dda2ede3738b0aa2d39a85a1471b20bf09eabe0" dependencies = [ "zerocopy", ] @@ -316,9 +360,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" [[package]] name = "spin" @@ -331,9 +375,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" dependencies = [ "proc-macro2", "quote", @@ -342,9 +386,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" dependencies = [ "proc-macro2", "quote", @@ -368,37 +412,37 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.4", + "syn 3.0.6", ] [[package]] name = "twox-hash" -version = "2.1.2" +version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" +checksum = "5283634e518fe9e82c7b20520bb4bc209009fd16c82077c802f8111ecbb0117a" [[package]] name = "unicode-ident" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" [[package]] name = "zerocopy" -version = "0.8.56" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.56" +version = "0.8.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82" dependencies = [ "proc-macro2", "quote", - "syn 2.0.117", + "syn 2.0.119", ] diff --git a/Cargo.toml b/Cargo.toml index 36e9516..2098233 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ aarch64-paging = "0.12" aarch64-rt = { version = "0.4.3", features = ["el2", "exceptions", "initial-pagetable", "psci"], default-features = false } arm-pl011-uart = "0.5" arm-psci = "0.2" -arm-sysregs = { version = "0.3", features = ["el1", "el2"] } +arm-sysregs = { version = "0.5", features = ["el1", "el2"] } arrayvec = { version = "0.7", default-features = false } buddy_system_allocator = { version = "0.13", default-features = false, features = ["alloc", "use_spin"] } dtoolkit = { version = "0.4", features = ["write"] } diff --git a/src/arch.rs b/src/arch.rs index 0244bf7..7286108 100644 --- a/src/arch.rs +++ b/src/arch.rs @@ -8,7 +8,7 @@ //! Architecture-specific code. -use arm_sysregs::{SctlrEl2, read_sctlr_el2}; +use arm_sysregs::el2::{accessors::read_sctlr_el2, registers::SctlrEl2}; use core::arch::{asm, naked_asm}; /// Data Synchronization Barrier. diff --git a/src/hypervisor.rs b/src/hypervisor.rs index 5377d37..ddd04c5 100644 --- a/src/hypervisor.rs +++ b/src/hypervisor.rs @@ -18,14 +18,24 @@ use crate::{ }, }; use aarch64_rt::Stack; -use arm_sysregs::{ - CnthctlEl2, CntvoffEl2, ElrEl1, ElrEl2, EsrEl1, FarEl1, HcrEl2, IccSreEl2, MairEl1, MpidrEl1, - SctlrEl1, SpEl1, SpsrEl1, SpsrEl2, TcrEl1, Ttbr0El1, VbarEl1, VtcrEl2, read_cnthctl_el2, - read_esr_el2, read_far_el2, read_hpfar_el2, read_icc_sre_el2, read_mpidr_el1, read_spsr_el2, - read_vbar_el1, write_cnthctl_el2, write_cntvoff_el2, write_elr_el1, write_elr_el2, - write_esr_el1, write_far_el1, write_hcr_el2, write_icc_sre_el2, write_mair_el1, - write_sctlr_el1, write_sp_el1, write_spsr_el1, write_spsr_el2, write_tcr_el1, write_ttbr0_el1, - write_vbar_el1, write_vtcr_el2, +use arm_sysregs::el1::{ + accessors::{ + read_mpidr_el1, read_vbar_el1, write_elr_el1, write_esr_el1, write_far_el1, write_mair_el1, + write_sctlr_el1, write_sp_el1, write_spsr_el1, write_tcr_el1, write_ttbr0_el1, + write_vbar_el1, + }, + registers::{ + ElrEl1, EsrEl1, FarEl1, MairEl1, MpidrEl1, SctlrEl1, SpEl1, SpsrEl1, TcrEl1, Ttbr0El1, + VbarEl1, + }, +}; +use arm_sysregs::el2::{ + accessors::{ + read_cnthctl_el2, read_esr_el2, read_far_el2, read_hpfar_el2, read_icc_sre_el2, + read_spsr_el2, write_cnthctl_el2, write_cntvoff_el2, write_elr_el2, write_hcr_el2, + write_icc_sre_el2, write_spsr_el2, write_vtcr_el2, + }, + registers::{CnthctlEl2, CntvoffEl2, ElrEl2, HcrEl2, IccSreEl2, SpsrEl2, VtcrEl2}, }; use core::arch::naked_asm; use log::debug; diff --git a/src/main.rs b/src/main.rs index 1cdc581..8f3dac9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ include!(concat!(env!("OUT_DIR"), "/payload.rs")); use aarch64_paging::paging::PAGE_SIZE; use aarch64_rt::{entry, exception_handlers}; -use arm_sysregs::read_currentel; +use arm_sysregs::el0::accessors::read_currentel; use buddy_system_allocator::{Heap, LockedHeap}; use core::alloc::Layout; use core::arch::naked_asm; diff --git a/tests/integration_test/Cargo.toml b/tests/integration_test/Cargo.toml index b8bf701..40821af 100644 --- a/tests/integration_test/Cargo.toml +++ b/tests/integration_test/Cargo.toml @@ -7,6 +7,6 @@ publish = false [dependencies] aarch64-rt = { version = "0.4", features = ["el1", "exceptions"], default-features = false } arm-pl011-uart = "0.5" -arm-sysregs = { version = "0.3", features = ["el1"] } +arm-sysregs = { version = "0.5", features = ["el1"] } smccc = "0.2" spin = { version = "0.12", features = ["lazy", "once", "spin_mutex"], default-features = false } diff --git a/tests/integration_test/src/main.rs b/tests/integration_test/src/main.rs index 234536e..68c5391 100644 --- a/tests/integration_test/src/main.rs +++ b/tests/integration_test/src/main.rs @@ -11,7 +11,7 @@ use aarch64_rt::{ExceptionHandlers, RegisterStateRef, entry, exception_handlers}; use arm_pl011_uart::{Uart, UniqueMmioPointer}; -use arm_sysregs::read_esr_el1; +use arm_sysregs::el1::accessors::read_esr_el1; use core::arch::{asm, naked_asm}; use core::fmt::Write; use core::panic::PanicInfo; diff --git a/tests/psci_test/Cargo.toml b/tests/psci_test/Cargo.toml index 29e8287..e2ae96c 100644 --- a/tests/psci_test/Cargo.toml +++ b/tests/psci_test/Cargo.toml @@ -6,10 +6,10 @@ publish = false [dependencies] aarch64-rt = { version = "0.4", features = ["el1", "exceptions", "psci"], default-features = false } -arm-gic = "0.8" +arm-gic = "0.10" arm-pl011-uart = "0.5" arm-psci = "0.2" -arm-sysregs = { version = "0.3", features = ["el1"] } +arm-sysregs = { version = "0.5", features = ["el1"] } percore = { version = "0.3", default-features = false } smccc = "0.2" spin = "0.12" \ No newline at end of file diff --git a/tests/psci_test/src/gic_helper.rs b/tests/psci_test/src/gic_helper.rs index 9904caa..c278023 100644 --- a/tests/psci_test/src/gic_helper.rs +++ b/tests/psci_test/src/gic_helper.rs @@ -23,8 +23,8 @@ fn create_gic() -> SpinMutex> { arm_gic::UniqueMmioPointer::new(NonNull::new(GICD_BASE as *mut _).unwrap()), NonNull::new(GICR_BASE as *mut _).unwrap(), CORE_COUNT, - false, ) + .expect("Failed to create GicV3") }; gic.distributor().enable_group1_non_secure(true); diff --git a/tests/psci_test/src/main.rs b/tests/psci_test/src/main.rs index 5ba6821..33f291e 100644 --- a/tests/psci_test/src/main.rs +++ b/tests/psci_test/src/main.rs @@ -12,7 +12,7 @@ use aarch64_rt::{ExceptionHandlers, RegisterStateRef, entry, exception_handlers}; use arm_pl011_uart::Uart; use arm_psci::PowerState; -use arm_sysregs::read_cntfrq_el0; +use arm_sysregs::el0::accessors::read_cntfrq_el0; use core::fmt::Write; use core::panic::PanicInfo; use core::ptr::NonNull; diff --git a/tests/psci_test/src/timer_helper.rs b/tests/psci_test/src/timer_helper.rs index 8883c8e..b2408b0 100644 --- a/tests/psci_test/src/timer_helper.rs +++ b/tests/psci_test/src/timer_helper.rs @@ -7,11 +7,15 @@ // except according to those terms. use arm_gic::IntId; -use arm_sysregs::{CntpCtlEl0, CntpTvalEl0, write_cntp_ctl_el0, write_cntp_tval_el0}; +use arm_sysregs::el0::{ + accessors::{write_cntp_ctl_el0, write_cntp_tval_el0}, + registers::{CntpCtlEl0, CntpTvalEl0}, +}; pub const INTERRUPT_ID: IntId = IntId::ppi(14); pub fn set(ticks: u32) { + let ticks = i32::try_from(ticks).unwrap(); write_cntp_tval_el0(CntpTvalEl0::empty().with_timervalue(ticks)); write_cntp_ctl_el0(CntpCtlEl0::ENABLE); }