Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/alpha/kernel/core_cia.c
10817 views
1
/*
2
* linux/arch/alpha/kernel/core_cia.c
3
*
4
* Written by David A Rusling ([email protected]).
5
* December 1995.
6
*
7
* Copyright (C) 1995 David A Rusling
8
* Copyright (C) 1997, 1998 Jay Estabrook
9
* Copyright (C) 1998, 1999, 2000 Richard Henderson
10
*
11
* Code common to all CIA core logic chips.
12
*/
13
14
#define __EXTERN_INLINE inline
15
#include <asm/io.h>
16
#include <asm/core_cia.h>
17
#undef __EXTERN_INLINE
18
19
#include <linux/types.h>
20
#include <linux/pci.h>
21
#include <linux/sched.h>
22
#include <linux/init.h>
23
#include <linux/bootmem.h>
24
25
#include <asm/ptrace.h>
26
27
#include "proto.h"
28
#include "pci_impl.h"
29
30
31
/*
32
* NOTE: Herein lie back-to-back mb instructions. They are magic.
33
* One plausible explanation is that the i/o controller does not properly
34
* handle the system transaction. Another involves timing. Ho hum.
35
*/
36
37
#define DEBUG_CONFIG 0
38
#if DEBUG_CONFIG
39
# define DBGC(args) printk args
40
#else
41
# define DBGC(args)
42
#endif
43
44
#define vip volatile int *
45
46
/*
47
* Given a bus, device, and function number, compute resulting
48
* configuration space address. It is therefore not safe to have
49
* concurrent invocations to configuration space access routines, but
50
* there really shouldn't be any need for this.
51
*
52
* Type 0:
53
*
54
* 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1
55
* 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
56
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57
* | | |D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|0|
58
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
59
*
60
* 31:11 Device select bit.
61
* 10:8 Function number
62
* 7:2 Register number
63
*
64
* Type 1:
65
*
66
* 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1
67
* 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
68
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69
* | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1|
70
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
71
*
72
* 31:24 reserved
73
* 23:16 bus number (8 bits = 128 possible buses)
74
* 15:11 Device number (5 bits)
75
* 10:8 function number
76
* 7:2 register number
77
*
78
* Notes:
79
* The function number selects which function of a multi-function device
80
* (e.g., SCSI and Ethernet).
81
*
82
* The register selects a DWORD (32 bit) register offset. Hence it
83
* doesn't get shifted by 2 bits as we want to "drop" the bottom two
84
* bits.
85
*/
86
87
static int
88
mk_conf_addr(struct pci_bus *bus_dev, unsigned int device_fn, int where,
89
unsigned long *pci_addr, unsigned char *type1)
90
{
91
u8 bus = bus_dev->number;
92
93
*type1 = (bus != 0);
94
*pci_addr = (bus << 16) | (device_fn << 8) | where;
95
96
DBGC(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x,"
97
" returning address 0x%p\n"
98
bus, device_fn, where, *pci_addr));
99
100
return 0;
101
}
102
103
static unsigned int
104
conf_read(unsigned long addr, unsigned char type1)
105
{
106
unsigned long flags;
107
int stat0, value;
108
int cia_cfg = 0;
109
110
DBGC(("conf_read(addr=0x%lx, type1=%d) ", addr, type1));
111
local_irq_save(flags);
112
113
/* Reset status register to avoid losing errors. */
114
stat0 = *(vip)CIA_IOC_CIA_ERR;
115
*(vip)CIA_IOC_CIA_ERR = stat0;
116
mb();
117
*(vip)CIA_IOC_CIA_ERR; /* re-read to force write */
118
119
/* If Type1 access, must set CIA CFG. */
120
if (type1) {
121
cia_cfg = *(vip)CIA_IOC_CFG;
122
*(vip)CIA_IOC_CFG = (cia_cfg & ~3) | 1;
123
mb();
124
*(vip)CIA_IOC_CFG;
125
}
126
127
mb();
128
draina();
129
mcheck_expected(0) = 1;
130
mcheck_taken(0) = 0;
131
mb();
132
133
/* Access configuration space. */
134
value = *(vip)addr;
135
mb();
136
mb(); /* magic */
137
if (mcheck_taken(0)) {
138
mcheck_taken(0) = 0;
139
value = 0xffffffff;
140
mb();
141
}
142
mcheck_expected(0) = 0;
143
mb();
144
145
/* If Type1 access, must reset IOC CFG so normal IO space ops work. */
146
if (type1) {
147
*(vip)CIA_IOC_CFG = cia_cfg;
148
mb();
149
*(vip)CIA_IOC_CFG;
150
}
151
152
local_irq_restore(flags);
153
DBGC(("done\n"));
154
155
return value;
156
}
157
158
static void
159
conf_write(unsigned long addr, unsigned int value, unsigned char type1)
160
{
161
unsigned long flags;
162
int stat0, cia_cfg = 0;
163
164
DBGC(("conf_write(addr=0x%lx, type1=%d) ", addr, type1));
165
local_irq_save(flags);
166
167
/* Reset status register to avoid losing errors. */
168
stat0 = *(vip)CIA_IOC_CIA_ERR;
169
*(vip)CIA_IOC_CIA_ERR = stat0;
170
mb();
171
*(vip)CIA_IOC_CIA_ERR; /* re-read to force write */
172
173
/* If Type1 access, must set CIA CFG. */
174
if (type1) {
175
cia_cfg = *(vip)CIA_IOC_CFG;
176
*(vip)CIA_IOC_CFG = (cia_cfg & ~3) | 1;
177
mb();
178
*(vip)CIA_IOC_CFG;
179
}
180
181
mb();
182
draina();
183
mcheck_expected(0) = 1;
184
mcheck_taken(0) = 0;
185
mb();
186
187
/* Access configuration space. */
188
*(vip)addr = value;
189
mb();
190
*(vip)addr; /* read back to force the write */
191
192
mcheck_expected(0) = 0;
193
mb();
194
195
/* If Type1 access, must reset IOC CFG so normal IO space ops work. */
196
if (type1) {
197
*(vip)CIA_IOC_CFG = cia_cfg;
198
mb();
199
*(vip)CIA_IOC_CFG;
200
}
201
202
local_irq_restore(flags);
203
DBGC(("done\n"));
204
}
205
206
static int
207
cia_read_config(struct pci_bus *bus, unsigned int devfn, int where, int size,
208
u32 *value)
209
{
210
unsigned long addr, pci_addr;
211
long mask;
212
unsigned char type1;
213
int shift;
214
215
if (mk_conf_addr(bus, devfn, where, &pci_addr, &type1))
216
return PCIBIOS_DEVICE_NOT_FOUND;
217
218
mask = (size - 1) * 8;
219
shift = (where & 3) * 8;
220
addr = (pci_addr << 5) + mask + CIA_CONF;
221
*value = conf_read(addr, type1) >> (shift);
222
return PCIBIOS_SUCCESSFUL;
223
}
224
225
static int
226
cia_write_config(struct pci_bus *bus, unsigned int devfn, int where, int size,
227
u32 value)
228
{
229
unsigned long addr, pci_addr;
230
long mask;
231
unsigned char type1;
232
233
if (mk_conf_addr(bus, devfn, where, &pci_addr, &type1))
234
return PCIBIOS_DEVICE_NOT_FOUND;
235
236
mask = (size - 1) * 8;
237
addr = (pci_addr << 5) + mask + CIA_CONF;
238
conf_write(addr, value << ((where & 3) * 8), type1);
239
return PCIBIOS_SUCCESSFUL;
240
}
241
242
struct pci_ops cia_pci_ops =
243
{
244
.read = cia_read_config,
245
.write = cia_write_config,
246
};
247
248
/*
249
* CIA Pass 1 and PYXIS Pass 1 and 2 have a broken scatter-gather tlb.
250
* It cannot be invalidated. Rather than hard code the pass numbers,
251
* actually try the tbia to see if it works.
252
*/
253
254
void
255
cia_pci_tbi(struct pci_controller *hose, dma_addr_t start, dma_addr_t end)
256
{
257
wmb();
258
*(vip)CIA_IOC_PCI_TBIA = 3; /* Flush all locked and unlocked. */
259
mb();
260
*(vip)CIA_IOC_PCI_TBIA;
261
}
262
263
/*
264
* On PYXIS, even if the tbia works, we cannot use it. It effectively locks
265
* the chip (as well as direct write to the tag registers) if there is a
266
* SG DMA operation in progress. This is true at least for PYXIS rev. 1,
267
* so always use the method below.
268
*/
269
/*
270
* This is the method NT and NetBSD use.
271
*
272
* Allocate mappings, and put the chip into DMA loopback mode to read a
273
* garbage page. This works by causing TLB misses, causing old entries to
274
* be purged to make room for the new entries coming in for the garbage page.
275
*/
276
277
#define CIA_BROKEN_TBIA_BASE 0x30000000
278
#define CIA_BROKEN_TBIA_SIZE 1024
279
280
/* Always called with interrupts disabled */
281
void
282
cia_pci_tbi_try2(struct pci_controller *hose,
283
dma_addr_t start, dma_addr_t end)
284
{
285
void __iomem *bus_addr;
286
int ctrl;
287
288
/* Put the chip into PCI loopback mode. */
289
mb();
290
ctrl = *(vip)CIA_IOC_CIA_CTRL;
291
*(vip)CIA_IOC_CIA_CTRL = ctrl | CIA_CTRL_PCI_LOOP_EN;
292
mb();
293
*(vip)CIA_IOC_CIA_CTRL;
294
mb();
295
296
/* Read from PCI dense memory space at TBI_ADDR, skipping 32k on
297
each read. This forces SG TLB misses. NetBSD claims that the
298
TLB entries are not quite LRU, meaning that we need to read more
299
times than there are actual tags. The 2117x docs claim strict
300
round-robin. Oh well, we've come this far... */
301
/* Even better - as seen on the PYXIS rev 1 the TLB tags 0-3 can
302
be filled by the TLB misses *only once* after being invalidated
303
(by tbia or direct write). Next misses won't update them even
304
though the lock bits are cleared. Tags 4-7 are "quite LRU" though,
305
so use them and read at window 3 base exactly 4 times. Reading
306
more sometimes makes the chip crazy. -ink */
307
308
bus_addr = cia_ioremap(CIA_BROKEN_TBIA_BASE, 32768 * 4);
309
310
cia_readl(bus_addr + 0x00000);
311
cia_readl(bus_addr + 0x08000);
312
cia_readl(bus_addr + 0x10000);
313
cia_readl(bus_addr + 0x18000);
314
315
cia_iounmap(bus_addr);
316
317
/* Restore normal PCI operation. */
318
mb();
319
*(vip)CIA_IOC_CIA_CTRL = ctrl;
320
mb();
321
*(vip)CIA_IOC_CIA_CTRL;
322
mb();
323
}
324
325
static inline void
326
cia_prepare_tbia_workaround(int window)
327
{
328
unsigned long *ppte, pte;
329
long i;
330
331
/* Use minimal 1K map. */
332
ppte = __alloc_bootmem(CIA_BROKEN_TBIA_SIZE, 32768, 0);
333
pte = (virt_to_phys(ppte) >> (PAGE_SHIFT - 1)) | 1;
334
335
for (i = 0; i < CIA_BROKEN_TBIA_SIZE / sizeof(unsigned long); ++i)
336
ppte[i] = pte;
337
338
*(vip)CIA_IOC_PCI_Wn_BASE(window) = CIA_BROKEN_TBIA_BASE | 3;
339
*(vip)CIA_IOC_PCI_Wn_MASK(window)
340
= (CIA_BROKEN_TBIA_SIZE*1024 - 1) & 0xfff00000;
341
*(vip)CIA_IOC_PCI_Tn_BASE(window) = virt_to_phys(ppte) >> 2;
342
}
343
344
static void __init
345
verify_tb_operation(void)
346
{
347
static int page[PAGE_SIZE/4]
348
__attribute__((aligned(PAGE_SIZE)))
349
__initdata = { 0 };
350
351
struct pci_iommu_arena *arena = pci_isa_hose->sg_isa;
352
int ctrl, addr0, tag0, pte0, data0;
353
int temp, use_tbia_try2 = 0;
354
void __iomem *bus_addr;
355
356
/* pyxis -- tbia is broken */
357
if (pci_isa_hose->dense_io_base)
358
use_tbia_try2 = 1;
359
360
/* Put the chip into PCI loopback mode. */
361
mb();
362
ctrl = *(vip)CIA_IOC_CIA_CTRL;
363
*(vip)CIA_IOC_CIA_CTRL = ctrl | CIA_CTRL_PCI_LOOP_EN;
364
mb();
365
*(vip)CIA_IOC_CIA_CTRL;
366
mb();
367
368
/* Write a valid entry directly into the TLB registers. */
369
370
addr0 = arena->dma_base;
371
tag0 = addr0 | 1;
372
pte0 = (virt_to_phys(page) >> (PAGE_SHIFT - 1)) | 1;
373
374
*(vip)CIA_IOC_TB_TAGn(0) = tag0;
375
*(vip)CIA_IOC_TB_TAGn(1) = 0;
376
*(vip)CIA_IOC_TB_TAGn(2) = 0;
377
*(vip)CIA_IOC_TB_TAGn(3) = 0;
378
*(vip)CIA_IOC_TB_TAGn(4) = 0;
379
*(vip)CIA_IOC_TB_TAGn(5) = 0;
380
*(vip)CIA_IOC_TB_TAGn(6) = 0;
381
*(vip)CIA_IOC_TB_TAGn(7) = 0;
382
*(vip)CIA_IOC_TBn_PAGEm(0,0) = pte0;
383
*(vip)CIA_IOC_TBn_PAGEm(0,1) = 0;
384
*(vip)CIA_IOC_TBn_PAGEm(0,2) = 0;
385
*(vip)CIA_IOC_TBn_PAGEm(0,3) = 0;
386
mb();
387
388
/* Get a usable bus address */
389
bus_addr = cia_ioremap(addr0, 8*PAGE_SIZE);
390
391
/* First, verify we can read back what we've written. If
392
this fails, we can't be sure of any of the other testing
393
we're going to do, so bail. */
394
/* ??? Actually, we could do the work with machine checks.
395
By passing this register update test, we pretty much
396
guarantee that cia_pci_tbi_try1 works. If this test
397
fails, cia_pci_tbi_try2 might still work. */
398
399
temp = *(vip)CIA_IOC_TB_TAGn(0);
400
if (temp != tag0) {
401
printk("pci: failed tb register update test "
402
"(tag0 %#x != %#x)\n", temp, tag0);
403
goto failed;
404
}
405
temp = *(vip)CIA_IOC_TB_TAGn(1);
406
if (temp != 0) {
407
printk("pci: failed tb register update test "
408
"(tag1 %#x != 0)\n", temp);
409
goto failed;
410
}
411
temp = *(vip)CIA_IOC_TBn_PAGEm(0,0);
412
if (temp != pte0) {
413
printk("pci: failed tb register update test "
414
"(pte0 %#x != %#x)\n", temp, pte0);
415
goto failed;
416
}
417
printk("pci: passed tb register update test\n");
418
419
/* Second, verify we can actually do I/O through this entry. */
420
421
data0 = 0xdeadbeef;
422
page[0] = data0;
423
mcheck_expected(0) = 1;
424
mcheck_taken(0) = 0;
425
mb();
426
temp = cia_readl(bus_addr);
427
mb();
428
mcheck_expected(0) = 0;
429
mb();
430
if (mcheck_taken(0)) {
431
printk("pci: failed sg loopback i/o read test (mcheck)\n");
432
goto failed;
433
}
434
if (temp != data0) {
435
printk("pci: failed sg loopback i/o read test "
436
"(%#x != %#x)\n", temp, data0);
437
goto failed;
438
}
439
printk("pci: passed sg loopback i/o read test\n");
440
441
/* Third, try to invalidate the TLB. */
442
443
if (! use_tbia_try2) {
444
cia_pci_tbi(arena->hose, 0, -1);
445
temp = *(vip)CIA_IOC_TB_TAGn(0);
446
if (temp & 1) {
447
use_tbia_try2 = 1;
448
printk("pci: failed tbia test; workaround available\n");
449
} else {
450
printk("pci: passed tbia test\n");
451
}
452
}
453
454
/* Fourth, verify the TLB snoops the EV5's caches when
455
doing a tlb fill. */
456
457
data0 = 0x5adda15e;
458
page[0] = data0;
459
arena->ptes[4] = pte0;
460
mcheck_expected(0) = 1;
461
mcheck_taken(0) = 0;
462
mb();
463
temp = cia_readl(bus_addr + 4*PAGE_SIZE);
464
mb();
465
mcheck_expected(0) = 0;
466
mb();
467
if (mcheck_taken(0)) {
468
printk("pci: failed pte write cache snoop test (mcheck)\n");
469
goto failed;
470
}
471
if (temp != data0) {
472
printk("pci: failed pte write cache snoop test "
473
"(%#x != %#x)\n", temp, data0);
474
goto failed;
475
}
476
printk("pci: passed pte write cache snoop test\n");
477
478
/* Fifth, verify that a previously invalid PTE entry gets
479
filled from the page table. */
480
481
data0 = 0xabcdef12;
482
page[0] = data0;
483
arena->ptes[5] = pte0;
484
mcheck_expected(0) = 1;
485
mcheck_taken(0) = 0;
486
mb();
487
temp = cia_readl(bus_addr + 5*PAGE_SIZE);
488
mb();
489
mcheck_expected(0) = 0;
490
mb();
491
if (mcheck_taken(0)) {
492
printk("pci: failed valid tag invalid pte reload test "
493
"(mcheck; workaround available)\n");
494
/* Work around this bug by aligning new allocations
495
on 4 page boundaries. */
496
arena->align_entry = 4;
497
} else if (temp != data0) {
498
printk("pci: failed valid tag invalid pte reload test "
499
"(%#x != %#x)\n", temp, data0);
500
goto failed;
501
} else {
502
printk("pci: passed valid tag invalid pte reload test\n");
503
}
504
505
/* Sixth, verify machine checks are working. Test invalid
506
pte under the same valid tag as we used above. */
507
508
mcheck_expected(0) = 1;
509
mcheck_taken(0) = 0;
510
mb();
511
temp = cia_readl(bus_addr + 6*PAGE_SIZE);
512
mb();
513
mcheck_expected(0) = 0;
514
mb();
515
printk("pci: %s pci machine check test\n",
516
mcheck_taken(0) ? "passed" : "failed");
517
518
/* Clean up after the tests. */
519
arena->ptes[4] = 0;
520
arena->ptes[5] = 0;
521
522
if (use_tbia_try2) {
523
alpha_mv.mv_pci_tbi = cia_pci_tbi_try2;
524
525
/* Tags 0-3 must be disabled if we use this workaraund. */
526
wmb();
527
*(vip)CIA_IOC_TB_TAGn(0) = 2;
528
*(vip)CIA_IOC_TB_TAGn(1) = 2;
529
*(vip)CIA_IOC_TB_TAGn(2) = 2;
530
*(vip)CIA_IOC_TB_TAGn(3) = 2;
531
532
printk("pci: tbia workaround enabled\n");
533
}
534
alpha_mv.mv_pci_tbi(arena->hose, 0, -1);
535
536
exit:
537
/* unmap the bus addr */
538
cia_iounmap(bus_addr);
539
540
/* Restore normal PCI operation. */
541
mb();
542
*(vip)CIA_IOC_CIA_CTRL = ctrl;
543
mb();
544
*(vip)CIA_IOC_CIA_CTRL;
545
mb();
546
return;
547
548
failed:
549
printk("pci: disabling sg translation window\n");
550
*(vip)CIA_IOC_PCI_W0_BASE = 0;
551
*(vip)CIA_IOC_PCI_W1_BASE = 0;
552
pci_isa_hose->sg_isa = NULL;
553
alpha_mv.mv_pci_tbi = NULL;
554
goto exit;
555
}
556
557
#if defined(ALPHA_RESTORE_SRM_SETUP)
558
/* Save CIA configuration data as the console had it set up. */
559
struct
560
{
561
unsigned int hae_mem;
562
unsigned int hae_io;
563
unsigned int pci_dac_offset;
564
unsigned int err_mask;
565
unsigned int cia_ctrl;
566
unsigned int cia_cnfg;
567
struct {
568
unsigned int w_base;
569
unsigned int w_mask;
570
unsigned int t_base;
571
} window[4];
572
} saved_config __attribute((common));
573
574
void
575
cia_save_srm_settings(int is_pyxis)
576
{
577
int i;
578
579
/* Save some important registers. */
580
saved_config.err_mask = *(vip)CIA_IOC_ERR_MASK;
581
saved_config.cia_ctrl = *(vip)CIA_IOC_CIA_CTRL;
582
saved_config.hae_mem = *(vip)CIA_IOC_HAE_MEM;
583
saved_config.hae_io = *(vip)CIA_IOC_HAE_IO;
584
saved_config.pci_dac_offset = *(vip)CIA_IOC_PCI_W_DAC;
585
586
if (is_pyxis)
587
saved_config.cia_cnfg = *(vip)CIA_IOC_CIA_CNFG;
588
else
589
saved_config.cia_cnfg = 0;
590
591
/* Save DMA windows configuration. */
592
for (i = 0; i < 4; i++) {
593
saved_config.window[i].w_base = *(vip)CIA_IOC_PCI_Wn_BASE(i);
594
saved_config.window[i].w_mask = *(vip)CIA_IOC_PCI_Wn_MASK(i);
595
saved_config.window[i].t_base = *(vip)CIA_IOC_PCI_Tn_BASE(i);
596
}
597
mb();
598
}
599
600
void
601
cia_restore_srm_settings(void)
602
{
603
int i;
604
605
for (i = 0; i < 4; i++) {
606
*(vip)CIA_IOC_PCI_Wn_BASE(i) = saved_config.window[i].w_base;
607
*(vip)CIA_IOC_PCI_Wn_MASK(i) = saved_config.window[i].w_mask;
608
*(vip)CIA_IOC_PCI_Tn_BASE(i) = saved_config.window[i].t_base;
609
}
610
611
*(vip)CIA_IOC_HAE_MEM = saved_config.hae_mem;
612
*(vip)CIA_IOC_HAE_IO = saved_config.hae_io;
613
*(vip)CIA_IOC_PCI_W_DAC = saved_config.pci_dac_offset;
614
*(vip)CIA_IOC_ERR_MASK = saved_config.err_mask;
615
*(vip)CIA_IOC_CIA_CTRL = saved_config.cia_ctrl;
616
617
if (saved_config.cia_cnfg) /* Must be pyxis. */
618
*(vip)CIA_IOC_CIA_CNFG = saved_config.cia_cnfg;
619
620
mb();
621
}
622
#else /* ALPHA_RESTORE_SRM_SETUP */
623
#define cia_save_srm_settings(p) do {} while (0)
624
#define cia_restore_srm_settings() do {} while (0)
625
#endif /* ALPHA_RESTORE_SRM_SETUP */
626
627
628
static void __init
629
do_init_arch(int is_pyxis)
630
{
631
struct pci_controller *hose;
632
int temp, cia_rev, tbia_window;
633
634
cia_rev = *(vip)CIA_IOC_CIA_REV & CIA_REV_MASK;
635
printk("pci: cia revision %d%s\n",
636
cia_rev, is_pyxis ? " (pyxis)" : "");
637
638
if (alpha_using_srm)
639
cia_save_srm_settings(is_pyxis);
640
641
/* Set up error reporting. */
642
temp = *(vip)CIA_IOC_ERR_MASK;
643
temp &= ~(CIA_ERR_CPU_PE | CIA_ERR_MEM_NEM | CIA_ERR_PA_PTE_INV
644
| CIA_ERR_RCVD_MAS_ABT | CIA_ERR_RCVD_TAR_ABT);
645
*(vip)CIA_IOC_ERR_MASK = temp;
646
647
/* Clear all currently pending errors. */
648
temp = *(vip)CIA_IOC_CIA_ERR;
649
*(vip)CIA_IOC_CIA_ERR = temp;
650
651
/* Turn on mchecks. */
652
temp = *(vip)CIA_IOC_CIA_CTRL;
653
temp |= CIA_CTRL_FILL_ERR_EN | CIA_CTRL_MCHK_ERR_EN;
654
*(vip)CIA_IOC_CIA_CTRL = temp;
655
656
/* Clear the CFG register, which gets used for PCI config space
657
accesses. That is the way we want to use it, and we do not
658
want to depend on what ARC or SRM might have left behind. */
659
*(vip)CIA_IOC_CFG = 0;
660
661
/* Zero the HAEs. */
662
*(vip)CIA_IOC_HAE_MEM = 0;
663
*(vip)CIA_IOC_HAE_IO = 0;
664
665
/* For PYXIS, we always use BWX bus and i/o accesses. To that end,
666
make sure they're enabled on the controller. At the same time,
667
enable the monster window. */
668
if (is_pyxis) {
669
temp = *(vip)CIA_IOC_CIA_CNFG;
670
temp |= CIA_CNFG_IOA_BWEN | CIA_CNFG_PCI_MWEN;
671
*(vip)CIA_IOC_CIA_CNFG = temp;
672
}
673
674
/* Synchronize with all previous changes. */
675
mb();
676
*(vip)CIA_IOC_CIA_REV;
677
678
/*
679
* Create our single hose.
680
*/
681
682
pci_isa_hose = hose = alloc_pci_controller();
683
hose->io_space = &ioport_resource;
684
hose->mem_space = &iomem_resource;
685
hose->index = 0;
686
687
if (! is_pyxis) {
688
struct resource *hae_mem = alloc_resource();
689
hose->mem_space = hae_mem;
690
691
hae_mem->start = 0;
692
hae_mem->end = CIA_MEM_R1_MASK;
693
hae_mem->name = pci_hae0_name;
694
hae_mem->flags = IORESOURCE_MEM;
695
696
if (request_resource(&iomem_resource, hae_mem) < 0)
697
printk(KERN_ERR "Failed to request HAE_MEM\n");
698
699
hose->sparse_mem_base = CIA_SPARSE_MEM - IDENT_ADDR;
700
hose->dense_mem_base = CIA_DENSE_MEM - IDENT_ADDR;
701
hose->sparse_io_base = CIA_IO - IDENT_ADDR;
702
hose->dense_io_base = 0;
703
} else {
704
hose->sparse_mem_base = 0;
705
hose->dense_mem_base = CIA_BW_MEM - IDENT_ADDR;
706
hose->sparse_io_base = 0;
707
hose->dense_io_base = CIA_BW_IO - IDENT_ADDR;
708
}
709
710
/*
711
* Set up the PCI to main memory translation windows.
712
*
713
* Window 0 is S/G 8MB at 8MB (for isa)
714
* Window 1 is S/G 1MB at 768MB (for tbia) (unused for CIA rev 1)
715
* Window 2 is direct access 2GB at 2GB
716
* Window 3 is DAC access 4GB at 8GB (or S/G for tbia if CIA rev 1)
717
*
718
* ??? NetBSD hints that page tables must be aligned to 32K,
719
* possibly due to a hardware bug. This is over-aligned
720
* from the 8K alignment one would expect for an 8MB window.
721
* No description of what revisions affected.
722
*/
723
724
hose->sg_pci = NULL;
725
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 32768);
726
727
__direct_map_base = 0x80000000;
728
__direct_map_size = 0x80000000;
729
730
*(vip)CIA_IOC_PCI_W0_BASE = hose->sg_isa->dma_base | 3;
731
*(vip)CIA_IOC_PCI_W0_MASK = (hose->sg_isa->size - 1) & 0xfff00000;
732
*(vip)CIA_IOC_PCI_T0_BASE = virt_to_phys(hose->sg_isa->ptes) >> 2;
733
734
*(vip)CIA_IOC_PCI_W2_BASE = __direct_map_base | 1;
735
*(vip)CIA_IOC_PCI_W2_MASK = (__direct_map_size - 1) & 0xfff00000;
736
*(vip)CIA_IOC_PCI_T2_BASE = 0 >> 2;
737
738
/* On PYXIS we have the monster window, selected by bit 40, so
739
there is no need for window3 to be enabled.
740
741
On CIA, we don't have true arbitrary addressing -- bits <39:32>
742
are compared against W_DAC. We can, however, directly map 4GB,
743
which is better than before. However, due to assumptions made
744
elsewhere, we should not claim that we support DAC unless that
745
4GB covers all of physical memory.
746
747
On CIA rev 1, apparently W1 and W2 can't be used for SG.
748
At least, there are reports that it doesn't work for Alcor.
749
In that case, we have no choice but to use W3 for the TBIA
750
workaround, which means we can't use DAC at all. */
751
752
tbia_window = 1;
753
if (is_pyxis) {
754
*(vip)CIA_IOC_PCI_W3_BASE = 0;
755
} else if (cia_rev == 1) {
756
*(vip)CIA_IOC_PCI_W1_BASE = 0;
757
tbia_window = 3;
758
} else if (max_low_pfn > (0x100000000UL >> PAGE_SHIFT)) {
759
*(vip)CIA_IOC_PCI_W3_BASE = 0;
760
} else {
761
*(vip)CIA_IOC_PCI_W3_BASE = 0x00000000 | 1 | 8;
762
*(vip)CIA_IOC_PCI_W3_MASK = 0xfff00000;
763
*(vip)CIA_IOC_PCI_T3_BASE = 0 >> 2;
764
765
alpha_mv.pci_dac_offset = 0x200000000UL;
766
*(vip)CIA_IOC_PCI_W_DAC = alpha_mv.pci_dac_offset >> 32;
767
}
768
769
/* Prepare workaround for apparently broken tbia. */
770
cia_prepare_tbia_workaround(tbia_window);
771
}
772
773
void __init
774
cia_init_arch(void)
775
{
776
do_init_arch(0);
777
}
778
779
void __init
780
pyxis_init_arch(void)
781
{
782
/* On pyxis machines we can precisely calculate the
783
CPU clock frequency using pyxis real time counter.
784
It's especially useful for SX164 with broken RTC.
785
786
Both CPU and chipset are driven by the single 16.666M
787
or 16.667M crystal oscillator. PYXIS_RT_COUNT clock is
788
66.66 MHz. -ink */
789
790
unsigned int cc0, cc1;
791
unsigned long pyxis_cc;
792
793
__asm__ __volatile__ ("rpcc %0" : "=r"(cc0));
794
pyxis_cc = *(vulp)PYXIS_RT_COUNT;
795
do { } while(*(vulp)PYXIS_RT_COUNT - pyxis_cc < 4096);
796
__asm__ __volatile__ ("rpcc %0" : "=r"(cc1));
797
cc1 -= cc0;
798
hwrpb->cycle_freq = ((cc1 >> 11) * 100000000UL) / 3;
799
hwrpb_update_checksum(hwrpb);
800
801
do_init_arch(1);
802
}
803
804
void
805
cia_kill_arch(int mode)
806
{
807
if (alpha_using_srm)
808
cia_restore_srm_settings();
809
}
810
811
void __init
812
cia_init_pci(void)
813
{
814
/* Must delay this from init_arch, as we need machine checks. */
815
verify_tb_operation();
816
common_init_pci();
817
}
818
819
static inline void
820
cia_pci_clr_err(void)
821
{
822
int jd;
823
824
jd = *(vip)CIA_IOC_CIA_ERR;
825
*(vip)CIA_IOC_CIA_ERR = jd;
826
mb();
827
*(vip)CIA_IOC_CIA_ERR; /* re-read to force write. */
828
}
829
830
#ifdef CONFIG_VERBOSE_MCHECK
831
static void
832
cia_decode_pci_error(struct el_CIA_sysdata_mcheck *cia, const char *msg)
833
{
834
static const char * const pci_cmd_desc[16] = {
835
"Interrupt Acknowledge", "Special Cycle", "I/O Read",
836
"I/O Write", "Reserved 0x4", "Reserved 0x5", "Memory Read",
837
"Memory Write", "Reserved 0x8", "Reserved 0x9",
838
"Configuration Read", "Configuration Write",
839
"Memory Read Multiple", "Dual Address Cycle",
840
"Memory Read Line", "Memory Write and Invalidate"
841
};
842
843
if (cia->cia_err & (CIA_ERR_COR_ERR
844
| CIA_ERR_UN_COR_ERR
845
| CIA_ERR_MEM_NEM
846
| CIA_ERR_PA_PTE_INV)) {
847
static const char * const window_desc[6] = {
848
"No window active", "Window 0 hit", "Window 1 hit",
849
"Window 2 hit", "Window 3 hit", "Monster window hit"
850
};
851
852
const char *window;
853
const char *cmd;
854
unsigned long addr, tmp;
855
int lock, dac;
856
857
cmd = pci_cmd_desc[cia->pci_err0 & 0x7];
858
lock = (cia->pci_err0 >> 4) & 1;
859
dac = (cia->pci_err0 >> 5) & 1;
860
861
tmp = (cia->pci_err0 >> 8) & 0x1F;
862
tmp = ffs(tmp);
863
window = window_desc[tmp];
864
865
addr = cia->pci_err1;
866
if (dac) {
867
tmp = *(vip)CIA_IOC_PCI_W_DAC & 0xFFUL;
868
addr |= tmp << 32;
869
}
870
871
printk(KERN_CRIT "CIA machine check: %s\n", msg);
872
printk(KERN_CRIT " DMA command: %s\n", cmd);
873
printk(KERN_CRIT " PCI address: %#010lx\n", addr);
874
printk(KERN_CRIT " %s, Lock: %d, DAC: %d\n",
875
window, lock, dac);
876
} else if (cia->cia_err & (CIA_ERR_PERR
877
| CIA_ERR_PCI_ADDR_PE
878
| CIA_ERR_RCVD_MAS_ABT
879
| CIA_ERR_RCVD_TAR_ABT
880
| CIA_ERR_IOA_TIMEOUT)) {
881
static const char * const master_st_desc[16] = {
882
"Idle", "Drive bus", "Address step cycle",
883
"Address cycle", "Data cycle", "Last read data cycle",
884
"Last write data cycle", "Read stop cycle",
885
"Write stop cycle", "Read turnaround cycle",
886
"Write turnaround cycle", "Reserved 0xB",
887
"Reserved 0xC", "Reserved 0xD", "Reserved 0xE",
888
"Unknown state"
889
};
890
static const char * const target_st_desc[16] = {
891
"Idle", "Busy", "Read data cycle", "Write data cycle",
892
"Read stop cycle", "Write stop cycle",
893
"Read turnaround cycle", "Write turnaround cycle",
894
"Read wait cycle", "Write wait cycle",
895
"Reserved 0xA", "Reserved 0xB", "Reserved 0xC",
896
"Reserved 0xD", "Reserved 0xE", "Unknown state"
897
};
898
899
const char *cmd;
900
const char *master, *target;
901
unsigned long addr, tmp;
902
int dac;
903
904
master = master_st_desc[(cia->pci_err0 >> 16) & 0xF];
905
target = target_st_desc[(cia->pci_err0 >> 20) & 0xF];
906
cmd = pci_cmd_desc[(cia->pci_err0 >> 24) & 0xF];
907
dac = (cia->pci_err0 >> 28) & 1;
908
909
addr = cia->pci_err2;
910
if (dac) {
911
tmp = *(volatile int *)CIA_IOC_PCI_W_DAC & 0xFFUL;
912
addr |= tmp << 32;
913
}
914
915
printk(KERN_CRIT "CIA machine check: %s\n", msg);
916
printk(KERN_CRIT " PCI command: %s\n", cmd);
917
printk(KERN_CRIT " Master state: %s, Target state: %s\n",
918
master, target);
919
printk(KERN_CRIT " PCI address: %#010lx, DAC: %d\n",
920
addr, dac);
921
} else {
922
printk(KERN_CRIT "CIA machine check: %s\n", msg);
923
printk(KERN_CRIT " Unknown PCI error\n");
924
printk(KERN_CRIT " PCI_ERR0 = %#08lx", cia->pci_err0);
925
printk(KERN_CRIT " PCI_ERR1 = %#08lx", cia->pci_err1);
926
printk(KERN_CRIT " PCI_ERR2 = %#08lx", cia->pci_err2);
927
}
928
}
929
930
static void
931
cia_decode_mem_error(struct el_CIA_sysdata_mcheck *cia, const char *msg)
932
{
933
unsigned long mem_port_addr;
934
unsigned long mem_port_mask;
935
const char *mem_port_cmd;
936
const char *seq_state;
937
const char *set_select;
938
unsigned long tmp;
939
940
/* If this is a DMA command, also decode the PCI bits. */
941
if ((cia->mem_err1 >> 20) & 1)
942
cia_decode_pci_error(cia, msg);
943
else
944
printk(KERN_CRIT "CIA machine check: %s\n", msg);
945
946
mem_port_addr = cia->mem_err0 & 0xfffffff0;
947
mem_port_addr |= (cia->mem_err1 & 0x83UL) << 32;
948
949
mem_port_mask = (cia->mem_err1 >> 12) & 0xF;
950
951
tmp = (cia->mem_err1 >> 8) & 0xF;
952
tmp |= ((cia->mem_err1 >> 20) & 1) << 4;
953
if ((tmp & 0x1E) == 0x06)
954
mem_port_cmd = "WRITE BLOCK or WRITE BLOCK LOCK";
955
else if ((tmp & 0x1C) == 0x08)
956
mem_port_cmd = "READ MISS or READ MISS MODIFY";
957
else if (tmp == 0x1C)
958
mem_port_cmd = "BC VICTIM";
959
else if ((tmp & 0x1E) == 0x0E)
960
mem_port_cmd = "READ MISS MODIFY";
961
else if ((tmp & 0x1C) == 0x18)
962
mem_port_cmd = "DMA READ or DMA READ MODIFY";
963
else if ((tmp & 0x1E) == 0x12)
964
mem_port_cmd = "DMA WRITE";
965
else
966
mem_port_cmd = "Unknown";
967
968
tmp = (cia->mem_err1 >> 16) & 0xF;
969
switch (tmp) {
970
case 0x0:
971
seq_state = "Idle";
972
break;
973
case 0x1:
974
seq_state = "DMA READ or DMA WRITE";
975
break;
976
case 0x2: case 0x3:
977
seq_state = "READ MISS (or READ MISS MODIFY) with victim";
978
break;
979
case 0x4: case 0x5: case 0x6:
980
seq_state = "READ MISS (or READ MISS MODIFY) with no victim";
981
break;
982
case 0x8: case 0x9: case 0xB:
983
seq_state = "Refresh";
984
break;
985
case 0xC:
986
seq_state = "Idle, waiting for DMA pending read";
987
break;
988
case 0xE: case 0xF:
989
seq_state = "Idle, ras precharge";
990
break;
991
default:
992
seq_state = "Unknown";
993
break;
994
}
995
996
tmp = (cia->mem_err1 >> 24) & 0x1F;
997
switch (tmp) {
998
case 0x00: set_select = "Set 0 selected"; break;
999
case 0x01: set_select = "Set 1 selected"; break;
1000
case 0x02: set_select = "Set 2 selected"; break;
1001
case 0x03: set_select = "Set 3 selected"; break;
1002
case 0x04: set_select = "Set 4 selected"; break;
1003
case 0x05: set_select = "Set 5 selected"; break;
1004
case 0x06: set_select = "Set 6 selected"; break;
1005
case 0x07: set_select = "Set 7 selected"; break;
1006
case 0x08: set_select = "Set 8 selected"; break;
1007
case 0x09: set_select = "Set 9 selected"; break;
1008
case 0x0A: set_select = "Set A selected"; break;
1009
case 0x0B: set_select = "Set B selected"; break;
1010
case 0x0C: set_select = "Set C selected"; break;
1011
case 0x0D: set_select = "Set D selected"; break;
1012
case 0x0E: set_select = "Set E selected"; break;
1013
case 0x0F: set_select = "Set F selected"; break;
1014
case 0x10: set_select = "No set selected"; break;
1015
case 0x1F: set_select = "Refresh cycle"; break;
1016
default: set_select = "Unknown"; break;
1017
}
1018
1019
printk(KERN_CRIT " Memory port command: %s\n", mem_port_cmd);
1020
printk(KERN_CRIT " Memory port address: %#010lx, mask: %#lx\n",
1021
mem_port_addr, mem_port_mask);
1022
printk(KERN_CRIT " Memory sequencer state: %s\n", seq_state);
1023
printk(KERN_CRIT " Memory set: %s\n", set_select);
1024
}
1025
1026
static void
1027
cia_decode_ecc_error(struct el_CIA_sysdata_mcheck *cia, const char *msg)
1028
{
1029
long syn;
1030
long i;
1031
const char *fmt;
1032
1033
cia_decode_mem_error(cia, msg);
1034
1035
syn = cia->cia_syn & 0xff;
1036
if (syn == (syn & -syn)) {
1037
fmt = KERN_CRIT " ECC syndrome %#x -- check bit %d\n";
1038
i = ffs(syn) - 1;
1039
} else {
1040
static unsigned char const data_bit[64] = {
1041
0xCE, 0xCB, 0xD3, 0xD5,
1042
0xD6, 0xD9, 0xDA, 0xDC,
1043
0x23, 0x25, 0x26, 0x29,
1044
0x2A, 0x2C, 0x31, 0x34,
1045
0x0E, 0x0B, 0x13, 0x15,
1046
0x16, 0x19, 0x1A, 0x1C,
1047
0xE3, 0xE5, 0xE6, 0xE9,
1048
0xEA, 0xEC, 0xF1, 0xF4,
1049
0x4F, 0x4A, 0x52, 0x54,
1050
0x57, 0x58, 0x5B, 0x5D,
1051
0xA2, 0xA4, 0xA7, 0xA8,
1052
0xAB, 0xAD, 0xB0, 0xB5,
1053
0x8F, 0x8A, 0x92, 0x94,
1054
0x97, 0x98, 0x9B, 0x9D,
1055
0x62, 0x64, 0x67, 0x68,
1056
0x6B, 0x6D, 0x70, 0x75
1057
};
1058
1059
for (i = 0; i < 64; ++i)
1060
if (data_bit[i] == syn)
1061
break;
1062
1063
if (i < 64)
1064
fmt = KERN_CRIT " ECC syndrome %#x -- data bit %d\n";
1065
else
1066
fmt = KERN_CRIT " ECC syndrome %#x -- unknown bit\n";
1067
}
1068
1069
printk (fmt, syn, i);
1070
}
1071
1072
static void
1073
cia_decode_parity_error(struct el_CIA_sysdata_mcheck *cia)
1074
{
1075
static const char * const cmd_desc[16] = {
1076
"NOP", "LOCK", "FETCH", "FETCH_M", "MEMORY BARRIER",
1077
"SET DIRTY", "WRITE BLOCK", "WRITE BLOCK LOCK",
1078
"READ MISS0", "READ MISS1", "READ MISS MOD0",
1079
"READ MISS MOD1", "BCACHE VICTIM", "Spare",
1080
"READ MISS MOD STC0", "READ MISS MOD STC1"
1081
};
1082
1083
unsigned long addr;
1084
unsigned long mask;
1085
const char *cmd;
1086
int par;
1087
1088
addr = cia->cpu_err0 & 0xfffffff0;
1089
addr |= (cia->cpu_err1 & 0x83UL) << 32;
1090
cmd = cmd_desc[(cia->cpu_err1 >> 8) & 0xF];
1091
mask = (cia->cpu_err1 >> 12) & 0xF;
1092
par = (cia->cpu_err1 >> 21) & 1;
1093
1094
printk(KERN_CRIT "CIA machine check: System bus parity error\n");
1095
printk(KERN_CRIT " Command: %s, Parity bit: %d\n", cmd, par);
1096
printk(KERN_CRIT " Address: %#010lx, Mask: %#lx\n", addr, mask);
1097
}
1098
#endif /* CONFIG_VERBOSE_MCHECK */
1099
1100
1101
static int
1102
cia_decode_mchk(unsigned long la_ptr)
1103
{
1104
struct el_common *com;
1105
struct el_CIA_sysdata_mcheck *cia;
1106
1107
com = (void *)la_ptr;
1108
cia = (void *)(la_ptr + com->sys_offset);
1109
1110
if ((cia->cia_err & CIA_ERR_VALID) == 0)
1111
return 0;
1112
1113
#ifdef CONFIG_VERBOSE_MCHECK
1114
if (!alpha_verbose_mcheck)
1115
return 1;
1116
1117
switch (ffs(cia->cia_err & 0xfff) - 1) {
1118
case 0: /* CIA_ERR_COR_ERR */
1119
cia_decode_ecc_error(cia, "Corrected ECC error");
1120
break;
1121
case 1: /* CIA_ERR_UN_COR_ERR */
1122
cia_decode_ecc_error(cia, "Uncorrected ECC error");
1123
break;
1124
case 2: /* CIA_ERR_CPU_PE */
1125
cia_decode_parity_error(cia);
1126
break;
1127
case 3: /* CIA_ERR_MEM_NEM */
1128
cia_decode_mem_error(cia, "Access to nonexistent memory");
1129
break;
1130
case 4: /* CIA_ERR_PCI_SERR */
1131
cia_decode_pci_error(cia, "PCI bus system error");
1132
break;
1133
case 5: /* CIA_ERR_PERR */
1134
cia_decode_pci_error(cia, "PCI data parity error");
1135
break;
1136
case 6: /* CIA_ERR_PCI_ADDR_PE */
1137
cia_decode_pci_error(cia, "PCI address parity error");
1138
break;
1139
case 7: /* CIA_ERR_RCVD_MAS_ABT */
1140
cia_decode_pci_error(cia, "PCI master abort");
1141
break;
1142
case 8: /* CIA_ERR_RCVD_TAR_ABT */
1143
cia_decode_pci_error(cia, "PCI target abort");
1144
break;
1145
case 9: /* CIA_ERR_PA_PTE_INV */
1146
cia_decode_pci_error(cia, "PCI invalid PTE");
1147
break;
1148
case 10: /* CIA_ERR_FROM_WRT_ERR */
1149
cia_decode_mem_error(cia, "Write to flash ROM attempted");
1150
break;
1151
case 11: /* CIA_ERR_IOA_TIMEOUT */
1152
cia_decode_pci_error(cia, "I/O timeout");
1153
break;
1154
}
1155
1156
if (cia->cia_err & CIA_ERR_LOST_CORR_ERR)
1157
printk(KERN_CRIT "CIA lost machine check: "
1158
"Correctable ECC error\n");
1159
if (cia->cia_err & CIA_ERR_LOST_UN_CORR_ERR)
1160
printk(KERN_CRIT "CIA lost machine check: "
1161
"Uncorrectable ECC error\n");
1162
if (cia->cia_err & CIA_ERR_LOST_CPU_PE)
1163
printk(KERN_CRIT "CIA lost machine check: "
1164
"System bus parity error\n");
1165
if (cia->cia_err & CIA_ERR_LOST_MEM_NEM)
1166
printk(KERN_CRIT "CIA lost machine check: "
1167
"Access to nonexistent memory\n");
1168
if (cia->cia_err & CIA_ERR_LOST_PERR)
1169
printk(KERN_CRIT "CIA lost machine check: "
1170
"PCI data parity error\n");
1171
if (cia->cia_err & CIA_ERR_LOST_PCI_ADDR_PE)
1172
printk(KERN_CRIT "CIA lost machine check: "
1173
"PCI address parity error\n");
1174
if (cia->cia_err & CIA_ERR_LOST_RCVD_MAS_ABT)
1175
printk(KERN_CRIT "CIA lost machine check: "
1176
"PCI master abort\n");
1177
if (cia->cia_err & CIA_ERR_LOST_RCVD_TAR_ABT)
1178
printk(KERN_CRIT "CIA lost machine check: "
1179
"PCI target abort\n");
1180
if (cia->cia_err & CIA_ERR_LOST_PA_PTE_INV)
1181
printk(KERN_CRIT "CIA lost machine check: "
1182
"PCI invalid PTE\n");
1183
if (cia->cia_err & CIA_ERR_LOST_FROM_WRT_ERR)
1184
printk(KERN_CRIT "CIA lost machine check: "
1185
"Write to flash ROM attempted\n");
1186
if (cia->cia_err & CIA_ERR_LOST_IOA_TIMEOUT)
1187
printk(KERN_CRIT "CIA lost machine check: "
1188
"I/O timeout\n");
1189
#endif /* CONFIG_VERBOSE_MCHECK */
1190
1191
return 1;
1192
}
1193
1194
void
1195
cia_machine_check(unsigned long vector, unsigned long la_ptr)
1196
{
1197
int expected;
1198
1199
/* Clear the error before any reporting. */
1200
mb();
1201
mb(); /* magic */
1202
draina();
1203
cia_pci_clr_err();
1204
wrmces(rdmces()); /* reset machine check pending flag. */
1205
mb();
1206
1207
expected = mcheck_expected(0);
1208
if (!expected && vector == 0x660)
1209
expected = cia_decode_mchk(la_ptr);
1210
process_mcheck_info(vector, la_ptr, "CIA", expected);
1211
}
1212
1213