brcm63xx: add kernel space and image support for the Netgear CVG834G
[openwrt.git] / target / linux / brcm63xx / patches-3.8 / 534-board_hw556.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -2858,6 +2858,374 @@ static struct board_info __initdata boar
4         },
5  };
6  
7 +static struct board_info __initdata board_HW556 = {
8 +       .name                                   = "HW556",
9 +       .expected_cpu_id                        = 0x6358,
10 +
11 +       .has_uart0                              = 1,
12 +       .has_pci                                = 1,
13 +       .has_ohci0                              = 1,
14 +       .has_ehci0                              = 1,
15 +
16 +       .has_caldata                            = 1,
17 +       .caldata = {
18 +               {
19 +                       .caldata_offset         = 0xe00000,
20 +               },
21 +       },
22 +
23 +       .has_enet1                              = 1,
24 +       .enet1 = {
25 +               .has_phy                        = 1,
26 +               .phy_id                         = 0,
27 +               .force_speed_100                = 1,
28 +               .force_duplex_full              = 1,
29 +       },
30 +
31 +       .leds = {
32 +               {
33 +                       .name                   = "HW556:red:message",
34 +                       .gpio                   = 0,
35 +                       .active_low             = 1,
36 +               },
37 +               {
38 +                       .name                   = "HW556:red:hspa",
39 +                       .gpio                   = 1,
40 +                       .active_low             = 1,
41 +               },
42 +               {
43 +                       .name                   = "HW556:red:dsl",
44 +                       .gpio                   = 2,
45 +                       .active_low             = 1,
46 +               },
47 +               {
48 +                       .name                   = "HW556:red:power",
49 +                       .gpio                   = 3,
50 +                       .active_low             = 1,
51 +                       .default_trigger        = "default-on",
52 +               },
53 +               {
54 +                       .name                   = "HW556:red:all",
55 +                       .gpio                   = 6,
56 +                       .active_low             = 1,
57 +                       .default_trigger        = "default-on",
58 +               },
59 +       },
60 +
61 +       .buttons = {
62 +               {
63 +                       .desc                   = "help",
64 +                       .gpio                   = 8,
65 +                       .active_low             = 1,
66 +                       .type                   = EV_KEY,
67 +                       .code                   = KEY_HELP,
68 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
69 +               },
70 +               {
71 +                       .desc                   = "wlan",
72 +                       .gpio                   = 9,
73 +                       .active_low             = 1,
74 +                       .type                   = EV_KEY,
75 +                       .code                   = KEY_WLAN,
76 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
77 +               },
78 +               {
79 +                       .desc                   = "restart",
80 +                       .gpio                   = 10,
81 +                       .active_low             = 1,
82 +                       .type                   = EV_KEY,
83 +                       .code                   = KEY_RESTART,
84 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
85 +               },
86 +               {
87 +                       .desc                   = "reset",
88 +                       .gpio                   = 11,
89 +                       .active_low             = 1,
90 +                       .type                   = EV_KEY,
91 +                       .code                   = KEY_CONFIG,
92 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
93 +               },
94 +       },
95 +};
96 +static struct board_info __initdata board_HW556_A = {
97 +       .name                                   = "HW556_A",
98 +       .expected_cpu_id                        = 0x6358,
99 +
100 +       .has_uart0                              = 1,
101 +       .has_pci                                = 1,
102 +       .has_ohci0                              = 1,
103 +       .has_ehci0                              = 1,
104 +
105 +       .has_caldata                            = 1,
106 +       .caldata = {
107 +               {
108 +                       .vendor                 = PCI_VENDOR_ID_RALINK,
109 +                       .caldata_offset         = 0xeffe00,
110 +                       .slot                   = 1,
111 +                       .eeprom                 = "rt2x00.eeprom",
112 +               },
113 +       },
114 +
115 +       .has_enet1                              = 1,
116 +       .enet1 = {
117 +               .has_phy                        = 1,
118 +               .phy_id                         = 0,
119 +               .force_speed_100                = 1,
120 +               .force_duplex_full              = 1,
121 +       },
122 +
123 +       .leds = {
124 +               {
125 +                       .name                   = "HW556:red:message",
126 +                       .gpio                   = 0,
127 +                       .active_low             = 1,
128 +               },
129 +               {
130 +                       .name                   = "HW556:red:hspa",
131 +                       .gpio                   = 1,
132 +                       .active_low             = 1,
133 +               },
134 +               {
135 +                       .name                   = "HW556:red:dsl",
136 +                       .gpio                   = 2,
137 +                       .active_low             = 1,
138 +               },
139 +               {
140 +                       .name                   = "HW556:red:power",
141 +                       .gpio                   = 3,
142 +                       .active_low             = 1,
143 +                       .default_trigger        = "default-on",
144 +               },
145 +               {
146 +                       .name                   = "HW556:red:all",
147 +                       .gpio                   = 6,
148 +                       .active_low             = 1,
149 +                       .default_trigger        = "default-on",
150 +               },
151 +       },
152 +
153 +       .buttons = {
154 +               {
155 +                       .desc                   = "help",
156 +                       .gpio                   = 8,
157 +                       .active_low             = 1,
158 +                       .type                   = EV_KEY,
159 +                       .code                   = KEY_HELP,
160 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
161 +               },
162 +               {
163 +                       .desc                   = "wlan",
164 +                       .gpio                   = 9,
165 +                       .active_low             = 1,
166 +                       .type                   = EV_KEY,
167 +                       .code                   = KEY_WLAN,
168 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
169 +               },
170 +               {
171 +                       .desc                   = "restart",
172 +                       .gpio                   = 10,
173 +                       .active_low             = 1,
174 +                       .type                   = EV_KEY,
175 +                       .code                   = KEY_RESTART,
176 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
177 +               },
178 +               {
179 +                       .desc                   = "reset",
180 +                       .gpio                   = 11,
181 +                       .active_low             = 1,
182 +                       .type                   = EV_KEY,
183 +                       .code                   = KEY_CONFIG,
184 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
185 +               },
186 +       },
187 +};
188 +static struct board_info __initdata board_HW556_B = {
189 +       .name                                   = "HW556_B",
190 +       .expected_cpu_id                        = 0x6358,
191 +
192 +       .has_uart0                              = 1,
193 +       .has_pci                                = 1,
194 +       .has_ohci0                              = 1,
195 +       .has_ehci0                              = 1,
196 +
197 +       .has_caldata                            = 1,
198 +       .caldata = {
199 +               {
200 +                       .vendor                 = PCI_VENDOR_ID_ATHEROS,
201 +                       .caldata_offset         = 0xf7e000,
202 +                       .slot                   = 1,
203 +                       .endian_check           = 1,
204 +                       .led_pin                = 2,
205 +               },
206 +       },
207 +
208 +       .has_enet1                              = 1,
209 +       .enet1 = {
210 +               .has_phy                        = 1,
211 +               .phy_id                         = 0,
212 +               .force_speed_100                = 1,
213 +               .force_duplex_full              = 1,
214 +       },
215 +
216 +       .leds = {
217 +               {
218 +                       .name                   = "HW556:red:message",
219 +                       .gpio                   = 0,
220 +                       .active_low             = 1,
221 +               },
222 +               {
223 +                       .name                   = "HW556:red:hspa",
224 +                       .gpio                   = 1,
225 +                       .active_low             = 1,
226 +               },
227 +               {
228 +                       .name                   = "HW556:red:dsl",
229 +                       .gpio                   = 2,
230 +                       .active_low             = 1,
231 +               },
232 +               {
233 +                       .name                   = "HW556:red:power",
234 +                       .gpio                   = 3,
235 +                       .active_low             = 1,
236 +                       .default_trigger        = "default-on",
237 +               },
238 +               {
239 +                       .name                   = "HW556:red:all",
240 +                       .gpio                   = 6,
241 +                       .active_low             = 1,
242 +                       .default_trigger        = "default-on",
243 +               },
244 +       },
245 +
246 +       .buttons = {
247 +               {
248 +                       .desc                   = "help",
249 +                       .gpio                   = 8,
250 +                       .active_low             = 1,
251 +                       .type                   = EV_KEY,
252 +                       .code                   = KEY_HELP,
253 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
254 +               },
255 +               {
256 +                       .desc                   = "wlan",
257 +                       .gpio                   = 9,
258 +                       .active_low             = 1,
259 +                       .type                   = EV_KEY,
260 +                       .code                   = KEY_WLAN,
261 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
262 +               },
263 +               {
264 +                       .desc                   = "restart",
265 +                       .gpio                   = 10,
266 +                       .active_low             = 1,
267 +                       .type                   = EV_KEY,
268 +                       .code                   = KEY_RESTART,
269 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
270 +               },
271 +               {
272 +                       .desc                   = "reset",
273 +                       .gpio                   = 11,
274 +                       .active_low             = 1,
275 +                       .type                   = EV_KEY,
276 +                       .code                   = KEY_CONFIG,
277 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
278 +               },
279 +       },
280 +};
281 +static struct board_info __initdata board_HW556_C = {
282 +       .name                                   = "HW556_C",
283 +       .expected_cpu_id                        = 0x6358,
284 +
285 +       .has_uart0                              = 1,
286 +       .has_pci                                = 1,
287 +       .has_ohci0                              = 1,
288 +       .has_ehci0                              = 1,
289 +
290 +       .has_caldata                            = 1,
291 +       .caldata = {
292 +               {
293 +                       .vendor                 = PCI_VENDOR_ID_ATHEROS,
294 +                       .caldata_offset         = 0xefe000,
295 +                       .slot                   = 1,
296 +                       .endian_check           = 1,
297 +                       .led_pin                = 2,
298 +               },
299 +       },
300 +
301 +       .has_enet1                              = 1,
302 +       .enet1 = {
303 +               .has_phy                        = 1,
304 +               .phy_id                         = 0,
305 +               .force_speed_100                = 1,
306 +               .force_duplex_full              = 1,
307 +       },
308 +
309 +       .leds = {
310 +               {
311 +                       .name                   = "HW556:red:message",
312 +                       .gpio                   = 0,
313 +                       .active_low             = 1,
314 +               },
315 +               {
316 +                       .name                   = "HW556:red:hspa",
317 +                       .gpio                   = 1,
318 +                       .active_low             = 1,
319 +               },
320 +               {
321 +                       .name                   = "HW556:red:dsl",
322 +                       .gpio                   = 2,
323 +                       .active_low             = 1,
324 +               },
325 +               {
326 +                       .name                   = "HW556:red:power",
327 +                       .gpio                   = 3,
328 +                       .active_low             = 1,
329 +                       .default_trigger        = "default-on",
330 +               },
331 +               {
332 +                       .name                   = "HW556:red:all",
333 +                       .gpio                   = 6,
334 +                       .active_low             = 1,
335 +                       .default_trigger        = "default-on",
336 +               },
337 +       },
338 +
339 +       .buttons = {
340 +               {
341 +                       .desc                   = "help",
342 +                       .gpio                   = 8,
343 +                       .active_low             = 1,
344 +                       .type                   = EV_KEY,
345 +                       .code                   = KEY_HELP,
346 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
347 +               },
348 +               {
349 +                       .desc                   = "wlan",
350 +                       .gpio                   = 9,
351 +                       .active_low             = 1,
352 +                       .type                   = EV_KEY,
353 +                       .code                   = KEY_WLAN,
354 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
355 +               },
356 +               {
357 +                       .desc                   = "restart",
358 +                       .gpio                   = 10,
359 +                       .active_low             = 1,
360 +                       .type                   = EV_KEY,
361 +                       .code                   = KEY_RESTART,
362 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
363 +               },
364 +               {
365 +                       .desc                   = "reset",
366 +                       .gpio                   = 11,
367 +                       .active_low             = 1,
368 +                       .type                   = EV_KEY,
369 +                       .code                   = KEY_CONFIG,
370 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
371 +               },
372 +       },
373 +};
374 +
375   /* T-Home Speedport W 303V Typ B */
376  static struct board_info __initdata board_spw303v = {
377         .name                   = "96358-502V",
378 @@ -3286,6 +3654,10 @@ static const struct board_info __initcon
379         &board_nb4_fxc_r2,
380         &board_ct6373_1,
381         &board_HW553,
382 +       &board_HW556,
383 +       &board_HW556_A,
384 +       &board_HW556_B,
385 +       &board_HW556_C,
386         &board_spw303v,
387         &board_DVAG3810BN,
388  #endif
389 @@ -3351,13 +3723,37 @@ static void __init boardid_fixup(u8 *boo
390         struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
391         char *board_name = (char *)bcm63xx_nvram_get_name();
392  
393 -       if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
394 -               u8 *p = boot_addr + NB4_PID_OFFSET;
395 -
396 -               /* Extract nb4 PID */
397 -               if (!memcmp(p, "NB4-", 4)) {
398 -                       memcpy(board_name, p, sizeof("NB4-XXX-rX"));
399 -                       return;
400 +       if (BCMCPU_IS_6358()) {
401 +               if (!strcmp(board_name, "96358VW")) {
402 +                       u8 *p = boot_addr + NB4_PID_OFFSET;
403 +
404 +                       /* Extract nb4 PID */
405 +                       if (!memcmp(p, "NB4-", 4)) {
406 +                               memcpy(board_name, p, sizeof("NB4-XXX-rX"));
407 +                               return;
408 +                       }
409 +               } else if (!strcmp(board_name, "HW556")) {
410 +                       /*
411 +                        * HW556 has different wlan caldatas depending on
412 +                        * hardware version.
413 +                        * Detect hardware version and change board id
414 +                        */
415 +                       u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
416 +                       u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
417 +
418 +                       if (!memcmp(boot_addr + 0xeffe00,
419 +                                   &cal_data_rt3062, 4)) {
420 +                               /* Ralink 0xeffe00 */
421 +                               memcpy(board_name, "HW556_A", 7);
422 +                       } else if (!memcmp(boot_addr + 0xf7e000,
423 +                                          &cal_data_ath9k, 4)) {
424 +                               /* Atheros 0xf7e000 */
425 +                               memcpy(board_name, "HW556_B", 7);
426 +                       } else if (!memcmp(boot_addr + 0xefe000,
427 +                                          &cal_data_ath9k, 4)) {
428 +                               /* Atheros 0xefe000 */
429 +                               memcpy(board_name, "HW556_C", 7);
430 +                       }
431                 }
432         }
433  
434 --- a/drivers/mtd/bcm63xxpart.c
435 +++ b/drivers/mtd/bcm63xxpart.c
436 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
437                               BCM63XX_CFE_BLOCK_SIZE);
438  
439         cfelen = cfe_erasesize;
440 +
441 +       /* Fix HW556 MX29LV128DB */
442 +       if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
443 +               cfelen = 0x20000;
444 +
445         nvramlen = bcm63xx_nvram_get_psi_size();
446         nvramlen = roundup(nvramlen, cfe_erasesize);
447         nvramaddr = master->size - nvramlen;