~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/powerpc/sysdev/micropatch.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* Microcode patches for the CPM as supplied by Motorola.
 
3
 * This is the one for IIC/SPI.  There is a newer one that
 
4
 * also relocates SMC2, but this would require additional changes
 
5
 * to uart.c, so I am holding off on that for a moment.
 
6
 */
 
7
#include <linux/init.h>
 
8
#include <linux/errno.h>
 
9
#include <linux/sched.h>
 
10
#include <linux/kernel.h>
 
11
#include <linux/param.h>
 
12
#include <linux/string.h>
 
13
#include <linux/mm.h>
 
14
#include <linux/interrupt.h>
 
15
#include <asm/irq.h>
 
16
#include <asm/mpc8xx.h>
 
17
#include <asm/page.h>
 
18
#include <asm/pgtable.h>
 
19
#include <asm/8xx_immap.h>
 
20
#include <asm/cpm.h>
 
21
#include <asm/cpm1.h>
 
22
 
 
23
/*
 
24
 * I2C/SPI relocation patch arrays.
 
25
 */
 
26
 
 
27
#ifdef CONFIG_I2C_SPI_UCODE_PATCH
 
28
 
 
29
static uint patch_2000[] __initdata = {
 
30
        0x7FFFEFD9,
 
31
        0x3FFD0000,
 
32
        0x7FFB49F7,
 
33
        0x7FF90000,
 
34
        0x5FEFADF7,
 
35
        0x5F89ADF7,
 
36
        0x5FEFAFF7,
 
37
        0x5F89AFF7,
 
38
        0x3A9CFBC8,
 
39
        0xE7C0EDF0,
 
40
        0x77C1E1BB,
 
41
        0xF4DC7F1D,
 
42
        0xABAD932F,
 
43
        0x4E08FDCF,
 
44
        0x6E0FAFF8,
 
45
        0x7CCF76CF,
 
46
        0xFD1FF9CF,
 
47
        0xABF88DC6,
 
48
        0xAB5679F7,
 
49
        0xB0937383,
 
50
        0xDFCE79F7,
 
51
        0xB091E6BB,
 
52
        0xE5BBE74F,
 
53
        0xB3FA6F0F,
 
54
        0x6FFB76CE,
 
55
        0xEE0DF9CF,
 
56
        0x2BFBEFEF,
 
57
        0xCFEEF9CF,
 
58
        0x76CEAD24,
 
59
        0x90B2DF9A,
 
60
        0x7FDDD0BF,
 
61
        0x4BF847FD,
 
62
        0x7CCF76CE,
 
63
        0xCFEF7E1F,
 
64
        0x7F1D7DFD,
 
65
        0xF0B6EF71,
 
66
        0x7FC177C1,
 
67
        0xFBC86079,
 
68
        0xE722FBC8,
 
69
        0x5FFFDFFF,
 
70
        0x5FB2FFFB,
 
71
        0xFBC8F3C8,
 
72
        0x94A67F01,
 
73
        0x7F1D5F39,
 
74
        0xAFE85F5E,
 
75
        0xFFDFDF96,
 
76
        0xCB9FAF7D,
 
77
        0x5FC1AFED,
 
78
        0x8C1C5FC1,
 
79
        0xAFDD5FC3,
 
80
        0xDF9A7EFD,
 
81
        0xB0B25FB2,
 
82
        0xFFFEABAD,
 
83
        0x5FB2FFFE,
 
84
        0x5FCE600B,
 
85
        0xE6BB600B,
 
86
        0x5FCEDFC6,
 
87
        0x27FBEFDF,
 
88
        0x5FC8CFDE,
 
89
        0x3A9CE7C0,
 
90
        0xEDF0F3C8,
 
91
        0x7F0154CD,
 
92
        0x7F1D2D3D,
 
93
        0x363A7570,
 
94
        0x7E0AF1CE,
 
95
        0x37EF2E68,
 
96
        0x7FEE10EC,
 
97
        0xADF8EFDE,
 
98
        0xCFEAE52F,
 
99
        0x7D0FE12B,
 
100
        0xF1CE5F65,
 
101
        0x7E0A4DF8,
 
102
        0xCFEA5F72,
 
103
        0x7D0BEFEE,
 
104
        0xCFEA5F74,
 
105
        0xE522EFDE,
 
106
        0x5F74CFDA,
 
107
        0x0B627385,
 
108
        0xDF627E0A,
 
109
        0x30D8145B,
 
110
        0xBFFFF3C8,
 
111
        0x5FFFDFFF,
 
112
        0xA7F85F5E,
 
113
        0xBFFE7F7D,
 
114
        0x10D31450,
 
115
        0x5F36BFFF,
 
116
        0xAF785F5E,
 
117
        0xBFFDA7F8,
 
118
        0x5F36BFFE,
 
119
        0x77FD30C0,
 
120
        0x4E08FDCF,
 
121
        0xE5FF6E0F,
 
122
        0xAFF87E1F,
 
123
        0x7E0FFD1F,
 
124
        0xF1CF5F1B,
 
125
        0xABF80D5E,
 
126
        0x5F5EFFEF,
 
127
        0x79F730A2,
 
128
        0xAFDD5F34,
 
129
        0x47F85F34,
 
130
        0xAFED7FDD,
 
131
        0x50B24978,
 
132
        0x47FD7F1D,
 
133
        0x7DFD70AD,
 
134
        0xEF717EC1,
 
135
        0x6BA47F01,
 
136
        0x2D267EFD,
 
137
        0x30DE5F5E,
 
138
        0xFFFD5F5E,
 
139
        0xFFEF5F5E,
 
140
        0xFFDF0CA0,
 
141
        0xAFED0A9E,
 
142
        0xAFDD0C3A,
 
143
        0x5F3AAFBD,
 
144
        0x7FBDB082,
 
145
        0x5F8247F8
 
146
};
 
