Fix stm32x and pic32mx flash pointer cast alignment warnings, simplify their last word handling.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1626 b42882b7-edfa-0310-969c-e2dbd0fdcd60__archive__
parent
a3b6236289
commit
fdf114ab0a
|
@ -463,9 +463,10 @@ static int pic32mx_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset
|
|||
|
||||
while(count > 0)
|
||||
{
|
||||
u32 status;
|
||||
u32 value;
|
||||
memcpy(&value, buffer, sizeof(u32));
|
||||
|
||||
status = pic32mx_write_word(bank, address, *(u32*)buffer);
|
||||
u32 status = pic32mx_write_word(bank, address, value);
|
||||
if( status & NVMCON_NVMERR ) {
|
||||
LOG_ERROR("Flash write error NVMERR (status=0x%08x)", status);
|
||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||
|
@ -568,8 +569,10 @@ static int pic32mx_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32
|
|||
|
||||
while (words_remaining > 0)
|
||||
{
|
||||
status = pic32mx_write_word(bank, address, *(u32*)(buffer + bytes_written));
|
||||
u32 value;
|
||||
memcpy(&value, buffer + bytes_written, sizeof(u32));
|
||||
|
||||
status = pic32mx_write_word(bank, address, value);
|
||||
if( status & NVMCON_NVMERR )
|
||||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
if( status & NVMCON_LVDERR )
|
||||
|
@ -582,19 +585,10 @@ static int pic32mx_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32
|
|||
|
||||
if (bytes_remaining)
|
||||
{
|
||||
u8 last_word[4] = {0xff, 0xff, 0xff, 0xff};
|
||||
int i = 0;
|
||||
|
||||
while(bytes_remaining > 0)
|
||||
{
|
||||
/* Assumes little endian */
|
||||
last_word[i++] = *(buffer + bytes_written);
|
||||
bytes_remaining--;
|
||||
bytes_written++;
|
||||
}
|
||||
|
||||
status = pic32mx_write_word(bank, address, *(u32*)last_word);
|
||||
u32 value = 0xffffffff;
|
||||
memcpy(&value, buffer + bytes_written, bytes_remaining);
|
||||
|
||||
status = pic32mx_write_word(bank, address, value);
|
||||
if( status & NVMCON_NVMERR )
|
||||
return ERROR_FLASH_OPERATION_FAILED;
|
||||
if( status & NVMCON_LVDERR )
|
||||
|
|
|
@ -658,8 +658,11 @@ static int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 c
|
|||
|
||||
while (words_remaining > 0)
|
||||
{
|
||||
u16 value;
|
||||
memcpy(&value, buffer + bytes_written, sizeof(u16));
|
||||
|
||||
target_write_u32(target, STM32_FLASH_CR, FLASH_PG);
|
||||
target_write_u16(target, address, *(u16*)(buffer + bytes_written));
|
||||
target_write_u16(target, address, value);
|
||||
|
||||
status = stm32x_wait_status_busy(bank, 5);
|
||||
|
||||
|
@ -681,18 +684,11 @@ static int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 c
|
|||
|
||||
if (bytes_remaining)
|
||||
{
|
||||
u8 last_halfword[2] = {0xff, 0xff};
|
||||
int i = 0;
|
||||
|
||||
while(bytes_remaining > 0)
|
||||
{
|
||||
last_halfword[i++] = *(buffer + bytes_written);
|
||||
bytes_remaining--;
|
||||
bytes_written++;
|
||||
}
|
||||
u16 value = 0xffff;
|
||||
memcpy(&value, buffer + bytes_written, bytes_remaining);
|
||||
|
||||
target_write_u32(target, STM32_FLASH_CR, FLASH_PG);
|
||||
target_write_u16(target, address, *(u16*)last_halfword);
|
||||
target_write_u16(target, address, value);
|
||||
|
||||
status = stm32x_wait_status_busy(bank, 5);
|
||||
|
||||
|
|
Loading…
Reference in New Issue