Skip to content

Commit b23c431

Browse files
committed
Switch to tock-registers: Documentation and misc updates
1 parent e172863 commit b23c431

File tree

16 files changed

+216
-179
lines changed

16 files changed

+216
-179
lines changed

02_runtime_init/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,15 @@ diff -uNr 01_wait_forever/Cargo.toml 02_runtime_init/Cargo.toml
4040
authors = ["Andre Richter <[email protected]>"]
4141
edition = "2018"
4242

43-
@@ -21,3 +21,7 @@
43+
@@ -21,3 +21,8 @@
4444
##--------------------------------------------------------------------------------------------------
4545

4646
[dependencies]
4747
+
4848
+# Platform specific dependencies
4949
+[target.'cfg(target_arch = "aarch64")'.dependencies]
50-
+cortex-a = { version = "5.x.x" }
50+
+cortex-a = { version = "6.x.x" }
51+
+
5152

5253
diff -uNr 01_wait_forever/Makefile 02_runtime_init/Makefile
5354
--- 01_wait_forever/Makefile

05_drivers_gpio_uart/README.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ diff -uNr 04_safe_globals/Cargo.toml 05_drivers_gpio_uart/Cargo.toml
126126
default = []
127127
-bsp_rpi3 = []
128128
-bsp_rpi4 = []
129-
+bsp_rpi3 = ["register"]
130-
+bsp_rpi4 = ["register"]
129+
+bsp_rpi3 = ["tock-registers"]
130+
+bsp_rpi4 = ["tock-registers"]
131131

132132
[[bin]]
133133
name = "kernel"
@@ -136,11 +136,11 @@ diff -uNr 04_safe_globals/Cargo.toml 05_drivers_gpio_uart/Cargo.toml
136136
[dependencies]
137137

138138
+# Optional dependencies
139-
+register = { version = "1.x.x", optional = true }
139+
+tock-registers = { version = "0.7.x", default-features = false, features = ["register_types"], optional = true }
140140
+
141141
# Platform specific dependencies
142142
[target.'cfg(target_arch = "aarch64")'.dependencies]
143-
cortex-a = { version = "5.x.x" }
143+
cortex-a = { version = "6.x.x" }
144144