147
 
 
148
static uint patch_2f00[] __initdata = {
 
149
        0x3E303430,
 
150
        0x34343737,
 
151
        0xABF7BF9B,
 
152
        0x994B4FBD,
 
153
        0xBD599493,
 
154
        0x349FFF37,
 
155
        0xFB9B177D,
 
156
        0xD9936956,
 
157
        0xBBFDD697,
 
158
        0xBDD2FD11,
 
159
        0x31DB9BB3,
 
160
        0x63139637,
 
161
        0x93733693,
 
162
        0x193137F7,
 
163
        0x331737AF,
 
164
        0x7BB9B999,
 
165
        0xBB197957,
 
166
        0x7FDFD3D5,
 
167
        0x73B773F7,
 
168
        0x37933B99,
 
169
        0x1D115316,
 
170
        0x99315315,
 
171
        0x31694BF4,
 
172
        0xFBDBD359,
 
173
        0x31497353,
 
174
        0x76956D69,
 
175
        0x7B9D9693,
 
176
        0x13131979,
 
177
        0x79376935
 
178
};
 
179
#endif
 
180
 
 
181
/*
 
182
 * I2C/SPI/SMC1 relocation patch arrays.
 
183
 */
 
184
 
 
185
#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
 
186
 
 
187
static uint patch_2000[] __initdata = {
 
188
        0x3fff0000,
 
189
        0x3ffd0000,
 
190
        0x3ffb0000,
 
191
        0x3ff90000,
 
192
        0x5f13eff8,
 
193
        0x5eb5eff8,
 
194
        0x5f88adf7,
 
195
        0x5fefadf7,
 
196
        0x3a9cfbc8,
 
197
        0x77cae1bb,
 
198
        0xf4de7fad,
 
199
        0xabae9330,
 
200
        0x4e08fdcf,
 
201
        0x6e0faff8,
 
202
        0x7ccf76cf,
 
203
        0xfdaff9cf,
 
204
        0xabf88dc8,
 
205
        0xab5879f7,
 
206
        0xb0925d8d,
 
207
        0xdfd079f7,
 
208
        0xb090e6bb,
 
209
        0xe5bbe74f,
 
210
        0x9e046f0f,
 
211
        0x6ffb76ce,
 
212
        0xee0cf9cf,
 
213
        0x2bfbefef,
 
214
        0xcfeef9cf,
 
215
        0x76cead23,
 
216
        0x90b3df99,
 
217
        0x7fddd0c1,
 
218
        0x4bf847fd,
 
219
        0x7ccf76ce,
 
220
        0xcfef77ca,
 
221
        0x7eaf7fad,
 
222
        0x7dfdf0b7,
 
223
        0xef7a7fca,
 
224
        0x77cafbc8,
 
225
        0x6079e722,
 
226
        0xfbc85fff,
 
227
        0xdfff5fb3,
 
228
        0xfffbfbc8,
 
229
        0xf3c894a5,
 
230
        0xe7c9edf9,
 
231
        0x7f9a7fad,
 
232
        0x5f36afe8,
 
233
        0x5f5bffdf,
 
234
        0xdf95cb9e,
 
235
        0xaf7d5fc3,
 
236
        0xafed8c1b,
 
237
        0x5fc3afdd,
 
238
        0x5fc5df99,
 
239
        0x7efdb0b3,
 
240
        0x5fb3fffe,
 
241
        0xabae5fb3,
 
242
        0xfffe5fd0,
 
243
        0x600be6bb,
 
244
        0x600b5fd0,
 
245
        0xdfc827fb,
 
246
        0xefdf5fca,
 
247
        0xcfde3a9c,
 
248
        0xe7c9edf9,
 
249
        0xf3c87f9e,
 
250
        0x54ca7fed,
 
251
        0x2d3a3637,
 
252
        0x756f7e9a,
 
253
        0xf1ce37ef,
 
254
        0x2e677fee,
 
255
        0x10ebadf8,
 
256
        0xefdecfea,
 
257
        0xe52f7d9f,
 
258
        0xe12bf1ce,
 
259
        0x5f647e9a,
 
260
        0x4df8cfea,
 
261
        0x5f717d9b,
 
262
        0xefeecfea,
 
263
        0x5f73e522,
 
264
        0xefde5f73,
 
265
        0xcfda0b61,
 
266
        0x5d8fdf61,
 
267
        0xe7c9edf9,
 
268
        0x7e9a30d5,
 
269
        0x1458bfff,
 
270
        0xf3c85fff,
 
271
        0xdfffa7f8,
 
272
        0x5f5bbffe,
 
273
        0x7f7d10d0,
 
274
        0x144d5f33,
 
275
        0xbfffaf78,
 
276
        0x5f5bbffd,
 
277
        0xa7f85f33,
 
278
        0xbffe77fd,
 
279
        0x30bd4e08,
 
280
        0xfdcfe5ff,
 
281
        0x6e0faff8,
 
282
        0x7eef7e9f,
 
283
        0xfdeff1cf,
 
284
        0x5f17abf8,
 
285
        0x0d5b5f5b,
 
286
        0xffef79f7,
 
287
        0x309eafdd,
 
288
        0x5f3147f8,
 
289
        0x5f31afed,
 
290
        0x7fdd50af,
 
291
        0x497847fd,
 
292
        0x7f9e7fed,
 
293
        0x7dfd70a9,
 
294
        0xef7e7ece,
 
295
        0x6ba07f9e,
 
296
        0x2d227efd,
 
297
        0x30db5f5b,
 
298
        0xfffd5f5b,
 
299
        0xffef5f5b,
 
300
        0xffdf0c9c,
 
301
        0xafed0a9a,
 
302
        0xafdd0c37,
 
303
        0x5f37afbd,
 
304
        0x7fbdb081,
 
305
        0x5f8147f8,
 
306
        0x3a11e710,
 
307
        0xedf0ccdd,
 
308
        0xf3186d0a,
 
309
        0x7f0e5f06,
 
310
        0x7fedbb38,
 
311
        0x3afe7468,
 
312
        0x7fedf4fc,
 
313
        0x8ffbb951,
 
314
        0xb85f77fd,
 
315
        0xb0df5ddd,
 
316
        0xdefe7fed,
 
317
        0x90e1e74d,
 
318
        0x6f0dcbf7,
 
319
        0xe7decfed,
 
320
        0xcb74cfed,
 
321
        0xcfeddf6d,
 
322
        0x91714f74,
 
323
        0x5dd2deef,
 
324
        0x9e04e7df,
 
325
        0xefbb6ffb,
 
326
        0xe7ef7f0e,
 
327
        0x9e097fed,
 
328
        0xebdbeffa,
 
329
        0xeb54affb,
 
330
        0x7fea90d7,
 
331
        0x7e0cf0c3,
 
332
        0xbffff318,
 
333
        0x5fffdfff,
 
334
        0xac59efea,
 
335
        0x7fce1ee5,
 
336
        0xe2ff5ee1,
 
337
        0xaffbe2ff,
 
338
        0x5ee3affb,
 
339
        0xf9cc7d0f,
 
340
        0xaef8770f,
 
341
        0x7d0fb0c6,
 
342
        0xeffbbfff,
 
343
        0xcfef5ede,
 
344
        0x7d0fbfff,
 
345
        0x5ede4cf8,
 
346
        0x7fddd0bf,
 
347
        0x49f847fd,
 
348
        0x7efdf0bb,
 
349
        0x7fedfffd,
 
350
        0x7dfdf0b7,
 
351
        0xef7e7e1e,
 
352
        0x5ede7f0e,
 
353
        0x3a11e710,
 
354
        0xedf0ccab,
 
355
        0xfb18ad2e,
 
356
        0x1ea9bbb8,
 
357
        0x74283b7e,
 
358
        0x73c2e4bb,
 
359
        0x2ada4fb8,
 
360
        0xdc21e4bb,
 
361
        0xb2a1ffbf,
 
362
        0x5e2c43f8,
 
363
        0xfc87e1bb,
 
364
        0xe74ffd91,
 
365
        0x6f0f4fe8,
 
366
        0xc7ba32e2,
 
367
        0xf396efeb,
 
368
        0x600b4f78,
 
369
        0xe5bb760b,
 
370
        0x53acaef8,
 
371
        0x4ef88b0e,
 
372
        0xcfef9e09,
 
373
        0xabf8751f,
 
374
        0xefef5bac,
 
375
        0x741f4fe8,
 
376
        0x751e760d,
 
377
        0x7fdbf081,
 
378
        0x741cafce,
 
379
        0xefcc7fce,
 
380
        0x751e70ac,
 
381
        0x741ce7bb,
 
382
        0x3372cfed,
 
383
        0xafdbefeb,
 
384
        0xe5bb760b,
 
385
        0x53f2aef8,
 
386
        0xafe8e7eb,
 
387
        0x4bf8771e,
 
388
        0x7e247fed,
 
389
        0x4fcbe2cc,
 
390
        0x7fbc30a9,
 
391
        0x7b0f7a0f,
 
392
        0x34d577fd,
 
393
        0x308b5db7,
 
394
        0xde553e5f,
 
395
        0xaf78741f,
 
396
        0x741f30f0,
 
397
        0xcfef5e2c,
 
398
        0x741f3eac,
 
399
        0xafb8771e,
 
400
        0x5e677fed,
 
401
        0x0bd3e2cc,
 
402
        0x741ccfec,
 
403
        0xe5ca53cd,
 
404
        0x6fcb4f74,
 
405
        0x5dadde4b,
 
406
        0x2ab63d38,
 
407
        0x4bb3de30,
 
408
        0x751f741c,
 
409
        0x6c42effa,
 
410
        0xefea7fce,
 
411
        0x6ffc30be,
 
412
        0xefec3fca,
 
413
        0x30b3de2e,
 
414
        0xadf85d9e,
 
415
        0xaf7daefd,
 
416
        0x5d9ede2e,
 
417
        0x5d9eafdd,
 
418
        0x761f10ac,
 
419
        0x1da07efd,
 
420
        0x30adfffe,
 
421
        0x4908fb18,
 
422
        0x5fffdfff,
 
423
        0xafbb709b,
 
424
        0x4ef85e67,
 
425
        0xadf814ad,
 
426
        0x7a0f70ad,
 
427
        0xcfef50ad,
 
428
        0x7a0fde30,
 
429
        0x5da0afed,
 
430
        0x3c12780f,
 
431
        0xefef780f,
 
432
        0xefef790f,
 
433
        0xa7f85e0f,
 
434
        0xffef790f,
 
435
        0xefef790f,
 
436
        0x14adde2e,
 
437
        0x5d9eadfd,
 
438
        0x5e2dfffb,
 
439
        0xe79addfd,
 
440
        0xeff96079,
 
441
        0x607ae79a,
 
442
        0xddfceff9,
 
443
        0x60795dff,
 
444
        0x607acfef,
 
445
        0xefefefdf,
 
446
        0xefbfef7f,
 
447
        0xeeffedff,
 
448
        0xebffe7ff,
 
449
        0xafefafdf,
 
450
        0xafbfaf7f,
 
451
        0xaeffadff,
 
452
        0xabffa7ff,
 
453
        0x6fef6fdf,
 
454
        0x6fbf6f7f,
 
455
        0x6eff6dff,
 
456
        0x6bff67ff,
 
457
        0x2fef2fdf,
 
458
        0x2fbf2f7f,
 
459
        0x2eff2dff,
 
460
        0x2bff27ff,
 
461
        0x4e08fd1f,
 
462
        0xe5ff6e0f,
 
463
        0xaff87eef,
 
464
        0x7e0ffdef,
 
465
        0xf11f6079,
 
466
        0xabf8f542,
 
467
        0x7e0af11c,
 
468
        0x37cfae3a,
 
469
        0x7fec90be,
 
470
        0xadf8efdc,
 
471
        0xcfeae52f,
 
472
        0x7d0fe12b,
 
473
        0xf11c6079,
 
474
        0x7e0a4df8,
 
475
        0xcfea5dc4,
 
476
        0x7d0befec,
 
477
        0xcfea5dc6,
 
478
        0xe522efdc,
 
479
        0x5dc6cfda,
 
480
        0x4e08fd1f,
 
481
        0x6e0faff8,
 
482
        0x7c1f761f,
 
483
        0xfdeff91f,
 
484
        0x6079abf8,
 
485
        0x761cee24,
 
486
        0xf91f2bfb,
 
487
        0xefefcfec,
 
488
        0xf91f6079,
 
489
        0x761c27fb,
 
490
        0xefdf5da7,
 
491
        0xcfdc7fdd,
 
492
        0xd09c4bf8,
 
493
        0x47fd7c1f,
 
494
        0x761ccfcf,
 
495
        0x7eef7fed,
 
496
        0x7dfdf093,
 
497
        0xef7e7f1e,
 
498
        0x771efb18,
 
499
        0x6079e722,
 
500
        0xe6bbe5bb,
 
501
        0xae0ae5bb,
 
502
        0x600bae85,
 
503
        0xe2bbe2bb,
 
504
        0xe2bbe2bb,
 
505
        0xaf02e2bb,
 
506
        0xe2bb2ff9,
 
507
        0x6079e2bb
 
508
};
 
