From d4ca2644a3143d85b78d6065da58ef5e8c0fa7fc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de>
Date: Wed, 18 Apr 2018 17:54:07 +0200
Subject: [PATCH] boards/iotlab-m3|a8: fix openocd configuration

iotlab-m3 boards always ended up not being able to flash after time.
This changes managed to fix and flash boards that where able to be flashed with
the deprecated `ft2232` driver and not with the `ftdi` driver used in RIOT.

It combines configuration from openocd, iot-lab, RIOT config and Alexandre
Abadie feedback

* http://repo.or.cz/openocd.git/blob/HEAD:/tcl/interface/ftdi/iotlab-usb.cfg
  * ftdi configuration
* https://github.com/iot-lab/iot-lab-gateway/blob/2.4.1/gateway_code/static/iot-lab-m3.cfg
  * `trst_and_srst` config
* Alexandre feedback and http://openocd.org/doc/html/Reset-Configuration.html
  * 'connect_assert_srst' reset configuration
    * it prevents errors in the output on first flash
    * should help on boards with invalid code
    * It was taken from what Alexandre found for board 'b-l072z-lrwan1'
  * It requires using '-c reset halt' instead of '-c halt' before debug
* RIOT
  * Keep the `configure -rtos` auto
---
 boards/common/iotlab/Makefile.include |  4 ++++
 boards/iotlab-a8-m3/dist/openocd.cfg  | 11 +++++------
 boards/iotlab-m3/dist/openocd.cfg     | 11 +++++------
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/boards/common/iotlab/Makefile.include b/boards/common/iotlab/Makefile.include
index 99b3803c74..c3f9abf595 100644
--- a/boards/common/iotlab/Makefile.include
+++ b/boards/common/iotlab/Makefile.include
@@ -10,6 +10,10 @@ PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*B)))
 export BAUD = 500000
 include $(RIOTMAKE)/tools/serial.inc.mk
 
+# call a 'reset halt' command before starting the debugger
+# it is required as `connect_assert_srst` is set
+export OPENOCD_DBG_START_CMD = -c 'reset halt'
+
 # this board uses openocd
 include $(RIOTMAKE)/tools/openocd.inc.mk
 
diff --git a/boards/iotlab-a8-m3/dist/openocd.cfg b/boards/iotlab-a8-m3/dist/openocd.cfg
index d9b5985367..0b9d3c7900 100644
--- a/boards/iotlab-a8-m3/dist/openocd.cfg
+++ b/boards/iotlab-a8-m3/dist/openocd.cfg
@@ -1,9 +1,8 @@
-interface ftdi
-ftdi_vid_pid 0x0403 0x6010
+source [find interface/ftdi/iotlab-usb.cfg]
+source [find target/stm32f1x.cfg]
 
-ftdi_layout_init 0x0c08 0x0c2b
-ftdi_layout_signal nTRST -data 0x0800
-ftdi_layout_signal nSRST -data 0x0400
+# use combined on interfaces or targets that can't set TRST/SRST separately
+# Using connect_assert_srst removes errors on first flash
+reset_config trst_and_srst connect_assert_srst
 
-source [find target/stm32f1x.cfg]
 $_TARGETNAME configure -rtos auto
diff --git a/boards/iotlab-m3/dist/openocd.cfg b/boards/iotlab-m3/dist/openocd.cfg
index d9b5985367..0b9d3c7900 100644
--- a/boards/iotlab-m3/dist/openocd.cfg
+++ b/boards/iotlab-m3/dist/openocd.cfg
@@ -1,9 +1,8 @@
-interface ftdi
-ftdi_vid_pid 0x0403 0x6010
+source [find interface/ftdi/iotlab-usb.cfg]
+source [find target/stm32f1x.cfg]
 
-ftdi_layout_init 0x0c08 0x0c2b
-ftdi_layout_signal nTRST -data 0x0800
-ftdi_layout_signal nSRST -data 0x0400
+# use combined on interfaces or targets that can't set TRST/SRST separately
+# Using connect_assert_srst removes errors on first flash
+reset_config trst_and_srst connect_assert_srst
 
-source [find target/stm32f1x.cfg]
 $_TARGETNAME configure -rtos auto
-- 
GitLab