aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/drivers/ulink.c
diff options
context:
space:
mode:
authorMartin Schmölzer <martin.schmoelzer@student.tuwien.ac.at>2011-07-04 19:50:46 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2011-08-31 16:25:41 +0200
commitb6e4d26695bd2268638ad52a1860f1c849b177cf (patch)
tree9060e0cce75e5f1884d5c49406f7516a37565187 /src/jtag/drivers/ulink.c
parentd01cbd71434d9ef0666fe9a3a1a29c9897b5caae (diff)
downloadriscv-openocd-b6e4d26695bd2268638ad52a1860f1c849b177cf.zip
riscv-openocd-b6e4d26695bd2268638ad52a1860f1c849b177cf.tar.gz
riscv-openocd-b6e4d26695bd2268638ad52a1860f1c849b177cf.tar.bz2
ULINK driver: Implement command to manually force downloading firmware image from arbitrary location
Signed-off-by: Martin Schmölzer <martin.schmoelzer@student.tuwien.ac.at>
Diffstat (limited to 'src/jtag/drivers/ulink.c')
-rw-r--r--src/jtag/drivers/ulink.c40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/jtag/drivers/ulink.c b/src/jtag/drivers/ulink.c
index 14a2ad8..049989b 100644
--- a/src/jtag/drivers/ulink.c
+++ b/src/jtag/drivers/ulink.c
@@ -62,8 +62,7 @@
/** Delay (in microseconds) to wait while EZ-USB performs ReNumeration. */
#define ULINK_RENUMERATION_DELAY 1500000
-/** Location of OpenULINK firmware image. TODO: Provide some way of modifying
- * this path, maybe in a separate OpenOCD command? */
+/** Default location of OpenULINK firmware image. */
#define ULINK_FIRMWARE_FILE PKGLIBDIR "/OpenULINK/ulink_firmware.hex"
/** Maximum size of a single firmware section. Entire EZ-USB code space = 8kB */
@@ -378,8 +377,9 @@ int ulink_load_firmware(struct ulink *device, char *filename)
ulink_firmware_image.base_address = 0;
ulink_firmware_image.base_address_set = 0;
- ret = image_open(&ulink_firmware_image, ULINK_FIRMWARE_FILE, "ihex");
+ ret = image_open(&ulink_firmware_image, filename, "ihex");
if (ret != ERROR_OK) {
+ LOG_ERROR("Could not load firmware image");
return ret;
}
@@ -1881,10 +1881,44 @@ static int ulink_quit(void)
return ret;
}
+/**
+ * Set a custom path to ULINK firmware image and force downloading to ULINK.
+ */
+COMMAND_HANDLER(ulink_download_firmware_handler)
+{
+ int ret;
+
+ if (CMD_ARGC != 1) {
+ LOG_ERROR("Need exactly one argument to ulink_download_firmware");
+ return ERROR_FAIL;
+ }
+
+ LOG_INFO("Downloading ULINK firmware image %s", CMD_ARGV[0]);
+
+ /* Download firmware image in CMD_ARGV[0] */
+ ret = ulink_load_firmware_and_renumerate(&ulink_handle, (char *)CMD_ARGV[0],
+ ULINK_RENUMERATION_DELAY);
+
+ return ret;
+}
+
/*************************** Command Registration **************************/
+static const struct command_registration ulink_command_handlers[] = {
+ {
+ .name = "ulink_download_firmware",
+ .handler = &ulink_download_firmware_handler,
+ .mode = COMMAND_EXEC,
+ .help = "download firmware image to ULINK device",
+ .usage = "path/to/ulink_firmware.hex",
+ },
+ COMMAND_REGISTRATION_DONE,
+};
+
struct jtag_interface ulink_interface = {
.name = "ulink",
+
+ .commands = ulink_command_handlers,
.transports = jtag_only,
.execute_queue = ulink_execute_queue,