509
 
 
510
static uint patch_2f00[] __initdata = {
 
511
        0x30303030,
 
512
        0x3e3e3434,
 
513
        0xabbf9b99,
 
514
        0x4b4fbdbd,
 
515
        0x59949334,
 
516
        0x9fff37fb,
 
517
        0x9b177dd9,
 
518
        0x936956bb,
 
519
        0xfbdd697b,
 
520
        0xdd2fd113,
 
521
        0x1db9f7bb,
 
522
        0x36313963,
 
523
        0x79373369,
 
524
        0x3193137f,
 
525
        0x7331737a,
 
526
        0xf7bb9b99,
 
527
        0x9bb19795,
 
528
        0x77fdfd3d,
 
529
        0x573b773f,
 
530
        0x737933f7,
 
531
        0xb991d115,
 
532
        0x31699315,
 
533
        0x31531694,
 
534
        0xbf4fbdbd,
 
535
        0x35931497,
 
536
        0x35376956,
 
537
        0xbd697b9d,
 
538
        0x96931313,
 
539
        0x19797937,
 
540
        0x6935af78,
 
541
        0xb9b3baa3,
 
542
        0xb8788683,
 
543
        0x368f78f7,
 
544
        0x87778733,
 
545
        0x3ffffb3b,
 
546
        0x8e8f78b8,
 
547
        0x1d118e13,
 
548
        0xf3ff3f8b,
 
549
        0x6bd8e173,
 
550
        0xd1366856,
 
551
        0x68d1687b,
 
552
        0x3daf78b8,
 
553
        0x3a3a3f87,
 
554
        0x8f81378f,
 
555
        0xf876f887,
 
556
        0x77fd8778,
 
557
        0x737de8d6,
 
558
        0xbbf8bfff,
 
559
        0xd8df87f7,
 
560
        0xfd876f7b,
 
561
        0x8bfff8bd,
 
562
        0x8683387d,
 
563
        0xb873d87b,
 
564
        0x3b8fd7f8,
 
565
        0xf7338883,
 
566
        0xbb8ee1f8,
 
567
        0xef837377,
 
568
        0x3337b836,
 
569
        0x817d11f8,
 
570
        0x7378b878,
 
571
        0xd3368b7d,
 
572
        0xed731b7d,
 
573
        0x833731f3,
 
574
        0xf22f3f23
 
575
};
 
