aboutsummaryrefslogtreecommitdiffstats
path: root/package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch')
-rw-r--r--package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch144
1 files changed, 144 insertions, 0 deletions
diff --git a/package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch b/package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch
new file mode 100644
index 0000000000..c43ae97995
--- /dev/null
+++ b/package/boot/uboot-layerscape/patches/0036-driver-spi-add-exceed-16MB-flash-support.patch
@@ -0,0 +1,144 @@
+From e70ae7f7ed00ecdbfa45fac3f342f1130df5029b Mon Sep 17 00:00:00 2001
+From: Yunhui Cui <yunhui.cui@nxp.com>
+Date: Fri, 20 May 2016 16:37:34 +0800
+Subject: [PATCH 36/93] driver: spi: add exceed 16MB flash support
+
+Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
+---
+ drivers/mtd/spi/spi_flash.c | 41 +++++++++++------------------------------
+ 1 file changed, 11 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
+index 9d61ac0..e9d1c64 100644
+--- a/drivers/mtd/spi/spi_flash.c
++++ b/drivers/mtd/spi/spi_flash.c
+@@ -21,9 +21,9 @@
+
+ DECLARE_GLOBAL_DATA_PTR;
+
+-static void spi_flash_addr(u32 addr, u8 *cmd, u32 offset_ext)
++static void spi_flash_addr(u32 addr, u8 *cmd)
+ {
+- if (offset_ext >= SPI_FLASH_16MB_BOUN) {
++ if (addr >= SPI_FLASH_16MB_BOUN) {
+ /* cmd[0] is actual command */
+ cmd[1] = addr >> 24;
+ cmd[2] = addr >> 16;
+@@ -312,9 +312,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
+ u32 erase_size, erase_addr;
+ u8 *cmd, cmdsz;
+ int ret = -1;
+- u32 offset_ext;
+
+- offset_ext = offset;
+ erase_size = flash->erase_size;
+ if (offset % erase_size || len % erase_size) {
+ debug("SF: Erase offset/length not multiple of erase size\n");
+@@ -329,10 +327,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
+ }
+ }
+
+- if (offset > SPI_FLASH_16MB_BOUN)
+- cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+- else
+- cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
++ cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+ cmd = calloc(1, cmdsz);
+ if (!cmd) {
+ debug("SF: Failed to allocate cmd\n");
+@@ -353,7 +348,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
+ if (ret < 0)
+ return ret;
+ #endif
+- spi_flash_addr(erase_addr, cmd, offset_ext);
++ spi_flash_addr(erase_addr, cmd);
+
+ debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1],
+ cmd[2], cmd[3], erase_addr);
+@@ -380,9 +375,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
+ size_t chunk_len, actual;
+ u8 *cmd, cmdsz;
+ int ret = -1;
+- u32 offset_ext;
+
+- offset_ext = offset;
+ page_size = flash->page_size;
+
+ if (flash->flash_is_locked) {
+@@ -393,10 +386,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
+ }
+ }
+
+- if (offset > SPI_FLASH_16MB_BOUN)
+- cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+- else
+- cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
++ cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+ cmd = calloc(1, cmdsz);
+ if (!cmd) {
+ debug("SF: Failed to allocate cmd\n");
+@@ -423,7 +413,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
+ chunk_len = min(chunk_len,
+ (size_t)flash->spi->max_write_size);
+
+- spi_flash_addr(write_addr, cmd, offset_ext);
++ spi_flash_addr(write_addr, cmd);
+
+ debug("SF: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n",
+ buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len);
+@@ -477,9 +467,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
+ u32 remain_len, read_len, read_addr;
+ int bank_sel = 0;
+ int ret = -1;
+- u32 offset_ext;
+-
+- offset_ext = offset;
+
+ /* Handle memory-mapped SPI */
+ if (flash->memory_map) {
+@@ -494,10 +481,8 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
+ spi_release_bus(flash->spi);
+ return 0;
+ }
+- if (offset > SPI_FLASH_16MB_BOUN)
+- cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+- else
+- cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
++
++ cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
+ cmd = calloc(1, cmdsz);
+ if (!cmd) {
+ debug("SF: Failed to allocate cmd\n");
+@@ -508,7 +493,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
+
+ while (len) {
+ read_addr = offset;
+-
+ #ifdef CONFIG_SF_DUAL_FLASH
+ if (flash->dual_flash > SF_SINGLE_FLASH)
+ spi_flash_dual(flash, &read_addr);
+@@ -519,18 +503,15 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
+ return ret;
+ bank_sel = flash->bank_curr;
+ #endif
+- if (offset_ext >= SPI_FLASH_16MB_BOUN) {
+- remain_len = flash->size - offset;
+- } else {
+- remain_len = ((SPI_FLASH_16MB_BOUN << flash->shift) *
++ remain_len = ((flash->size << flash->shift) *
+ (bank_sel + 1)) - offset;
+- }
++
+ if (len < remain_len)
+ read_len = len;
+ else
+ read_len = remain_len;
+
+- spi_flash_addr(read_addr, cmd, offset_ext);
++ spi_flash_addr(read_addr, cmd);
+
+ ret = spi_flash_read_common(flash, cmd, cmdsz, data, read_len);
+ if (ret < 0) {
+--
+1.7.9.5
+