qla_dbg.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * QLogic Fibre Channel HBA Driver
  4. * Copyright (c) 2003-2014 QLogic Corporation
  5. */
  6. #include "qla_def.h"
  7. /*
  8. * Firmware Dump structure definition
  9. */
  10. struct qla2300_fw_dump {
  11. __be16 hccr;
  12. __be16 pbiu_reg[8];
  13. __be16 risc_host_reg[8];
  14. __be16 mailbox_reg[32];
  15. __be16 resp_dma_reg[32];
  16. __be16 dma_reg[48];
  17. __be16 risc_hdw_reg[16];
  18. __be16 risc_gp0_reg[16];
  19. __be16 risc_gp1_reg[16];
  20. __be16 risc_gp2_reg[16];
  21. __be16 risc_gp3_reg[16];
  22. __be16 risc_gp4_reg[16];
  23. __be16 risc_gp5_reg[16];
  24. __be16 risc_gp6_reg[16];
  25. __be16 risc_gp7_reg[16];
  26. __be16 frame_buf_hdw_reg[64];
  27. __be16 fpm_b0_reg[64];
  28. __be16 fpm_b1_reg[64];
  29. __be16 risc_ram[0xf800];
  30. __be16 stack_ram[0x1000];
  31. __be16 data_ram[1];
  32. };
  33. struct qla2100_fw_dump {
  34. __be16 hccr;
  35. __be16 pbiu_reg[8];
  36. __be16 mailbox_reg[32];
  37. __be16 dma_reg[48];
  38. __be16 risc_hdw_reg[16];
  39. __be16 risc_gp0_reg[16];
  40. __be16 risc_gp1_reg[16];
  41. __be16 risc_gp2_reg[16];
  42. __be16 risc_gp3_reg[16];
  43. __be16 risc_gp4_reg[16];
  44. __be16 risc_gp5_reg[16];
  45. __be16 risc_gp6_reg[16];
  46. __be16 risc_gp7_reg[16];
  47. __be16 frame_buf_hdw_reg[16];
  48. __be16 fpm_b0_reg[64];
  49. __be16 fpm_b1_reg[64];
  50. __be16 risc_ram[0xf000];
  51. u8 queue_dump[];
  52. };
  53. struct qla24xx_fw_dump {
  54. __be32 host_status;
  55. __be32 host_reg[32];
  56. __be32 shadow_reg[7];
  57. __be16 mailbox_reg[32];
  58. __be32 xseq_gp_reg[128];
  59. __be32 xseq_0_reg[16];
  60. __be32 xseq_1_reg[16];
  61. __be32 rseq_gp_reg[128];
  62. __be32 rseq_0_reg[16];
  63. __be32 rseq_1_reg[16];
  64. __be32 rseq_2_reg[16];
  65. __be32 cmd_dma_reg[16];
  66. __be32 req0_dma_reg[15];
  67. __be32 resp0_dma_reg[15];
  68. __be32 req1_dma_reg[15];
  69. __be32 xmt0_dma_reg[32];
  70. __be32 xmt1_dma_reg[32];
  71. __be32 xmt2_dma_reg[32];
  72. __be32 xmt3_dma_reg[32];
  73. __be32 xmt4_dma_reg[32];
  74. __be32 xmt_data_dma_reg[16];
  75. __be32 rcvt0_data_dma_reg[32];
  76. __be32 rcvt1_data_dma_reg[32];
  77. __be32 risc_gp_reg[128];
  78. __be32 lmc_reg[112];
  79. __be32 fpm_hdw_reg[192];
  80. __be32 fb_hdw_reg[176];
  81. __be32 code_ram[0x2000];
  82. __be32 ext_mem[1];
  83. };
  84. struct qla25xx_fw_dump {
  85. __be32 host_status;
  86. __be32 host_risc_reg[32];
  87. __be32 pcie_regs[4];
  88. __be32 host_reg[32];
  89. __be32 shadow_reg[11];
  90. __be32 risc_io_reg;
  91. __be16 mailbox_reg[32];
  92. __be32 xseq_gp_reg[128];
  93. __be32 xseq_0_reg[48];
  94. __be32 xseq_1_reg[16];
  95. __be32 rseq_gp_reg[128];
  96. __be32 rseq_0_reg[32];
  97. __be32 rseq_1_reg[16];
  98. __be32 rseq_2_reg[16];
  99. __be32 aseq_gp_reg[128];
  100. __be32 aseq_0_reg[32];
  101. __be32 aseq_1_reg[16];
  102. __be32 aseq_2_reg[16];
  103. __be32 cmd_dma_reg[16];
  104. __be32 req0_dma_reg[15];
  105. __be32 resp0_dma_reg[15];
  106. __be32 req1_dma_reg[15];
  107. __be32 xmt0_dma_reg[32];
  108. __be32 xmt1_dma_reg[32];
  109. __be32 xmt2_dma_reg[32];
  110. __be32 xmt3_dma_reg[32];
  111. __be32 xmt4_dma_reg[32];
  112. __be32 xmt_data_dma_reg[16];
  113. __be32 rcvt0_data_dma_reg[32];
  114. __be32 rcvt1_data_dma_reg[32];
  115. __be32 risc_gp_reg[128];
  116. __be32 lmc_reg[128];
  117. __be32 fpm_hdw_reg[192];
  118. __be32 fb_hdw_reg[192];
  119. __be32 code_ram[0x2000];
  120. __be32 ext_mem[1];
  121. };
  122. struct qla81xx_fw_dump {
  123. __be32 host_status;
  124. __be32 host_risc_reg[32];
  125. __be32 pcie_regs[4];
  126. __be32 host_reg[32];
  127. __be32 shadow_reg[11];
  128. __be32 risc_io_reg;
  129. __be16 mailbox_reg[32];
  130. __be32 xseq_gp_reg[128];
  131. __be32 xseq_0_reg[48];
  132. __be32 xseq_1_reg[16];
  133. __be32 rseq_gp_reg[128];
  134. __be32 rseq_0_reg[32];
  135. __be32 rseq_1_reg[16];
  136. __be32 rseq_2_reg[16];
  137. __be32 aseq_gp_reg[128];
  138. __be32 aseq_0_reg[32];
  139. __be32 aseq_1_reg[16];
  140. __be32 aseq_2_reg[16];
  141. __be32 cmd_dma_reg[16];
  142. __be32 req0_dma_reg[15];
  143. __be32 resp0_dma_reg[15];
  144. __be32 req1_dma_reg[15];
  145. __be32 xmt0_dma_reg[32];
  146. __be32 xmt1_dma_reg[32];
  147. __be32 xmt2_dma_reg[32];
  148. __be32 xmt3_dma_reg[32];
  149. __be32 xmt4_dma_reg[32];
  150. __be32 xmt_data_dma_reg[16];
  151. __be32 rcvt0_data_dma_reg[32];
  152. __be32 rcvt1_data_dma_reg[32];
  153. __be32 risc_gp_reg[128];
  154. __be32 lmc_reg[128];
  155. __be32 fpm_hdw_reg[224];
  156. __be32 fb_hdw_reg[208];
  157. __be32 code_ram[0x2000];
  158. __be32 ext_mem[1];
  159. };
  160. struct qla83xx_fw_dump {
  161. __be32 host_status;
  162. __be32 host_risc_reg[48];
  163. __be32 pcie_regs[4];
  164. __be32 host_reg[32];
  165. __be32 shadow_reg[11];
  166. __be32 risc_io_reg;
  167. __be16 mailbox_reg[32];
  168. __be32 xseq_gp_reg[256];
  169. __be32 xseq_0_reg[48];
  170. __be32 xseq_1_reg[16];
  171. __be32 xseq_2_reg[16];
  172. __be32 rseq_gp_reg[256];
  173. __be32 rseq_0_reg[32];
  174. __be32 rseq_1_reg[16];
  175. __be32 rseq_2_reg[16];
  176. __be32 rseq_3_reg[16];
  177. __be32 aseq_gp_reg[256];
  178. __be32 aseq_0_reg[32];
  179. __be32 aseq_1_reg[16];
  180. __be32 aseq_2_reg[16];
  181. __be32 aseq_3_reg[16];
  182. __be32 cmd_dma_reg[64];
  183. __be32 req0_dma_reg[15];
  184. __be32 resp0_dma_reg[15];
  185. __be32 req1_dma_reg[15];
  186. __be32 xmt0_dma_reg[32];
  187. __be32 xmt1_dma_reg[32];
  188. __be32 xmt2_dma_reg[32];
  189. __be32 xmt3_dma_reg[32];
  190. __be32 xmt4_dma_reg[32];
  191. __be32 xmt_data_dma_reg[16];
  192. __be32 rcvt0_data_dma_reg[32];
  193. __be32 rcvt1_data_dma_reg[32];
  194. __be32 risc_gp_reg[128];
  195. __be32 lmc_reg[128];
  196. __be32 fpm_hdw_reg[256];
  197. __be32 rq0_array_reg[256];
  198. __be32 rq1_array_reg[256];
  199. __be32 rp0_array_reg[256];
  200. __be32 rp1_array_reg[256];
  201. __be32 queue_control_reg[16];
  202. __be32 fb_hdw_reg[432];
  203. __be32 at0_array_reg[128];
  204. __be32 code_ram[0x2400];
  205. __be32 ext_mem[1];
  206. };
  207. #define EFT_NUM_BUFFERS 4
  208. #define EFT_BYTES_PER_BUFFER 0x4000
  209. #define EFT_SIZE ((EFT_BYTES_PER_BUFFER) * (EFT_NUM_BUFFERS))
  210. #define FCE_NUM_BUFFERS 64
  211. #define FCE_BYTES_PER_BUFFER 0x400
  212. #define FCE_SIZE ((FCE_BYTES_PER_BUFFER) * (FCE_NUM_BUFFERS))
  213. #define fce_calc_size(b) ((FCE_BYTES_PER_BUFFER) * (b))
  214. struct qla2xxx_fce_chain {
  215. __be32 type;
  216. __be32 chain_size;
  217. __be32 size;
  218. __be32 addr_l;
  219. __be32 addr_h;
  220. __be32 eregs[8];
  221. };
  222. /* used by exchange off load and extended login offload */
  223. struct qla2xxx_offld_chain {
  224. __be32 type;
  225. __be32 chain_size;
  226. __be32 size;
  227. __be32 reserved;
  228. __be64 addr;
  229. };
  230. struct qla2xxx_mq_chain {
  231. __be32 type;
  232. __be32 chain_size;
  233. __be32 count;
  234. __be32 qregs[4 * QLA_MQ_SIZE];
  235. };
  236. struct qla2xxx_mqueue_header {
  237. __be32 queue;
  238. #define TYPE_REQUEST_QUEUE 0x1
  239. #define TYPE_RESPONSE_QUEUE 0x2
  240. #define TYPE_ATIO_QUEUE 0x3
  241. __be32 number;
  242. __be32 size;
  243. };
  244. struct qla2xxx_mqueue_chain {
  245. __be32 type;
  246. __be32 chain_size;
  247. };
  248. #define DUMP_CHAIN_VARIANT 0x80000000
  249. #define DUMP_CHAIN_FCE 0x7FFFFAF0
  250. #define DUMP_CHAIN_MQ 0x7FFFFAF1
  251. #define DUMP_CHAIN_QUEUE 0x7FFFFAF2
  252. #define DUMP_CHAIN_EXLOGIN 0x7FFFFAF3
  253. #define DUMP_CHAIN_EXCHG 0x7FFFFAF4
  254. #define DUMP_CHAIN_LAST 0x80000000
  255. struct qla2xxx_fw_dump {
  256. uint8_t signature[4];
  257. __be32 version;
  258. __be32 fw_major_version;
  259. __be32 fw_minor_version;
  260. __be32 fw_subminor_version;
  261. __be32 fw_attributes;
  262. __be32 vendor;
  263. __be32 device;
  264. __be32 subsystem_vendor;
  265. __be32 subsystem_device;
  266. __be32 fixed_size;
  267. __be32 mem_size;
  268. __be32 req_q_size;
  269. __be32 rsp_q_size;
  270. __be32 eft_size;
  271. __be32 eft_addr_l;
  272. __be32 eft_addr_h;
  273. __be32 header_size;
  274. union {
  275. struct qla2100_fw_dump isp21;
  276. struct qla2300_fw_dump isp23;
  277. struct qla24xx_fw_dump isp24;
  278. struct qla25xx_fw_dump isp25;
  279. struct qla81xx_fw_dump isp81;
  280. struct qla83xx_fw_dump isp83;
  281. } isp;
  282. };
  283. #define QL_MSGHDR "qla2xxx"
  284. #define QL_DBG_DEFAULT1_MASK 0x1e600000
  285. #define ql_log_fatal 0 /* display fatal errors */
  286. #define ql_log_warn 1 /* display critical errors */
  287. #define ql_log_info 2 /* display all recovered errors */
  288. #define ql_log_all 3 /* This value is only used by ql_errlev.
  289. * No messages will use this value.
  290. * This should be always highest value
  291. * as compared to other log levels.
  292. */
  293. extern uint ql_errlev;
  294. void __attribute__((format (printf, 4, 5)))
  295. ql_dbg(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
  296. void __attribute__((format (printf, 4, 5)))
  297. ql_dbg_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
  298. void __attribute__((format (printf, 4, 5)))
  299. ql_dbg_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
  300. void __attribute__((format (printf, 4, 5)))
  301. ql_log(uint, scsi_qla_host_t *vha, uint, const char *fmt, ...);
  302. void __attribute__((format (printf, 4, 5)))
  303. ql_log_pci(uint, struct pci_dev *pdev, uint, const char *fmt, ...);
  304. void __attribute__((format (printf, 4, 5)))
  305. ql_log_qp(uint32_t, struct qla_qpair *, int32_t, const char *fmt, ...);
  306. /* Debug Levels */
  307. /* The 0x40000000 is the max value any debug level can have
  308. * as ql2xextended_error_logging is of type signed int
  309. */
  310. #define ql_dbg_init 0x40000000 /* Init Debug */
  311. #define ql_dbg_mbx 0x20000000 /* MBX Debug */
  312. #define ql_dbg_disc 0x10000000 /* Device Discovery Debug */
  313. #define ql_dbg_io 0x08000000 /* IO Tracing Debug */
  314. #define ql_dbg_dpc 0x04000000 /* DPC Thead Debug */
  315. #define ql_dbg_async 0x02000000 /* Async events Debug */
  316. #define ql_dbg_timer 0x01000000 /* Timer Debug */
  317. #define ql_dbg_user 0x00800000 /* User Space Interations Debug */
  318. #define ql_dbg_taskm 0x00400000 /* Task Management Debug */
  319. #define ql_dbg_aer 0x00200000 /* AER/EEH Debug */
  320. #define ql_dbg_multiq 0x00100000 /* MultiQ Debug */
  321. #define ql_dbg_p3p 0x00080000 /* P3P specific Debug */
  322. #define ql_dbg_vport 0x00040000 /* Virtual Port Debug */
  323. #define ql_dbg_buffer 0x00020000 /* For dumping the buffer/regs */
  324. #define ql_dbg_misc 0x00010000 /* For dumping everything that is not
  325. * not covered by upper categories
  326. */
  327. #define ql_dbg_verbose 0x00008000 /* More verbosity for each level
  328. * This is to be used with other levels where
  329. * more verbosity is required. It might not
  330. * be applicable to all the levels.
  331. */
  332. #define ql_dbg_tgt 0x00004000 /* Target mode */
  333. #define ql_dbg_tgt_mgt 0x00002000 /* Target mode management */
  334. #define ql_dbg_tgt_tmr 0x00001000 /* Target mode task management */
  335. #define ql_dbg_tgt_dif 0x00000800 /* Target mode dif */
  336. #define ql_dbg_edif 0x00000400 /* edif and purex debug */
  337. extern int qla27xx_dump_mpi_ram(struct qla_hw_data *, uint32_t, uint32_t *,
  338. uint32_t, void **);
  339. extern int qla24xx_dump_ram(struct qla_hw_data *, uint32_t, __be32 *,
  340. uint32_t, void **);
  341. extern void qla24xx_pause_risc(struct device_reg_24xx __iomem *,
  342. struct qla_hw_data *);
  343. extern int qla24xx_soft_reset(struct qla_hw_data *);
  344. static inline int
  345. ql_mask_match(uint level)
  346. {
  347. if (ql2xextended_error_logging == 1)
  348. ql2xextended_error_logging = QL_DBG_DEFAULT1_MASK;
  349. return level && ((level & ql2xextended_error_logging) == level);
  350. }
  351. static inline int
  352. ql_mask_match_ext(uint level, int *log_tunable)
  353. {
  354. if (*log_tunable == 1)
  355. *log_tunable = QL_DBG_DEFAULT1_MASK;
  356. return (level & *log_tunable) == level;
  357. }
  358. /* Assumes local variable pbuf and pbuf_ready present. */
  359. #define ql_ktrace(dbg_msg, level, pbuf, pdev, vha, id, fmt) do { \
  360. struct va_format _vaf; \
  361. va_list _va; \
  362. u32 dbg_off = dbg_msg ? ql_dbg_offset : 0; \
  363. \
  364. pbuf[0] = 0; \
  365. if (!trace_ql_dbg_log_enabled()) \
  366. break; \
  367. \
  368. if (dbg_msg && !ql_mask_match_ext(level, \
  369. &ql2xextended_error_logging_ktrace)) \
  370. break; \
  371. \
  372. ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), pdev, vha, id + dbg_off); \
  373. \
  374. va_start(_va, fmt); \
  375. _vaf.fmt = fmt; \
  376. _vaf.va = &_va; \
  377. \
  378. trace_ql_dbg_log(pbuf, &_vaf); \
  379. \
  380. va_end(_va); \
  381. } while (0)
  382. #define QLA_ENABLE_KERNEL_TRACING
  383. #ifdef QLA_ENABLE_KERNEL_TRACING
  384. #define QLA_TRACE_ENABLE(_tr) \
  385. trace_array_set_clr_event(_tr, "qla", NULL, true)
  386. #else /* QLA_ENABLE_KERNEL_TRACING */
  387. #define QLA_TRACE_ENABLE(_tr)
  388. #endif /* QLA_ENABLE_KERNEL_TRACING */