From: Siva Durga Prasad Paladugu Date: Sat, 11 Aug 2018 08:52:35 +0000 (+0530) Subject: spi: spi_flash: Add Octal read command support X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f7e82b674aa75c65462b743416b49d19d877997;p=thirdparty%2Fu-boot.git spi: spi_flash: Add Octal read command support This patch adds octal read command support if flash device and controller supports it. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index 98fdf6f5b9d..b684cad8dd2 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -63,6 +63,7 @@ enum spi_nor_option_flags { #define CMD_READ_DUAL_IO_FAST 0xbb #define CMD_READ_QUAD_OUTPUT_FAST 0x6b #define CMD_READ_QUAD_IO_FAST 0xeb +#define CMD_READ_OCTAL_OUTPUT_FAST 0x8B #define CMD_READ_ID 0x9f #define CMD_READ_STATUS 0x05 #define CMD_READ_STATUS1 0x35 @@ -150,6 +151,7 @@ struct spi_flash_info { #define RD_DUAL BIT(5) /* use Dual Read */ #define RD_QUADIO BIT(6) /* use Quad IO Read */ #define RD_DUALIO BIT(7) /* use Dual IO Read */ +#define RD_OCTAL BIT(8) /* use Octal Read */ #define RD_FULL (RD_QUAD | RD_DUAL | RD_QUADIO | RD_DUALIO) }; diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 87771d16913..570613acc31 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -1670,6 +1670,8 @@ int spi_flash_scan(struct spi_flash *flash) flash->read_cmd = CMD_READ_ARRAY_FAST; if (spi->mode & SPI_RX_SLOW) { flash->read_cmd = CMD_READ_ARRAY_SLOW; + } else if (spi->mode & SPI_RX_OCTAL && info->flags & RD_OCTAL) { + flash->read_cmd = CMD_READ_OCTAL_OUTPUT_FAST; } else if (spi->mode & SPI_RX_QUAD && info->flags & RD_QUAD) { flash->read_cmd = CMD_READ_QUAD_OUTPUT_FAST; if (((JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SPANSION) && diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c index 2bc289a74cc..4fd7be5395b 100644 --- a/drivers/spi/spi-uclass.c +++ b/drivers/spi/spi-uclass.c @@ -421,6 +421,9 @@ int spi_slave_ofdata_to_platdata(struct udevice *dev, case 4: mode |= SPI_RX_QUAD; break; + case 8: + mode |= SPI_RX_OCTAL; + break; default: warn_non_spl("spi-rx-bus-width %d not supported\n", value); break; diff --git a/include/spi.h b/include/spi.h index 2b74930429e..670b05ec21f 100644 --- a/include/spi.h +++ b/include/spi.h @@ -57,6 +57,7 @@ #define SPI_RX_FAST BIT(1) /* receive with 1 wire fast */ #define SPI_RX_DUAL BIT(2) /* receive with 2 wires */ #define SPI_RX_QUAD BIT(3) /* receive with 4 wires */ +#define SPI_RX_OCTAL BIT(4) /* Header byte that marks the start of the message */ #define SPI_PREAMBLE_END_BYTE 0xec