layerscape: add 64b/32b target for ls1012ardb device
[openwrt/staging/wigyori.git] / package / boot / uboot-layerscape / patches / 0036-driver-spi-add-exceed-16MB-flash-support.patch
1 From e70ae7f7ed00ecdbfa45fac3f342f1130df5029b Mon Sep 17 00:00:00 2001
2 From: Yunhui Cui <yunhui.cui@nxp.com>
3 Date: Fri, 20 May 2016 16:37:34 +0800
4 Subject: [PATCH 36/93] driver: spi: add exceed 16MB flash support
5
6 Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
7 ---
8 drivers/mtd/spi/spi_flash.c | 41 +++++++++++------------------------------
9 1 file changed, 11 insertions(+), 30 deletions(-)
10
11 diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
12 index 9d61ac0..e9d1c64 100644
13 --- a/drivers/mtd/spi/spi_flash.c
14 +++ b/drivers/mtd/spi/spi_flash.c
15 @@ -21,9 +21,9 @@
16
17 DECLARE_GLOBAL_DATA_PTR;
18
19 -static void spi_flash_addr(u32 addr, u8 *cmd, u32 offset_ext)
20 +static void spi_flash_addr(u32 addr, u8 *cmd)
21 {
22 - if (offset_ext >= SPI_FLASH_16MB_BOUN) {
23 + if (addr >= SPI_FLASH_16MB_BOUN) {
24 /* cmd[0] is actual command */
25 cmd[1] = addr >> 24;
26 cmd[2] = addr >> 16;
27 @@ -312,9 +312,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
28 u32 erase_size, erase_addr;
29 u8 *cmd, cmdsz;
30 int ret = -1;
31 - u32 offset_ext;
32
33 - offset_ext = offset;
34 erase_size = flash->erase_size;
35 if (offset % erase_size || len % erase_size) {
36 debug("SF: Erase offset/length not multiple of erase size\n");
37 @@ -329,10 +327,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
38 }
39 }
40
41 - if (offset > SPI_FLASH_16MB_BOUN)
42 - cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
43 - else
44 - cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
45 + cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
46 cmd = calloc(1, cmdsz);
47 if (!cmd) {
48 debug("SF: Failed to allocate cmd\n");
49 @@ -353,7 +348,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
50 if (ret < 0)
51 return ret;
52 #endif
53 - spi_flash_addr(erase_addr, cmd, offset_ext);
54 + spi_flash_addr(erase_addr, cmd);
55
56 debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1],
57 cmd[2], cmd[3], erase_addr);
58 @@ -380,9 +375,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
59 size_t chunk_len, actual;
60 u8 *cmd, cmdsz;
61 int ret = -1;
62 - u32 offset_ext;
63
64 - offset_ext = offset;
65 page_size = flash->page_size;
66
67 if (flash->flash_is_locked) {
68 @@ -393,10 +386,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
69 }
70 }
71
72 - if (offset > SPI_FLASH_16MB_BOUN)
73 - cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
74 - else
75 - cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
76 + cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
77 cmd = calloc(1, cmdsz);
78 if (!cmd) {
79 debug("SF: Failed to allocate cmd\n");
80 @@ -423,7 +413,7 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
81 chunk_len = min(chunk_len,
82 (size_t)flash->spi->max_write_size);
83
84 - spi_flash_addr(write_addr, cmd, offset_ext);
85 + spi_flash_addr(write_addr, cmd);
86
87 debug("SF: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n",
88 buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len);
89 @@ -477,9 +467,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
90 u32 remain_len, read_len, read_addr;
91 int bank_sel = 0;
92 int ret = -1;
93 - u32 offset_ext;
94 -
95 - offset_ext = offset;
96
97 /* Handle memory-mapped SPI */
98 if (flash->memory_map) {
99 @@ -494,10 +481,8 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
100 spi_release_bus(flash->spi);
101 return 0;
102 }
103 - if (offset > SPI_FLASH_16MB_BOUN)
104 - cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
105 - else
106 - cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte;
107 +
108 + cmdsz = SPI_FLASH_CMD_LEN_EXT + flash->dummy_byte;
109 cmd = calloc(1, cmdsz);
110 if (!cmd) {
111 debug("SF: Failed to allocate cmd\n");
112 @@ -508,7 +493,6 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
113
114 while (len) {
115 read_addr = offset;
116 -
117 #ifdef CONFIG_SF_DUAL_FLASH
118 if (flash->dual_flash > SF_SINGLE_FLASH)
119 spi_flash_dual(flash, &read_addr);
120 @@ -519,18 +503,15 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
121 return ret;
122 bank_sel = flash->bank_curr;
123 #endif
124 - if (offset_ext >= SPI_FLASH_16MB_BOUN) {
125 - remain_len = flash->size - offset;
126 - } else {
127 - remain_len = ((SPI_FLASH_16MB_BOUN << flash->shift) *
128 + remain_len = ((flash->size << flash->shift) *
129 (bank_sel + 1)) - offset;
130 - }
131 +
132 if (len < remain_len)
133 read_len = len;
134 else
135 read_len = remain_len;
136
137 - spi_flash_addr(read_addr, cmd, offset_ext);
138 + spi_flash_addr(read_addr, cmd);
139
140 ret = spi_flash_read_common(flash, cmd, cmdsz, data, read_len);
141 if (ret < 0) {
142 --
143 1.7.9.5
144