boardd: fix SPI return code on some transfer failures (#32401)

pull/32403/head
Adeeb Shihadeh 12 months ago committed by GitHub
parent 3fd549f30a
commit 4af50cee63
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 17
      selfdrive/boardd/spi.cc

@ -345,13 +345,13 @@ int PandaSpiHandle::spi_transfer(uint8_t endpoint, uint8_t *tx_data, uint16_t tx
ret = lltransfer(transfer); ret = lltransfer(transfer);
if (ret < 0) { if (ret < 0) {
LOGE("SPI: failed to send header"); LOGE("SPI: failed to send header");
goto transfer_fail; return ret;
} }
// Wait for (N)ACK // Wait for (N)ACK
ret = wait_for_ack(SPI_HACK, 0x11, timeout, 1); ret = wait_for_ack(SPI_HACK, 0x11, timeout, 1);
if (ret < 0) { if (ret < 0) {
goto transfer_fail; return ret;
} }
// Send data // Send data
@ -363,20 +363,20 @@ int PandaSpiHandle::spi_transfer(uint8_t endpoint, uint8_t *tx_data, uint16_t tx
ret = lltransfer(transfer); ret = lltransfer(transfer);
if (ret < 0) { if (ret < 0) {
LOGE("SPI: failed to send data"); LOGE("SPI: failed to send data");
goto transfer_fail; return ret;
} }
// Wait for (N)ACK // Wait for (N)ACK
ret = wait_for_ack(SPI_DACK, 0x13, timeout, 3); ret = wait_for_ack(SPI_DACK, 0x13, timeout, 3);
if (ret < 0) { if (ret < 0) {
goto transfer_fail; return ret;
} }
// Read data // Read data
rx_data_len = *(uint16_t *)(rx_buf+1); rx_data_len = *(uint16_t *)(rx_buf+1);
if (rx_data_len >= SPI_BUF_SIZE) { if (rx_data_len >= SPI_BUF_SIZE) {
LOGE("SPI: RX data len larger than buf size %d", rx_data_len); LOGE("SPI: RX data len larger than buf size %d", rx_data_len);
goto transfer_fail; return -1;
} }
transfer.len = rx_data_len + 1; transfer.len = rx_data_len + 1;
@ -384,11 +384,11 @@ int PandaSpiHandle::spi_transfer(uint8_t endpoint, uint8_t *tx_data, uint16_t tx
ret = lltransfer(transfer); ret = lltransfer(transfer);
if (ret < 0) { if (ret < 0) {
LOGE("SPI: failed to read rx data"); LOGE("SPI: failed to read rx data");
goto transfer_fail; return ret;
} }
if (!check_checksum(rx_buf, rx_data_len + 4)) { if (!check_checksum(rx_buf, rx_data_len + 4)) {
LOGE("SPI: bad checksum"); LOGE("SPI: bad checksum");
goto transfer_fail; return -1;
} }
if (rx_data != NULL) { if (rx_data != NULL) {
@ -396,8 +396,5 @@ int PandaSpiHandle::spi_transfer(uint8_t endpoint, uint8_t *tx_data, uint16_t tx
} }
return rx_data_len; return rx_data_len;
transfer_fail:
return ret;
} }
#endif #endif

Loading…
Cancel
Save