diff --git a/06_uart_chainloader/demo_payload_rpi3.img b/06_uart_chainloader/demo_payload_rpi3.img index 9b1cf35b..a8d7f680 100755 Binary files a/06_uart_chainloader/demo_payload_rpi3.img and b/06_uart_chainloader/demo_payload_rpi3.img differ diff --git a/06_uart_chainloader/demo_payload_rpi4.img b/06_uart_chainloader/demo_payload_rpi4.img index 2357ef5e..2d181336 100755 Binary files a/06_uart_chainloader/demo_payload_rpi4.img and b/06_uart_chainloader/demo_payload_rpi4.img differ diff --git a/10_virtual_mem_part1_identity_mapping/README.md b/10_virtual_mem_part1_identity_mapping/README.md index e33329fd..75ff9c05 100644 --- a/10_virtual_mem_part1_identity_mapping/README.md +++ b/10_virtual_mem_part1_identity_mapping/README.md @@ -602,7 +602,7 @@ diff -uNr 09_privilege_level/src/_arch/aarch64/memory/mmu/translation_table.rs 1 + + STAGE1_PAGE_DESCRIPTOR::AF::True + + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + + STAGE1_PAGE_DESCRIPTOR::VALID::True -+ + attribute_fields.clone().into(), ++ + (*attribute_fields).into(), + ); + + Self { value: val.get() } diff --git a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs index f38d0895..eba8e12b 100644 --- a/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/10_virtual_mem_part1_identity_mapping/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -235,7 +235,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } diff --git a/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu/translation_table.rs b/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu/translation_table.rs index f38d0895..eba8e12b 100644 --- a/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/11_exceptions_part1_groundwork/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -235,7 +235,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } diff --git a/12_integrated_testing/src/_arch/aarch64/memory/mmu/translation_table.rs b/12_integrated_testing/src/_arch/aarch64/memory/mmu/translation_table.rs index 73a93ff7..665631f4 100644 --- a/12_integrated_testing/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/12_integrated_testing/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -235,7 +235,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } diff --git a/13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/translation_table.rs b/13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/translation_table.rs index 73a93ff7..665631f4 100644 --- a/13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -235,7 +235,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } diff --git a/14_virtual_mem_part2_mmio_remap/README.md b/14_virtual_mem_part2_mmio_remap/README.md index 6d35086f..85aa5138 100644 --- a/14_virtual_mem_part2_mmio_remap/README.md +++ b/14_virtual_mem_part2_mmio_remap/README.md @@ -659,7 +659,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/trans + phys_pages: &PageSliceDescriptor, + attr: &AttributeFields, + ) -> Result<(), &'static str> { -+ assert_eq!(self.initialized, true, "Translation tables not initialized"); ++ assert!(self.initialized, "Translation tables not initialized"); + + let p = phys_pages.as_slice(); + let v = virt_pages.as_slice(); @@ -700,7 +700,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/_arch/aarch64/memory/mmu/trans + &mut self, + num_pages: usize, + ) -> Result, &'static str> { -+ assert_eq!(self.initialized, true, "Translation tables not initialized"); ++ assert!(self.initialized, "Translation tables not initialized"); + + if num_pages == 0 { + return Err("num_pages == 0"); @@ -2213,7 +2213,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/main.rs 14_virtual_mem_part2_m diff -uNr 13_exceptions_part2_peripheral_IRQs/src/memory/mmu/mapping_record.rs 14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs --- 13_exceptions_part2_peripheral_IRQs/src/memory/mmu/mapping_record.rs +++ 14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs -@@ -0,0 +1,221 @@ +@@ -0,0 +1,216 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright (c) 2020-2021 Andre Richter @@ -2334,12 +2334,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/memory/mmu/mapping_record.rs 1 + ); + info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); + -+ for i in self -+ .inner -+ .iter() -+ .filter(|x| x.is_some()) -+ .map(|x| x.unwrap()) -+ { ++ for i in self.inner.iter().flatten() { + let virt_start = i.virt_start_addr; + let virt_end_inclusive = virt_start + i.phys_pages.size() - 1; + let phys_start = i.phys_pages.start_addr(); @@ -2418,7 +2413,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/memory/mmu/mapping_record.rs 1 + mmio_descriptor: &MMIODescriptor, + new_user: &'static str, +) -> Option> { -+ let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); ++ let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); + + KERNEL_MAPPING_RECORD.write(|mr| { + let dup = mr.find_duplicate(&phys_pages)?; @@ -3068,7 +3063,7 @@ diff -uNr 13_exceptions_part2_peripheral_IRQs/src/memory/mmu.rs 14_virtual_mem_p + name: &'static str, + mmio_descriptor: &MMIODescriptor, +) -> Result, &'static str> { -+ let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); ++ let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); + let offset_into_start_page = + mmio_descriptor.start_addr().into_usize() & bsp::memory::mmu::KernelGranule::MASK; + diff --git a/14_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu/translation_table.rs b/14_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu/translation_table.rs index 15784a1b..df741361 100644 --- a/14_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/14_virtual_mem_part2_mmio_remap/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -237,7 +237,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } @@ -364,7 +364,7 @@ impl memory::mmu::translation_table::interface::Transla phys_pages: &PageSliceDescriptor, attr: &AttributeFields, ) -> Result<(), &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); let p = phys_pages.as_slice(); let v = virt_pages.as_slice(); @@ -399,7 +399,7 @@ impl memory::mmu::translation_table::interface::Transla &mut self, num_pages: usize, ) -> Result, &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); if num_pages == 0 { return Err("num_pages == 0"); diff --git a/14_virtual_mem_part2_mmio_remap/src/memory/mmu.rs b/14_virtual_mem_part2_mmio_remap/src/memory/mmu.rs index 360e149a..9f10ad72 100644 --- a/14_virtual_mem_part2_mmio_remap/src/memory/mmu.rs +++ b/14_virtual_mem_part2_mmio_remap/src/memory/mmu.rs @@ -182,7 +182,7 @@ pub unsafe fn kernel_map_mmio( name: &'static str, mmio_descriptor: &MMIODescriptor, ) -> Result, &'static str> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); let offset_into_start_page = mmio_descriptor.start_addr().into_usize() & bsp::memory::mmu::KernelGranule::MASK; diff --git a/14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs b/14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs index eab62fb3..16c27e38 100644 --- a/14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs +++ b/14_virtual_mem_part2_mmio_remap/src/memory/mmu/mapping_record.rs @@ -118,12 +118,7 @@ impl MappingRecord { ); info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); - for i in self - .inner - .iter() - .filter(|x| x.is_some()) - .map(|x| x.unwrap()) - { + for i in self.inner.iter().flatten() { let virt_start = i.virt_start_addr; let virt_end_inclusive = virt_start + i.phys_pages.size() - 1; let phys_start = i.phys_pages.start_addr(); @@ -202,7 +197,7 @@ pub fn kernel_find_and_insert_mmio_duplicate( mmio_descriptor: &MMIODescriptor, new_user: &'static str, ) -> Option> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); KERNEL_MAPPING_RECORD.write(|mr| { let dup = mr.find_duplicate(&phys_pages)?; diff --git a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs index 5f781bdd..6b7227b3 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -236,7 +236,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } @@ -374,7 +374,7 @@ impl memory::mmu::translation_table::interface::Transla phys_pages: &PageSliceDescriptor, attr: &AttributeFields, ) -> Result<(), &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); let p = phys_pages.as_slice(); let v = virt_pages.as_slice(); @@ -409,7 +409,7 @@ impl memory::mmu::translation_table::interface::Transla &mut self, num_pages: usize, ) -> Result, &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); if num_pages == 0 { return Err("num_pages == 0"); diff --git a/15_virtual_mem_part3_precomputed_tables/src/memory/mmu.rs b/15_virtual_mem_part3_precomputed_tables/src/memory/mmu.rs index 969ae6dd..106d3a90 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/memory/mmu.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/memory/mmu.rs @@ -208,7 +208,7 @@ pub unsafe fn kernel_map_mmio( name: &'static str, mmio_descriptor: &MMIODescriptor, ) -> Result, &'static str> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); let offset_into_start_page = mmio_descriptor.start_addr().into_usize() & bsp::memory::mmu::KernelGranule::MASK; diff --git a/15_virtual_mem_part3_precomputed_tables/src/memory/mmu/mapping_record.rs b/15_virtual_mem_part3_precomputed_tables/src/memory/mmu/mapping_record.rs index eab62fb3..16c27e38 100644 --- a/15_virtual_mem_part3_precomputed_tables/src/memory/mmu/mapping_record.rs +++ b/15_virtual_mem_part3_precomputed_tables/src/memory/mmu/mapping_record.rs @@ -118,12 +118,7 @@ impl MappingRecord { ); info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); - for i in self - .inner - .iter() - .filter(|x| x.is_some()) - .map(|x| x.unwrap()) - { + for i in self.inner.iter().flatten() { let virt_start = i.virt_start_addr; let virt_end_inclusive = virt_start + i.phys_pages.size() - 1; let phys_start = i.phys_pages.start_addr(); @@ -202,7 +197,7 @@ pub fn kernel_find_and_insert_mmio_duplicate( mmio_descriptor: &MMIODescriptor, new_user: &'static str, ) -> Option> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); KERNEL_MAPPING_RECORD.write(|mr| { let dup = mr.find_duplicate(&phys_pages)?; diff --git a/16_virtual_mem_part4_higher_half_kernel/src/_arch/aarch64/memory/mmu/translation_table.rs b/16_virtual_mem_part4_higher_half_kernel/src/_arch/aarch64/memory/mmu/translation_table.rs index a58a3bb9..a2758b15 100644 --- a/16_virtual_mem_part4_higher_half_kernel/src/_arch/aarch64/memory/mmu/translation_table.rs +++ b/16_virtual_mem_part4_higher_half_kernel/src/_arch/aarch64/memory/mmu/translation_table.rs @@ -236,7 +236,7 @@ impl PageDescriptor { + STAGE1_PAGE_DESCRIPTOR::AF::True + STAGE1_PAGE_DESCRIPTOR::TYPE::Page + STAGE1_PAGE_DESCRIPTOR::VALID::True - + attribute_fields.clone().into(), + + (*attribute_fields).into(), ); Self { value: val.get() } @@ -401,7 +401,7 @@ impl phys_pages: &PageSliceDescriptor, attr: &AttributeFields, ) -> Result<(), &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); let p = phys_pages.as_slice(); let v = virt_pages.as_slice(); @@ -436,7 +436,7 @@ impl &mut self, num_pages: usize, ) -> Result, &'static str> { - assert_eq!(self.initialized, true, "Translation tables not initialized"); + assert!(self.initialized, "Translation tables not initialized"); if num_pages == 0 { return Err("num_pages == 0"); diff --git a/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu.rs b/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu.rs index d1a5a3e6..f9c40d35 100644 --- a/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu.rs +++ b/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu.rs @@ -213,7 +213,7 @@ pub unsafe fn kernel_map_mmio( name: &'static str, mmio_descriptor: &MMIODescriptor, ) -> Result, &'static str> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); let offset_into_start_page = mmio_descriptor.start_addr().into_usize() & bsp::memory::mmu::KernelGranule::MASK; diff --git a/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu/mapping_record.rs b/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu/mapping_record.rs index eab62fb3..16c27e38 100644 --- a/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu/mapping_record.rs +++ b/16_virtual_mem_part4_higher_half_kernel/src/memory/mmu/mapping_record.rs @@ -118,12 +118,7 @@ impl MappingRecord { ); info!(" -------------------------------------------------------------------------------------------------------------------------------------------"); - for i in self - .inner - .iter() - .filter(|x| x.is_some()) - .map(|x| x.unwrap()) - { + for i in self.inner.iter().flatten() { let virt_start = i.virt_start_addr; let virt_end_inclusive = virt_start + i.phys_pages.size() - 1; let phys_start = i.phys_pages.start_addr(); @@ -202,7 +197,7 @@ pub fn kernel_find_and_insert_mmio_duplicate( mmio_descriptor: &MMIODescriptor, new_user: &'static str, ) -> Option> { - let phys_pages: PageSliceDescriptor = mmio_descriptor.clone().into(); + let phys_pages: PageSliceDescriptor = (*mmio_descriptor).into(); KERNEL_MAPPING_RECORD.write(|mr| { let dup = mr.find_duplicate(&phys_pages)?; diff --git a/X1_JTAG_boot/jtag_boot_rpi3.img b/X1_JTAG_boot/jtag_boot_rpi3.img index 30ce719c..96d8bfb1 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi3.img and b/X1_JTAG_boot/jtag_boot_rpi3.img differ diff --git a/X1_JTAG_boot/jtag_boot_rpi4.img b/X1_JTAG_boot/jtag_boot_rpi4.img index 5e1e1bf7..76531e6f 100755 Binary files a/X1_JTAG_boot/jtag_boot_rpi4.img and b/X1_JTAG_boot/jtag_boot_rpi4.img differ diff --git a/rust-toolchain b/rust-toolchain index e0e7993d..268f9495 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2021-03-18" +channel = "nightly-2021-04-25" components = ["llvm-tools-preview"] targets = ["aarch64-unknown-none-softfloat"]