Revert "drivers/spi: Stop using a variable-length array"
This reverts commit 59626b8670.
Reason for revert: Reported to cause boot-loops. Reason unknown.
Change-Id: Id7f6211aaaf0401017176f63a17763f28d2744c8
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/52424
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
			
			
This commit is contained in:
		| @@ -88,15 +88,17 @@ int spi_flash_cmd(const struct spi_slave *spi, u8 cmd, void *response, size_t le | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| /* TODO: This code is quite possibly broken and overflowing stacks. Fix ASAP! */ | ||||
| #pragma GCC diagnostic push | ||||
| #if defined(__GNUC__) && !defined(__clang__) | ||||
| #pragma GCC diagnostic ignored "-Wstack-usage=" | ||||
| #endif | ||||
| #pragma GCC diagnostic ignored "-Wvla" | ||||
| int spi_flash_cmd_write(const struct spi_slave *spi, const u8 *cmd, | ||||
| 			size_t cmd_len, const void *data, size_t data_len) | ||||
| { | ||||
| 	int ret; | ||||
| 	u8 buff[4 + MAX_FLASH_CMD_DATA_SIZE]; | ||||
|  | ||||
| 	if (ARRAY_SIZE(buff) < cmd_len + data_len) | ||||
| 		return -1; | ||||
|  | ||||
| 	u8 buff[cmd_len + data_len]; | ||||
| 	memcpy(buff, cmd, cmd_len); | ||||
| 	memcpy(buff + cmd_len, data, data_len); | ||||
|  | ||||
| @@ -108,6 +110,7 @@ int spi_flash_cmd_write(const struct spi_slave *spi, const u8 *cmd, | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
| #pragma GCC diagnostic pop | ||||
|  | ||||
| /* Perform the read operation honoring spi controller fifo size, reissuing | ||||
|  * the read command until the full request completed. */ | ||||
| @@ -256,7 +259,6 @@ int spi_flash_cmd_write_page_program(const struct spi_flash *flash, u32 offset, | ||||
| 		byte_addr = offset % page_size; | ||||
| 		chunk_len = MIN(len - actual, page_size - byte_addr); | ||||
| 		chunk_len = spi_crop_chunk(&flash->spi, sizeof(cmd), chunk_len); | ||||
| 		chunk_len = MIN(MAX_FLASH_CMD_DATA_SIZE, chunk_len); | ||||
|  | ||||
| 		spi_flash_addr(offset, cmd); | ||||
| 		if (CONFIG(DEBUG_SPI_FLASH)) { | ||||
|   | ||||
| @@ -24,8 +24,6 @@ | ||||
| /* Common status */ | ||||
| #define STATUS_WIP			0x01 | ||||
|  | ||||
| #define MAX_FLASH_CMD_DATA_SIZE		256 | ||||
|  | ||||
| /* Send a single-byte command to the device and read the response */ | ||||
| int spi_flash_cmd(const struct spi_slave *spi, u8 cmd, void *response, size_t len); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user