145145
diff -uNr 04_safe_globals/Makefile 05_drivers_gpio_uart/Makefile
146146
--- 04_safe_globals/Makefile
@@ -220,7 +220,7 @@ diff -uNr 04_safe_globals/src/_arch/aarch64/cpu.rs 05_drivers_gpio_uart/src/_arc
220220
diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
221221
--- 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
222222
+++ 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
223-
@@ -0,0 +1,221 @@
223+
@@ -0,0 +1,225 @@
224224
+// SPDX-License-Identifier: MIT OR Apache-2.0
225225
+//
226226
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -231,7 +231,11 @@ diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 05_drivers_g
231231
+ bsp::device_driver::common::MMIODerefWrapper, driver, synchronization,
232232
+ synchronization::NullLock,
233233
+};
234-
+use register::{mmio::*, register_bitfields, register_structs};
234+
+use tock_registers::{
235+
+ interfaces::{ReadWriteable, Writeable},
236+
+ register_bitfields, register_structs,
237+
+ registers::ReadWrite,
238+
+};
235239
+
236240
+//--------------------------------------------------------------------------------------------------
237241
+// Private Definitions
@@ -446,7 +450,7 @@ diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 05_drivers_g
446450
diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
447451
--- 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
448452
+++ 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
449-
@@ -0,0 +1,403 @@
453+
@@ -0,0 +1,408 @@
450454
+// SPDX-License-Identifier: MIT OR Apache-2.0
451455
+//
452456
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -463,7 +467,11 @@ diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 05_dri
463467
+ synchronization::NullLock,
464468
+};
465469
+use core::fmt;
466-
+use register::{mmio::*, register_bitfields, register_structs};
470+
+use tock_registers::{
471+
+ interfaces::{Readable, Writeable},
472+
+ register_bitfields, register_structs,
473+
+ registers::{ReadOnly, ReadWrite, WriteOnly},
474+
+};
467475
+
468476
+//--------------------------------------------------------------------------------------------------
469477
+// Private Definitions
@@ -530,6 +538,7 @@ diff -uNr 04_safe_globals/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 05_dri
530538
+ LCR_H [
531539
+ /// Word length. These bits indicate the number of data bits transmitted or received in a
532540
+ /// frame.
541+
+ #[allow(clippy::enum_variant_names)]
533542
+ WLEN OFFSET(5) NUMBITS(2) [
534543
+ FiveBit = 0b00,
535544
+ SixBit = 0b01,

06_uart_chainloader/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ diff -uNr 05_drivers_gpio_uart/src/_arch/aarch64/cpu/boot.s 06_uart_chainloader/
279279
diff -uNr 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
280280
--- 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
281281
+++ 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
282-
@@ -144,7 +144,7 @@
282+
@@ -148,7 +148,7 @@
283283
// Make an educated guess for a good delay value (Sequence described in the BCM2837
284284
// peripherals PDF).
285285
//
@@ -292,7 +292,7 @@ diff -uNr 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 06_uart
292292
diff -uNr 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
293293
--- 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
294294
+++ 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
295-
@@ -279,7 +279,7 @@
295+
@@ -284,7 +284,7 @@
296296
}
297297

298298
/// Retrieve a character.
@@ -301,7 +301,7 @@ diff -uNr 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 0
301301
// If RX FIFO is empty,
302302
if self.registers.FR.matches_all(FR::RXFE::SET) {
303303
// immediately return in non-blocking mode.
304-
@@ -294,12 +294,7 @@
304+
@@ -299,12 +299,7 @@
305305
}
306306

307307
// Read one character.
@@ -315,7 +315,7 @@ diff -uNr 05_drivers_gpio_uart/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 0
315315

316316
// Update statistics.
317317
self.chars_read += 1;
318-
@@ -379,14 +374,14 @@
318+
@@ -384,14 +379,14 @@
319319
impl console::interface::Read for PL011Uart {
320320
fn read_char(&self) -> char {
321321
self.inner
0 Bytes
Binary file not shown.
-24 Bytes
Binary file not shown.

07_timestamps/README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ diff -uNr 06_uart_chainloader/src/_arch/aarch64/cpu.rs 07_timestamps/src/_arch/a
221221
diff -uNr 06_uart_chainloader/src/_arch/aarch64/time.rs 07_timestamps/src/_arch/aarch64/time.rs
222222
--- 06_uart_chainloader/src/_arch/aarch64/time.rs
223223
+++ 07_timestamps/src/_arch/aarch64/time.rs
224-
@@ -0,0 +1,118 @@
224+
@@ -0,0 +1,119 @@
225225
+// SPDX-License-Identifier: MIT OR Apache-2.0
226226
+//
227227
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -237,7 +237,8 @@ diff -uNr 06_uart_chainloader/src/_arch/aarch64/time.rs 07_timestamps/src/_arch/
237237
+
238238
+use crate::{time, warn};
239239
+use core::time::Duration;
240-
+use cortex_a::{barrier, regs::*};
240+
+use cortex_a::{asm::barrier, registers::*};
241+
+use tock_registers::interfaces::{ReadWriteable, Readable, Writeable};
241242
+
242243
+//--------------------------------------------------------------------------------------------------
243244
+// Private Definitions
@@ -344,7 +345,7 @@ diff -uNr 06_uart_chainloader/src/_arch/aarch64/time.rs 07_timestamps/src/_arch/
344345
diff -uNr 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 07_timestamps/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
345346
--- 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
346347
+++ 07_timestamps/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs
347-
@@ -139,25 +139,19 @@
348+
@@ -143,25 +143,19 @@
348349
/// Disable pull-up/down on pins 14 and 15.
349350
#[cfg(feature = "bsp_rpi3")]
350351
fn disable_pud_14_15_bcm2837(&mut self) {
@@ -380,7 +381,7 @@ diff -uNr 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_gpio.rs 07_times
380381
diff -uNr 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 07_timestamps/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
381382
--- 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
382383
+++ 07_timestamps/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs
383-
@@ -279,7 +279,7 @@
384+
@@ -284,7 +284,7 @@
384385
}
385386

386387
/// Retrieve a character.
@@ -389,7 +390,7 @@ diff -uNr 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 07
389390
// If RX FIFO is empty,
390391
if self.registers.FR.matches_all(FR::RXFE::SET) {
391392
// immediately return in non-blocking mode.
392-
@@ -294,7 +294,12 @@
393+
@@ -299,7 +299,12 @@
393394
}
394395

395396
// Read one character.
@@ -403,7 +404,7 @@ diff -uNr 06_uart_chainloader/src/bsp/device_driver/bcm/bcm2xxx_pl011_uart.rs 07
403404

404405
// Update statistics.
405406
self.chars_read += 1;
406-
@@ -374,14 +379,14 @@
407+
@@ -379,14 +384,14 @@
407408
impl console::interface::Read for PL011Uart {
408409
fn read_char(&self) -> char {
409410
self.inner

09_privilege_level/README.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,11 +211,12 @@ diff -uNr 08_hw_debug_JTAG/Cargo.toml 09_privilege_level/Cargo.toml
211211
diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/cpu/boot.rs 09_privilege_level/src/_arch/aarch64/cpu/boot.rs
212212
--- 08_hw_debug_JTAG/src/_arch/aarch64/cpu/boot.rs
213213
+++ 09_privilege_level/src/_arch/aarch64/cpu/boot.rs
214-
@@ -11,17 +11,67 @@
214+
@@ -11,17 +11,68 @@
215215
//!
216216
//! crate::cpu::boot::arch_boot
217217

218-
+use cortex_a::{asm, regs::*};
218+
+use cortex_a::{asm, registers::*};
219+
+use tock_registers::interfaces::Writeable;
219220
+
220221
// Assembly counterpart to this file.
221222
global_asm!(include_str!("boot.s"));
@@ -323,7 +324,7 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/cpu/boot.s 09_privilege_level/src/_
323324
diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs
324325
--- 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs
325326
+++ 09_privilege_level/src/_arch/aarch64/exception/asynchronous.rs
326-
@@ -0,0 +1,81 @@
327+
@@ -0,0 +1,82 @@
327328
+// SPDX-License-Identifier: MIT OR Apache-2.0
328329
+//
329330
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -337,14 +338,15 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 09_privil
337338
+//!
338339
+//! crate::exception::asynchronous::arch_asynchronous
339340
+
340-
+use cortex_a::regs::*;
341+
+use cortex_a::registers::*;
342+
+use tock_registers::interfaces::Readable;
341343
+
342344
+//--------------------------------------------------------------------------------------------------
343345
+// Private Definitions
344346
+//--------------------------------------------------------------------------------------------------
345347
+
346348
+trait DaifField {
347-
+ fn daif_field() -> register::Field<u64, DAIF::Register>;
349+
+ fn daif_field() -> tock_registers::fields::Field<u64, DAIF::Register>;
348350
+}
349351
+
350352
+struct Debug;
@@ -357,25 +359,25 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 09_privil
357359
+//--------------------------------------------------------------------------------------------------
358360
+
359361
+impl DaifField for Debug {
360-
+ fn daif_field() -> register::Field<u64, DAIF::Register> {
362+
+ fn daif_field() -> tock_registers::fields::Field<u64, DAIF::Register> {
361363
+ DAIF::D
362364
+ }
363365
+}
364366
+
365367
+impl DaifField for SError {
366-
+ fn daif_field() -> register::Field<u64, DAIF::Register> {
368+
+ fn daif_field() -> tock_registers::fields::Field<u64, DAIF::Register> {
367369
+ DAIF::A
368370
+ }
369371
+}
370372
+
371373
+impl DaifField for IRQ {
372-
+ fn daif_field() -> register::Field<u64, DAIF::Register> {
374+
+ fn daif_field() -> tock_registers::fields::Field<u64, DAIF::Register> {
373375
+ DAIF::I
374376
+ }
375377
+}
376378
+
377379
+impl DaifField for FIQ {
378-
+ fn daif_field() -> register::Field<u64, DAIF::Register> {
380+
+ fn daif_field() -> tock_registers::fields::Field<u64, DAIF::Register> {
379381
+ DAIF::F
380382
+ }
381383
+}
@@ -409,7 +411,7 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception/asynchronous.rs 09_privil
409411
diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception.rs 09_privilege_level/src/_arch/aarch64/exception.rs
410412
--- 08_hw_debug_JTAG/src/_arch/aarch64/exception.rs
411413
+++ 09_privilege_level/src/_arch/aarch64/exception.rs
412-
@@ -0,0 +1,30 @@
414+
@@ -0,0 +1,31 @@
413415
+// SPDX-License-Identifier: MIT OR Apache-2.0
414416
+//
415417
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -423,7 +425,8 @@ diff -uNr 08_hw_debug_JTAG/src/_arch/aarch64/exception.rs 09_privilege_level/src
423425
+//!
424426
+//! crate::exception::arch_exception
425427
+
426-
+use cortex_a::regs::*;
428+
+use cortex_a::registers::*;
429+
+use tock_registers::interfaces::Readable;
427430
+
428431
+//--------------------------------------------------------------------------------------------------
429432
+// Public Code

10_virtual_mem_part1_identity_mapping/README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ diff -uNr 09_privilege_level/Cargo.toml 10_virtual_mem_part1_identity_mapping/Ca
364364
diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs
365365
--- 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs
366366
+++ 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs
367-
@@ -0,0 +1,288 @@
367+
@@ -0,0 +1,292 @@
368368
+// SPDX-License-Identifier: MIT OR Apache-2.0
369369
+//
370370
+// Copyright (c) 2021 Andre Richter <[email protected]>
@@ -388,7 +388,11 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs 1
388388
+ },
389389
+};
390390
+use core::convert;
391-
+use register::{register_bitfields, InMemoryRegister};
391+
+use tock_registers::{
392+
+ interfaces::{Readable, Writeable},
393+
+ register_bitfields,
394+
+ registers::InMemoryRegister,
395+
+};
392396
+
393397
+//--------------------------------------------------------------------------------------------------
394398
+// Private Definitions
@@ -549,7 +553,7 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs 1
549553
+
550554
+/// Convert the kernel's generic memory attributes to HW-specific attributes of the MMU.
551555
+impl convert::From<AttributeFields>
552-
+ for register::FieldValue<u64, STAGE1_PAGE_DESCRIPTOR::Register>
556+
+ for tock_registers::fields::FieldValue<u64, STAGE1_PAGE_DESCRIPTOR::Register>
553557
+{
554558
+ fn from(attribute_fields: AttributeFields) -> Self {
555559
+ // Memory attributes.
@@ -657,7 +661,7 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs 1
657661
diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu.rs 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs
658662
--- 09_privilege_level/src/_arch/aarch64/memory/mmu.rs
659663
+++ 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu.rs
660-
@@ -0,0 +1,164 @@
664+
@@ -0,0 +1,165 @@
661665
+// SPDX-License-Identifier: MIT OR Apache-2.0
662666
+//
663667
+// Copyright (c) 2018-2021 Andre Richter <[email protected]>
@@ -678,7 +682,8 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu.rs 10_virtual_mem_part
678682
+ memory::mmu::{translation_table::KernelTranslationTable, TranslationGranule},
679683
+};
680684
+use core::intrinsics::unlikely;
681-
+use cortex_a::{barrier, regs::*};
685+
+use cortex_a::{asm::barrier, registers::*};
686+
+use tock_registers::interfaces::{ReadWriteable, Readable, Writeable};
682687
+
683688
+//--------------------------------------------------------------------------------------------------
684689
+// Private Definitions

11_exceptions_part1_groundwork/README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -492,14 +492,18 @@ diff -uNr 10_virtual_mem_part1_identity_mapping/Cargo.toml 11_exceptions_part1_g
492492
diff -uNr 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs 11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs
493493
--- 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs
494494
+++ 11_exceptions_part1_groundwork/src/_arch/aarch64/exception.rs
495-
@@ -11,7 +11,224 @@
495+
@@ -11,8 +11,227 @@
496496
//!
497497
//! crate::exception::arch_exception
498498

499-
-use cortex_a::regs::*;
499+
-use cortex_a::registers::*;
500+
-use tock_registers::interfaces::Readable;
500501
+use core::{cell::UnsafeCell, fmt};
501-
+use cortex_a::{asm, barrier, regs::*};
502-
+use register::InMemoryRegister;
502+
+use cortex_a::{asm, asm::barrier, registers::*};
503+
+use tock_registers::{
504+
+ interfaces::{Readable, Writeable},
505+
+ registers::InMemoryRegister,
506+
+};
503507
+
504508
+// Assembly counterpart to this file.
505509
+global_asm!(include_str!("exception.s"));
@@ -718,7 +722,7 @@ diff -uNr 10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/exception.rs 1
718722

719723
//--------------------------------------------------------------------------------------------------
720724
// Public Code
721-
@@ -28,3 +245,23 @@
725+
@@ -29,3 +248,23 @@
722726
_ => (PrivilegeLevel::Unknown, "Unknown"),
723727
}
724728
}

0 commit comments

Comments
 (0)