UPSTREAM: drivers/spi/tpm: de-assert chip select on transaction error

In the case of start_transaction() failing the chip select is never
deasserted. Correct that by deasserting the chip select when
start_transaction() fails.

BUG=b:36598499

Change-Id: I91866a30fca8c9efae15a900722eb0fc3bebbfc3
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: 5cf1fadeca706f8d3016ea44c3e482c2428d6b3f
Original-Change-Id: I2c5200085eb357259edab39c1a0fa7b1d81ba7b2
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://review.coreboot.org/19056
Original-Tested-by: build bot (Jenkins)
Original-Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/466051
(cherry picked from commit fc257c09701acb54a16c3f81f349dd8346b6bf11)
jwerner: tpm_if.slave is already a pointer in this branch
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/912354
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
diff --git a/src/drivers/spi/tpm/tpm.c b/src/drivers/spi/tpm/tpm.c
index 08e1c4e..e6a88c6 100644
--- a/src/drivers/spi/tpm/tpm.c
+++ b/src/drivers/spi/tpm/tpm.c
@@ -237,6 +237,7 @@
 	do {
 		if (stopwatch_expired(&sw)) {
 			printk(BIOS_ERR, "TPM flow control failure\n");
+			tpm_if.cs_deassert(tpm_if.slave);
 			return 0;
 		}
 		tpm_if.xfer(tpm_if.slave, NULL, 0, &byte, 1);