18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Aic94xx SAS/SATA driver dump interface.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2004 Adaptec, Inc.  All rights reserved.
68c2ecf20Sopenharmony_ci * Copyright (C) 2004 David Chaw <david_chaw@adaptec.com>
78c2ecf20Sopenharmony_ci * Copyright (C) 2005 Luben Tuikov <luben_tuikov@adaptec.com>
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * 2005/07/14/LT  Complete overhaul of this file.  Update pages, register
108c2ecf20Sopenharmony_ci * locations, names, etc.  Make use of macros.  Print more information.
118c2ecf20Sopenharmony_ci * Print all cseq and lseq mip and mdp.
128c2ecf20Sopenharmony_ci */
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#include <linux/pci.h>
158c2ecf20Sopenharmony_ci#include "aic94xx.h"
168c2ecf20Sopenharmony_ci#include "aic94xx_reg.h"
178c2ecf20Sopenharmony_ci#include "aic94xx_reg_def.h"
188c2ecf20Sopenharmony_ci#include "aic94xx_sas.h"
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#include "aic94xx_dump.h"
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#ifdef ASD_DEBUG
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define MD(x)	    (1 << (x))
258c2ecf20Sopenharmony_ci#define MODE_COMMON (1 << 31)
268c2ecf20Sopenharmony_ci#define MODE_0_7    (0xFF)
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic const struct lseq_cio_regs {
298c2ecf20Sopenharmony_ci	char	*name;
308c2ecf20Sopenharmony_ci	u32	offs;
318c2ecf20Sopenharmony_ci	u8	width;
328c2ecf20Sopenharmony_ci	u32	mode;
338c2ecf20Sopenharmony_ci} LSEQmCIOREGS[] = {
348c2ecf20Sopenharmony_ci	{"LmMnSCBPTR",    0x20, 16, MD(0)|MD(1)|MD(2)|MD(3)|MD(4) },
358c2ecf20Sopenharmony_ci	{"LmMnDDBPTR",    0x22, 16, MD(0)|MD(1)|MD(2)|MD(3)|MD(4) },
368c2ecf20Sopenharmony_ci	{"LmREQMBX",      0x30, 32, MODE_COMMON },
378c2ecf20Sopenharmony_ci	{"LmRSPMBX",      0x34, 32, MODE_COMMON },
388c2ecf20Sopenharmony_ci	{"LmMnINT",       0x38, 32, MODE_0_7 },
398c2ecf20Sopenharmony_ci	{"LmMnINTEN",     0x3C, 32, MODE_0_7 },
408c2ecf20Sopenharmony_ci	{"LmXMTPRIMD",    0x40, 32, MODE_COMMON },
418c2ecf20Sopenharmony_ci	{"LmXMTPRIMCS",   0x44,  8, MODE_COMMON },
428c2ecf20Sopenharmony_ci	{"LmCONSTAT",     0x45,  8, MODE_COMMON },
438c2ecf20Sopenharmony_ci	{"LmMnDMAERRS",   0x46,  8, MD(0)|MD(1) },
448c2ecf20Sopenharmony_ci	{"LmMnSGDMAERRS", 0x47,  8, MD(0)|MD(1) },
458c2ecf20Sopenharmony_ci	{"LmMnEXPHDRP",   0x48,  8, MD(0) },
468c2ecf20Sopenharmony_ci	{"LmMnSASAALIGN", 0x48,  8, MD(1) },
478c2ecf20Sopenharmony_ci	{"LmMnMSKHDRP",   0x49,  8, MD(0) },
488c2ecf20Sopenharmony_ci	{"LmMnSTPALIGN",  0x49,  8, MD(1) },
498c2ecf20Sopenharmony_ci	{"LmMnRCVHDRP",   0x4A,  8, MD(0) },
508c2ecf20Sopenharmony_ci	{"LmMnXMTHDRP",   0x4A,  8, MD(1) },
518c2ecf20Sopenharmony_ci	{"LmALIGNMODE",   0x4B,  8, MD(1) },
528c2ecf20Sopenharmony_ci	{"LmMnEXPRCVCNT", 0x4C, 32, MD(0) },
538c2ecf20Sopenharmony_ci	{"LmMnXMTCNT",    0x4C, 32, MD(1) },
548c2ecf20Sopenharmony_ci	{"LmMnCURRTAG",   0x54, 16, MD(0) },
558c2ecf20Sopenharmony_ci	{"LmMnPREVTAG",   0x56, 16, MD(0) },
568c2ecf20Sopenharmony_ci	{"LmMnACKOFS",    0x58,  8, MD(1) },
578c2ecf20Sopenharmony_ci	{"LmMnXFRLVL",    0x59,  8, MD(0)|MD(1) },
588c2ecf20Sopenharmony_ci	{"LmMnSGDMACTL",  0x5A,  8, MD(0)|MD(1) },
598c2ecf20Sopenharmony_ci	{"LmMnSGDMASTAT", 0x5B,  8, MD(0)|MD(1) },
608c2ecf20Sopenharmony_ci	{"LmMnDDMACTL",   0x5C,  8, MD(0)|MD(1) },
618c2ecf20Sopenharmony_ci	{"LmMnDDMASTAT",  0x5D,  8, MD(0)|MD(1) },
628c2ecf20Sopenharmony_ci	{"LmMnDDMAMODE",  0x5E, 16, MD(0)|MD(1) },
638c2ecf20Sopenharmony_ci	{"LmMnPIPECTL",   0x61,  8, MD(0)|MD(1) },
648c2ecf20Sopenharmony_ci	{"LmMnACTSCB",    0x62, 16, MD(0)|MD(1) },
658c2ecf20Sopenharmony_ci	{"LmMnSGBHADR",   0x64,  8, MD(0)|MD(1) },
668c2ecf20Sopenharmony_ci	{"LmMnSGBADR",    0x65,  8, MD(0)|MD(1) },
678c2ecf20Sopenharmony_ci	{"LmMnSGDCNT",    0x66,  8, MD(0)|MD(1) },
688c2ecf20Sopenharmony_ci	{"LmMnSGDMADR",   0x68, 32, MD(0)|MD(1) },
698c2ecf20Sopenharmony_ci	{"LmMnSGDMADR",   0x6C, 32, MD(0)|MD(1) },
708c2ecf20Sopenharmony_ci	{"LmMnXFRCNT",    0x70, 32, MD(0)|MD(1) },
718c2ecf20Sopenharmony_ci	{"LmMnXMTCRC",    0x74, 32, MD(1) },
728c2ecf20Sopenharmony_ci	{"LmCURRTAG",     0x74, 16, MD(0) },
738c2ecf20Sopenharmony_ci	{"LmPREVTAG",     0x76, 16, MD(0) },
748c2ecf20Sopenharmony_ci	{"LmMnDPSEL",     0x7B,  8, MD(0)|MD(1) },
758c2ecf20Sopenharmony_ci	{"LmDPTHSTAT",    0x7C,  8, MODE_COMMON },
768c2ecf20Sopenharmony_ci	{"LmMnHOLDLVL",   0x7D,  8, MD(0) },
778c2ecf20Sopenharmony_ci	{"LmMnSATAFS",    0x7E,  8, MD(1) },
788c2ecf20Sopenharmony_ci	{"LmMnCMPLTSTAT", 0x7F,  8, MD(0)|MD(1) },
798c2ecf20Sopenharmony_ci	{"LmPRMSTAT0",    0x80, 32, MODE_COMMON },
808c2ecf20Sopenharmony_ci	{"LmPRMSTAT1",    0x84, 32, MODE_COMMON },
818c2ecf20Sopenharmony_ci	{"LmGPRMINT",     0x88,  8, MODE_COMMON },
828c2ecf20Sopenharmony_ci        {"LmMnCURRSCB",   0x8A, 16, MD(0) },
838c2ecf20Sopenharmony_ci	{"LmPRMICODE",    0x8C, 32, MODE_COMMON },
848c2ecf20Sopenharmony_ci	{"LmMnRCVCNT",    0x90, 16, MD(0) },
858c2ecf20Sopenharmony_ci	{"LmMnBUFSTAT",   0x92, 16, MD(0) },
868c2ecf20Sopenharmony_ci	{"LmMnXMTHDRSIZE",0x92,  8, MD(1) },
878c2ecf20Sopenharmony_ci	{"LmMnXMTSIZE",   0x93,  8, MD(1) },
888c2ecf20Sopenharmony_ci	{"LmMnTGTXFRCNT", 0x94, 32, MD(0) },
898c2ecf20Sopenharmony_ci	{"LmMnEXPROFS",   0x98, 32, MD(0) },
908c2ecf20Sopenharmony_ci	{"LmMnXMTROFS",   0x98, 32, MD(1) },
918c2ecf20Sopenharmony_ci	{"LmMnRCVROFS",   0x9C, 32, MD(0) },
928c2ecf20Sopenharmony_ci	{"LmCONCTL",      0xA0, 16, MODE_COMMON },
938c2ecf20Sopenharmony_ci	{"LmBITLTIMER",   0xA2, 16, MODE_COMMON },
948c2ecf20Sopenharmony_ci	{"LmWWNLOW",      0xA8, 32, MODE_COMMON },
958c2ecf20Sopenharmony_ci	{"LmWWNHIGH",     0xAC, 32, MODE_COMMON },
968c2ecf20Sopenharmony_ci	{"LmMnFRMERR",    0xB0, 32, MD(0) },
978c2ecf20Sopenharmony_ci	{"LmMnFRMERREN",  0xB4, 32, MD(0) },
988c2ecf20Sopenharmony_ci	{"LmAWTIMER",     0xB8, 16, MODE_COMMON },
998c2ecf20Sopenharmony_ci	{"LmAWTCTL",      0xBA,  8, MODE_COMMON },
1008c2ecf20Sopenharmony_ci	{"LmMnHDRCMPS",   0xC0, 32, MD(0) },
1018c2ecf20Sopenharmony_ci	{"LmMnXMTSTAT",   0xC4,  8, MD(1) },
1028c2ecf20Sopenharmony_ci	{"LmHWTSTATEN",   0xC5,  8, MODE_COMMON },
1038c2ecf20Sopenharmony_ci	{"LmMnRRDYRC",    0xC6,  8, MD(0) },
1048c2ecf20Sopenharmony_ci        {"LmMnRRDYTC",    0xC6,  8, MD(1) },
1058c2ecf20Sopenharmony_ci	{"LmHWTSTAT",     0xC7,  8, MODE_COMMON },
1068c2ecf20Sopenharmony_ci	{"LmMnDATABUFADR",0xC8, 16, MD(0)|MD(1) },
1078c2ecf20Sopenharmony_ci	{"LmDWSSTATUS",   0xCB,  8, MODE_COMMON },
1088c2ecf20Sopenharmony_ci	{"LmMnACTSTAT",   0xCE, 16, MD(0)|MD(1) },
1098c2ecf20Sopenharmony_ci	{"LmMnREQSCB",    0xD2, 16, MD(0)|MD(1) },
1108c2ecf20Sopenharmony_ci	{"LmXXXPRIM",     0xD4, 32, MODE_COMMON },
1118c2ecf20Sopenharmony_ci	{"LmRCVASTAT",    0xD9,  8, MODE_COMMON },
1128c2ecf20Sopenharmony_ci	{"LmINTDIS1",     0xDA,  8, MODE_COMMON },
1138c2ecf20Sopenharmony_ci	{"LmPSTORESEL",   0xDB,  8, MODE_COMMON },
1148c2ecf20Sopenharmony_ci	{"LmPSTORE",      0xDC, 32, MODE_COMMON },
1158c2ecf20Sopenharmony_ci	{"LmPRIMSTAT0EN", 0xE0, 32, MODE_COMMON },
1168c2ecf20Sopenharmony_ci	{"LmPRIMSTAT1EN", 0xE4, 32, MODE_COMMON },
1178c2ecf20Sopenharmony_ci	{"LmDONETCTL",    0xF2, 16, MODE_COMMON },
1188c2ecf20Sopenharmony_ci	{NULL, 0, 0, 0 }
1198c2ecf20Sopenharmony_ci};
1208c2ecf20Sopenharmony_ci/*
1218c2ecf20Sopenharmony_cistatic struct lseq_cio_regs LSEQmOOBREGS[] = {
1228c2ecf20Sopenharmony_ci   {"OOB_BFLTR"        ,0x100, 8, MD(5)},
1238c2ecf20Sopenharmony_ci   {"OOB_INIT_MIN"     ,0x102,16, MD(5)},
1248c2ecf20Sopenharmony_ci   {"OOB_INIT_MAX"     ,0x104,16, MD(5)},
1258c2ecf20Sopenharmony_ci   {"OOB_INIT_NEG"     ,0x106,16, MD(5)},
1268c2ecf20Sopenharmony_ci   {"OOB_SAS_MIN"      ,0x108,16, MD(5)},
1278c2ecf20Sopenharmony_ci   {"OOB_SAS_MAX"      ,0x10A,16, MD(5)},
1288c2ecf20Sopenharmony_ci   {"OOB_SAS_NEG"      ,0x10C,16, MD(5)},
1298c2ecf20Sopenharmony_ci   {"OOB_WAKE_MIN"     ,0x10E,16, MD(5)},
1308c2ecf20Sopenharmony_ci   {"OOB_WAKE_MAX"     ,0x110,16, MD(5)},
1318c2ecf20Sopenharmony_ci   {"OOB_WAKE_NEG"     ,0x112,16, MD(5)},
1328c2ecf20Sopenharmony_ci   {"OOB_IDLE_MAX"     ,0x114,16, MD(5)},
1338c2ecf20Sopenharmony_ci   {"OOB_BURST_MAX"    ,0x116,16, MD(5)},
1348c2ecf20Sopenharmony_ci   {"OOB_XMIT_BURST"   ,0x118, 8, MD(5)},
1358c2ecf20Sopenharmony_ci   {"OOB_SEND_PAIRS"   ,0x119, 8, MD(5)},
1368c2ecf20Sopenharmony_ci   {"OOB_INIT_IDLE"    ,0x11A, 8, MD(5)},
1378c2ecf20Sopenharmony_ci   {"OOB_INIT_NEGO"    ,0x11C, 8, MD(5)},
1388c2ecf20Sopenharmony_ci   {"OOB_SAS_IDLE"     ,0x11E, 8, MD(5)},
1398c2ecf20Sopenharmony_ci   {"OOB_SAS_NEGO"     ,0x120, 8, MD(5)},
1408c2ecf20Sopenharmony_ci   {"OOB_WAKE_IDLE"    ,0x122, 8, MD(5)},
1418c2ecf20Sopenharmony_ci   {"OOB_WAKE_NEGO"    ,0x124, 8, MD(5)},
1428c2ecf20Sopenharmony_ci   {"OOB_DATA_KBITS"   ,0x126, 8, MD(5)},
1438c2ecf20Sopenharmony_ci   {"OOB_BURST_DATA"   ,0x128,32, MD(5)},
1448c2ecf20Sopenharmony_ci   {"OOB_ALIGN_0_DATA" ,0x12C,32, MD(5)},
1458c2ecf20Sopenharmony_ci   {"OOB_ALIGN_1_DATA" ,0x130,32, MD(5)},
1468c2ecf20Sopenharmony_ci   {"OOB_SYNC_DATA"    ,0x134,32, MD(5)},
1478c2ecf20Sopenharmony_ci   {"OOB_D10_2_DATA"   ,0x138,32, MD(5)},
1488c2ecf20Sopenharmony_ci   {"OOB_PHY_RST_CNT"  ,0x13C,32, MD(5)},
1498c2ecf20Sopenharmony_ci   {"OOB_SIG_GEN"      ,0x140, 8, MD(5)},
1508c2ecf20Sopenharmony_ci   {"OOB_XMIT"         ,0x141, 8, MD(5)},
1518c2ecf20Sopenharmony_ci   {"FUNCTION_MAKS"    ,0x142, 8, MD(5)},
1528c2ecf20Sopenharmony_ci   {"OOB_MODE"         ,0x143, 8, MD(5)},
1538c2ecf20Sopenharmony_ci   {"CURRENT_STATUS"   ,0x144, 8, MD(5)},
1548c2ecf20Sopenharmony_ci   {"SPEED_MASK"       ,0x145, 8, MD(5)},
1558c2ecf20Sopenharmony_ci   {"PRIM_COUNT"       ,0x146, 8, MD(5)},
1568c2ecf20Sopenharmony_ci   {"OOB_SIGNALS"      ,0x148, 8, MD(5)},
1578c2ecf20Sopenharmony_ci   {"OOB_DATA_DET"     ,0x149, 8, MD(5)},
1588c2ecf20Sopenharmony_ci   {"OOB_TIME_OUT"     ,0x14C, 8, MD(5)},
1598c2ecf20Sopenharmony_ci   {"OOB_TIMER_ENABLE" ,0x14D, 8, MD(5)},
1608c2ecf20Sopenharmony_ci   {"OOB_STATUS"       ,0x14E, 8, MD(5)},
1618c2ecf20Sopenharmony_ci   {"HOT_PLUG_DELAY"   ,0x150, 8, MD(5)},
1628c2ecf20Sopenharmony_ci   {"RCD_DELAY"        ,0x151, 8, MD(5)},
1638c2ecf20Sopenharmony_ci   {"COMSAS_TIMER"     ,0x152, 8, MD(5)},
1648c2ecf20Sopenharmony_ci   {"SNTT_DELAY"       ,0x153, 8, MD(5)},
1658c2ecf20Sopenharmony_ci   {"SPD_CHNG_DELAY"   ,0x154, 8, MD(5)},
1668c2ecf20Sopenharmony_ci   {"SNLT_DELAY"       ,0x155, 8, MD(5)},
1678c2ecf20Sopenharmony_ci   {"SNWT_DELAY"       ,0x156, 8, MD(5)},
1688c2ecf20Sopenharmony_ci   {"ALIGN_DELAY"      ,0x157, 8, MD(5)},
1698c2ecf20Sopenharmony_ci   {"INT_ENABLE_0"     ,0x158, 8, MD(5)},
1708c2ecf20Sopenharmony_ci   {"INT_ENABLE_1"     ,0x159, 8, MD(5)},
1718c2ecf20Sopenharmony_ci   {"INT_ENABLE_2"     ,0x15A, 8, MD(5)},
1728c2ecf20Sopenharmony_ci   {"INT_ENABLE_3"     ,0x15B, 8, MD(5)},
1738c2ecf20Sopenharmony_ci   {"OOB_TEST_REG"     ,0x15C, 8, MD(5)},
1748c2ecf20Sopenharmony_ci   {"PHY_CONTROL_0"    ,0x160, 8, MD(5)},
1758c2ecf20Sopenharmony_ci   {"PHY_CONTROL_1"    ,0x161, 8, MD(5)},
1768c2ecf20Sopenharmony_ci   {"PHY_CONTROL_2"    ,0x162, 8, MD(5)},
1778c2ecf20Sopenharmony_ci   {"PHY_CONTROL_3"    ,0x163, 8, MD(5)},
1788c2ecf20Sopenharmony_ci   {"PHY_OOB_CAL_TX"   ,0x164, 8, MD(5)},
1798c2ecf20Sopenharmony_ci   {"PHY_OOB_CAL_RX"   ,0x165, 8, MD(5)},
1808c2ecf20Sopenharmony_ci   {"OOB_PHY_CAL_TX"   ,0x166, 8, MD(5)},
1818c2ecf20Sopenharmony_ci   {"OOB_PHY_CAL_RX"   ,0x167, 8, MD(5)},
1828c2ecf20Sopenharmony_ci   {"PHY_CONTROL_4"    ,0x168, 8, MD(5)},
1838c2ecf20Sopenharmony_ci   {"PHY_TEST"         ,0x169, 8, MD(5)},
1848c2ecf20Sopenharmony_ci   {"PHY_PWR_CTL"      ,0x16A, 8, MD(5)},
1858c2ecf20Sopenharmony_ci   {"PHY_PWR_DELAY"    ,0x16B, 8, MD(5)},
1868c2ecf20Sopenharmony_ci   {"OOB_SM_CON"       ,0x16C, 8, MD(5)},
1878c2ecf20Sopenharmony_ci   {"ADDR_TRAP_1"      ,0x16D, 8, MD(5)},
1888c2ecf20Sopenharmony_ci   {"ADDR_NEXT_1"      ,0x16E, 8, MD(5)},
1898c2ecf20Sopenharmony_ci   {"NEXT_ST_1"        ,0x16F, 8, MD(5)},
1908c2ecf20Sopenharmony_ci   {"OOB_SM_STATE"     ,0x170, 8, MD(5)},
1918c2ecf20Sopenharmony_ci   {"ADDR_TRAP_2"      ,0x171, 8, MD(5)},
1928c2ecf20Sopenharmony_ci   {"ADDR_NEXT_2"      ,0x172, 8, MD(5)},
1938c2ecf20Sopenharmony_ci   {"NEXT_ST_2"        ,0x173, 8, MD(5)},
1948c2ecf20Sopenharmony_ci   {NULL, 0, 0, 0 }
1958c2ecf20Sopenharmony_ci};
1968c2ecf20Sopenharmony_ci*/
1978c2ecf20Sopenharmony_ci#define STR_8BIT   "   %30s[0x%04x]:0x%02x\n"
1988c2ecf20Sopenharmony_ci#define STR_16BIT  "   %30s[0x%04x]:0x%04x\n"
1998c2ecf20Sopenharmony_ci#define STR_32BIT  "   %30s[0x%04x]:0x%08x\n"
2008c2ecf20Sopenharmony_ci#define STR_64BIT  "   %30s[0x%04x]:0x%llx\n"
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci#define PRINT_REG_8bit(_ha, _n, _r) asd_printk(STR_8BIT, #_n, _n,      \
2038c2ecf20Sopenharmony_ci					     asd_read_reg_byte(_ha, _r))
2048c2ecf20Sopenharmony_ci#define PRINT_REG_16bit(_ha, _n, _r) asd_printk(STR_16BIT, #_n, _n,     \
2058c2ecf20Sopenharmony_ci					      asd_read_reg_word(_ha, _r))
2068c2ecf20Sopenharmony_ci#define PRINT_REG_32bit(_ha, _n, _r) asd_printk(STR_32BIT, #_n, _n,      \
2078c2ecf20Sopenharmony_ci					      asd_read_reg_dword(_ha, _r))
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_ci#define PRINT_CREG_8bit(_ha, _n) asd_printk(STR_8BIT, #_n, _n,      \
2108c2ecf20Sopenharmony_ci					     asd_read_reg_byte(_ha, C##_n))
2118c2ecf20Sopenharmony_ci#define PRINT_CREG_16bit(_ha, _n) asd_printk(STR_16BIT, #_n, _n,     \
2128c2ecf20Sopenharmony_ci					      asd_read_reg_word(_ha, C##_n))
2138c2ecf20Sopenharmony_ci#define PRINT_CREG_32bit(_ha, _n) asd_printk(STR_32BIT, #_n, _n,      \
2148c2ecf20Sopenharmony_ci					      asd_read_reg_dword(_ha, C##_n))
2158c2ecf20Sopenharmony_ci
2168c2ecf20Sopenharmony_ci#define MSTR_8BIT   "   Mode:%02d %30s[0x%04x]:0x%02x\n"
2178c2ecf20Sopenharmony_ci#define MSTR_16BIT  "   Mode:%02d %30s[0x%04x]:0x%04x\n"
2188c2ecf20Sopenharmony_ci#define MSTR_32BIT  "   Mode:%02d %30s[0x%04x]:0x%08x\n"
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci#define PRINT_MREG_8bit(_ha, _m, _n, _r) asd_printk(MSTR_8BIT, _m, #_n, _n,   \
2218c2ecf20Sopenharmony_ci					     asd_read_reg_byte(_ha, _r))
2228c2ecf20Sopenharmony_ci#define PRINT_MREG_16bit(_ha, _m, _n, _r) asd_printk(MSTR_16BIT, _m, #_n, _n, \
2238c2ecf20Sopenharmony_ci					      asd_read_reg_word(_ha, _r))
2248c2ecf20Sopenharmony_ci#define PRINT_MREG_32bit(_ha, _m, _n, _r) asd_printk(MSTR_32BIT, _m, #_n, _n, \
2258c2ecf20Sopenharmony_ci					      asd_read_reg_dword(_ha, _r))
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci/* can also be used for MD when the register is mode aware already */
2288c2ecf20Sopenharmony_ci#define PRINT_MIS_byte(_ha, _n) asd_printk(STR_8BIT, #_n,CSEQ_##_n-CMAPPEDSCR,\
2298c2ecf20Sopenharmony_ci                                           asd_read_reg_byte(_ha, CSEQ_##_n))
2308c2ecf20Sopenharmony_ci#define PRINT_MIS_word(_ha, _n) asd_printk(STR_16BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
2318c2ecf20Sopenharmony_ci                                           asd_read_reg_word(_ha, CSEQ_##_n))
2328c2ecf20Sopenharmony_ci#define PRINT_MIS_dword(_ha, _n)                      \
2338c2ecf20Sopenharmony_ci        asd_printk(STR_32BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
2348c2ecf20Sopenharmony_ci                   asd_read_reg_dword(_ha, CSEQ_##_n))
2358c2ecf20Sopenharmony_ci#define PRINT_MIS_qword(_ha, _n)                                       \
2368c2ecf20Sopenharmony_ci        asd_printk(STR_64BIT, #_n,CSEQ_##_n-CMAPPEDSCR,                \
2378c2ecf20Sopenharmony_ci                   (unsigned long long)(((u64)asd_read_reg_dword(_ha, CSEQ_##_n))     \
2388c2ecf20Sopenharmony_ci                 | (((u64)asd_read_reg_dword(_ha, (CSEQ_##_n)+4))<<32)))
2398c2ecf20Sopenharmony_ci
2408c2ecf20Sopenharmony_ci#define CMDP_REG(_n, _m) (_m*(CSEQ_PAGE_SIZE*2)+CSEQ_##_n)
2418c2ecf20Sopenharmony_ci#define PRINT_CMDP_word(_ha, _n) \
2428c2ecf20Sopenharmony_ciasd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
2438c2ecf20Sopenharmony_ci	#_n, \
2448c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 0)), \
2458c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 1)), \
2468c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 2)), \
2478c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 3)), \
2488c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 4)), \
2498c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 5)), \
2508c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 6)), \
2518c2ecf20Sopenharmony_ci	asd_read_reg_word(_ha, CMDP_REG(_n, 7)))
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_ci#define PRINT_CMDP_byte(_ha, _n) \
2548c2ecf20Sopenharmony_ciasd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
2558c2ecf20Sopenharmony_ci	#_n, \
2568c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 0)), \
2578c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 1)), \
2588c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 2)), \
2598c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 3)), \
2608c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 4)), \
2618c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 5)), \
2628c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 6)), \
2638c2ecf20Sopenharmony_ci	asd_read_reg_byte(_ha, CMDP_REG(_n, 7)))
2648c2ecf20Sopenharmony_ci
2658c2ecf20Sopenharmony_cistatic void asd_dump_cseq_state(struct asd_ha_struct *asd_ha)
2668c2ecf20Sopenharmony_ci{
2678c2ecf20Sopenharmony_ci	int mode;
2688c2ecf20Sopenharmony_ci
2698c2ecf20Sopenharmony_ci	asd_printk("CSEQ STATE\n");
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_ci	asd_printk("ARP2 REGISTERS\n");
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ci	PRINT_CREG_32bit(asd_ha, ARP2CTL);
2748c2ecf20Sopenharmony_ci	PRINT_CREG_32bit(asd_ha, ARP2INT);
2758c2ecf20Sopenharmony_ci	PRINT_CREG_32bit(asd_ha, ARP2INTEN);
2768c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, MODEPTR);
2778c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, ALTMODE);
2788c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, FLAG);
2798c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, ARP2INTCTL);
2808c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, STACK);
2818c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, PRGMCNT);
2828c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, ACCUM);
2838c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, SINDEX);
2848c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, DINDEX);
2858c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, SINDIR);
2868c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, DINDIR);
2878c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, JUMLDIR);
2888c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, ARP2HALTCODE);
2898c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, CURRADDR);
2908c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, LASTADDR);
2918c2ecf20Sopenharmony_ci	PRINT_CREG_16bit(asd_ha, NXTLADDR);
2928c2ecf20Sopenharmony_ci
2938c2ecf20Sopenharmony_ci	asd_printk("IOP REGISTERS\n");
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci	PRINT_REG_32bit(asd_ha, BISTCTL1, CBISTCTL);
2968c2ecf20Sopenharmony_ci	PRINT_CREG_32bit(asd_ha, MAPPEDSCR);
2978c2ecf20Sopenharmony_ci
2988c2ecf20Sopenharmony_ci	asd_printk("CIO REGISTERS\n");
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci	for (mode = 0; mode < 9; mode++)
3018c2ecf20Sopenharmony_ci		PRINT_MREG_16bit(asd_ha, mode, MnSCBPTR, CMnSCBPTR(mode));
3028c2ecf20Sopenharmony_ci	PRINT_MREG_16bit(asd_ha, 15, MnSCBPTR, CMnSCBPTR(15));
3038c2ecf20Sopenharmony_ci
3048c2ecf20Sopenharmony_ci	for (mode = 0; mode < 9; mode++)
3058c2ecf20Sopenharmony_ci		PRINT_MREG_16bit(asd_ha, mode, MnDDBPTR, CMnDDBPTR(mode));
3068c2ecf20Sopenharmony_ci	PRINT_MREG_16bit(asd_ha, 15, MnDDBPTR, CMnDDBPTR(15));
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++)
3098c2ecf20Sopenharmony_ci		PRINT_MREG_32bit(asd_ha, mode, MnREQMBX, CMnREQMBX(mode));
3108c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++)
3118c2ecf20Sopenharmony_ci		PRINT_MREG_32bit(asd_ha, mode, MnRSPMBX, CMnRSPMBX(mode));
3128c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++)
3138c2ecf20Sopenharmony_ci		PRINT_MREG_32bit(asd_ha, mode, MnINT, CMnINT(mode));
3148c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++)
3158c2ecf20Sopenharmony_ci		PRINT_MREG_32bit(asd_ha, mode, MnINTEN, CMnINTEN(mode));
3168c2ecf20Sopenharmony_ci
3178c2ecf20Sopenharmony_ci	PRINT_CREG_8bit(asd_ha, SCRATCHPAGE);
3188c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++)
3198c2ecf20Sopenharmony_ci		PRINT_MREG_8bit(asd_ha, mode, MnSCRATCHPAGE,
3208c2ecf20Sopenharmony_ci				CMnSCRATCHPAGE(mode));
3218c2ecf20Sopenharmony_ci
3228c2ecf20Sopenharmony_ci	PRINT_REG_32bit(asd_ha, CLINKCON, CLINKCON);
3238c2ecf20Sopenharmony_ci	PRINT_REG_8bit(asd_ha, CCONMSK, CCONMSK);
3248c2ecf20Sopenharmony_ci	PRINT_REG_8bit(asd_ha, CCONEXIST, CCONEXIST);
3258c2ecf20Sopenharmony_ci	PRINT_REG_16bit(asd_ha, CCONMODE, CCONMODE);
3268c2ecf20Sopenharmony_ci	PRINT_REG_32bit(asd_ha, CTIMERCALC, CTIMERCALC);
3278c2ecf20Sopenharmony_ci	PRINT_REG_8bit(asd_ha, CINTDIS, CINTDIS);
3288c2ecf20Sopenharmony_ci
3298c2ecf20Sopenharmony_ci	asd_printk("SCRATCH MEMORY\n");
3308c2ecf20Sopenharmony_ci
3318c2ecf20Sopenharmony_ci	asd_printk("MIP 4 >>>>>\n");
3328c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EXE_HEAD);
3338c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EXE_TAIL);
3348c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_DONE_HEAD);
3358c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_DONE_TAIL);
3368c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_SEND_HEAD);
3378c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_SEND_TAIL);
3388c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_DMA2CHIM_HEAD);
3398c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_DMA2CHIM_TAIL);
3408c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_COPY_HEAD);
3418c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_COPY_TAIL);
3428c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, REG0);
3438c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, REG1);
3448c2ecf20Sopenharmony_ci	PRINT_MIS_dword(asd_ha, REG2);
3458c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, LINK_CTL_Q_MAP);
3468c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, MAX_CSEQ_MODE);
3478c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, FREE_LIST_HACK_COUNT);
3488c2ecf20Sopenharmony_ci
3498c2ecf20Sopenharmony_ci	asd_printk("MIP 5 >>>>\n");
3508c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_QUEUE);
3518c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_COUNT);
3528c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EST_NEXUS_HEAD);
3538c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EST_NEXUS_TAIL);
3548c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, NEED_EST_NEXUS_SCB);
3558c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_HEAD);
3568c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_TAIL);
3578c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EST_NEXUS_SCB_OFFSET);
3588c2ecf20Sopenharmony_ci
3598c2ecf20Sopenharmony_ci	asd_printk("MIP 6 >>>>\n");
3608c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR0);
3618c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR1);
3628c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, INT_ROUT_SCBPTR);
3638c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, INT_ROUT_MODE);
3648c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, ISR_SCRATCH_FLAGS);
3658c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, ISR_SAVE_SINDEX);
3668c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, ISR_SAVE_DINDEX);
3678c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_MONIRTT_HEAD);
3688c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_MONIRTT_TAIL);
3698c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, FREE_SCB_MASK);
3708c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_HEAD);
3718c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_TAIL);
3728c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_HEAD);
3738c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_TAIL);
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ci	asd_printk("MIP 7 >>>>\n");
3768c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, EMPTY_REQ_QUEUE);
3778c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, EMPTY_REQ_COUNT);
3788c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EMPTY_HEAD);
3798c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, Q_EMPTY_TAIL);
3808c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, NEED_EMPTY_SCB);
3818c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EMPTY_REQ_HEAD);
3828c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EMPTY_REQ_TAIL);
3838c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, EMPTY_SCB_OFFSET);
3848c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, PRIMITIVE_DATA);
3858c2ecf20Sopenharmony_ci	PRINT_MIS_dword(asd_ha, TIMEOUT_CONST);
3868c2ecf20Sopenharmony_ci
3878c2ecf20Sopenharmony_ci	asd_printk("MDP 0 >>>>\n");
3888c2ecf20Sopenharmony_ci	asd_printk("%-20s %6s %6s %6s %6s %6s %6s %6s %6s\n",
3898c2ecf20Sopenharmony_ci		   "Mode: ", "0", "1", "2", "3", "4", "5", "6", "7");
3908c2ecf20Sopenharmony_ci	PRINT_CMDP_word(asd_ha, LRM_SAVE_SINDEX);
3918c2ecf20Sopenharmony_ci	PRINT_CMDP_word(asd_ha, LRM_SAVE_SCBPTR);
3928c2ecf20Sopenharmony_ci	PRINT_CMDP_word(asd_ha, Q_LINK_HEAD);
3938c2ecf20Sopenharmony_ci	PRINT_CMDP_word(asd_ha, Q_LINK_TAIL);
3948c2ecf20Sopenharmony_ci	PRINT_CMDP_byte(asd_ha, LRM_SAVE_SCRPAGE);
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_ci	asd_printk("MDP 0 Mode 8 >>>>\n");
3978c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, RET_ADDR);
3988c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, RET_SCBPTR);
3998c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, SAVE_SCBPTR);
4008c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, EMPTY_TRANS_CTX);
4018c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, RESP_LEN);
4028c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, TMF_SCBPTR);
4038c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, GLOBAL_PREV_SCB);
4048c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, GLOBAL_HEAD);
4058c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, CLEAR_LU_HEAD);
4068c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, TMF_OPCODE);
4078c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, SCRATCH_FLAGS);
4088c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, HSB_SITE);
4098c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, FIRST_INV_SCB_SITE);
4108c2ecf20Sopenharmony_ci	PRINT_MIS_word(asd_ha, FIRST_INV_DDB_SITE);
4118c2ecf20Sopenharmony_ci
4128c2ecf20Sopenharmony_ci	asd_printk("MDP 1 Mode 8 >>>>\n");
4138c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, LUN_TO_CLEAR);
4148c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, LUN_TO_CHECK);
4158c2ecf20Sopenharmony_ci
4168c2ecf20Sopenharmony_ci	asd_printk("MDP 2 Mode 8 >>>>\n");
4178c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, HQ_NEW_POINTER);
4188c2ecf20Sopenharmony_ci	PRINT_MIS_qword(asd_ha, HQ_DONE_BASE);
4198c2ecf20Sopenharmony_ci	PRINT_MIS_dword(asd_ha, HQ_DONE_POINTER);
4208c2ecf20Sopenharmony_ci	PRINT_MIS_byte(asd_ha, HQ_DONE_PASS);
4218c2ecf20Sopenharmony_ci}
4228c2ecf20Sopenharmony_ci
4238c2ecf20Sopenharmony_ci#define PRINT_LREG_8bit(_h, _lseq, _n) \
4248c2ecf20Sopenharmony_ci        asd_printk(STR_8BIT, #_n, _n, asd_read_reg_byte(_h, Lm##_n(_lseq)))
4258c2ecf20Sopenharmony_ci#define PRINT_LREG_16bit(_h, _lseq, _n) \
4268c2ecf20Sopenharmony_ci        asd_printk(STR_16BIT, #_n, _n, asd_read_reg_word(_h, Lm##_n(_lseq)))
4278c2ecf20Sopenharmony_ci#define PRINT_LREG_32bit(_h, _lseq, _n) \
4288c2ecf20Sopenharmony_ci        asd_printk(STR_32BIT, #_n, _n, asd_read_reg_dword(_h, Lm##_n(_lseq)))
4298c2ecf20Sopenharmony_ci
4308c2ecf20Sopenharmony_ci#define PRINT_LMIP_byte(_h, _lseq, _n)                              \
4318c2ecf20Sopenharmony_ci	asd_printk(STR_8BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
4328c2ecf20Sopenharmony_ci		   asd_read_reg_byte(_h, LmSEQ_##_n(_lseq)))
4338c2ecf20Sopenharmony_ci#define PRINT_LMIP_word(_h, _lseq, _n)                              \
4348c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
4358c2ecf20Sopenharmony_ci		   asd_read_reg_word(_h, LmSEQ_##_n(_lseq)))
4368c2ecf20Sopenharmony_ci#define PRINT_LMIP_dword(_h, _lseq, _n)                             \
4378c2ecf20Sopenharmony_ci	asd_printk(STR_32BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
4388c2ecf20Sopenharmony_ci		   asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)))
4398c2ecf20Sopenharmony_ci#define PRINT_LMIP_qword(_h, _lseq, _n)                                \
4408c2ecf20Sopenharmony_ci	asd_printk(STR_64BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
4418c2ecf20Sopenharmony_ci		 (unsigned long long)(((unsigned long long) \
4428c2ecf20Sopenharmony_ci		 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq))) \
4438c2ecf20Sopenharmony_ci	          | (((unsigned long long) \
4448c2ecf20Sopenharmony_ci		 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)+4))<<32)))
4458c2ecf20Sopenharmony_ci
4468c2ecf20Sopenharmony_cistatic void asd_print_lseq_cio_reg(struct asd_ha_struct *asd_ha,
4478c2ecf20Sopenharmony_ci				   u32 lseq_cio_addr, int i)
4488c2ecf20Sopenharmony_ci{
4498c2ecf20Sopenharmony_ci	switch (LSEQmCIOREGS[i].width) {
4508c2ecf20Sopenharmony_ci	case 8:
4518c2ecf20Sopenharmony_ci		asd_printk("%20s[0x%x]: 0x%02x\n", LSEQmCIOREGS[i].name,
4528c2ecf20Sopenharmony_ci			   LSEQmCIOREGS[i].offs,
4538c2ecf20Sopenharmony_ci			   asd_read_reg_byte(asd_ha, lseq_cio_addr +
4548c2ecf20Sopenharmony_ci					     LSEQmCIOREGS[i].offs));
4558c2ecf20Sopenharmony_ci
4568c2ecf20Sopenharmony_ci		break;
4578c2ecf20Sopenharmony_ci	case 16:
4588c2ecf20Sopenharmony_ci		asd_printk("%20s[0x%x]: 0x%04x\n", LSEQmCIOREGS[i].name,
4598c2ecf20Sopenharmony_ci			   LSEQmCIOREGS[i].offs,
4608c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, lseq_cio_addr +
4618c2ecf20Sopenharmony_ci					     LSEQmCIOREGS[i].offs));
4628c2ecf20Sopenharmony_ci
4638c2ecf20Sopenharmony_ci		break;
4648c2ecf20Sopenharmony_ci	case 32:
4658c2ecf20Sopenharmony_ci		asd_printk("%20s[0x%x]: 0x%08x\n", LSEQmCIOREGS[i].name,
4668c2ecf20Sopenharmony_ci			   LSEQmCIOREGS[i].offs,
4678c2ecf20Sopenharmony_ci			   asd_read_reg_dword(asd_ha, lseq_cio_addr +
4688c2ecf20Sopenharmony_ci					      LSEQmCIOREGS[i].offs));
4698c2ecf20Sopenharmony_ci		break;
4708c2ecf20Sopenharmony_ci	}
4718c2ecf20Sopenharmony_ci}
4728c2ecf20Sopenharmony_ci
4738c2ecf20Sopenharmony_cistatic void asd_dump_lseq_state(struct asd_ha_struct *asd_ha, int lseq)
4748c2ecf20Sopenharmony_ci{
4758c2ecf20Sopenharmony_ci	u32 moffs;
4768c2ecf20Sopenharmony_ci	int mode;
4778c2ecf20Sopenharmony_ci
4788c2ecf20Sopenharmony_ci	asd_printk("LSEQ %d STATE\n", lseq);
4798c2ecf20Sopenharmony_ci
4808c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d: ARP2 REGISTERS\n", lseq);
4818c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, ARP2CTL);
4828c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, ARP2INT);
4838c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, ARP2INTEN);
4848c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, MODEPTR);
4858c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, ALTMODE);
4868c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, FLAG);
4878c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, ARP2INTCTL);
4888c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, STACK);
4898c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, PRGMCNT);
4908c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, ACCUM);
4918c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, SINDEX);
4928c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, DINDEX);
4938c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, SINDIR);
4948c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, DINDIR);
4958c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, JUMLDIR);
4968c2ecf20Sopenharmony_ci	PRINT_LREG_8bit(asd_ha, lseq, ARP2HALTCODE);
4978c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, CURRADDR);
4988c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, LASTADDR);
4998c2ecf20Sopenharmony_ci	PRINT_LREG_16bit(asd_ha, lseq, NXTLADDR);
5008c2ecf20Sopenharmony_ci
5018c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d: IOP REGISTERS\n", lseq);
5028c2ecf20Sopenharmony_ci
5038c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, MODECTL);
5048c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, DBGMODE);
5058c2ecf20Sopenharmony_ci	PRINT_LREG_32bit(asd_ha, lseq, CONTROL);
5068c2ecf20Sopenharmony_ci	PRINT_REG_32bit(asd_ha, BISTCTL0, LmBISTCTL0(lseq));
5078c2ecf20Sopenharmony_ci	PRINT_REG_32bit(asd_ha, BISTCTL1, LmBISTCTL1(lseq));
5088c2ecf20Sopenharmony_ci
5098c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d: CIO REGISTERS\n", lseq);
5108c2ecf20Sopenharmony_ci	asd_printk("Mode common:\n");
5118c2ecf20Sopenharmony_ci
5128c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++) {
5138c2ecf20Sopenharmony_ci		u32 lseq_cio_addr = LmSEQ_PHY_BASE(mode, lseq);
5148c2ecf20Sopenharmony_ci		int i;
5158c2ecf20Sopenharmony_ci
5168c2ecf20Sopenharmony_ci		for (i = 0; LSEQmCIOREGS[i].name; i++)
5178c2ecf20Sopenharmony_ci			if (LSEQmCIOREGS[i].mode == MODE_COMMON)
5188c2ecf20Sopenharmony_ci				asd_print_lseq_cio_reg(asd_ha,lseq_cio_addr,i);
5198c2ecf20Sopenharmony_ci	}
5208c2ecf20Sopenharmony_ci
5218c2ecf20Sopenharmony_ci	asd_printk("Mode unique:\n");
5228c2ecf20Sopenharmony_ci	for (mode = 0; mode < 8; mode++) {
5238c2ecf20Sopenharmony_ci		u32 lseq_cio_addr = LmSEQ_PHY_BASE(mode, lseq);
5248c2ecf20Sopenharmony_ci		int i;
5258c2ecf20Sopenharmony_ci
5268c2ecf20Sopenharmony_ci		asd_printk("Mode %d\n", mode);
5278c2ecf20Sopenharmony_ci		for  (i = 0; LSEQmCIOREGS[i].name; i++) {
5288c2ecf20Sopenharmony_ci			if (!(LSEQmCIOREGS[i].mode & (1 << mode)))
5298c2ecf20Sopenharmony_ci				continue;
5308c2ecf20Sopenharmony_ci			asd_print_lseq_cio_reg(asd_ha, lseq_cio_addr, i);
5318c2ecf20Sopenharmony_ci		}
5328c2ecf20Sopenharmony_ci	}
5338c2ecf20Sopenharmony_ci
5348c2ecf20Sopenharmony_ci	asd_printk("SCRATCH MEMORY\n");
5358c2ecf20Sopenharmony_ci
5368c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MIP 0 >>>>\n", lseq);
5378c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_HEAD);
5388c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_TAIL);
5398c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LINK_NUMBER);
5408c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SCRATCH_FLAGS);
5418c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, CONNECTION_STATE);
5428c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, CONCTL);
5438c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, CONSTAT);
5448c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, CONNECTION_MODES);
5458c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, REG1_ISR);
5468c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, REG2_ISR);
5478c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, REG3_ISR);
5488c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq,REG0_ISR);
5498c2ecf20Sopenharmony_ci
5508c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MIP 1 >>>>\n", lseq);
5518c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR0);
5528c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR1);
5538c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR2);
5548c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR3);
5558c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE0);
5568c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE1);
5578c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE2);
5588c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE3);
5598c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_HEAD);
5608c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_TAIL);
5618c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_BUF_AVAIL);
5628c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, TIMEOUT_CONST);
5638c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_SINDEX);
5648c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_DINDEX);
5658c2ecf20Sopenharmony_ci
5668c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MIP 2 >>>>\n", lseq);
5678c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR0);
5688c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR1);
5698c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR2);
5708c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR3);
5718c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD0);
5728c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD1);
5738c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD2);
5748c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD3);
5758c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_HEAD);
5768c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_TAIL);
5778c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, EMPTY_BUFS_AVAIL);
5788c2ecf20Sopenharmony_ci
5798c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MIP 3 >>>>\n", lseq);
5808c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TMR_TOUT_CONST);
5818c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMEOUT);
5828c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SRST_ASSERT_TIMEOUT);
5838c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMEOUT);
5848c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, ONE_MILLISEC_TIMEOUT);
5858c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, TEN_MS_COMINIT_TIMEOUT);
5868c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMEOUT);
5878c2ecf20Sopenharmony_ci
5888c2ecf20Sopenharmony_ci	for (mode = 0; mode < 3; mode++) {
5898c2ecf20Sopenharmony_ci		asd_printk("LSEQ%d MDP 0 MODE %d >>>>\n", lseq, mode);
5908c2ecf20Sopenharmony_ci		moffs = mode * LSEQ_MODE_SCRATCH_SIZE;
5918c2ecf20Sopenharmony_ci
5928c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "RET_ADDR", 0,
5938c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR(lseq)
5948c2ecf20Sopenharmony_ci					     + moffs));
5958c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "REG0_MODE", 2,
5968c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_REG0_MODE(lseq)
5978c2ecf20Sopenharmony_ci					     + moffs));
5988c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "MODE_FLAGS", 4,
5998c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_MODE_FLAGS(lseq)
6008c2ecf20Sopenharmony_ci					     + moffs));
6018c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "RET_ADDR2", 0x6,
6028c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR2(lseq)
6038c2ecf20Sopenharmony_ci					     + moffs));
6048c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "RET_ADDR1", 0x8,
6058c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR1(lseq)
6068c2ecf20Sopenharmony_ci					     + moffs));
6078c2ecf20Sopenharmony_ci		asd_printk(STR_8BIT, "OPCODE_TO_CSEQ", 0xB,
6088c2ecf20Sopenharmony_ci			   asd_read_reg_byte(asd_ha, LmSEQ_OPCODE_TO_CSEQ(lseq)
6098c2ecf20Sopenharmony_ci					     + moffs));
6108c2ecf20Sopenharmony_ci		asd_printk(STR_16BIT, "DATA_TO_CSEQ", 0xC,
6118c2ecf20Sopenharmony_ci			   asd_read_reg_word(asd_ha, LmSEQ_DATA_TO_CSEQ(lseq)
6128c2ecf20Sopenharmony_ci					     + moffs));
6138c2ecf20Sopenharmony_ci	}
6148c2ecf20Sopenharmony_ci
6158c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 0 MODE 5 >>>>\n", lseq);
6168c2ecf20Sopenharmony_ci	moffs = LSEQ_MODE5_PAGE0_OFFSET;
6178c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "RET_ADDR", 0,
6188c2ecf20Sopenharmony_ci		   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR(lseq) + moffs));
6198c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "REG0_MODE", 2,
6208c2ecf20Sopenharmony_ci		   asd_read_reg_word(asd_ha, LmSEQ_REG0_MODE(lseq) + moffs));
6218c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "MODE_FLAGS", 4,
6228c2ecf20Sopenharmony_ci		   asd_read_reg_word(asd_ha, LmSEQ_MODE_FLAGS(lseq) + moffs));
6238c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "RET_ADDR2", 0x6,
6248c2ecf20Sopenharmony_ci		   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR2(lseq) + moffs));
6258c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "RET_ADDR1", 0x8,
6268c2ecf20Sopenharmony_ci		   asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR1(lseq) + moffs));
6278c2ecf20Sopenharmony_ci	asd_printk(STR_8BIT, "OPCODE_TO_CSEQ", 0xB,
6288c2ecf20Sopenharmony_ci	   asd_read_reg_byte(asd_ha, LmSEQ_OPCODE_TO_CSEQ(lseq) + moffs));
6298c2ecf20Sopenharmony_ci	asd_printk(STR_16BIT, "DATA_TO_CSEQ", 0xC,
6308c2ecf20Sopenharmony_ci	   asd_read_reg_word(asd_ha, LmSEQ_DATA_TO_CSEQ(lseq) + moffs));
6318c2ecf20Sopenharmony_ci
6328c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 0 MODE 0 >>>>\n", lseq);
6338c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_DDB_SITE);
6348c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, EMPTY_TRANS_CTX);
6358c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, RESP_LEN);
6368c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_SCB_SITE);
6378c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, INTEN_SAVE);
6388c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_FRM_LEN);
6398c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_PROTOCOL);
6408c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, RESP_STATUS);
6418c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LAST_LOADED_SGE);
6428c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SAVE_SCBPTR);
6438c2ecf20Sopenharmony_ci
6448c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 0 MODE 1 >>>>\n", lseq);
6458c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, Q_XMIT_HEAD);
6468c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, M1_EMPTY_TRANS_CTX);
6478c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, INI_CONN_TAG);
6488c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, FAILED_OPEN_STATUS);
6498c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, XMIT_REQUEST_TYPE);
6508c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, M1_RESP_STATUS);
6518c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, M1_LAST_LOADED_SGE);
6528c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, M1_SAVE_SCBPTR);
6538c2ecf20Sopenharmony_ci
6548c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 0 MODE 2 >>>>\n", lseq);
6558c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, PORT_COUNTER);
6568c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, PM_TABLE_PTR);
6578c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, SATA_INTERLOCK_TMR_SAVE);
6588c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, IP_BITL);
6598c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, COPY_SMP_CONN_TAG);
6608c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, P0M2_OFFS1AH);
6618c2ecf20Sopenharmony_ci
6628c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 0 MODE 4/5 >>>>\n", lseq);
6638c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_STATUS);
6648c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_MODE);
6658c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, Q_LINK_HEAD);
6668c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_ERR);
6678c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_SIGNALS);
6688c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, SAS_RESET_MODE);
6698c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, LINK_RESET_RETRY_COUNT);
6708c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, NUM_LINK_RESET_RETRIES);
6718c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, OOB_INT_ENABLES);
6728c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_TIMEOUT);
6738c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_DOWN_COUNT);
6748c2ecf20Sopenharmony_ci
6758c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 1 MODE 0 >>>>\n", lseq);
6768c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR0);
6778c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR1);
6788c2ecf20Sopenharmony_ci
6798c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 1 MODE 1 >>>>\n", lseq);
6808c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR0);
6818c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR1);
6828c2ecf20Sopenharmony_ci
6838c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 1 MODE 2 >>>>\n", lseq);
6848c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, INVALID_DWORD_COUNT);
6858c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, DISPARITY_ERROR_COUNT);
6868c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, LOSS_OF_SYNC_COUNT);
6878c2ecf20Sopenharmony_ci
6888c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 1 MODE 4/5 >>>>\n", lseq);
6898c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, FRAME_TYPE_MASK);
6908c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, HASHED_SRC_ADDR_MASK_PRINT);
6918c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, NUM_FILL_BYTES_MASK);
6928c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, TAG_MASK);
6938c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, TARGET_PORT_XFER_TAG);
6948c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, DATA_OFFSET);
6958c2ecf20Sopenharmony_ci
6968c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 2 MODE 0 >>>>\n", lseq);
6978c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMER_TERM_TS);
6988c2ecf20Sopenharmony_ci	PRINT_LMIP_byte(asd_ha, lseq, DEVICE_BITS);
6998c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, SDB_DDB);
7008c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, SDB_NUM_TAGS);
7018c2ecf20Sopenharmony_ci	PRINT_LMIP_word(asd_ha, lseq, SDB_CURR_TAG);
7028c2ecf20Sopenharmony_ci
7038c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 2 MODE 1 >>>>\n", lseq);
7048c2ecf20Sopenharmony_ci	PRINT_LMIP_qword(asd_ha, lseq, TX_ID_ADDR_FRAME);
7058c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, OPEN_TIMER_TERM_TS);
7068c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SRST_AS_TIMER_TERM_TS);
7078c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, LAST_LOADED_SG_EL);
7088c2ecf20Sopenharmony_ci
7098c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 2 MODE 2 >>>>\n", lseq);
7108c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, CLOSE_TIMER_TERM_TS);
7118c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, BREAK_TIMER_TERM_TS);
7128c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, DWS_RESET_TIMER_TERM_TS);
7138c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMER_TERM_TS);
7148c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, MCTL_TIMER_TERM_TS);
7158c2ecf20Sopenharmony_ci
7168c2ecf20Sopenharmony_ci	asd_printk("LSEQ%d MDP 2 MODE 4/5 >>>>\n", lseq);
7178c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, COMINIT_TIMER_TERM_TS);
7188c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, RCV_ID_TIMER_TERM_TS);
7198c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMER_TERM_TS);
7208c2ecf20Sopenharmony_ci	PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TIMER_TERM_TS);
7218c2ecf20Sopenharmony_ci}
7228c2ecf20Sopenharmony_ci
7238c2ecf20Sopenharmony_ci#if 0
7248c2ecf20Sopenharmony_ci
7258c2ecf20Sopenharmony_ci/**
7268c2ecf20Sopenharmony_ci * asd_dump_ddb_site -- dump a CSEQ DDB site
7278c2ecf20Sopenharmony_ci * @asd_ha: pointer to host adapter structure
7288c2ecf20Sopenharmony_ci * @site_no: site number of interest
7298c2ecf20Sopenharmony_ci */
7308c2ecf20Sopenharmony_civoid asd_dump_target_ddb(struct asd_ha_struct *asd_ha, u16 site_no)
7318c2ecf20Sopenharmony_ci{
7328c2ecf20Sopenharmony_ci	if (site_no >= asd_ha->hw_prof.max_ddbs)
7338c2ecf20Sopenharmony_ci		return;
7348c2ecf20Sopenharmony_ci
7358c2ecf20Sopenharmony_ci#define DDB_FIELDB(__name)                                        \
7368c2ecf20Sopenharmony_ci	asd_ddbsite_read_byte(asd_ha, site_no,                    \
7378c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_ssp_smp_target_port, __name))
7388c2ecf20Sopenharmony_ci#define DDB2_FIELDB(__name)                                       \
7398c2ecf20Sopenharmony_ci	asd_ddbsite_read_byte(asd_ha, site_no,                    \
7408c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_stp_sata_target_port, __name))
7418c2ecf20Sopenharmony_ci#define DDB_FIELDW(__name)                                        \
7428c2ecf20Sopenharmony_ci	asd_ddbsite_read_word(asd_ha, site_no,                    \
7438c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_ssp_smp_target_port, __name))
7448c2ecf20Sopenharmony_ci
7458c2ecf20Sopenharmony_ci#define DDB_FIELDD(__name)                                         \
7468c2ecf20Sopenharmony_ci	asd_ddbsite_read_dword(asd_ha, site_no,                    \
7478c2ecf20Sopenharmony_ci			       offsetof(struct asd_ddb_ssp_smp_target_port, __name))
7488c2ecf20Sopenharmony_ci
7498c2ecf20Sopenharmony_ci	asd_printk("DDB: 0x%02x\n", site_no);
7508c2ecf20Sopenharmony_ci	asd_printk("conn_type: 0x%02x\n", DDB_FIELDB(conn_type));
7518c2ecf20Sopenharmony_ci	asd_printk("conn_rate: 0x%02x\n", DDB_FIELDB(conn_rate));
7528c2ecf20Sopenharmony_ci	asd_printk("init_conn_tag: 0x%04x\n", be16_to_cpu(DDB_FIELDW(init_conn_tag)));
7538c2ecf20Sopenharmony_ci	asd_printk("send_queue_head: 0x%04x\n", be16_to_cpu(DDB_FIELDW(send_queue_head)));
7548c2ecf20Sopenharmony_ci	asd_printk("sq_suspended: 0x%02x\n", DDB_FIELDB(sq_suspended));
7558c2ecf20Sopenharmony_ci	asd_printk("DDB Type: 0x%02x\n", DDB_FIELDB(ddb_type));
7568c2ecf20Sopenharmony_ci	asd_printk("AWT Default: 0x%04x\n", DDB_FIELDW(awt_def));
7578c2ecf20Sopenharmony_ci	asd_printk("compat_features: 0x%02x\n", DDB_FIELDB(compat_features));
7588c2ecf20Sopenharmony_ci	asd_printk("Pathway Blocked Count: 0x%02x\n",
7598c2ecf20Sopenharmony_ci		   DDB_FIELDB(pathway_blocked_count));
7608c2ecf20Sopenharmony_ci	asd_printk("arb_wait_time: 0x%04x\n", DDB_FIELDW(arb_wait_time));
7618c2ecf20Sopenharmony_ci	asd_printk("more_compat_features: 0x%08x\n",
7628c2ecf20Sopenharmony_ci		   DDB_FIELDD(more_compat_features));
7638c2ecf20Sopenharmony_ci	asd_printk("Conn Mask: 0x%02x\n", DDB_FIELDB(conn_mask));
7648c2ecf20Sopenharmony_ci	asd_printk("flags: 0x%02x\n", DDB_FIELDB(flags));
7658c2ecf20Sopenharmony_ci	asd_printk("flags2: 0x%02x\n", DDB2_FIELDB(flags2));
7668c2ecf20Sopenharmony_ci	asd_printk("ExecQ Tail: 0x%04x\n",DDB_FIELDW(exec_queue_tail));
7678c2ecf20Sopenharmony_ci	asd_printk("SendQ Tail: 0x%04x\n",DDB_FIELDW(send_queue_tail));
7688c2ecf20Sopenharmony_ci	asd_printk("Active Task Count: 0x%04x\n",
7698c2ecf20Sopenharmony_ci		   DDB_FIELDW(active_task_count));
7708c2ecf20Sopenharmony_ci	asd_printk("ITNL Reason: 0x%02x\n", DDB_FIELDB(itnl_reason));
7718c2ecf20Sopenharmony_ci	asd_printk("ITNL Timeout Const: 0x%04x\n", DDB_FIELDW(itnl_timeout));
7728c2ecf20Sopenharmony_ci	asd_printk("ITNL timestamp: 0x%08x\n", DDB_FIELDD(itnl_timestamp));
7738c2ecf20Sopenharmony_ci}
7748c2ecf20Sopenharmony_ci
7758c2ecf20Sopenharmony_civoid asd_dump_ddb_0(struct asd_ha_struct *asd_ha)
7768c2ecf20Sopenharmony_ci{
7778c2ecf20Sopenharmony_ci#define DDB0_FIELDB(__name)                                  \
7788c2ecf20Sopenharmony_ci	asd_ddbsite_read_byte(asd_ha, 0,                     \
7798c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_seq_shared, __name))
7808c2ecf20Sopenharmony_ci#define DDB0_FIELDW(__name)                                  \
7818c2ecf20Sopenharmony_ci	asd_ddbsite_read_word(asd_ha, 0,                     \
7828c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_seq_shared, __name))
7838c2ecf20Sopenharmony_ci
7848c2ecf20Sopenharmony_ci#define DDB0_FIELDD(__name)                                  \
7858c2ecf20Sopenharmony_ci	asd_ddbsite_read_dword(asd_ha,0 ,                    \
7868c2ecf20Sopenharmony_ci			       offsetof(struct asd_ddb_seq_shared, __name))
7878c2ecf20Sopenharmony_ci
7888c2ecf20Sopenharmony_ci#define DDB0_FIELDA(__name, _o)                              \
7898c2ecf20Sopenharmony_ci	asd_ddbsite_read_byte(asd_ha, 0,                     \
7908c2ecf20Sopenharmony_ci			      offsetof(struct asd_ddb_seq_shared, __name)+_o)
7918c2ecf20Sopenharmony_ci
7928c2ecf20Sopenharmony_ci
7938c2ecf20Sopenharmony_ci	asd_printk("DDB: 0\n");
7948c2ecf20Sopenharmony_ci	asd_printk("q_free_ddb_head:%04x\n", DDB0_FIELDW(q_free_ddb_head));
7958c2ecf20Sopenharmony_ci	asd_printk("q_free_ddb_tail:%04x\n", DDB0_FIELDW(q_free_ddb_tail));
7968c2ecf20Sopenharmony_ci	asd_printk("q_free_ddb_cnt:%04x\n",  DDB0_FIELDW(q_free_ddb_cnt));
7978c2ecf20Sopenharmony_ci	asd_printk("q_used_ddb_head:%04x\n", DDB0_FIELDW(q_used_ddb_head));
7988c2ecf20Sopenharmony_ci	asd_printk("q_used_ddb_tail:%04x\n", DDB0_FIELDW(q_used_ddb_tail));
7998c2ecf20Sopenharmony_ci	asd_printk("shared_mem_lock:%04x\n", DDB0_FIELDW(shared_mem_lock));
8008c2ecf20Sopenharmony_ci	asd_printk("smp_conn_tag:%04x\n",    DDB0_FIELDW(smp_conn_tag));
8018c2ecf20Sopenharmony_ci	asd_printk("est_nexus_buf_cnt:%04x\n", DDB0_FIELDW(est_nexus_buf_cnt));
8028c2ecf20Sopenharmony_ci	asd_printk("est_nexus_buf_thresh:%04x\n",
8038c2ecf20Sopenharmony_ci		   DDB0_FIELDW(est_nexus_buf_thresh));
8048c2ecf20Sopenharmony_ci	asd_printk("conn_not_active:%02x\n", DDB0_FIELDB(conn_not_active));
8058c2ecf20Sopenharmony_ci	asd_printk("phy_is_up:%02x\n",       DDB0_FIELDB(phy_is_up));
8068c2ecf20Sopenharmony_ci	asd_printk("port_map_by_links:%02x %02x %02x %02x "
8078c2ecf20Sopenharmony_ci		   "%02x %02x %02x %02x\n",
8088c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 0),
8098c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 1),
8108c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 2),
8118c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 3),
8128c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 4),
8138c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 5),
8148c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 6),
8158c2ecf20Sopenharmony_ci		   DDB0_FIELDA(port_map_by_links, 7));
8168c2ecf20Sopenharmony_ci}
8178c2ecf20Sopenharmony_ci
8188c2ecf20Sopenharmony_cistatic void asd_dump_scb_site(struct asd_ha_struct *asd_ha, u16 site_no)
8198c2ecf20Sopenharmony_ci{
8208c2ecf20Sopenharmony_ci
8218c2ecf20Sopenharmony_ci#define SCB_FIELDB(__name)                                                 \
8228c2ecf20Sopenharmony_ci	asd_scbsite_read_byte(asd_ha, site_no, sizeof(struct scb_header)   \
8238c2ecf20Sopenharmony_ci			      + offsetof(struct initiate_ssp_task, __name))
8248c2ecf20Sopenharmony_ci#define SCB_FIELDW(__name)                                                 \
8258c2ecf20Sopenharmony_ci	asd_scbsite_read_word(asd_ha, site_no, sizeof(struct scb_header)   \
8268c2ecf20Sopenharmony_ci			      + offsetof(struct initiate_ssp_task, __name))
8278c2ecf20Sopenharmony_ci#define SCB_FIELDD(__name)                                                 \
8288c2ecf20Sopenharmony_ci	asd_scbsite_read_dword(asd_ha, site_no, sizeof(struct scb_header)  \
8298c2ecf20Sopenharmony_ci			       + offsetof(struct initiate_ssp_task, __name))
8308c2ecf20Sopenharmony_ci
8318c2ecf20Sopenharmony_ci	asd_printk("Total Xfer Len: 0x%08x.\n", SCB_FIELDD(total_xfer_len));
8328c2ecf20Sopenharmony_ci	asd_printk("Frame Type: 0x%02x.\n", SCB_FIELDB(ssp_frame.frame_type));
8338c2ecf20Sopenharmony_ci	asd_printk("Tag: 0x%04x.\n", SCB_FIELDW(ssp_frame.tag));
8348c2ecf20Sopenharmony_ci	asd_printk("Target Port Xfer Tag: 0x%04x.\n",
8358c2ecf20Sopenharmony_ci		   SCB_FIELDW(ssp_frame.tptt));
8368c2ecf20Sopenharmony_ci	asd_printk("Data Offset: 0x%08x.\n", SCB_FIELDW(ssp_frame.data_offs));
8378c2ecf20Sopenharmony_ci	asd_printk("Retry Count: 0x%02x.\n", SCB_FIELDB(retry_count));
8388c2ecf20Sopenharmony_ci}
8398c2ecf20Sopenharmony_ci
8408c2ecf20Sopenharmony_ci/**
8418c2ecf20Sopenharmony_ci * asd_dump_scb_sites -- dump currently used CSEQ SCB sites
8428c2ecf20Sopenharmony_ci * @asd_ha: pointer to host adapter struct
8438c2ecf20Sopenharmony_ci */
8448c2ecf20Sopenharmony_civoid asd_dump_scb_sites(struct asd_ha_struct *asd_ha)
8458c2ecf20Sopenharmony_ci{
8468c2ecf20Sopenharmony_ci	u16	site_no;
8478c2ecf20Sopenharmony_ci
8488c2ecf20Sopenharmony_ci	for (site_no = 0; site_no < asd_ha->hw_prof.max_scbs; site_no++) {
8498c2ecf20Sopenharmony_ci		u8 opcode;
8508c2ecf20Sopenharmony_ci
8518c2ecf20Sopenharmony_ci		if (!SCB_SITE_VALID(site_no))
8528c2ecf20Sopenharmony_ci			continue;
8538c2ecf20Sopenharmony_ci
8548c2ecf20Sopenharmony_ci		/* We are only interested in SCB sites currently used.
8558c2ecf20Sopenharmony_ci		 */
8568c2ecf20Sopenharmony_ci		opcode = asd_scbsite_read_byte(asd_ha, site_no,
8578c2ecf20Sopenharmony_ci					       offsetof(struct scb_header,
8588c2ecf20Sopenharmony_ci							opcode));
8598c2ecf20Sopenharmony_ci		if (opcode == 0xFF)
8608c2ecf20Sopenharmony_ci			continue;
8618c2ecf20Sopenharmony_ci
8628c2ecf20Sopenharmony_ci		asd_printk("\nSCB: 0x%x\n", site_no);
8638c2ecf20Sopenharmony_ci		asd_dump_scb_site(asd_ha, site_no);
8648c2ecf20Sopenharmony_ci	}
8658c2ecf20Sopenharmony_ci}
8668c2ecf20Sopenharmony_ci
8678c2ecf20Sopenharmony_ci#endif  /*  0  */
8688c2ecf20Sopenharmony_ci
8698c2ecf20Sopenharmony_ci/**
8708c2ecf20Sopenharmony_ci * ads_dump_seq_state -- dump CSEQ and LSEQ states
8718c2ecf20Sopenharmony_ci * @asd_ha: pointer to host adapter structure
8728c2ecf20Sopenharmony_ci * @lseq_mask: mask of LSEQs of interest
8738c2ecf20Sopenharmony_ci */
8748c2ecf20Sopenharmony_civoid asd_dump_seq_state(struct asd_ha_struct *asd_ha, u8 lseq_mask)
8758c2ecf20Sopenharmony_ci{
8768c2ecf20Sopenharmony_ci	int lseq;
8778c2ecf20Sopenharmony_ci
8788c2ecf20Sopenharmony_ci	asd_dump_cseq_state(asd_ha);
8798c2ecf20Sopenharmony_ci
8808c2ecf20Sopenharmony_ci	if (lseq_mask != 0)
8818c2ecf20Sopenharmony_ci		for_each_sequencer(lseq_mask, lseq_mask, lseq)
8828c2ecf20Sopenharmony_ci			asd_dump_lseq_state(asd_ha, lseq);
8838c2ecf20Sopenharmony_ci}
8848c2ecf20Sopenharmony_ci
8858c2ecf20Sopenharmony_civoid asd_dump_frame_rcvd(struct asd_phy *phy,
8868c2ecf20Sopenharmony_ci			 struct done_list_struct *dl)
8878c2ecf20Sopenharmony_ci{
8888c2ecf20Sopenharmony_ci	unsigned long flags;
8898c2ecf20Sopenharmony_ci	int i;
8908c2ecf20Sopenharmony_ci
8918c2ecf20Sopenharmony_ci	switch ((dl->status_block[1] & 0x70) >> 3) {
8928c2ecf20Sopenharmony_ci	case SAS_PROTOCOL_STP:
8938c2ecf20Sopenharmony_ci		ASD_DPRINTK("STP proto device-to-host FIS:\n");
8948c2ecf20Sopenharmony_ci		break;
8958c2ecf20Sopenharmony_ci	default:
8968c2ecf20Sopenharmony_ci	case SAS_PROTOCOL_SSP:
8978c2ecf20Sopenharmony_ci		ASD_DPRINTK("SAS proto IDENTIFY:\n");
8988c2ecf20Sopenharmony_ci		break;
8998c2ecf20Sopenharmony_ci	}
9008c2ecf20Sopenharmony_ci	spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
9018c2ecf20Sopenharmony_ci	for (i = 0; i < phy->sas_phy.frame_rcvd_size; i+=4)
9028c2ecf20Sopenharmony_ci		ASD_DPRINTK("%02x: %02x %02x %02x %02x\n",
9038c2ecf20Sopenharmony_ci			    i,
9048c2ecf20Sopenharmony_ci			    phy->frame_rcvd[i],
9058c2ecf20Sopenharmony_ci			    phy->frame_rcvd[i+1],
9068c2ecf20Sopenharmony_ci			    phy->frame_rcvd[i+2],
9078c2ecf20Sopenharmony_ci			    phy->frame_rcvd[i+3]);
9088c2ecf20Sopenharmony_ci	spin_unlock_irqrestore(&phy->sas_phy.frame_rcvd_lock, flags);
9098c2ecf20Sopenharmony_ci}
9108c2ecf20Sopenharmony_ci
9118c2ecf20Sopenharmony_ci#if 0
9128c2ecf20Sopenharmony_ci
9138c2ecf20Sopenharmony_cistatic void asd_dump_scb(struct asd_ascb *ascb, int ind)
9148c2ecf20Sopenharmony_ci{
9158c2ecf20Sopenharmony_ci	asd_printk("scb%d: vaddr: 0x%p, dma_handle: 0x%llx, next: 0x%llx, "
9168c2ecf20Sopenharmony_ci		   "index:%d, opcode:0x%02x\n",
9178c2ecf20Sopenharmony_ci		   ind, ascb->dma_scb.vaddr,
9188c2ecf20Sopenharmony_ci		   (unsigned long long)ascb->dma_scb.dma_handle,
9198c2ecf20Sopenharmony_ci		   (unsigned long long)
9208c2ecf20Sopenharmony_ci		   le64_to_cpu(ascb->scb->header.next_scb),
9218c2ecf20Sopenharmony_ci		   le16_to_cpu(ascb->scb->header.index),
9228c2ecf20Sopenharmony_ci		   ascb->scb->header.opcode);
9238c2ecf20Sopenharmony_ci}
9248c2ecf20Sopenharmony_ci
9258c2ecf20Sopenharmony_civoid asd_dump_scb_list(struct asd_ascb *ascb, int num)
9268c2ecf20Sopenharmony_ci{
9278c2ecf20Sopenharmony_ci	int i = 0;
9288c2ecf20Sopenharmony_ci
9298c2ecf20Sopenharmony_ci	asd_printk("dumping %d scbs:\n", num);
9308c2ecf20Sopenharmony_ci
9318c2ecf20Sopenharmony_ci	asd_dump_scb(ascb, i++);
9328c2ecf20Sopenharmony_ci	--num;
9338c2ecf20Sopenharmony_ci
9348c2ecf20Sopenharmony_ci	if (num > 0 && !list_empty(&ascb->list)) {
9358c2ecf20Sopenharmony_ci		struct list_head *el;
9368c2ecf20Sopenharmony_ci
9378c2ecf20Sopenharmony_ci		list_for_each(el, &ascb->list) {
9388c2ecf20Sopenharmony_ci			struct asd_ascb *s = list_entry(el, struct asd_ascb,
9398c2ecf20Sopenharmony_ci							list);
9408c2ecf20Sopenharmony_ci			asd_dump_scb(s, i++);
9418c2ecf20Sopenharmony_ci			if (--num <= 0)
9428c2ecf20Sopenharmony_ci				break;
9438c2ecf20Sopenharmony_ci		}
9448c2ecf20Sopenharmony_ci	}
9458c2ecf20Sopenharmony_ci}
9468c2ecf20Sopenharmony_ci
9478c2ecf20Sopenharmony_ci#endif  /*  0  */
9488c2ecf20Sopenharmony_ci
9498c2ecf20Sopenharmony_ci#endif /* ASD_DEBUG */
950