576
 
 
577
static uint patch_2e00[] __initdata = {
 
578
        0x27eeeeee,
 
579
        0xeeeeeeee,
 
580
        0xeeeeeeee,
 
581
        0xeeeeeeee,
 
582
        0xee4bf4fb,
 
583
        0xdbd259bb,
 
584
        0x1979577f,
 
585
        0xdfd2d573,
 
586
        0xb773f737,
 
587
        0x4b4fbdbd,
 
588
        0x25b9b177,
 
589
        0xd2d17376,
 
590
        0x956bbfdd,
 
591
        0x697bdd2f,
 
592
        0xff9f79ff,
 
593
        0xff9ff22f
 
594
};
 
595
#endif
 
596
 
 
597
/*
 
598
 *  USB SOF patch arrays.
 
599
 */
 
600
 
 
601
#ifdef CONFIG_USB_SOF_UCODE_PATCH
 
602
 
 
603
static uint patch_2000[] __initdata = {
 
604
        0x7fff0000,
 
605
        0x7ffd0000,
 
606
        0x7ffb0000,
 
607
        0x49f7ba5b,
 
608
        0xba383ffb,
 
609
        0xf9b8b46d,
 
610
        0xe5ab4e07,
 
611
        0xaf77bffe,
 
612
        0x3f7bbf79,
 
613
        0xba5bba38,
 
614
        0xe7676076,
 
615
        0x60750000
 
616
};
 
