flash: fix clang static analyzer build errors
[fw/openocd] / src / flash / nor / dsp5680xx_flash.c
index eb2f3e1b3782478f7523c1355ab3bb12fae235c8..858b669815f6d5958331206e3a2f6b6c7d6de8bc 100644 (file)
@@ -18,9 +18,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 /**
 #include <target/algorithm.h>
 #include <target/dsp5680xx.h>
 
-struct dsp5680xx_flash_bank {
-       struct working_area *write_algorithm;
-};
-
 static int dsp5680xx_build_sector_list(struct flash_bank *bank)
 {
-       uint32_t offset = HFM_FLASH_BASE_ADDR;
-
        bank->sectors = malloc(sizeof(struct flash_sector) * bank->num_sectors);
-       int i;
 
-       for (i = 0; i < bank->num_sectors; ++i) {
+       for (unsigned int i = 0; i < bank->num_sectors; ++i) {
                bank->sectors[i].offset = i * HFM_SECTOR_SIZE;
                bank->sectors[i].size = HFM_SECTOR_SIZE;
-               offset += bank->sectors[i].size;
                bank->sectors[i].is_erased = -1;
                bank->sectors[i].is_protected = -1;
        }
@@ -71,13 +61,8 @@ static int dsp5680xx_build_sector_list(struct flash_bank *bank)
 /* flash bank dsp5680xx 0 0 0 0 <target#> */
 FLASH_BANK_COMMAND_HANDLER(dsp5680xx_flash_bank_command)
 {
-       struct dsp5680xx_flash_bank *nbank;
-
-       nbank = malloc(sizeof(struct dsp5680xx_flash_bank));
-
        bank->base = HFM_FLASH_BASE_ADDR;
        bank->size = HFM_SIZE_BYTES; /* top 4k not accessible */
-       bank->driver_priv = nbank;
        bank->num_sectors = HFM_SECTOR_COUNT;
        dsp5680xx_build_sector_list(bank);
 
@@ -119,7 +104,7 @@ static int dsp5680xx_flash_protect_check(struct flash_bank *bank)
 }
 
 /**
- * Protection funcionality is not implemented.
+ * Protection functionality is not implemented.
  * The current implementation applies/removes security on the chip.
  * The chip is effectively secured/unsecured after the first reset
  * following the execution of this function.
@@ -131,8 +116,8 @@ static int dsp5680xx_flash_protect_check(struct flash_bank *bank)
  *
  * @return
  */
-static int dsp5680xx_flash_protect(struct flash_bank *bank, int set, int first,
-                                  int last)
+static int dsp5680xx_flash_protect(struct flash_bank *bank, int set,
+               unsigned int first, unsigned int last)
 {
 /**
  * This applies security to flash module after next reset, it does
@@ -142,15 +127,9 @@ static int dsp5680xx_flash_protect(struct flash_bank *bank, int set, int first,
 
        if (set)
                retval = dsp5680xx_f_lock(bank->target);
-       else {
+       else
                retval = dsp5680xx_f_unlock(bank->target);
-               if (retval == ERROR_OK) {
-                       /* mark all as erased */
-                       for (int i = 0; i <= (HFM_SECTOR_COUNT - 1); i++)
-                               /* FM does not recognize it as erased if erased via JTAG. */
-                               bank->sectors[i].is_erased = 1;
-               }
-       }
+
        return retval;
 }
 
