From 1b276c0ad56ed7d1ef72787b6bee885ac5d063a8 Mon Sep 17 00:00:00 2001 From: Tarek BOCHKATI Date: Thu, 29 Aug 2019 17:03:19 +0200 Subject: [PATCH] flash/nor/stm32h7x: remove stm32x_options.protection2 Each bank had to store its options only, there is no need for bank1 to sneak into bank2 options. Furthermore, some variants do not have a second bank. Change-Id: I9229eb8ab4b5860ba2b0c5dbe626a54a84bca4d6 Signed-off-by: Tarek BOCHKATI Reviewed-on: http://openocd.zylin.com/5290 Tested-by: jenkins Reviewed-by: Christopher Head Reviewed-by: Tomas Vanek --- src/flash/nor/stm32h7x.c | 58 +++++++++------------------------------- 1 file changed, 12 insertions(+), 46 deletions(-) diff --git a/src/flash/nor/stm32h7x.c b/src/flash/nor/stm32h7x.c index fd6bf9a09d..1d128f3be1 100644 --- a/src/flash/nor/stm32h7x.c +++ b/src/flash/nor/stm32h7x.c @@ -102,8 +102,7 @@ struct stm32h7x_rev { struct stm32x_options { uint8_t RDP; - uint32_t protection; /* bank1 WRP */ - uint32_t protection2; /* bank2 WRP */ + uint32_t protection; /* bank sectors's write protection (WPSN register) */ uint8_t user_options; uint8_t user2_options; uint8_t user3_options; @@ -307,11 +306,9 @@ static int stm32x_lock_reg(struct flash_bank *bank) static int stm32x_read_options(struct flash_bank *bank) { uint32_t optiondata; - struct stm32h7x_flash_bank *stm32x_info = NULL; + struct stm32h7x_flash_bank *stm32x_info = bank->driver_priv; struct target *target = bank->target; - stm32x_info = bank->driver_priv; - /* read current option bytes */ int retval = target_read_u32(target, FLASH_REG_BASE_B0 + FLASH_OPTSR_CUR, &optiondata); if (retval != ERROR_OK) @@ -327,28 +324,20 @@ static int stm32x_read_options(struct flash_bank *bank) LOG_INFO("Device Security Bit Set"); /* read current WPSN option bytes */ - retval = target_read_u32(target, FLASH_REG_BASE_B0 + FLASH_WPSN_CUR, &optiondata); + retval = target_read_u32(target, stm32x_get_flash_reg(bank, FLASH_WPSN_CUR), &optiondata); if (retval != ERROR_OK) return retval; stm32x_info->option_bytes.protection = optiondata & 0xff; - /* read current WPSN2 option bytes */ - retval = target_read_u32(target, FLASH_REG_BASE_B1 + FLASH_WPSN_CUR, &optiondata); - if (retval != ERROR_OK) - return retval; - stm32x_info->option_bytes.protection2 = optiondata & 0xff; - return ERROR_OK; } static int stm32x_write_options(struct flash_bank *bank) { - struct stm32h7x_flash_bank *stm32x_info = NULL; + struct stm32h7x_flash_bank *stm32x_info = bank->driver_priv; struct target *target = bank->target; uint32_t optiondata; - stm32x_info = bank->driver_priv; - int retval = stm32x_unlock_option_reg(bank); if (retval != ERROR_OK) return retval; @@ -366,13 +355,7 @@ static int stm32x_write_options(struct flash_bank *bank) optiondata = stm32x_info->option_bytes.protection & 0xff; /* Program protection WPSNPRG */ - retval = target_write_u32(target, FLASH_REG_BASE_B0 + FLASH_WPSN_PRG, optiondata); - if (retval != ERROR_OK) - return retval; - - optiondata = stm32x_info->option_bytes.protection2 & 0xff; - /* Program protection WPSNPRG2 */ - retval = target_write_u32(target, FLASH_REG_BASE_B1 + FLASH_WPSN_PRG, optiondata); + retval = target_write_u32(target, stm32x_get_flash_reg(bank, FLASH_WPSN_PRG), optiondata); if (retval != ERROR_OK) return retval; @@ -426,17 +409,7 @@ static int stm32x_protect_check(struct flash_bank *bank) } for (int i = 0; i < bank->num_sectors; i++) { - if (stm32x_info->flash_base == FLASH_REG_BASE_B0) { - if (stm32x_info->option_bytes.protection & (1 << i)) - bank->sectors[i].is_protected = 0; - else - bank->sectors[i].is_protected = 1; - } else { - if (stm32x_info->option_bytes.protection2 & (1 << i)) - bank->sectors[i].is_protected = 0; - else - bank->sectors[i].is_protected = 1; - } + bank->sectors[i].is_protected = stm32x_info->option_bytes.protection & (1 << i) ? 0 : 1; } return ERROR_OK; } @@ -515,21 +488,14 @@ static int stm32x_protect(struct flash_bank *bank, int set, int first, int last) } for (int i = first; i <= last; i++) { - if (stm32x_info->flash_base == FLASH_REG_BASE_B0) { - if (set) - stm32x_info->option_bytes.protection &= ~(1 << i); - else - stm32x_info->option_bytes.protection |= (1 << i); - } else { - if (set) - stm32x_info->option_bytes.protection2 &= ~(1 << i); - else - stm32x_info->option_bytes.protection2 |= (1 << i); - } + if (set) + stm32x_info->option_bytes.protection &= ~(1 << i); + else + stm32x_info->option_bytes.protection |= (1 << i); } - LOG_INFO("stm32x_protect, option_bytes written WRP1 0x%x , WRP2 0x%x", - (stm32x_info->option_bytes.protection & 0xff), (stm32x_info->option_bytes.protection2 & 0xff)); + LOG_DEBUG("stm32x_protect, option_bytes written WPSN 0x%x", + (stm32x_info->option_bytes.protection & 0xff)); retval = stm32x_write_options(bank); if (retval != ERROR_OK) -- 2.30.2