This is an automated email from Gerrit.

Jens Bauer (j...@gpio.dk) just uploaded a new patch set to Gerrit, which you 
can find at http://openocd.zylin.com/2466

-- gerrit

commit 06bc71be19b4df35b417702e65a7351880075a0a
Author: Jens Bauer <j...@gpio.dk>
Date:   Fri Jan 16 23:57:09 2015 +0100

    stm32f2x: Fix byte order bug.
    
    Do not use buf_set_u32 on integers; they're not buffers.
    If using buf_set_u32 on integers, bytes will be exchanged on Big Endian 
targets.
    In this particular case, FLASH_OPTCR was incorrectly written, causing it to 
often
    contain one of these values: 0x00aaaae1, 0x00aaffef, 0x00ffabe1 or 
0x00abffe1.
    This write-protected the device before flash-programming, causing this 
command...
    flash write_image erase unlock myfile.elf
    ... to fail, complaining about write-protection.
    Repeating the above command would change the OPTCR register each time.
    After applying this patch, the OPTCR remains "unchanged".
    
    Change-Id: I73d510fcc2e81a01973ad5c6e1aa22715ebd2743
    Signed-off-by: Jens Bauer <j...@gpio.dk>

diff --git a/src/flash/nor/stm32f2x.c b/src/flash/nor/stm32f2x.c
index 8f35845..422eac1 100644
--- a/src/flash/nor/stm32f2x.c
+++ b/src/flash/nor/stm32f2x.c
@@ -344,8 +344,8 @@ static int stm32x_write_options(struct flash_bank *bank)
 
        /* rebuild option data */
        optiondata = stm32x_info->option_bytes.user_options;
-       buf_set_u32(&optiondata, 8, 8, stm32x_info->option_bytes.RDP);
-       buf_set_u32(&optiondata, 16, 12, stm32x_info->option_bytes.protection);
+       optiondata |= stm32x_info->option_bytes.RDP << 8;
+       optiondata |= (stm32x_info->option_bytes.protection & 0x0fff) << 16;
 
        /* program options */
        retval = target_write_u32(target, STM32_FLASH_OPTCR, optiondata);
@@ -355,7 +355,7 @@ static int stm32x_write_options(struct flash_bank *bank)
        if (stm32x_info->has_large_mem) {
 
                uint32_t optiondata2 = 0;
-               buf_set_u32(&optiondata2, 16, 12, 
stm32x_info->option_bytes.protection >> 12);
+               optiondata2 |= (stm32x_info->option_bytes.protection & 
0x00fff000) << 4;
                retval = target_write_u32(target, STM32_FLASH_OPTCR1, 
optiondata2);
                if (retval != ERROR_OK)
                        return retval;

-- 

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to