zapb has uploaded this change for review.

View Change

jlink_spi: Add option to enable target power

Change-Id: I026c22ae1c22541d0024f164c827909ca4a34cf4
Signed-off-by: Marc Schink <dev@zapb.de>
---
M flashrom.8.tmpl
M jlink_spi.c
2 files changed, 47 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/80/48380/1
diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl
index db50d59..2299dad 100644
--- a/flashrom.8.tmpl
+++ b/flashrom.8.tmpl
@@ -1279,6 +1279,9 @@
.sp
syntax where \fBfrequency\fP is the SPI clock frequency in kHz.
The maximum speed depends on the device in use.
+.sp
+The \fBpower=on\fP option can be used to activate the 5 V power supply (PWR_5V)
+of the J-Link during a flash operation.
.SS
.BR "stlinkv3_spi " programmer
.IP
diff --git a/jlink_spi.c b/jlink_spi.c
index 3a73c01..8344af2 100644
--- a/jlink_spi.c
+++ b/jlink_spi.c
@@ -54,6 +54,7 @@
static struct jaylink_context *jaylink_ctx;
static struct jaylink_device_handle *jaylink_devh;
static bool reset_cs;
+static bool enable_target_power;

static bool assert_cs(void)
{
@@ -166,6 +167,15 @@

static int jlink_spi_shutdown(void *data)
{
+ if (enable_target_power) {
+ int ret = jaylink_set_target_power(jaylink_devh, false);
+
+ if (ret != JAYLINK_OK) {
+ msg_perr("jaylink_set_target_power() failed: %s.\n",
+ jaylink_strerror(ret));
+ }
+ }
+
if (jaylink_devh)
jaylink_close(jaylink_devh);

@@ -258,6 +268,21 @@
else
msg_pdbg("Using TRST as chip select signal.\n");

+ enable_target_power = false;
+ arg = extract_programmer_param("power");
+
+ if (arg) {
+ if (!strcasecmp(arg, "on")) {
+ enable_target_power = true;
+ } else {
+ msg_perr("Invalid value for 'power' argument: '%s'.\n", arg);
+ free(arg);
+ return 1;
+ }
+ }
+
+ free(arg);
+
ret = jaylink_init(&jaylink_ctx);

if (ret != JAYLINK_OK) {
@@ -368,6 +393,13 @@
}
}

+ if (enable_target_power) {
+ if (!jaylink_has_cap(caps, JAYLINK_DEV_CAP_SET_TARGET_POWER)) {
+ msg_perr("Device does not support target power.\n");
+ return 1;
+ }
+ }
+
uint32_t ifaces;

ret = jaylink_get_available_interfaces(jaylink_devh, &ifaces);
@@ -389,6 +421,18 @@
return 1;
}

+ if (enable_target_power) {
+ ret = jaylink_set_target_power(jaylink_devh, true);
+
+ if (ret != JAYLINK_OK) {
+ msg_perr("jaylink_set_target_power() failed: %s.\n", jaylink_strerror(ret));
+ return 1;
+ }
+
+ /* Wait some time until the target is powered up. */
+ internal_sleep(10000UL);
+ }
+
struct jaylink_hardware_status hwstat;

ret = jaylink_get_hardware_status(jaylink_devh, &hwstat);

To view, visit change 48380. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I026c22ae1c22541d0024f164c827909ca4a34cf4
Gerrit-Change-Number: 48380
Gerrit-PatchSet: 1
Gerrit-Owner: zapb <dev@zapb.de>
Gerrit-MessageType: newchange