mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 07:02:34 +02:00
Prevent submission of empty read requests in linux_spi
The submission of zero-sized read requests in a write-only transaction fails at least for omap2_mcspi drivers and is pointless in general. This patch does not address the implementation of zero-sized writes (which would need to skip the write command), as there are no flash transactions not starting with a command. Corresponding to flashrom svn r1513. Signed-off-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
This commit is contained in:
parent
2c3e9d5f57
commit
8371d7238a
14
linux_spi.c
14
linux_spi.c
@ -130,6 +130,7 @@ static int linux_spi_send_command(struct flashctx *flash, unsigned int writecnt,
|
|||||||
const unsigned char *txbuf,
|
const unsigned char *txbuf,
|
||||||
unsigned char *rxbuf)
|
unsigned char *rxbuf)
|
||||||
{
|
{
|
||||||
|
int iocontrol_code;
|
||||||
struct spi_ioc_transfer msg[2] = {
|
struct spi_ioc_transfer msg[2] = {
|
||||||
{
|
{
|
||||||
.tx_buf = (uint64_t)(ptrdiff_t)txbuf,
|
.tx_buf = (uint64_t)(ptrdiff_t)txbuf,
|
||||||
@ -143,8 +144,19 @@ static int linux_spi_send_command(struct flashctx *flash, unsigned int writecnt,
|
|||||||
|
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
/* The implementation currently does not support requests that
|
||||||
|
don't start with sending a command. */
|
||||||
|
if (writecnt == 0)
|
||||||
|
return SPI_INVALID_LENGTH;
|
||||||
|
|
||||||
if (ioctl(fd, SPI_IOC_MESSAGE(2), msg) == -1) {
|
/* Just submit the first (write) request in case there is nothing
|
||||||
|
to read. Otherwise submit both requests. */
|
||||||
|
if (readcnt == 0)
|
||||||
|
iocontrol_code = SPI_IOC_MESSAGE(1);
|
||||||
|
else
|
||||||
|
iocontrol_code = SPI_IOC_MESSAGE(2);
|
||||||
|
|
||||||
|
if (ioctl(fd, iocontrol_code, msg) == -1) {
|
||||||
msg_cerr("%s: ioctl: %s\n", __func__, strerror(errno));
|
msg_cerr("%s: ioctl: %s\n", __func__, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user