Edgar Grimberg wrote:
> The default state of the flash after a reset init is unlocked.
> The information in the flash driver reflects this.
> 
> The information about the lock status cannot be read from the
> flash chip, so the user is informed that flash info might not
> contain accurate information.
> 
> Signed-off-by: Edgar Grimberg <edgar.grimb...@zylin.com>
> ---
>  src/flash/nor/str7x.c |   10 ++++++++--
>  tcl/target/str710.cfg |   10 +++++++++-
>  2 files changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/src/flash/nor/str7x.c b/src/flash/nor/str7x.c
> index 040097a..67aa7a1 100644
> --- a/src/flash/nor/str7x.c
> +++ b/src/flash/nor/str7x.c
> @@ -93,7 +93,8 @@ static int str7x_build_block_list(struct flash_bank *bank)
>               bank->sectors[num_sectors].offset = 
> mem_layout_str7bank0[i].sector_start;
>               bank->sectors[num_sectors].size = 
> mem_layout_str7bank0[i].sector_size;
>               bank->sectors[num_sectors].is_erased = -1;
> -             bank->sectors[num_sectors].is_protected = 1;
> +             /*reset init will unprotect all the sectors, keep the driver in 
> sync*/
> +             bank->sectors[num_sectors].is_protected = 0;
>               str7x_info->sector_bits[num_sectors++] = 
> mem_layout_str7bank0[i].sector_bit;
>       }
>  
> @@ -102,7 +103,8 @@ static int str7x_build_block_list(struct flash_bank *bank)
>               bank->sectors[num_sectors].offset = 
> mem_layout_str7bank1[i].sector_start;
>               bank->sectors[num_sectors].size = 
> mem_layout_str7bank1[i].sector_size;
>               bank->sectors[num_sectors].is_erased = -1;
> -             bank->sectors[num_sectors].is_protected = 1;
> +             /*reset init will unprotect all the sectors, keep the driver in 
> sync*/
> +             bank->sectors[num_sectors].is_protected = 0;
>               str7x_info->sector_bits[num_sectors++] = 
> mem_layout_str7bank1[i].sector_bit;
>       }
>  
> @@ -600,6 +602,10 @@ COMMAND_HANDLER(str7x_handle_part_id_command)
>  static int str7x_info(struct flash_bank *bank, char *buf, int buf_size)
>  {
>       snprintf(buf, buf_size, "str7x flash driver info");
> +     /*STR7x flash doesn't support sector protection interrogation.
> +       FLASH_NVWPAR acts as a write only register, the value read from it
> +       doesn't reflect the actual protection state of the sectors.*/
> +     LOG_WARNING("STR7x flash lock information might not be correct due to 
> hardware limitations.");
>       return ERROR_OK;
>  }
>  
> diff --git a/tcl/target/str710.cfg b/tcl/target/str710.cfg
> index 9da69ac..fdc13d6 100644
> --- a/tcl/target/str710.cfg
> +++ b/tcl/target/str710.cfg
> @@ -30,7 +30,15 @@ set _TARGETNAME $_CHIPNAME.cpu
>  target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position 
> $_TARGETNAME -variant arm7tdmi
>  
>  $_TARGETNAME configure -event reset-start { jtag_khz 10 }
> -$_TARGETNAME configure -event reset-init { jtag_khz 6000 }
> +$_TARGETNAME configure -event reset-init { 
> +     jtag_khz 6000 
> +
> +# Because the hardware cannot be interrogated for the protection state of 
> sectors,
> +# initialize all the sectors to be unprotected. The initial state is 
> reflected by 
> +# the driver, too. 
> +     flash protect 0 0 last off
> +     flash protect 1 0 last off
> +}
>  $_TARGETNAME configure -event gdb-flash-erase-start {
>       flash protect 0 0 7 off
>       flash protect 1 0 1 off

Just for info the str73 and str75 cfg's would also need updating.

Cheers
Spen
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to