Partially Revert "flash/stm32l4x: introduce flash programming without loader"
authorOleksij Rempel <linux@rempel-privat.de>
Wed, 15 Sep 2021 09:34:21 +0000 (10:34 +0100)
committerOleksij Rempel <linux@rempel-privat.de>
Sat, 18 Sep 2021 18:15:35 +0000 (18:15 +0000)
This partially reverts commit 1247eee4e6e5.

There is no reasonable use cases where work-area should be enabled
and working, and it can't be used for the flash loader.

Instead of introducing driver specific property, users can disable
flash load by disabling work-area, for example by setting it to 0.

But still we keep the function stm32l4_write_block_without_loader
to be used when workarea is not available (no sufficient size or zero)

Change-Id: Ibb046c74df354c6067bac978e8ef7efb47d9fd2b
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6569
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
doc/openocd.texi
src/flash/nor/stm32l4x.c

index 8572ce4a7f628572bc35cb4cef10a371dd567634..138922d08d834cbe7a4f3e1ba74799e04bd005ef 100644 (file)
@@ -7359,13 +7359,6 @@ The @var{num} parameter is a value shown by @command{flash banks}.
 @emph{Note:} To apply the protection change immediately, use @command{stm32l4x option_load}.
 @end deffn
 
-@deffn Command {stm32l4x flashloader} num [@option{enable} | @option{disable}]
-Enables or disables the flashloader usage (enabled by default),
-when disabled it will fall back to direct memory access to program the Flash or OTP memories.
-if neither @option{enabled} nor @option{disable} are specified, the command will display
-the current configuration.
-@end deffn
-
 @deffn {Command} {stm32l4x mass_erase} num
 Mass erases the entire stm32l4x device.
 The @var{num} parameter is a value shown by @command{flash banks}.
index 8c292e76d5be7318aefbfef880433dc7b1a70c2f..3ef8bf894e5a7918597f629cc835c4e0b771b8e2 100644 (file)
@@ -252,7 +252,6 @@ struct stm32l4_flash_bank {
        uint32_t flash_regs_base;
        const uint32_t *flash_regs;
        bool otp_enabled;
-       bool use_flashloader;
        enum stm32l4_rdp rdp;
        bool tzen;
        uint32_t optr;
@@ -619,7 +618,6 @@ FLASH_BANK_COMMAND_HANDLER(stm32l4_flash_bank_command)
        stm32l4_info->probed = false;
        stm32l4_info->otp_enabled = false;
        stm32l4_info->user_bank_size = bank->size;
-       stm32l4_info->use_flashloader = true;
 
        return ERROR_OK;
 }
@@ -1595,20 +1593,21 @@ static int stm32l4_write(struct flash_bank *bank, const uint8_t *buffer,
        if (retval != ERROR_OK)
                goto err_lock;
 
-       if (stm32l4_info->use_flashloader) {
-               /* For TrustZone enabled devices, when TZEN is set and RDP level is 0.5,
-                * the debug is possible only in non-secure state.
-                * Thus means the flashloader will run in non-secure mode,
-                * and the workarea need to be in non-secure RAM */
-               if (stm32l4_info->tzen && (stm32l4_info->rdp == RDP_LEVEL_0_5))
-                       LOG_INFO("RDP level is 0.5, the work-area should reside in non-secure RAM");
 
-               retval = stm32l4_write_block(bank, buffer, offset,
-                               count / stm32l4_info->data_width);
-       }
+       /* For TrustZone enabled devices, when TZEN is set and RDP level is 0.5,
+        * the debug is possible only in non-secure state.
+        * Thus means the flashloader will run in non-secure mode,
+        * and the workarea need to be in non-secure RAM */
+       if (stm32l4_info->tzen && (stm32l4_info->rdp == RDP_LEVEL_0_5))
+               LOG_WARNING("RDP = 0x55, the work-area should be in non-secure RAM (check SAU partitioning)");
+
+       /* first try to write using the loader, for better performance */
+       retval = stm32l4_write_block(bank, buffer, offset,
+                       count / stm32l4_info->data_width);
 
-       if (!stm32l4_info->use_flashloader || retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) {
-               LOG_INFO("falling back to single memory accesses");
+       /* if resources are not available write without a loader */
+       if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) {
+               LOG_WARNING("falling back to programming without a flash loader (slower)");
                retval = stm32l4_write_block_without_loader(bank, buffer, offset,
                                count / stm32l4_info->data_width);
        }
@@ -2266,26 +2265,6 @@ COMMAND_HANDLER(stm32l4_handle_trustzone_command)
        return stm32l4_perform_obl_launch(bank);
 }
 
-COMMAND_HANDLER(stm32l4_handle_flashloader_command)
-{
-       if (CMD_ARGC < 1 || CMD_ARGC > 2)
-               return ERROR_COMMAND_SYNTAX_ERROR;
-
-       struct flash_bank *bank;
-       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
-       if (retval != ERROR_OK)
-               return retval;
-
-       struct stm32l4_flash_bank *stm32l4_info = bank->driver_priv;
-
-       if (CMD_ARGC == 2)
-               COMMAND_PARSE_ENABLE(CMD_ARGV[1], stm32l4_info->use_flashloader);
-
-       command_print(CMD, "FlashLoader usage is %s", stm32l4_info->use_flashloader ? "enabled" : "disabled");
-
-       return ERROR_OK;
-}
-
 COMMAND_HANDLER(stm32l4_handle_option_load_command)
 {
        if (CMD_ARGC != 1)
@@ -2491,13 +2470,6 @@ static const struct command_registration stm32l4_exec_command_handlers[] = {
                .usage = "bank_id",
                .help = "Unlock entire protected flash device.",
        },
-       {
-               .name = "flashloader",
-               .handler = stm32l4_handle_flashloader_command,
-               .mode = COMMAND_EXEC,
-               .usage = "<bank_id> [enable|disable]",
-               .help = "Configure the flashloader usage",
-       },
        {
                .name = "mass_erase",
                .handler = stm32l4_handle_mass_erase_command,