nor: remove bogus output about padding sections
[fw/openocd] / src / flash / nor / core.c
index 767006d27e10003190b7cf4b1a4df20661c76126..b8dda96b0f6ea3d50417351efd1c378aba927044 100644 (file)
@@ -36,7 +36,7 @@
  * primarily support access from Tcl scripts or from GDB.
  */
 
-struct flash_bank *flash_banks;
+static struct flash_bank *flash_banks;
 
 int flash_driver_erase(struct flash_bank *bank, int first, int last)
 {
@@ -56,7 +56,10 @@ int flash_driver_protect(struct flash_bank *bank, int set, int first, int last)
        int retval;
        bool updated = false;
 
-       /* NOTE: "first == last" means protect just that sector */
+       /* NOTE: "first == last" means (un?)protect just that sector.
+        code including Lower level ddrivers may rely on this "first <= last"
+        * invariant.
+       */
 
        /* callers may not supply illegal parameters ... */
        if (first < 0 || first > last || last >= bank->num_sectors)
@@ -73,7 +76,7 @@ int flash_driver_protect(struct flash_bank *bank, int set, int first, int last)
         * speeds at least some things up.
         */
 scan:
-       for (int i = first; i < last; i++) {
+       for (int i = first; i <= last; i++) {
                struct flash_sector *sector = bank->sectors + i;
 
                /* Only filter requests to protect the already-protected, or
@@ -90,10 +93,10 @@ scan:
                 * REVISIT we could handle discontiguous regions by issuing
                 * more than one driver request.  How much would that matter?
                 */
-               if (i == first) {
+               if (i == first && i != last) {
                        updated = true;
                        first++;
-               } else if (i == last) {
+               } else if (i == last && i != first) {
                        updated = true;
                        last--;
                }
@@ -107,11 +110,19 @@ scan:
                goto scan;
        }
 
-       /* Single sector, already protected?  Nothing to do! */
-       if (first == last)
+       /* Single sector, already protected?  Nothing to do!
+        * We may have trimmed our parameters into this degenerate case.
+        *
+        * FIXME repeating the "is_protected==set" test is a giveaway that
+        * this fast-exit belongs earlier, in the trim-it-down loop; mve.
+        * */
+       if (first == last && bank->sectors[first].is_protected == set)
                return ERROR_OK;
 
 
+       /* Note that we don't pass illegal parameters to drivers; any
+        * trimming just turns one valid range into another one.
+        */
        retval = bank->driver->protect(bank, set, first, last);
        if (retval != ERROR_OK)
        {
@@ -600,7 +611,8 @@ int flash_write_unlock(struct target *target, struct image *image,
                        run_size += image->sections[++section_last].size;
                        run_size += pad_bytes;
 
-                       LOG_INFO("Padding image section %d with %d bytes", section_last-1, pad_bytes);
+                       if (pad_bytes > 0)
+                               LOG_INFO("Padding image section %d with %d bytes", section_last-1, pad_bytes);
                }
 
                /* fit the run into bank constraints */