flash: update stellaris flash data to latest dev package 9453
[fw/openocd] / src / flash / nor / at91sam7.c
index e46122ad8a2ae3265a99d82e0008755895631271..95ba084b5e1d41b827ffa490e9c8ecbe0fcc488b 100644 (file)
@@ -353,9 +353,8 @@ static int at91sam7_flash_command(struct flash_bank *bank, uint8_t cmd, uint16_t
 /* Read device id register, main clock frequency register and fill in driver info structure */
 static int at91sam7_read_part_info(struct flash_bank *bank)
 {
-       struct flash_bank *t_bank = bank;
        struct at91sam7_flash_bank *at91sam7_info;
-       struct target *target = t_bank->target;
+       struct target *target = bank->target;
 
        uint16_t bnk, sec;
        uint16_t arch;
@@ -370,12 +369,12 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
        uint32_t base_address = 0;
        char *target_name_t = "Unknown";
 
-       at91sam7_info = t_bank->driver_priv;
+       at91sam7_info = bank->driver_priv;
 
        if (at91sam7_info->cidr != 0) {
                /* flash already configured, update clock and check for protected sectors */
                struct flash_bank *fb = bank;
-               t_bank = fb;
+               struct flash_bank *t_bank = bank;
 
                while (t_bank) {
                        /* re-calculate master clock frequency */
@@ -404,7 +403,7 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
        if (at91sam7_info->flash_autodetection == 0) {
                /* banks and sectors are already created, based on data from input file */
                struct flash_bank *fb = bank;
-               t_bank = fb;
+               struct flash_bank *t_bank = bank;
                while (t_bank) {
                        at91sam7_info = t_bank->driver_priv;
 
@@ -576,6 +575,7 @@ static int at91sam7_read_part_info(struct flash_bank *bank)
        bank_size = sectors_num * pages_per_sector * page_size;
 
        for (bnk = 0; bnk < banks_num; bnk++) {
+               struct flash_bank *t_bank = bank;
                if (bnk > 0) {
                        if (!t_bank->next) {
                                /* create a new flash bank element */
@@ -897,8 +897,10 @@ static int at91sam7_erase(struct flash_bank *bank, int first, int last)
                for (pos = 0; pos < nbytes; pos++)
                        buffer[pos] = 0xFF;
 
-               if (at91sam7_write(bank, buffer, bank->sectors[first].offset, nbytes) != ERROR_OK)
+               if (at91sam7_write(bank, buffer, bank->sectors[first].offset, nbytes) != ERROR_OK) {
+                       free(buffer);
                        return ERROR_FLASH_OPERATION_FAILED;
+               }
 
                free(buffer);
        }