From 4acc3f3a8990cda15f04e5eabf028c5cda0d6619 Mon Sep 17 00:00:00 2001 From: Sergey Alirzaev Date: Wed, 1 Aug 2018 16:39:17 +0300 Subject: ft2232_spi: add an ability to use GPIO for chip selection Change-Id: I6db05619e0d69ad18549c8556ef69225337b1532 Signed-off-by: Sergey Alirzaev Reviewed-on: https://review.coreboot.org/28911 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- flashrom.8.tmpl | 15 +++++++++------ ft2232_spi.c | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/flashrom.8.tmpl b/flashrom.8.tmpl index 70af395f..f882dc67 100644 --- a/flashrom.8.tmpl +++ b/flashrom.8.tmpl @@ -722,9 +722,9 @@ Olimex ARM-USB-TINY/-H, Olimex ARM-USB-OCD/-H, OpenMoko Neo1973 Debug board (V2+ Multi-Protocol Adapter (TUMPA), TUMPA Lite, GOEPEL PicoTAP and Google Servo v1/v2. .sp An optional parameter specifies the controller -type and channel/interface/port it should support. For that you have to use the +type, channel/interface/port and GPIO-based chip select it should support. For that you have to use the .sp -.B " flashrom \-p ft2232_spi:type=model,port=interface" +.B " flashrom \-p ft2232_spi:type=model,port=interface,csgpiol=gpio" .sp syntax where .B model @@ -733,14 +733,17 @@ can be arm-usb-tiny ", " arm-usb-tiny-h ", " arm-usb-ocd ", " arm-usb-ocd-h \ ", " tumpa ", " tumpalite ", " picotap ", " google-servo ", " google-servo-v2 \ " or " google-servo-v2-legacy -and .B interface can be -.BR A ", " B ", " C ", or " D . +.BR A ", " B ", " C ", or " D +and +.B csgpiol +can be a number between 0 and 3, denoting GPIOL0-GPIOL3 correspondingly. The default model is .B 4232H -and the default interface is -.BR A . +the default interface is +.BR A +and GPIO is not used by default. .sp If there is more than one ft2232_spi-compatible device connected, you can select which one should be used by specifying its serial number with the diff --git a/ft2232_spi.c b/ft2232_spi.c index 819744c3..95584aa4 100644 --- a/ft2232_spi.c +++ b/ft2232_spi.c @@ -327,6 +327,23 @@ int ft2232_spi_init(void) } free(arg); + arg = extract_programmer_param("csgpiol"); + if (arg) { + char *endptr; + unsigned int temp = strtoul(arg, &endptr, 10); + if (*endptr || endptr == arg || temp > 3) { + msg_perr("Error: Invalid GPIOL specified: \"%s\".\n" + "Valid values are between 0 and 3.\n", arg); + free(arg); + return -2; + } else { + unsigned int pin = temp + 4; + cs_bits |= 1 << pin; + pindir |= 1 << pin; + } + } + free(arg); + msg_pdbg("Using device type %s %s ", get_ft2232_vendorname(ft2232_vid, ft2232_type), get_ft2232_devicename(ft2232_vid, ft2232_type)); -- cgit v1.2.3