mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-10-31 05:10:41 +01: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:
		
							
								
								
									
										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; | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Michael Karcher
					Michael Karcher