From 22ee33c39baef60e0f0b858cc0178fa8c0f98bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Niew=C3=B6hner?= Date: Tue, 21 Sep 2021 19:43:04 +0200 Subject: ft2232_spi: prevent use of reserved pins on some programmers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On some programmers an output buffer needs to be enabled by pulling a gpio high/low. This gpio can not be used for `csgpiol`. Prevent this by printing an error. Change-Id: Ied450fa5ef358153adefec3beabc63a62c9f60cd Signed-off-by: Michael Niewöhner Reviewed-on: https://review.coreboot.org/c/flashrom/+/57809 Reviewed-by: Nico Huber Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- ft2232_spi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ft2232_spi.c b/ft2232_spi.c index df156d6fa..110bdece2 100644 --- a/ft2232_spi.c +++ b/ft2232_spi.c @@ -419,6 +419,9 @@ static int ft2232_spi_init(void) } free(arg); + /* Remember reserved pins before pindir gets modified. */ + const uint8_t rsv_bits = pindir & 0xf0; + arg = extract_programmer_param("port"); if (arg) { switch (toupper((unsigned char)*arg)) { @@ -478,6 +481,15 @@ static int ft2232_spi_init(void) return -2; } unsigned int pin = temp + 4; + + if (rsv_bits & 1 << pin) { + msg_perr("Error: Invalid GPIOL specified: \"%s\".\n" + "The pin is reserved on this programmer.\n", + arg); + free(arg); + return -2; + } + cs_bits |= 1 << pin; pindir |= 1 << pin; } -- cgit v1.2.3