617
 
 
618
static uint patch_2f00[] __initdata = {
 
619
        0x3030304c,
 
620
        0xcab9e441,
 
621
        0xa1aaf220
 
622
};
 
623
#endif
 
624
 
 
625
void __init cpm_load_patch(cpm8xx_t *cp)
 
626
{
 
627
        volatile uint           *dp;            /* Dual-ported RAM. */
 
628
        volatile cpm8xx_t       *commproc;
 
629
#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
 
630
    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
 
631
        volatile iic_t          *iip;
 
632
        volatile struct spi_pram *spp;
 
633
#ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH
 
634
        volatile smc_uart_t     *smp;
 
635
#endif
 
636
#endif
 
637
        int     i;
 
638
 
 
639
        commproc = cp;
 
640
 
 
641
#ifdef CONFIG_USB_SOF_UCODE_PATCH
 
642
        commproc->cp_rccr = 0;
 
643
 
 
644
        dp = (uint *)(commproc->cp_dpmem);
 
645
        for (i=0; i<(sizeof(patch_2000)/4); i++)
 
646
                *dp++ = patch_2000[i];
 
647
 
 
648
        dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
 
649
        for (i=0; i<(sizeof(patch_2f00)/4); i++)
 
650
                *dp++ = patch_2f00[i];
 
651
 
 
652
        commproc->cp_rccr = 0x0009;
 
653
 
 
654
        printk("USB SOF microcode patch installed\n");
 
655
#endif /* CONFIG_USB_SOF_UCODE_PATCH */
 
656
 
 
657
#if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \
 
658
    defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
 
659
 
 
660
        commproc->cp_rccr = 0;
 
661
 
 
662
        dp = (uint *)(commproc->cp_dpmem);
 
663
        for (i=0; i<(sizeof(patch_2000)/4); i++)
 
664
                *dp++ = patch_2000[i];
 
665
 
 
666
        dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
 
667
        for (i=0; i<(sizeof(patch_2f00)/4); i++)
 
668
                *dp++ = patch_2f00[i];
 
669
 
 
670
        iip = (iic_t *)&commproc->cp_dparam[PROFF_IIC];
 
671
# define RPBASE 0x0500
 
672
        iip->iic_rpbase = RPBASE;
 
673
 
 
674
        /* Put SPI above the IIC, also 32-byte aligned.
 
675
        */
 
676
        i = (RPBASE + sizeof(iic_t) + 31) & ~31;
 
677
        spp = (struct spi_pram *)&commproc->cp_dparam[PROFF_SPI];
 
678
        spp->rpbase = i;
 
679
 
 
680
# if defined(CONFIG_I2C_SPI_UCODE_PATCH)
 
681
        commproc->cp_cpmcr1 = 0x802a;
 
682
        commproc->cp_cpmcr2 = 0x8028;
 
683
        commproc->cp_cpmcr3 = 0x802e;
 
684
        commproc->cp_cpmcr4 = 0x802c;
 
685
        commproc->cp_rccr = 1;
 
686
 
 
687
        printk("I2C/SPI microcode patch installed.\n");
 
688
# endif /* CONFIG_I2C_SPI_UCODE_PATCH */
 
689
 
 
690
# if defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
 
691
 
 
692
        dp = (uint *)&(commproc->cp_dpmem[0x0e00]);
 
693
        for (i=0; i<(sizeof(patch_2e00)/4); i++)
 
694
                *dp++ = patch_2e00[i];
 
695
 
 
696
        commproc->cp_cpmcr1 = 0x8080;
 
697
        commproc->cp_cpmcr2 = 0x808a;
 
698
        commproc->cp_cpmcr3 = 0x8028;
 
699
        commproc->cp_cpmcr4 = 0x802a;
 
700
        commproc->cp_rccr = 3;
 
701
 
 
702
        smp = (smc_uart_t *)&commproc->cp_dparam[PROFF_SMC1];
 
703
        smp->smc_rpbase = 0x1FC0;
 
704
 
 
705
        printk("I2C/SPI/SMC1 microcode patch installed.\n");
 
706
# endif /* CONFIG_I2C_SPI_SMC1_UCODE_PATCH) */
 
707
 
 
708
#endif /* some variation of the I2C/SPI patch was selected */
 
709
}
 
