This is an automated email from Gerrit.

"Tarek BOCHKATI <[email protected]>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6556

-- gerrit

commit d6e3bd8a231710131888e59f0148a4b1d0ee99e4
Author: Tarek BOCHKATI <[email protected]>
Date:   Thu Sep 9 22:14:36 2021 +0100

    flash/stm32l4x: fix flash programming in 64-bit hosts
    
    stm32l4_work_area struct is shared between the loader and stm32l4x flash 
driver
    
    '*wp' and '*rp' pointers' size is 4 bytes each since stm32l4x devices have
    32-bit processors.
    
    however when used in openocd code, their size depends on the host
      if the host is 32-bit, then the size is 4 bytes each.
      if the host is 64-bit, then the size is 8 bytes each.
    
    to avoid this size difference, change their types depending on the
    usage (pointers for the loader, and 32-bit integers in openocd code).
    
    Change-Id: I0a3df4bb4bf872b01cdb9357eb28307868d7d469
    Signed-off-by: Tarek BOCHKATI <[email protected]>

diff --git a/contrib/loaders/flash/stm32/stm32l4x.c 
b/contrib/loaders/flash/stm32/stm32l4x.c
index bcad98843..54c88a335 100644
--- a/contrib/loaders/flash/stm32/stm32l4x.c
+++ b/contrib/loaders/flash/stm32/stm32l4x.c
@@ -5,6 +5,8 @@
  *   [email protected]
  */
 
+#define OPENOCD_CONTRIB_LOADERS_FLASH_STM32_STM32L4X
+
 #include <stdint.h>
 #include "../../../../src/flash/nor/stm32l4x.h"
 
diff --git a/src/flash/nor/stm32l4x.c b/src/flash/nor/stm32l4x.c
index e4d291e6d..5e57a7291 100644
--- a/src/flash/nor/stm32l4x.c
+++ b/src/flash/nor/stm32l4x.c
@@ -1405,16 +1405,19 @@ static int stm32l4_write_block(struct flash_bank *bank, 
const uint8_t *buffer,
        armv7m_info.common_magic = ARMV7M_COMMON_MAGIC;
        armv7m_info.core_mode = ARM_MODE_THREAD;
 
-       init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT); /* buffer 
start, status (out) */
+       /* contrib/loaders/flash/stm32/stm32l4x.c:write() arguments */
+       init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT); /* 
stm32l4_work_area ptr , status (out) */
        init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);    /* buffer end */
        init_reg_param(&reg_params[2], "r2", 32, PARAM_OUT);    /* target 
address */
        init_reg_param(&reg_params[3], "r3", 32, PARAM_OUT);    /* count (of 
stm32l4_info->data_width) */
-       init_reg_param(&reg_params[4], "sp", 32, PARAM_OUT);    /* write algo 
stack pointer */
 
        buf_set_u32(reg_params[0].value, 0, 32, source->address);
        buf_set_u32(reg_params[1].value, 0, 32, source->address + source->size);
        buf_set_u32(reg_params[2].value, 0, 32, address);
        buf_set_u32(reg_params[3].value, 0, 32, count);
+
+       /* write algo stack pointer */
+       init_reg_param(&reg_params[4], "sp", 32, PARAM_OUT);
        buf_set_u32(reg_params[4].value, 0, 32, source->address +
                        offsetof(struct stm32l4_work_area, stack) + 
LDR_STACK_SIZE);
 
diff --git a/src/flash/nor/stm32l4x.h b/src/flash/nor/stm32l4x.h
index 566cc2226..127cd3288 100644
--- a/src/flash/nor/stm32l4x.h
+++ b/src/flash/nor/stm32l4x.h
@@ -128,9 +128,24 @@ struct stm32l4_work_area {
        } params;
        uint8_t stack[LDR_STACK_SIZE];
        struct flash_async_algorithm_circbuf {
+               /* note: stm32l4_work_area struct is shared between the loader
+                * and stm32l4x flash driver.
+                *
+                * '*wp' and '*rp' pointers' size is 4 bytes each since stm32l4x
+                * devices have 32-bit processors.
+                * however when used in openocd code, their size depends on the 
host
+                *   if the host is 32-bit, then the size is 4 bytes each.
+                *   if the host is 64-bit, then the size is 8 bytes each.
+                * to avoid this size difference, change their types depending 
on the
+                * usage (pointers for the loader, and 32-bit integers in 
openocd code).
+                */
+#ifdef OPENOCD_CONTRIB_LOADERS_FLASH_STM32_STM32L4X
                uint8_t *wp;
                uint8_t *rp;
-               uint8_t *buf;
+#else
+               uint32_t wp;
+               uint32_t rp;
+#endif /* CONTRIB_LOADER */
        } fifo;
 };
 

-- 

Reply via email to