32 #include <linux/pci.h>
42 #define MD(x) (1 << (x))
43 #define MODE_COMMON (1 << 31)
44 #define MODE_0_7 (0xFF)
46 static const struct lseq_cio_regs {
52 {
"LmMnSCBPTR", 0x20, 16,
MD(0)|
MD(1)|
MD(2)|
MD(3)|
MD(4) },
53 {
"LmMnDDBPTR", 0x22, 16,
MD(0)|
MD(1)|
MD(2)|
MD(3)|
MD(4) },
54 {
"LmREQMBX", 0x30, 32, MODE_COMMON },
55 {
"LmRSPMBX", 0x34, 32, MODE_COMMON },
56 {
"LmMnINT", 0x38, 32, MODE_0_7 },
57 {
"LmMnINTEN", 0x3C, 32, MODE_0_7 },
58 {
"LmXMTPRIMD", 0x40, 32, MODE_COMMON },
59 {
"LmXMTPRIMCS", 0x44, 8, MODE_COMMON },
60 {
"LmCONSTAT", 0x45, 8, MODE_COMMON },
61 {
"LmMnDMAERRS", 0x46, 8,
MD(0)|
MD(1) },
62 {
"LmMnSGDMAERRS", 0x47, 8,
MD(0)|
MD(1) },
63 {
"LmMnEXPHDRP", 0x48, 8,
MD(0) },
64 {
"LmMnSASAALIGN", 0x48, 8,
MD(1) },
65 {
"LmMnMSKHDRP", 0x49, 8,
MD(0) },
66 {
"LmMnSTPALIGN", 0x49, 8,
MD(1) },
67 {
"LmMnRCVHDRP", 0x4A, 8,
MD(0) },
68 {
"LmMnXMTHDRP", 0x4A, 8,
MD(1) },
69 {
"LmALIGNMODE", 0x4B, 8,
MD(1) },
70 {
"LmMnEXPRCVCNT", 0x4C, 32,
MD(0) },
71 {
"LmMnXMTCNT", 0x4C, 32,
MD(1) },
72 {
"LmMnCURRTAG", 0x54, 16,
MD(0) },
73 {
"LmMnPREVTAG", 0x56, 16,
MD(0) },
74 {
"LmMnACKOFS", 0x58, 8,
MD(1) },
75 {
"LmMnXFRLVL", 0x59, 8,
MD(0)|
MD(1) },
76 {
"LmMnSGDMACTL", 0x5A, 8,
MD(0)|
MD(1) },
77 {
"LmMnSGDMASTAT", 0x5B, 8,
MD(0)|
MD(1) },
78 {
"LmMnDDMACTL", 0x5C, 8,
MD(0)|
MD(1) },
79 {
"LmMnDDMASTAT", 0x5D, 8,
MD(0)|
MD(1) },
80 {
"LmMnDDMAMODE", 0x5E, 16,
MD(0)|
MD(1) },
81 {
"LmMnPIPECTL", 0x61, 8,
MD(0)|
MD(1) },
82 {
"LmMnACTSCB", 0x62, 16,
MD(0)|
MD(1) },
83 {
"LmMnSGBHADR", 0x64, 8,
MD(0)|
MD(1) },
84 {
"LmMnSGBADR", 0x65, 8,
MD(0)|
MD(1) },
85 {
"LmMnSGDCNT", 0x66, 8,
MD(0)|
MD(1) },
86 {
"LmMnSGDMADR", 0x68, 32,
MD(0)|
MD(1) },
87 {
"LmMnSGDMADR", 0x6C, 32,
MD(0)|
MD(1) },
88 {
"LmMnXFRCNT", 0x70, 32,
MD(0)|
MD(1) },
89 {
"LmMnXMTCRC", 0x74, 32,
MD(1) },
90 {
"LmCURRTAG", 0x74, 16,
MD(0) },
91 {
"LmPREVTAG", 0x76, 16,
MD(0) },
92 {
"LmMnDPSEL", 0x7B, 8,
MD(0)|
MD(1) },
93 {
"LmDPTHSTAT", 0x7C, 8, MODE_COMMON },
94 {
"LmMnHOLDLVL", 0x7D, 8,
MD(0) },
95 {
"LmMnSATAFS", 0x7E, 8,
MD(1) },
96 {
"LmMnCMPLTSTAT", 0x7F, 8,
MD(0)|
MD(1) },
97 {
"LmPRMSTAT0", 0x80, 32, MODE_COMMON },
98 {
"LmPRMSTAT1", 0x84, 32, MODE_COMMON },
99 {
"LmGPRMINT", 0x88, 8, MODE_COMMON },
100 {
"LmMnCURRSCB", 0x8A, 16,
MD(0) },
101 {
"LmPRMICODE", 0x8C, 32, MODE_COMMON },
102 {
"LmMnRCVCNT", 0x90, 16,
MD(0) },
103 {
"LmMnBUFSTAT", 0x92, 16,
MD(0) },
104 {
"LmMnXMTHDRSIZE",0x92, 8,
MD(1) },
105 {
"LmMnXMTSIZE", 0x93, 8,
MD(1) },
106 {
"LmMnTGTXFRCNT", 0x94, 32,
MD(0) },
107 {
"LmMnEXPROFS", 0x98, 32,
MD(0) },
108 {
"LmMnXMTROFS", 0x98, 32,
MD(1) },
109 {
"LmMnRCVROFS", 0x9C, 32,
MD(0) },
110 {
"LmCONCTL", 0xA0, 16, MODE_COMMON },
111 {
"LmBITLTIMER", 0xA2, 16, MODE_COMMON },
112 {
"LmWWNLOW", 0xA8, 32, MODE_COMMON },
113 {
"LmWWNHIGH", 0xAC, 32, MODE_COMMON },
114 {
"LmMnFRMERR", 0xB0, 32,
MD(0) },
115 {
"LmMnFRMERREN", 0xB4, 32,
MD(0) },
116 {
"LmAWTIMER", 0xB8, 16, MODE_COMMON },
117 {
"LmAWTCTL", 0xBA, 8, MODE_COMMON },
118 {
"LmMnHDRCMPS", 0xC0, 32,
MD(0) },
119 {
"LmMnXMTSTAT", 0xC4, 8,
MD(1) },
120 {
"LmHWTSTATEN", 0xC5, 8, MODE_COMMON },
121 {
"LmMnRRDYRC", 0xC6, 8,
MD(0) },
122 {
"LmMnRRDYTC", 0xC6, 8,
MD(1) },
123 {
"LmHWTSTAT", 0xC7, 8, MODE_COMMON },
124 {
"LmMnDATABUFADR",0xC8, 16,
MD(0)|
MD(1) },
125 {
"LmDWSSTATUS", 0xCB, 8, MODE_COMMON },
126 {
"LmMnACTSTAT", 0xCE, 16,
MD(0)|
MD(1) },
127 {
"LmMnREQSCB", 0xD2, 16,
MD(0)|
MD(1) },
128 {
"LmXXXPRIM", 0xD4, 32, MODE_COMMON },
129 {
"LmRCVASTAT", 0xD9, 8, MODE_COMMON },
130 {
"LmINTDIS1", 0xDA, 8, MODE_COMMON },
131 {
"LmPSTORESEL", 0xDB, 8, MODE_COMMON },
132 {
"LmPSTORE", 0xDC, 32, MODE_COMMON },
133 {
"LmPRIMSTAT0EN", 0xE0, 32, MODE_COMMON },
134 {
"LmPRIMSTAT1EN", 0xE4, 32, MODE_COMMON },
135 {
"LmDONETCTL", 0xF2, 16, MODE_COMMON },
215 #define STR_8BIT " %30s[0x%04x]:0x%02x\n"
216 #define STR_16BIT " %30s[0x%04x]:0x%04x\n"
217 #define STR_32BIT " %30s[0x%04x]:0x%08x\n"
218 #define STR_64BIT " %30s[0x%04x]:0x%llx\n"
220 #define PRINT_REG_8bit(_ha, _n, _r) asd_printk(STR_8BIT, #_n, _n, \
221 asd_read_reg_byte(_ha, _r))
222 #define PRINT_REG_16bit(_ha, _n, _r) asd_printk(STR_16BIT, #_n, _n, \
223 asd_read_reg_word(_ha, _r))
224 #define PRINT_REG_32bit(_ha, _n, _r) asd_printk(STR_32BIT, #_n, _n, \
225 asd_read_reg_dword(_ha, _r))
227 #define PRINT_CREG_8bit(_ha, _n) asd_printk(STR_8BIT, #_n, _n, \
228 asd_read_reg_byte(_ha, C##_n))
229 #define PRINT_CREG_16bit(_ha, _n) asd_printk(STR_16BIT, #_n, _n, \
230 asd_read_reg_word(_ha, C##_n))
231 #define PRINT_CREG_32bit(_ha, _n) asd_printk(STR_32BIT, #_n, _n, \
232 asd_read_reg_dword(_ha, C##_n))
234 #define MSTR_8BIT " Mode:%02d %30s[0x%04x]:0x%02x\n"
235 #define MSTR_16BIT " Mode:%02d %30s[0x%04x]:0x%04x\n"
236 #define MSTR_32BIT " Mode:%02d %30s[0x%04x]:0x%08x\n"
238 #define PRINT_MREG_8bit(_ha, _m, _n, _r) asd_printk(MSTR_8BIT, _m, #_n, _n, \
239 asd_read_reg_byte(_ha, _r))
240 #define PRINT_MREG_16bit(_ha, _m, _n, _r) asd_printk(MSTR_16BIT, _m, #_n, _n, \
241 asd_read_reg_word(_ha, _r))
242 #define PRINT_MREG_32bit(_ha, _m, _n, _r) asd_printk(MSTR_32BIT, _m, #_n, _n, \
243 asd_read_reg_dword(_ha, _r))
246 #define PRINT_MIS_byte(_ha, _n) asd_printk(STR_8BIT, #_n,CSEQ_##_n-CMAPPEDSCR,\
247 asd_read_reg_byte(_ha, CSEQ_##_n))
248 #define PRINT_MIS_word(_ha, _n) asd_printk(STR_16BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
249 asd_read_reg_word(_ha, CSEQ_##_n))
250 #define PRINT_MIS_dword(_ha, _n) \
251 asd_printk(STR_32BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
252 asd_read_reg_dword(_ha, CSEQ_##_n))
253 #define PRINT_MIS_qword(_ha, _n) \
254 asd_printk(STR_64BIT, #_n,CSEQ_##_n-CMAPPEDSCR, \
255 (unsigned long long)(((u64)asd_read_reg_dword(_ha, CSEQ_##_n)) \
256 | (((u64)asd_read_reg_dword(_ha, (CSEQ_##_n)+4))<<32)))
258 #define CMDP_REG(_n, _m) (_m*(CSEQ_PAGE_SIZE*2)+CSEQ_##_n)
259 #define PRINT_CMDP_word(_ha, _n) \
260 asd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
262 asd_read_reg_word(_ha, CMDP_REG(_n, 0)), \
263 asd_read_reg_word(_ha, CMDP_REG(_n, 1)), \
264 asd_read_reg_word(_ha, CMDP_REG(_n, 2)), \
265 asd_read_reg_word(_ha, CMDP_REG(_n, 3)), \
266 asd_read_reg_word(_ha, CMDP_REG(_n, 4)), \
267 asd_read_reg_word(_ha, CMDP_REG(_n, 5)), \
268 asd_read_reg_word(_ha, CMDP_REG(_n, 6)), \
269 asd_read_reg_word(_ha, CMDP_REG(_n, 7)))
271 #define PRINT_CMDP_byte(_ha, _n) \
272 asd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
274 asd_read_reg_byte(_ha, CMDP_REG(_n, 0)), \
275 asd_read_reg_byte(_ha, CMDP_REG(_n, 1)), \
276 asd_read_reg_byte(_ha, CMDP_REG(_n, 2)), \
277 asd_read_reg_byte(_ha, CMDP_REG(_n, 3)), \
278 asd_read_reg_byte(_ha, CMDP_REG(_n, 4)), \
279 asd_read_reg_byte(_ha, CMDP_REG(_n, 5)), \
280 asd_read_reg_byte(_ha, CMDP_REG(_n, 6)), \
281 asd_read_reg_byte(_ha, CMDP_REG(_n, 7)))
283 static void asd_dump_cseq_state(
struct asd_ha_struct *asd_ha)
291 PRINT_CREG_32bit(asd_ha,
ARP2CTL);
292 PRINT_CREG_32bit(asd_ha,
ARP2INT);
294 PRINT_CREG_8bit(asd_ha,
MODEPTR);
295 PRINT_CREG_8bit(asd_ha,
ALTMODE);
296 PRINT_CREG_8bit(asd_ha,
FLAG);
298 PRINT_CREG_16bit(asd_ha,
STACK);
299 PRINT_CREG_16bit(asd_ha,
PRGMCNT);
300 PRINT_CREG_16bit(asd_ha,
ACCUM);
301 PRINT_CREG_16bit(asd_ha,
SINDEX);
302 PRINT_CREG_16bit(asd_ha,
DINDEX);
303 PRINT_CREG_8bit(asd_ha,
SINDIR);
304 PRINT_CREG_8bit(asd_ha,
DINDIR);
305 PRINT_CREG_8bit(asd_ha,
JUMLDIR);
318 for (mode = 0; mode < 9; mode++)
322 for (mode = 0; mode < 9; mode++)
326 for (mode = 0; mode < 8; mode++)
328 for (mode = 0; mode < 8; mode++)
330 for (mode = 0; mode < 8; mode++)
331 PRINT_MREG_32bit(asd_ha, mode,
MnINT,
CMnINT(mode));
332 for (mode = 0; mode < 8; mode++)
336 for (mode = 0; mode < 8; mode++)
350 PRINT_MIS_word(asd_ha, Q_EXE_HEAD);
351 PRINT_MIS_word(asd_ha, Q_EXE_TAIL);
352 PRINT_MIS_word(asd_ha, Q_DONE_HEAD);
353 PRINT_MIS_word(asd_ha, Q_DONE_TAIL);
354 PRINT_MIS_word(asd_ha, Q_SEND_HEAD);
355 PRINT_MIS_word(asd_ha, Q_SEND_TAIL);
356 PRINT_MIS_word(asd_ha, Q_DMA2CHIM_HEAD);
357 PRINT_MIS_word(asd_ha, Q_DMA2CHIM_TAIL);
358 PRINT_MIS_word(asd_ha, Q_COPY_HEAD);
359 PRINT_MIS_word(asd_ha, Q_COPY_TAIL);
360 PRINT_MIS_word(asd_ha,
REG0);
361 PRINT_MIS_word(asd_ha,
REG1);
362 PRINT_MIS_dword(asd_ha,
REG2);
363 PRINT_MIS_byte(asd_ha, LINK_CTL_Q_MAP);
364 PRINT_MIS_byte(asd_ha, MAX_CSEQ_MODE);
365 PRINT_MIS_byte(asd_ha, FREE_LIST_HACK_COUNT);
368 PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_QUEUE);
369 PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_COUNT);
370 PRINT_MIS_word(asd_ha, Q_EST_NEXUS_HEAD);
371 PRINT_MIS_word(asd_ha, Q_EST_NEXUS_TAIL);
372 PRINT_MIS_word(asd_ha, NEED_EST_NEXUS_SCB);
373 PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_HEAD);
374 PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_TAIL);
375 PRINT_MIS_byte(asd_ha, EST_NEXUS_SCB_OFFSET);
378 PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR0);
379 PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR1);
380 PRINT_MIS_word(asd_ha, INT_ROUT_SCBPTR);
381 PRINT_MIS_byte(asd_ha, INT_ROUT_MODE);
382 PRINT_MIS_byte(asd_ha, ISR_SCRATCH_FLAGS);
383 PRINT_MIS_word(asd_ha, ISR_SAVE_SINDEX);
384 PRINT_MIS_word(asd_ha, ISR_SAVE_DINDEX);
385 PRINT_MIS_word(asd_ha, Q_MONIRTT_HEAD);
386 PRINT_MIS_word(asd_ha, Q_MONIRTT_TAIL);
387 PRINT_MIS_byte(asd_ha, FREE_SCB_MASK);
388 PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_HEAD);
389 PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_TAIL);
390 PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_HEAD);
391 PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_TAIL);
394 PRINT_MIS_qword(asd_ha, EMPTY_REQ_QUEUE);
395 PRINT_MIS_qword(asd_ha, EMPTY_REQ_COUNT);
396 PRINT_MIS_word(asd_ha, Q_EMPTY_HEAD);
397 PRINT_MIS_word(asd_ha, Q_EMPTY_TAIL);
398 PRINT_MIS_word(asd_ha, NEED_EMPTY_SCB);
399 PRINT_MIS_byte(asd_ha, EMPTY_REQ_HEAD);
400 PRINT_MIS_byte(asd_ha, EMPTY_REQ_TAIL);
401 PRINT_MIS_byte(asd_ha, EMPTY_SCB_OFFSET);
402 PRINT_MIS_word(asd_ha, PRIMITIVE_DATA);
403 PRINT_MIS_dword(asd_ha, TIMEOUT_CONST);
406 asd_printk(
"%-20s %6s %6s %6s %6s %6s %6s %6s %6s\n",
407 "Mode: ",
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7");
408 PRINT_CMDP_word(asd_ha, LRM_SAVE_SINDEX);
409 PRINT_CMDP_word(asd_ha, LRM_SAVE_SCBPTR);
410 PRINT_CMDP_word(asd_ha, Q_LINK_HEAD);
411 PRINT_CMDP_word(asd_ha, Q_LINK_TAIL);
412 PRINT_CMDP_byte(asd_ha, LRM_SAVE_SCRPAGE);
415 PRINT_MIS_word(asd_ha, RET_ADDR);
416 PRINT_MIS_word(asd_ha, RET_SCBPTR);
417 PRINT_MIS_word(asd_ha, SAVE_SCBPTR);
418 PRINT_MIS_word(asd_ha, EMPTY_TRANS_CTX);
419 PRINT_MIS_word(asd_ha, RESP_LEN);
420 PRINT_MIS_word(asd_ha, TMF_SCBPTR);
421 PRINT_MIS_word(asd_ha, GLOBAL_PREV_SCB);
422 PRINT_MIS_word(asd_ha, GLOBAL_HEAD);
423 PRINT_MIS_word(asd_ha, CLEAR_LU_HEAD);
424 PRINT_MIS_byte(asd_ha, TMF_OPCODE);
425 PRINT_MIS_byte(asd_ha, SCRATCH_FLAGS);
426 PRINT_MIS_word(asd_ha, HSB_SITE);
427 PRINT_MIS_word(asd_ha, FIRST_INV_SCB_SITE);
428 PRINT_MIS_word(asd_ha, FIRST_INV_DDB_SITE);
431 PRINT_MIS_qword(asd_ha, LUN_TO_CLEAR);
432 PRINT_MIS_qword(asd_ha, LUN_TO_CHECK);
435 PRINT_MIS_qword(asd_ha, HQ_NEW_POINTER);
436 PRINT_MIS_qword(asd_ha, HQ_DONE_BASE);
437 PRINT_MIS_dword(asd_ha, HQ_DONE_POINTER);
438 PRINT_MIS_byte(asd_ha, HQ_DONE_PASS);
441 #define PRINT_LREG_8bit(_h, _lseq, _n) \
442 asd_printk(STR_8BIT, #_n, _n, asd_read_reg_byte(_h, Lm##_n(_lseq)))
443 #define PRINT_LREG_16bit(_h, _lseq, _n) \
444 asd_printk(STR_16BIT, #_n, _n, asd_read_reg_word(_h, Lm##_n(_lseq)))
445 #define PRINT_LREG_32bit(_h, _lseq, _n) \
446 asd_printk(STR_32BIT, #_n, _n, asd_read_reg_dword(_h, Lm##_n(_lseq)))
448 #define PRINT_LMIP_byte(_h, _lseq, _n) \
449 asd_printk(STR_8BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
450 asd_read_reg_byte(_h, LmSEQ_##_n(_lseq)))
451 #define PRINT_LMIP_word(_h, _lseq, _n) \
452 asd_printk(STR_16BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
453 asd_read_reg_word(_h, LmSEQ_##_n(_lseq)))
454 #define PRINT_LMIP_dword(_h, _lseq, _n) \
455 asd_printk(STR_32BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
456 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)))
457 #define PRINT_LMIP_qword(_h, _lseq, _n) \
458 asd_printk(STR_64BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
459 (unsigned long long)(((unsigned long long) \
460 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq))) \
461 | (((unsigned long long) \
462 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)+4))<<32)))
464 static void asd_print_lseq_cio_reg(
struct asd_ha_struct *asd_ha,
465 u32 lseq_cio_addr,
int i)
467 switch (LSEQmCIOREGS[i].
width) {
470 LSEQmCIOREGS[i].
offs,
472 LSEQmCIOREGS[i].offs));
476 asd_printk(
"%20s[0x%x]: 0x%04x\n", LSEQmCIOREGS[i].name,
477 LSEQmCIOREGS[i].offs,
479 LSEQmCIOREGS[i].offs));
483 asd_printk(
"%20s[0x%x]: 0x%08x\n", LSEQmCIOREGS[i].name,
484 LSEQmCIOREGS[i].offs,
486 LSEQmCIOREGS[i].offs));
491 static void asd_dump_lseq_state(
struct asd_ha_struct *asd_ha,
int lseq)
499 PRINT_LREG_32bit(asd_ha, lseq,
ARP2CTL);
500 PRINT_LREG_32bit(asd_ha, lseq,
ARP2INT);
501 PRINT_LREG_32bit(asd_ha, lseq,
ARP2INTEN);
502 PRINT_LREG_8bit(asd_ha, lseq,
MODEPTR);
503 PRINT_LREG_8bit(asd_ha, lseq,
ALTMODE);
504 PRINT_LREG_8bit(asd_ha, lseq,
FLAG);
506 PRINT_LREG_16bit(asd_ha, lseq,
STACK);
507 PRINT_LREG_16bit(asd_ha, lseq,
PRGMCNT);
508 PRINT_LREG_16bit(asd_ha, lseq,
ACCUM);
509 PRINT_LREG_16bit(asd_ha, lseq,
SINDEX);
510 PRINT_LREG_16bit(asd_ha, lseq,
DINDEX);
511 PRINT_LREG_8bit(asd_ha, lseq,
SINDIR);
512 PRINT_LREG_8bit(asd_ha, lseq,
DINDIR);
513 PRINT_LREG_8bit(asd_ha, lseq,
JUMLDIR);
515 PRINT_LREG_16bit(asd_ha, lseq,
CURRADDR);
516 PRINT_LREG_16bit(asd_ha, lseq,
LASTADDR);
517 PRINT_LREG_16bit(asd_ha, lseq,
NXTLADDR);
521 PRINT_LREG_32bit(asd_ha, lseq,
MODECTL);
522 PRINT_LREG_32bit(asd_ha, lseq,
DBGMODE);
523 PRINT_LREG_32bit(asd_ha, lseq,
CONTROL);
530 for (mode = 0; mode < 8; mode++) {
534 for (i = 0; LSEQmCIOREGS[
i].name; i++)
535 if (LSEQmCIOREGS[i].mode == MODE_COMMON)
536 asd_print_lseq_cio_reg(asd_ha,lseq_cio_addr,i);
540 for (mode = 0; mode < 8; mode++) {
545 for (i = 0; LSEQmCIOREGS[
i].name; i++) {
546 if (!(LSEQmCIOREGS[i].mode & (1 << mode)))
548 asd_print_lseq_cio_reg(asd_ha, lseq_cio_addr, i);
555 PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_HEAD);
556 PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_TAIL);
557 PRINT_LMIP_byte(asd_ha, lseq, LINK_NUMBER);
558 PRINT_LMIP_byte(asd_ha, lseq, SCRATCH_FLAGS);
559 PRINT_LMIP_dword(asd_ha, lseq, CONNECTION_STATE);
560 PRINT_LMIP_word(asd_ha, lseq, CONCTL);
561 PRINT_LMIP_byte(asd_ha, lseq, CONSTAT);
562 PRINT_LMIP_byte(asd_ha, lseq, CONNECTION_MODES);
563 PRINT_LMIP_word(asd_ha, lseq, REG1_ISR);
564 PRINT_LMIP_word(asd_ha, lseq, REG2_ISR);
565 PRINT_LMIP_word(asd_ha, lseq, REG3_ISR);
566 PRINT_LMIP_qword(asd_ha, lseq,REG0_ISR);
569 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR0);
570 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR1);
571 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR2);
572 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR3);
573 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE0);
574 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE1);
575 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE2);
576 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE3);
577 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_HEAD);
578 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_TAIL);
579 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_BUF_AVAIL);
580 PRINT_LMIP_dword(asd_ha, lseq, TIMEOUT_CONST);
581 PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_SINDEX);
582 PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_DINDEX);
585 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR0);
586 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR1);
587 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR2);
588 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR3);
589 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD0);
590 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD1);
591 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD2);
592 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD3);
593 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_HEAD);
594 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_TAIL);
595 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_BUFS_AVAIL);
598 PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TMR_TOUT_CONST);
599 PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMEOUT);
600 PRINT_LMIP_dword(asd_ha, lseq, SRST_ASSERT_TIMEOUT);
601 PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMEOUT);
602 PRINT_LMIP_dword(asd_ha, lseq, ONE_MILLISEC_TIMEOUT);
603 PRINT_LMIP_dword(asd_ha, lseq, TEN_MS_COMINIT_TIMEOUT);
604 PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMEOUT);
606 for (mode = 0; mode < 3; mode++) {
607 asd_printk(
"LSEQ%d MDP 0 MODE %d >>>>\n", lseq, mode);
633 asd_printk(
"LSEQ%d MDP 0 MODE 5 >>>>\n", lseq);
650 asd_printk(
"LSEQ%d MDP 0 MODE 0 >>>>\n", lseq);
651 PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_DDB_SITE);
652 PRINT_LMIP_word(asd_ha, lseq, EMPTY_TRANS_CTX);
653 PRINT_LMIP_word(asd_ha, lseq, RESP_LEN);
654 PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_SCB_SITE);
655 PRINT_LMIP_dword(asd_ha, lseq, INTEN_SAVE);
656 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_FRM_LEN);
657 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_PROTOCOL);
658 PRINT_LMIP_byte(asd_ha, lseq, RESP_STATUS);
659 PRINT_LMIP_byte(asd_ha, lseq, LAST_LOADED_SGE);
660 PRINT_LMIP_byte(asd_ha, lseq, SAVE_SCBPTR);
662 asd_printk(
"LSEQ%d MDP 0 MODE 1 >>>>\n", lseq);
663 PRINT_LMIP_word(asd_ha, lseq, Q_XMIT_HEAD);
664 PRINT_LMIP_word(asd_ha, lseq, M1_EMPTY_TRANS_CTX);
665 PRINT_LMIP_word(asd_ha, lseq, INI_CONN_TAG);
666 PRINT_LMIP_byte(asd_ha, lseq, FAILED_OPEN_STATUS);
667 PRINT_LMIP_byte(asd_ha, lseq, XMIT_REQUEST_TYPE);
668 PRINT_LMIP_byte(asd_ha, lseq, M1_RESP_STATUS);
669 PRINT_LMIP_byte(asd_ha, lseq, M1_LAST_LOADED_SGE);
670 PRINT_LMIP_word(asd_ha, lseq, M1_SAVE_SCBPTR);
672 asd_printk(
"LSEQ%d MDP 0 MODE 2 >>>>\n", lseq);
673 PRINT_LMIP_word(asd_ha, lseq, PORT_COUNTER);
674 PRINT_LMIP_word(asd_ha, lseq, PM_TABLE_PTR);
675 PRINT_LMIP_word(asd_ha, lseq, SATA_INTERLOCK_TMR_SAVE);
676 PRINT_LMIP_word(asd_ha, lseq, IP_BITL);
677 PRINT_LMIP_word(asd_ha, lseq, COPY_SMP_CONN_TAG);
678 PRINT_LMIP_byte(asd_ha, lseq, P0M2_OFFS1AH);
680 asd_printk(
"LSEQ%d MDP 0 MODE 4/5 >>>>\n", lseq);
681 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_STATUS);
682 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_MODE);
683 PRINT_LMIP_word(asd_ha, lseq, Q_LINK_HEAD);
684 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_ERR);
685 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_SIGNALS);
686 PRINT_LMIP_byte(asd_ha, lseq, SAS_RESET_MODE);
687 PRINT_LMIP_byte(asd_ha, lseq, LINK_RESET_RETRY_COUNT);
688 PRINT_LMIP_byte(asd_ha, lseq, NUM_LINK_RESET_RETRIES);
689 PRINT_LMIP_word(asd_ha, lseq, OOB_INT_ENABLES);
690 PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_TIMEOUT);
691 PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_DOWN_COUNT);
693 asd_printk(
"LSEQ%d MDP 1 MODE 0 >>>>\n", lseq);
694 PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR0);
695 PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR1);
697 asd_printk(
"LSEQ%d MDP 1 MODE 1 >>>>\n", lseq);
698 PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR0);
699 PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR1);
701 asd_printk(
"LSEQ%d MDP 1 MODE 2 >>>>\n", lseq);
702 PRINT_LMIP_dword(asd_ha, lseq, INVALID_DWORD_COUNT);
703 PRINT_LMIP_dword(asd_ha, lseq, DISPARITY_ERROR_COUNT);
704 PRINT_LMIP_dword(asd_ha, lseq, LOSS_OF_SYNC_COUNT);
706 asd_printk(
"LSEQ%d MDP 1 MODE 4/5 >>>>\n", lseq);
707 PRINT_LMIP_dword(asd_ha, lseq, FRAME_TYPE_MASK);
708 PRINT_LMIP_dword(asd_ha, lseq, HASHED_SRC_ADDR_MASK_PRINT);
709 PRINT_LMIP_byte(asd_ha, lseq, NUM_FILL_BYTES_MASK);
710 PRINT_LMIP_word(asd_ha, lseq, TAG_MASK);
711 PRINT_LMIP_word(asd_ha, lseq, TARGET_PORT_XFER_TAG);
714 asd_printk(
"LSEQ%d MDP 2 MODE 0 >>>>\n", lseq);
715 PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMER_TERM_TS);
716 PRINT_LMIP_byte(asd_ha, lseq, DEVICE_BITS);
717 PRINT_LMIP_word(asd_ha, lseq, SDB_DDB);
718 PRINT_LMIP_word(asd_ha, lseq, SDB_NUM_TAGS);
719 PRINT_LMIP_word(asd_ha, lseq, SDB_CURR_TAG);
721 asd_printk(
"LSEQ%d MDP 2 MODE 1 >>>>\n", lseq);
722 PRINT_LMIP_qword(asd_ha, lseq, TX_ID_ADDR_FRAME);
723 PRINT_LMIP_dword(asd_ha, lseq, OPEN_TIMER_TERM_TS);
724 PRINT_LMIP_dword(asd_ha, lseq, SRST_AS_TIMER_TERM_TS);
725 PRINT_LMIP_dword(asd_ha, lseq, LAST_LOADED_SG_EL);
727 asd_printk(
"LSEQ%d MDP 2 MODE 2 >>>>\n", lseq);
728 PRINT_LMIP_dword(asd_ha, lseq, CLOSE_TIMER_TERM_TS);
729 PRINT_LMIP_dword(asd_ha, lseq, BREAK_TIMER_TERM_TS);
730 PRINT_LMIP_dword(asd_ha, lseq, DWS_RESET_TIMER_TERM_TS);
731 PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMER_TERM_TS);
732 PRINT_LMIP_dword(asd_ha, lseq, MCTL_TIMER_TERM_TS);
734 asd_printk(
"LSEQ%d MDP 2 MODE 4/5 >>>>\n", lseq);
735 PRINT_LMIP_dword(asd_ha, lseq, COMINIT_TIMER_TERM_TS);
736 PRINT_LMIP_dword(asd_ha, lseq, RCV_ID_TIMER_TERM_TS);
737 PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMER_TERM_TS);
738 PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TIMER_TERM_TS);
750 if (site_no >= asd_ha->
hw_prof.max_ddbs)
753 #define DDB_FIELDB(__name) \
754 asd_ddbsite_read_byte(asd_ha, site_no, \
755 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
756 #define DDB2_FIELDB(__name) \
757 asd_ddbsite_read_byte(asd_ha, site_no, \
758 offsetof(struct asd_ddb_stp_sata_target_port, __name))
759 #define DDB_FIELDW(__name) \
760 asd_ddbsite_read_word(asd_ha, site_no, \
761 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
763 #define DDB_FIELDD(__name) \
764 asd_ddbsite_read_dword(asd_ha, site_no, \
765 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
795 #define DDB0_FIELDB(__name) \
796 asd_ddbsite_read_byte(asd_ha, 0, \
797 offsetof(struct asd_ddb_seq_shared, __name))
798 #define DDB0_FIELDW(__name) \
799 asd_ddbsite_read_word(asd_ha, 0, \
800 offsetof(struct asd_ddb_seq_shared, __name))
802 #define DDB0_FIELDD(__name) \
803 asd_ddbsite_read_dword(asd_ha,0 , \
804 offsetof(struct asd_ddb_seq_shared, __name))
806 #define DDB0_FIELDA(__name, _o) \
807 asd_ddbsite_read_byte(asd_ha, 0, \
808 offsetof(struct asd_ddb_seq_shared, __name)+_o)
824 asd_printk(
"port_map_by_links:%02x %02x %02x %02x "
825 "%02x %02x %02x %02x\n",
839 #define SCB_FIELDB(__name) \
840 asd_scbsite_read_byte(asd_ha, site_no, sizeof(struct scb_header) \
841 + offsetof(struct initiate_ssp_task, __name))
842 #define SCB_FIELDW(__name) \
843 asd_scbsite_read_word(asd_ha, site_no, sizeof(struct scb_header) \
844 + offsetof(struct initiate_ssp_task, __name))
845 #define SCB_FIELDD(__name) \
846 asd_scbsite_read_dword(asd_ha, site_no, sizeof(struct scb_header) \
847 + offsetof(struct initiate_ssp_task, __name))
866 for (site_no = 0; site_no < asd_ha->
hw_prof.max_scbs; site_no++) {
874 opcode = asd_scbsite_read_byte(asd_ha, site_no,
881 asd_dump_scb_site(asd_ha, site_no);
896 asd_dump_cseq_state(asd_ha);
900 asd_dump_lseq_state(asd_ha, lseq);
909 switch ((dl->status_block[1] & 0x70) >> 3) {
919 for (i = 0; i < phy->sas_phy.frame_rcvd_size; i+=4)
923 phy->frame_rcvd[i+1],
924 phy->frame_rcvd[i+2],
925 phy->frame_rcvd[i+3]);
926 spin_unlock_irqrestore(&phy->sas_phy.frame_rcvd_lock, flags);
931 static void asd_dump_scb(
struct asd_ascb *ascb,
int ind)
933 asd_printk(
"scb%d: vaddr: 0x%p, dma_handle: 0x%llx, next: 0x%llx, "
934 "index:%d, opcode:0x%02x\n",
936 (
unsigned long long)ascb->
dma_scb.dma_handle,
940 ascb->
scb->header.opcode);
943 void asd_dump_scb_list(
struct asd_ascb *ascb,
int num)
949 asd_dump_scb(ascb, i++);
952 if (num > 0 && !list_empty(&ascb->
list)) {
958 asd_dump_scb(s, i++);