710
 
 
711
/*
 
712
 *  Take this entire routine out, since no one calls it and its
 
713
 * logic is suspect.
 
714
 */
 
715
 
 
716
#if 0
 
717
void
 
718
verify_patch(volatile immap_t *immr)
 
719
{
 
720
        volatile uint           *dp;
 
721
        volatile cpm8xx_t       *commproc;
 
722
        int i;
 
723
 
 
724
        commproc = (cpm8xx_t *)&immr->im_cpm;
 
725
 
 
726
        printk("cp_rccr %x\n", commproc->cp_rccr);
 
727
        commproc->cp_rccr = 0;
 
728
 
 
729
        dp = (uint *)(commproc->cp_dpmem);
 
730
        for (i=0; i<(sizeof(patch_2000)/4); i++)
 
731
                if (*dp++ != patch_2000[i]) {
 
732
                        printk("patch_2000 bad at %d\n", i);
 
733
                        dp--;
 
734
                        printk("found 0x%X, wanted 0x%X\n", *dp, patch_2000[i]);
 
735
                        break;
 
736
                }
 
737
 
 
738
        dp = (uint *)&(commproc->cp_dpmem[0x0f00]);
 
739
        for (i=0; i<(sizeof(patch_2f00)/4); i++)
 
740
                if (*dp++ != patch_2f00[i]) {
 
741
                        printk("patch_2f00 bad at %d\n", i);
 
742
                        dp--;
 
743
                        printk("found 0x%X, wanted 0x%X\n", *dp, patch_2f00[i]);
 
744
                        break;
 
745
                }
 
746
 
 
747
        commproc->cp_rccr = 0x0009;
 
748
}
 
749
#endif