diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-05-26 13:58:59 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-26 13:58:59 +0000 |
| commit | ee20fd4c16756f1d9dab53ef540bd381d034fb3e (patch) | |
| tree | 960f39d1e35a9755cf68f036763d8390c1331048 | |
| parent | c5c5b6472993434d62993102903db9fd6fac95a0 (diff) | |
| parent | fee89ed7c7f79d7e70421e7f0915c13bcfdefb2f (diff) | |
Merge #1492
1492: Remove ability to, during runtime, set alt layout - it does not work. r=rmja a=rmja
I wasted yesterday trying to get this to work. It seems that erase operations does not work when in db1m mode. The erase operations, both bank and sector, runs and completes without any error flags being set. It also takes expected amount of time, but the flash is not actually erased.
I found [this](https://community.st.com/s/question/0D50X00009XkWrASAV/is-it-possilbe-to-checkand-may-be-writethe-db1m-option-byte-from-the-firmware-i-am-using-an-stmf4427ig-1mb-with-double-bank-via-db1m-option-byte) on the topic, at it seems that one have to reset the mcu for the change to take effect, so it does not make any sense to have it as runtime configurable.
Co-authored-by: Rasmus Melchior Jacobsen <[email protected]>
| -rw-r--r-- | embassy-stm32/src/flash/asynch.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/common.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/f0.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/f3.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/f4.rs | 35 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/f7.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/h7.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/l.rs | 4 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/other.rs | 4 |
9 files changed, 29 insertions, 34 deletions
diff --git a/embassy-stm32/src/flash/asynch.rs b/embassy-stm32/src/flash/asynch.rs index a0d994956..3c3ece99a 100644 --- a/embassy-stm32/src/flash/asynch.rs +++ b/embassy-stm32/src/flash/asynch.rs | |||
| @@ -34,7 +34,7 @@ impl<'d> Flash<'d, Async> { | |||
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | pub fn into_regions(self) -> FlashLayout<'d, Async> { | 36 | pub fn into_regions(self) -> FlashLayout<'d, Async> { |
| 37 | family::set_default_layout(); | 37 | assert!(family::is_default_layout()); |
| 38 | FlashLayout::new(self.inner) | 38 | FlashLayout::new(self.inner) |
| 39 | } | 39 | } |
| 40 | 40 | ||
diff --git a/embassy-stm32/src/flash/common.rs b/embassy-stm32/src/flash/common.rs index cc0e2572b..6c1912900 100644 --- a/embassy-stm32/src/flash/common.rs +++ b/embassy-stm32/src/flash/common.rs | |||
| @@ -30,7 +30,7 @@ impl<'d> Flash<'d, Blocking> { | |||
| 30 | 30 | ||
| 31 | impl<'d, MODE> Flash<'d, MODE> { | 31 | impl<'d, MODE> Flash<'d, MODE> { |
| 32 | pub fn into_blocking_regions(self) -> FlashLayout<'d, Blocking> { | 32 | pub fn into_blocking_regions(self) -> FlashLayout<'d, Blocking> { |
| 33 | family::set_default_layout(); | 33 | assert!(family::is_default_layout()); |
| 34 | FlashLayout::new(self.inner) | 34 | FlashLayout::new(self.inner) |
| 35 | } | 35 | } |
| 36 | 36 | ||
diff --git a/embassy-stm32/src/flash/f0.rs b/embassy-stm32/src/flash/f0.rs index e9916d14b..02bd4cc1f 100644 --- a/embassy-stm32/src/flash/f0.rs +++ b/embassy-stm32/src/flash/f0.rs | |||
| @@ -7,7 +7,9 @@ use super::{FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; | |||
| 7 | use crate::flash::Error; | 7 | use crate::flash::Error; |
| 8 | use crate::pac; | 8 | use crate::pac; |
| 9 | 9 | ||
| 10 | pub const fn set_default_layout() {} | 10 | pub const fn is_default_layout() -> bool { |
| 11 | true | ||
| 12 | } | ||
| 11 | 13 | ||
| 12 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { | 14 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 13 | &FLASH_REGIONS | 15 | &FLASH_REGIONS |
diff --git a/embassy-stm32/src/flash/f3.rs b/embassy-stm32/src/flash/f3.rs index 4e65f5580..b093a7837 100644 --- a/embassy-stm32/src/flash/f3.rs +++ b/embassy-stm32/src/flash/f3.rs | |||
| @@ -7,7 +7,9 @@ use super::{FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; | |||
| 7 | use crate::flash::Error; | 7 | use crate::flash::Error; |
| 8 | use crate::pac; | 8 | use crate::pac; |
| 9 | 9 | ||
| 10 | pub const fn set_default_layout() {} | 10 | pub const fn is_default_layout() -> bool { |
| 11 | true | ||
| 12 | } | ||
| 11 | 13 | ||
| 12 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { | 14 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 13 | &FLASH_REGIONS | 15 | &FLASH_REGIONS |
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs index 25d96ca1e..5e1fc696f 100644 --- a/embassy-stm32/src/flash/f4.rs +++ b/embassy-stm32/src/flash/f4.rs | |||
| @@ -69,7 +69,7 @@ mod alt_regions { | |||
| 69 | 69 | ||
| 70 | impl<'d> Flash<'d> { | 70 | impl<'d> Flash<'d> { |
| 71 | pub fn into_alt_regions(self) -> AltFlashLayout<'d, Async> { | 71 | pub fn into_alt_regions(self) -> AltFlashLayout<'d, Async> { |
| 72 | super::set_alt_layout(); | 72 | assert!(!super::is_default_layout()); |
| 73 | 73 | ||
| 74 | // SAFETY: We never expose the cloned peripheral references, and their instance is not public. | 74 | // SAFETY: We never expose the cloned peripheral references, and their instance is not public. |
| 75 | // Also, all async flash region operations are protected with a mutex. | 75 | // Also, all async flash region operations are protected with a mutex. |
| @@ -86,7 +86,7 @@ mod alt_regions { | |||
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | pub fn into_alt_blocking_regions(self) -> AltFlashLayout<'d, Blocking> { | 88 | pub fn into_alt_blocking_regions(self) -> AltFlashLayout<'d, Blocking> { |
| 89 | super::set_alt_layout(); | 89 | assert!(!super::is_default_layout()); |
| 90 | 90 | ||
| 91 | // SAFETY: We never expose the cloned peripheral references, and their instance is not public. | 91 | // SAFETY: We never expose the cloned peripheral references, and their instance is not public. |
| 92 | // Also, all blocking flash region operations are protected with a cs. | 92 | // Also, all blocking flash region operations are protected with a cs. |
| @@ -191,38 +191,21 @@ impl FlashSector { | |||
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))] | 193 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))] |
| 194 | pub fn set_default_layout() { | 194 | pub(crate) fn is_default_layout() -> bool { |
| 195 | unsafe { | 195 | unsafe { !pac::FLASH.optcr().read().db1m() } |
| 196 | pac::FLASH.optkeyr().write(|w| w.set_optkey(0x08192A3B)); | ||
| 197 | pac::FLASH.optkeyr().write(|w| w.set_optkey(0x4C5D6E7F)); | ||
| 198 | pac::FLASH.optcr().modify(|r| { | ||
| 199 | r.set_db1m(false); | ||
| 200 | r.set_optlock(true) | ||
| 201 | }); | ||
| 202 | }; | ||
| 203 | } | 196 | } |
| 204 | 197 | ||
| 205 | #[cfg(not(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479)))] | 198 | #[cfg(not(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479)))] |
| 206 | pub const fn set_default_layout() {} | 199 | pub(crate) const fn is_default_layout() -> bool { |
| 207 | 200 | true | |
| 208 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))] | ||
| 209 | fn set_alt_layout() { | ||
| 210 | unsafe { | ||
| 211 | pac::FLASH.optkeyr().write(|w| w.set_optkey(0x08192A3B)); | ||
| 212 | pac::FLASH.optkeyr().write(|w| w.set_optkey(0x4C5D6E7F)); | ||
| 213 | pac::FLASH.optcr().modify(|r| { | ||
| 214 | r.set_db1m(true); | ||
| 215 | r.set_optlock(true) | ||
| 216 | }); | ||
| 217 | }; | ||
| 218 | } | 201 | } |
| 219 | 202 | ||
| 220 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))] | 203 | #[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))] |
| 221 | pub fn get_flash_regions() -> &'static [&'static FlashRegion] { | 204 | pub fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 222 | if unsafe { pac::FLASH.optcr().read().db1m() } { | 205 | if is_default_layout() { |
| 223 | &ALT_FLASH_REGIONS | ||
| 224 | } else { | ||
| 225 | &FLASH_REGIONS | 206 | &FLASH_REGIONS |
| 207 | } else { | ||
| 208 | &ALT_FLASH_REGIONS | ||
| 226 | } | 209 | } |
| 227 | } | 210 | } |
| 228 | 211 | ||
diff --git a/embassy-stm32/src/flash/f7.rs b/embassy-stm32/src/flash/f7.rs index e6267e178..1a6d6bb03 100644 --- a/embassy-stm32/src/flash/f7.rs +++ b/embassy-stm32/src/flash/f7.rs | |||
| @@ -6,7 +6,9 @@ use super::{FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; | |||
| 6 | use crate::flash::Error; | 6 | use crate::flash::Error; |
| 7 | use crate::pac; | 7 | use crate::pac; |
| 8 | 8 | ||
| 9 | pub const fn set_default_layout() {} | 9 | pub const fn is_default_layout() -> bool { |
| 10 | true | ||
| 11 | } | ||
| 10 | 12 | ||
| 11 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { | 13 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 12 | &FLASH_REGIONS | 14 | &FLASH_REGIONS |
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs index d09ebc0dd..9baf059ee 100644 --- a/embassy-stm32/src/flash/h7.rs +++ b/embassy-stm32/src/flash/h7.rs | |||
| @@ -7,7 +7,9 @@ use super::{FlashRegion, FlashSector, BANK1_REGION, FLASH_REGIONS, WRITE_SIZE}; | |||
| 7 | use crate::flash::Error; | 7 | use crate::flash::Error; |
| 8 | use crate::pac; | 8 | use crate::pac; |
| 9 | 9 | ||
| 10 | pub const fn set_default_layout() {} | 10 | pub const fn is_default_layout() -> bool { |
| 11 | true | ||
| 12 | } | ||
| 11 | 13 | ||
| 12 | const fn is_dual_bank() -> bool { | 14 | const fn is_dual_bank() -> bool { |
| 13 | FLASH_REGIONS.len() == 2 | 15 | FLASH_REGIONS.len() == 2 |
diff --git a/embassy-stm32/src/flash/l.rs b/embassy-stm32/src/flash/l.rs index c4bbd5477..deefd05ed 100644 --- a/embassy-stm32/src/flash/l.rs +++ b/embassy-stm32/src/flash/l.rs | |||
| @@ -6,7 +6,9 @@ use super::{FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; | |||
| 6 | use crate::flash::Error; | 6 | use crate::flash::Error; |
| 7 | use crate::pac; | 7 | use crate::pac; |
| 8 | 8 | ||
| 9 | pub const fn set_default_layout() {} | 9 | pub const fn is_default_layout() -> bool { |
| 10 | true | ||
| 11 | } | ||
| 10 | 12 | ||
| 11 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { | 13 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 12 | &FLASH_REGIONS | 14 | &FLASH_REGIONS |
diff --git a/embassy-stm32/src/flash/other.rs b/embassy-stm32/src/flash/other.rs index ccdcfeb7a..a7e8d1d57 100644 --- a/embassy-stm32/src/flash/other.rs +++ b/embassy-stm32/src/flash/other.rs | |||
| @@ -2,7 +2,9 @@ | |||
| 2 | 2 | ||
| 3 | use super::{Error, FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; | 3 | use super::{Error, FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; |
| 4 | 4 | ||
| 5 | pub const fn set_default_layout() {} | 5 | pub const fn is_default_layout() -> bool { |
| 6 | true | ||
| 7 | } | ||
| 6 | 8 | ||
| 7 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { | 9 | pub const fn get_flash_regions() -> &'static [&'static FlashRegion] { |
| 8 | &FLASH_REGIONS | 10 | &FLASH_REGIONS |
