Root/package/uboot-lantiq/patches/030-cfi-addr-fixup.patch

1--- a/drivers/mtd/cfi_flash.c
2+++ b/drivers/mtd/cfi_flash.c
3@@ -85,6 +85,22 @@ flash_info_t flash_info[CFI_MAX_FLASH_BA
4 #define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_8BIT
5 #endif
6 
7+/*
8+ * Check if address fixup macros are defined, define defaults otherwise
9+ */
10+#ifndef FLASH_FIXUP_ADDR_8
11+#define FLASH_FIXUP_ADDR_8(addr) (addr)
12+#endif
13+#ifndef FLASH_FIXUP_ADDR_16
14+#define FLASH_FIXUP_ADDR_16(addr) (addr)
15+#endif
16+#ifndef FLASH_FIXUP_ADDR_32
17+#define FLASH_FIXUP_ADDR_32(addr) (addr)
18+#endif
19+#ifndef FLASH_FIXUP_ADDR_64
20+#define FLASH_FIXUP_ADDR_64(addr) (addr)
21+#endif
22+
23 static void __flash_write8(u8 value, void *addr)
24 {
25     __raw_writeb(value, addr);
26@@ -264,9 +280,9 @@ static inline uchar flash_read_uchar (fl
27 
28     cp = flash_map (info, 0, offset);
29 #if defined(__LITTLE_ENDIAN) || defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
30- retval = flash_read8(cp);
31+ retval = flash_read8(FLASH_FIXUP_ADDR_8(cp));
32 #else
33- retval = flash_read8(cp + info->portwidth - 1);
34+ retval = flash_read8(FLASH_FIXUP_ADDR_8(cp) + info->portwidth - 1);
35 #endif
36     flash_unmap (info, 0, offset, cp);
37     return retval;
38@@ -280,7 +296,7 @@ static inline ushort flash_read_word (fl
39     ushort *addr, retval;
40 
41     addr = flash_map (info, 0, offset);
42- retval = flash_read16 (addr);
43+ retval = flash_read16 (FLASH_FIXUP_ADDR_16(addr));
44     flash_unmap (info, 0, offset, addr);
45     return retval;
46 }
47@@ -305,19 +321,28 @@ static ulong flash_read_long (flash_info
48     debug ("long addr is at %p info->portwidth = %d\n", addr,
49            info->portwidth);
50     for (x = 0; x < 4 * info->portwidth; x++) {
51- debug ("addr[%x] = 0x%x\n", x, flash_read8(addr + x));
52+ debug ("addr[%x] = 0x%x\n", x,
53+ flash_read8(FLASH_FIXUP_ADDR_32(addr) + x));
54     }
55 #endif
56 #if defined(__LITTLE_ENDIAN) || defined(CONFIG_SYS_WRITE_SWAPPED_DATA)
57- retval = ((flash_read8(addr) << 16) |
58- (flash_read8(addr + info->portwidth) << 24) |
59- (flash_read8(addr + 2 * info->portwidth)) |
60- (flash_read8(addr + 3 * info->portwidth) << 8));
61+ retval = ((flash_read8(FLASH_FIXUP_ADDR_8
62+ (addr) << 16) |
63+ (flash_read8(FLASH_FIXUP_ADDR_8
64+ (addr + info->portwidth)) << 24) |
65+ (flash_read8(FLASH_FIXUP_ADDR_8
66+ (addr + 2 * info->portwidth))) |
67+ (flash_read8(FLASH_FIXUP_ADDR_8
68+ (addr + 3 * info->portwidth)) << 8));
69 #else
70- retval = ((flash_read8(addr + 2 * info->portwidth - 1) << 24) |
71- (flash_read8(addr + info->portwidth - 1) << 16) |
72- (flash_read8(addr + 4 * info->portwidth - 1) << 8) |
73- (flash_read8(addr + 3 * info->portwidth - 1)));
74+ retval = ((flash_read8(FLASH_FIXUP_ADDR_8
75+ (addr + 2 * info->portwidth - 1)) << 24) |
76+ (flash_read8(FLASH_FIXUP_ADDR_8
77+ (addr + info->portwidth - 1)) << 16) |
78+ (flash_read8(FLASH_FIXUP_ADDR_8
79+ (addr + 4 * info->portwidth - 1)) << 8) |
80+ (flash_read8(FLASH_FIXUP_ADDR_8
81+ (addr + 3 * info->portwidth - 1))));
82 #endif
83     flash_unmap(info, sect, offset, addr);
84 
85@@ -338,21 +363,22 @@ void flash_write_cmd (flash_info_t * inf
86     flash_make_cmd (info, cmd, &cword);
87     switch (info->portwidth) {
88     case FLASH_CFI_8BIT:
89- debug ("fwc addr %p cmd %x %x 8bit x %d bit\n", addr, cmd,
90- cword.c, info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
91- flash_write8(cword.c, addr);
92+ debug ("fwc addr %p cmd %x %x 8bit x %d bit\n",
93+ FLASH_FIXUP_ADDR_8(addr), cmd, cword.c,
94+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
95+ flash_write8(cword.c, FLASH_FIXUP_ADDR_8(addr));
96         break;
97     case FLASH_CFI_16BIT:
98- debug ("fwc addr %p cmd %x %4.4x 16bit x %d bit\n", addr,
99- cmd, cword.w,
100+ debug ("fwc addr %p cmd %x %4.4x 16bit x %d bit\n",
101+ FLASH_FIXUP_ADDR_16(addr), cmd, cword.w,
102                info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
103- flash_write16(cword.w, addr);
104+ flash_write16(cword.w, FLASH_FIXUP_ADDR_16(addr));
105         break;
106     case FLASH_CFI_32BIT:
107- debug ("fwc addr %p cmd %x %8.8lx 32bit x %d bit\n", addr,
108- cmd, cword.l,
109+ debug ("fwc addr %p cmd %x %8.8lx 32bit x %d bit\n",
110+ FLASH_FIXUP_ADDR_32(addr), cmd, cword.l,
111                info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
112- flash_write32(cword.l, addr);
113+ flash_write32(cword.l, FLASH_FIXUP_ADDR_32(addr));
114         break;
115     case FLASH_CFI_64BIT:
116 #ifdef DEBUG
117@@ -362,11 +388,11 @@ void flash_write_cmd (flash_info_t * inf
118             print_longlong (str, cword.ll);
119 
120             debug ("fwrite addr %p cmd %x %s 64 bit x %d bit\n",
121- addr, cmd, str,
122+ FLASH_FIXUP_ADDR_64(addr), cmd, str,
123                    info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
124         }
125 #endif
126- flash_write64(cword.ll, addr);
127+ flash_write64(cword.ll, FLASH_FIXUP_ADDR_64(addr));
128         break;
129     }
130 
131@@ -397,16 +423,19 @@ static int flash_isequal (flash_info_t *
132     debug ("is= cmd %x(%c) addr %p ", cmd, cmd, addr);
133     switch (info->portwidth) {
134     case FLASH_CFI_8BIT:
135- debug ("is= %x %x\n", flash_read8(addr), cword.c);
136- retval = (flash_read8(addr) == cword.c);
137+ debug ("is= %x %x\n",
138+ flash_read8(FLASH_FIXUP_ADDR_8(addr)), cword.c);
139+ retval = (flash_read8(FLASH_FIXUP_ADDR_8(addr)) == cword.c);
140         break;
141     case FLASH_CFI_16BIT:
142- debug ("is= %4.4x %4.4x\n", flash_read16(addr), cword.w);
143- retval = (flash_read16(addr) == cword.w);
144+ debug ("is= %4.4x %4.4x\n",
145+ flash_read16(FLASH_FIXUP_ADDR_16(addr)), cword.w);
146+ retval = (flash_read16(FLASH_FIXUP_ADDR_16(addr)) == cword.w);
147         break;
148     case FLASH_CFI_32BIT:
149- debug ("is= %8.8x %8.8lx\n", flash_read32(addr), cword.l);
150- retval = (flash_read32(addr) == cword.l);
151+ debug ("is= %8.8x %8.8lx\n",
152+ flash_read32(FLASH_FIXUP_ADDR_32(addr)), cword.l);
153+ retval = (flash_read32(FLASH_FIXUP_ADDR_32(addr)) == cword.l);
154         break;
155     case FLASH_CFI_64BIT:
156 #ifdef DEBUG
157@@ -414,12 +443,13 @@ static int flash_isequal (flash_info_t *
158             char str1[20];
159             char str2[20];
160 
161- print_longlong (str1, flash_read64(addr));
162+ print_longlong (str1, flash_read64(FLASH_FIXUP_ADDR_64
163+ (addr)));
164             print_longlong (str2, cword.ll);
165             debug ("is= %s %s\n", str1, str2);
166         }
167 #endif
168- retval = (flash_read64(addr) == cword.ll);
169+ retval = (flash_read64(FLASH_FIXUP_ADDR_64(addr)) == cword.ll);
170         break;
171     default:
172         retval = 0;
173@@ -443,16 +473,20 @@ static int flash_isset (flash_info_t * i
174     flash_make_cmd (info, cmd, &cword);
175     switch (info->portwidth) {
176     case FLASH_CFI_8BIT:
177- retval = ((flash_read8(addr) & cword.c) == cword.c);
178+ retval = ((flash_read8(FLASH_FIXUP_ADDR_8(addr))
179+ & cword.c) == cword.c);
180         break;
181     case FLASH_CFI_16BIT:
182- retval = ((flash_read16(addr) & cword.w) == cword.w);
183+ retval = ((flash_read16(FLASH_FIXUP_ADDR_16(addr))
184+ & cword.w) == cword.w);
185         break;
186     case FLASH_CFI_32BIT:
187- retval = ((flash_read32(addr) & cword.l) == cword.l);
188+ retval = ((flash_read32(FLASH_FIXUP_ADDR_32(addr))
189+ & cword.l) == cword.l);
190         break;
191     case FLASH_CFI_64BIT:
192- retval = ((flash_read64(addr) & cword.ll) == cword.ll);
193+ retval = ((flash_read64(FLASH_FIXUP_ADDR_64(addr))
194+ & cword.ll) == cword.ll);
195         break;
196     default:
197         retval = 0;
198@@ -476,17 +510,22 @@ static int flash_toggle (flash_info_t *
199     flash_make_cmd (info, cmd, &cword);
200     switch (info->portwidth) {
201     case FLASH_CFI_8BIT:
202- retval = flash_read8(addr) != flash_read8(addr);
203+ retval = flash_read8(FLASH_FIXUP_ADDR_8(addr)) !=
204+ flash_read8(FLASH_FIXUP_ADDR_8(addr));
205         break;
206     case FLASH_CFI_16BIT:
207- retval = flash_read16(addr) != flash_read16(addr);
208+ retval = flash_read16(FLASH_FIXUP_ADDR_16(addr)) !=
209+ flash_read16(FLASH_FIXUP_ADDR_16(addr));
210         break;
211     case FLASH_CFI_32BIT:
212- retval = flash_read32(addr) != flash_read32(addr);
213+ retval = flash_read32(FLASH_FIXUP_ADDR_32(addr)) !=
214+ flash_read32(FLASH_FIXUP_ADDR_32(addr));
215         break;
216     case FLASH_CFI_64BIT:
217- retval = ( (flash_read32( addr ) != flash_read32( addr )) ||
218- (flash_read32(addr+4) != flash_read32(addr+4)) );
219+ retval = ( (flash_read32(FLASH_FIXUP_ADDR_64( addr )) !=
220+ flash_read32(FLASH_FIXUP_ADDR_64( addr ))) ||
221+ (flash_read32(FLASH_FIXUP_ADDR_64(addr+4)) !=
222+ flash_read32(FLASH_FIXUP_ADDR_64(addr+4))) );
223         break;
224     default:
225         retval = 0;
226

Archive Download this file



interactive