@@ -165,11 +144,9 @@ static int dsp5680xx_flash_protect(struct flash_bank *bank, int set, int first,
  *
  * @return
  */
-static int dsp5680xx_flash_write(struct flash_bank *bank, uint8_t * buffer,
+static int dsp5680xx_flash_write(struct flash_bank *bank, const uint8_t *buffer,
                                 uint32_t offset, uint32_t count)
 {
-       int retval;
-
        if ((offset + count / 2) > bank->size) {
                LOG_ERROR("%s: Flash bank cannot fit data.", __func__);
                return ERROR_FAIL;
@@ -183,17 +160,7 @@ static int dsp5680xx_flash_write(struct flash_bank *bank, uint8_t * buffer,
                LOG_ERROR("%s: Writing to odd addresses not supported for this target", __func__);
                return ERROR_FAIL;
        }
-       retval = dsp5680xx_f_wr(bank->target, buffer, bank->base + offset / 2, count, 0);
-       uint32_t addr_word;
-
-       for (addr_word = bank->base + offset / 2; addr_word < count / 2;
-                       addr_word += (HFM_SECTOR_SIZE / 2)) {
-               if (retval == ERROR_OK)
-                       bank->sectors[addr_word / (HFM_SECTOR_SIZE / 2)].is_erased = 0;
-               else
-                       bank->sectors[addr_word / (HFM_SECTOR_SIZE / 2)].is_erased = -1;
-       }
-       return retval;
+       return dsp5680xx_f_wr(bank->target, buffer, bank->base + offset / 2, count, 0);
 }
 
 static int dsp5680xx_probe(struct flash_bank *bank)
@@ -202,19 +169,11 @@ static int dsp5680xx_probe(struct flash_bank *bank)
        return ERROR_OK;
 }
 
-static int dsp5680xx_flash_info(struct flash_bank *bank, char *buf,
-               int buf_size)
-{
-       snprintf(buf, buf_size,
-               "\ndsp5680xx flash driver info:\n - See comments in code.");
-       return ERROR_OK;
-}
-
 /**
  * The flash module (FM) on the dsp5680xx supports both individual sector
  * and mass erase of the flash memory.
- * If this function is called with @first == @last == 0 or if @first is the
- * first sector (#0) and @last is the last sector then the mass erase command
+ * If this function is called with @a first == @a last == 0 or if @a first is the
+ * first sector (#0) and @last is the last sector then the mass erase command
  * is executed (much faster than erasing each sector individually).
  *
  * @param bank
@@ -223,24 +182,10 @@ static int dsp5680xx_flash_info(struct flash_bank *bank, char *buf,
  *
  * @return
  */
-static int dsp5680xx_flash_erase(struct flash_bank *bank, int first, int last)
+static int dsp5680xx_flash_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
-       int retval;
-
-       retval = dsp5680xx_f_erase(bank->target, (uint32_t) first, (uint32_t) last);
-       if ((!(first | last)) || ((first == 0) && (last == (HFM_SECTOR_COUNT - 1))))
-               last = HFM_SECTOR_COUNT - 1;
-       if (retval == ERROR_OK)
-               for (int i = first; i <= last; i++)
-                       bank->sectors[i].is_erased = 1;
-       else
-               /**
-                * If an error occurred unknown status
-                *is set even though some sector could have been correctly erased.
-                */
-               for (int i = first; i <= last; i++)
-                       bank->sectors[i].is_erased = -1;
-       return retval;
+       return dsp5680xx_f_erase(bank->target, (uint32_t) first, (uint32_t) last);
 }
 
 /**
@@ -260,22 +205,20 @@ static int dsp5680xx_flash_erase_check(struct flash_bank *bank)
        uint32_t i;
 
        for (i = 0; i < HFM_SECTOR_COUNT; i++) {
-               if (bank->sectors[i].is_erased == -1) {
-                       retval = dsp5680xx_f_erase_check(bank->target, &erased, i);
-                       if (retval != ERROR_OK) {
-                               bank->sectors[i].is_erased = -1;
-                       } else {
-                               if (erased)
-                                       bank->sectors[i].is_erased = 1;
-                               else
-                                       bank->sectors[i].is_erased = 0;
-                       }
+               retval = dsp5680xx_f_erase_check(bank->target, &erased, i);
+               if (retval != ERROR_OK) {
+                       bank->sectors[i].is_erased = -1;
+               } else {
+                       if (erased)
+                               bank->sectors[i].is_erased = 1;
+                       else
+                               bank->sectors[i].is_erased = 0;
                }
        }
        return retval;
 }
 
-struct flash_driver dsp5680xx_flash = {
+const struct flash_driver dsp5680xx_flash = {
        .name = "dsp5680xx_flash",
        .flash_bank_command = dsp5680xx_flash_bank_command,
        .erase = dsp5680xx_flash_erase,
@@ -286,5 +229,4 @@ struct flash_driver dsp5680xx_flash = {
        .auto_probe = dsp5680xx_probe,
        .erase_check = dsp5680xx_flash_erase_check,
        .protect_check = dsp5680xx_flash_protect_check,
-       .info = dsp5680xx_flash_info
 };