nor/kinetis: add keep-alive during flash write
authorAntonio Borneo <borneo.antonio@gmail.com>
Fri, 29 May 2020 08:42:43 +0000 (10:42 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 6 Jun 2020 17:03:58 +0000 (18:03 +0100)
Flashing Kinetis MCU MK22FX512VLH12 takes longer than one second,
thus gdb connection can timeout. Before commit 7f260f5009a7
("helper/command: Handle Tcl return values consistently") the
openocd timeout warning was masked by a bug in gdb_put_packet()
that resets the timeout counter if any message is logged out.
The commit above removes one log message and the timeout warning
is now triggered.

While the bug in gdb_put_packet() is still to be fixed, the reason
of the timeout is the lack of keep_alive() calls in kinetis flash
driver.

Add keep_alive() call at every iteration in function
kinetis_write_sections(), that is reported as core write function
in chunks of 1024 bytes in the log from the reporter.
Add also a keep_alive() call at every iteration in function
kinetis_write_inner(). This part is not present in the log but, by
code analysis, it represents another critical loop.

Change-Id: I38e631b36c7eb2f1e21cef68710ce47c03d3edda
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reported-by: Jonatan Hatakeyama Zeidler <jonatan.zeidler@medineering.de>
Reviewed-on: http://openocd.zylin.com/5703
Tested-by: jenkins
Reviewed-by: <jonatan_zeidler@gmx.de>
src/flash/nor/kinetis.c

index bceaf84745c6cb85c36e62c46c30e9333b773ee4..084e009ee66b49527798bf7dc564617f133b9b83 100644 (file)
@@ -1793,6 +1793,8 @@ static int kinetis_write_sections(struct flash_bank *bank, const uint8_t *buffer
                buffer += size;
                offset += size;
                count -= size;
+
+               keep_alive();
        }
 
        free(buffer_aligned);
@@ -1885,6 +1887,8 @@ static int kinetis_write_inner(struct flash_bank *bank, const uint8_t *buffer,
                                buffer += 4;
                                offset += 4;
                                words_remaining--;
+
+                               keep_alive();
                        }
                }
                free(new_buffer);