xref: /linux/drivers/infiniband/hw/hns/hns_roce_trace.h (revision dd91b5e1d6448794c07378d1be12e3261c8769e7)
102007e3dSJunxian Huang /* SPDX-License-Identifier: GPL-2.0+ */
202007e3dSJunxian Huang /*
302007e3dSJunxian Huang  * Copyright (c) 2025 Hisilicon Limited.
402007e3dSJunxian Huang  */
502007e3dSJunxian Huang 
602007e3dSJunxian Huang #undef TRACE_SYSTEM
702007e3dSJunxian Huang #define TRACE_SYSTEM hns_roce
802007e3dSJunxian Huang 
902007e3dSJunxian Huang #if !defined(__HNS_ROCE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
1002007e3dSJunxian Huang #define __HNS_ROCE_TRACE_H
1102007e3dSJunxian Huang 
1202007e3dSJunxian Huang #include <linux/tracepoint.h>
1348ffc152SJunxian Huang #include <linux/string_choices.h>
1402007e3dSJunxian Huang #include "hns_roce_device.h"
156bd18dabSJunxian Huang #include "hns_roce_hw_v2.h"
1602007e3dSJunxian Huang 
1702007e3dSJunxian Huang DECLARE_EVENT_CLASS(flush_head_template,
1802007e3dSJunxian Huang 		    TP_PROTO(unsigned long qpn, u32 pi,
1902007e3dSJunxian Huang 			     enum hns_roce_trace_type type),
2002007e3dSJunxian Huang 		    TP_ARGS(qpn, pi, type),
2102007e3dSJunxian Huang 
2202007e3dSJunxian Huang 		    TP_STRUCT__entry(__field(unsigned long, qpn)
2302007e3dSJunxian Huang 				     __field(u32, pi)
2402007e3dSJunxian Huang 				     __field(enum hns_roce_trace_type, type)
2502007e3dSJunxian Huang 		    ),
2602007e3dSJunxian Huang 
2702007e3dSJunxian Huang 		    TP_fast_assign(__entry->qpn = qpn;
2802007e3dSJunxian Huang 				   __entry->pi = pi;
2902007e3dSJunxian Huang 				   __entry->type = type;
3002007e3dSJunxian Huang 		    ),
3102007e3dSJunxian Huang 
3202007e3dSJunxian Huang 		    TP_printk("%s 0x%lx flush head 0x%x.",
3302007e3dSJunxian Huang 			      trace_type_to_str(__entry->type),
3402007e3dSJunxian Huang 			      __entry->qpn, __entry->pi)
3502007e3dSJunxian Huang );
3602007e3dSJunxian Huang 
3702007e3dSJunxian Huang DEFINE_EVENT(flush_head_template, hns_sq_flush_cqe,
3802007e3dSJunxian Huang 	     TP_PROTO(unsigned long qpn, u32 pi,
3902007e3dSJunxian Huang 		      enum hns_roce_trace_type type),
4002007e3dSJunxian Huang 	     TP_ARGS(qpn, pi, type));
4102007e3dSJunxian Huang DEFINE_EVENT(flush_head_template, hns_rq_flush_cqe,
4202007e3dSJunxian Huang 	     TP_PROTO(unsigned long qpn, u32 pi,
4302007e3dSJunxian Huang 		      enum hns_roce_trace_type type),
4402007e3dSJunxian Huang 	     TP_ARGS(qpn, pi, type));
4502007e3dSJunxian Huang 
466c98c867SJunxian Huang #define MAX_SGE_PER_WQE 64
476c98c867SJunxian Huang #define MAX_WQE_SIZE (MAX_SGE_PER_WQE * HNS_ROCE_SGE_SIZE)
486c98c867SJunxian Huang DECLARE_EVENT_CLASS(wqe_template,
496c98c867SJunxian Huang 		    TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len,
506c98c867SJunxian Huang 			     u64 id, enum hns_roce_trace_type type),
516c98c867SJunxian Huang 		    TP_ARGS(qpn, idx, wqe, len, id, type),
526c98c867SJunxian Huang 
536c98c867SJunxian Huang 		    TP_STRUCT__entry(__field(unsigned long, qpn)
546c98c867SJunxian Huang 				     __field(u32, idx)
55*6e7272afSJunxian Huang 				     __array(u32, wqe,
566c98c867SJunxian Huang 					     MAX_WQE_SIZE / sizeof(__le32))
576c98c867SJunxian Huang 				     __field(u32, len)
586c98c867SJunxian Huang 				     __field(u64, id)
596c98c867SJunxian Huang 				     __field(enum hns_roce_trace_type, type)
606c98c867SJunxian Huang 				     ),
616c98c867SJunxian Huang 
626c98c867SJunxian Huang 		    TP_fast_assign(__entry->qpn = qpn;
636c98c867SJunxian Huang 				   __entry->idx = idx;
646c98c867SJunxian Huang 				   __entry->id = id;
656c98c867SJunxian Huang 				   __entry->len = len / sizeof(__le32);
666c98c867SJunxian Huang 				   __entry->type = type;
67*6e7272afSJunxian Huang 				   for (int i = 0; i < __entry->len; i++)
68*6e7272afSJunxian Huang 					__entry->wqe[i] = le32_to_cpu(((__le32 *)wqe)[i]);
696c98c867SJunxian Huang 				   ),
706c98c867SJunxian Huang 
716c98c867SJunxian Huang 		    TP_printk("%s 0x%lx wqe(0x%x/0x%llx): %s",
726c98c867SJunxian Huang 			      trace_type_to_str(__entry->type),
736c98c867SJunxian Huang 			      __entry->qpn, __entry->idx, __entry->id,
746c98c867SJunxian Huang 			      __print_array(__entry->wqe, __entry->len,
756c98c867SJunxian Huang 					    sizeof(__le32)))
766c98c867SJunxian Huang );
776c98c867SJunxian Huang 
786c98c867SJunxian Huang DEFINE_EVENT(wqe_template, hns_sq_wqe,
796c98c867SJunxian Huang 	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
806c98c867SJunxian Huang 		      enum hns_roce_trace_type type),
816c98c867SJunxian Huang 	     TP_ARGS(qpn, idx, wqe, len, id, type));
826c98c867SJunxian Huang DEFINE_EVENT(wqe_template, hns_rq_wqe,
836c98c867SJunxian Huang 	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
846c98c867SJunxian Huang 		      enum hns_roce_trace_type type),
856c98c867SJunxian Huang 	     TP_ARGS(qpn, idx, wqe, len, id, type));
866c98c867SJunxian Huang DEFINE_EVENT(wqe_template, hns_srq_wqe,
876c98c867SJunxian Huang 	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
886c98c867SJunxian Huang 		      enum hns_roce_trace_type type),
896c98c867SJunxian Huang 	     TP_ARGS(qpn, idx, wqe, len, id, type));
906c98c867SJunxian Huang 
911e63e2f9SJunxian Huang TRACE_EVENT(hns_ae_info,
921e63e2f9SJunxian Huang 	    TP_PROTO(int event_type, void *aeqe, unsigned int len),
931e63e2f9SJunxian Huang 	    TP_ARGS(event_type, aeqe, len),
941e63e2f9SJunxian Huang 
951e63e2f9SJunxian Huang 	    TP_STRUCT__entry(__field(int, event_type)
96*6e7272afSJunxian Huang 			     __array(u32, aeqe,
971e63e2f9SJunxian Huang 				     HNS_ROCE_V3_EQE_SIZE / sizeof(__le32))
981e63e2f9SJunxian Huang 			     __field(u32, len)
991e63e2f9SJunxian Huang 	    ),
1001e63e2f9SJunxian Huang 
1011e63e2f9SJunxian Huang 	    TP_fast_assign(__entry->event_type = event_type;
1021e63e2f9SJunxian Huang 			   __entry->len = len / sizeof(__le32);
103*6e7272afSJunxian Huang 			   for (int i = 0; i < __entry->len; i++)
104*6e7272afSJunxian Huang 				__entry->aeqe[i] = le32_to_cpu(((__le32 *)aeqe)[i]);
1051e63e2f9SJunxian Huang 	    ),
1061e63e2f9SJunxian Huang 
1071e63e2f9SJunxian Huang 	    TP_printk("event %2d aeqe: %s", __entry->event_type,
1081e63e2f9SJunxian Huang 		      __print_array(__entry->aeqe, __entry->len, sizeof(__le32)))
1091e63e2f9SJunxian Huang );
1101e63e2f9SJunxian Huang 
11148ffc152SJunxian Huang TRACE_EVENT(hns_mr,
11248ffc152SJunxian Huang 	    TP_PROTO(struct hns_roce_mr *mr),
11348ffc152SJunxian Huang 	    TP_ARGS(mr),
11448ffc152SJunxian Huang 
11548ffc152SJunxian Huang 	    TP_STRUCT__entry(__field(u64, iova)
11648ffc152SJunxian Huang 			     __field(u64, size)
11748ffc152SJunxian Huang 			     __field(u32, key)
11848ffc152SJunxian Huang 			     __field(u32, pd)
11948ffc152SJunxian Huang 			     __field(u32, pbl_hop_num)
12048ffc152SJunxian Huang 			     __field(u32, npages)
12148ffc152SJunxian Huang 			     __field(int, type)
12248ffc152SJunxian Huang 			     __field(int, enabled)
12348ffc152SJunxian Huang 	    ),
12448ffc152SJunxian Huang 
12548ffc152SJunxian Huang 	    TP_fast_assign(__entry->iova = mr->iova;
12648ffc152SJunxian Huang 			   __entry->size = mr->size;
12748ffc152SJunxian Huang 			   __entry->key = mr->key;
12848ffc152SJunxian Huang 			   __entry->pd = mr->pd;
12948ffc152SJunxian Huang 			   __entry->pbl_hop_num = mr->pbl_hop_num;
13048ffc152SJunxian Huang 			   __entry->npages = mr->npages;
13148ffc152SJunxian Huang 			   __entry->type = mr->type;
13248ffc152SJunxian Huang 			   __entry->enabled = mr->enabled;
13348ffc152SJunxian Huang 	    ),
13448ffc152SJunxian Huang 
13548ffc152SJunxian Huang 	    TP_printk("iova:0x%llx, size:%llu, key:%u, pd:%u, pbl_hop:%u, npages:%u, type:%d, status:%d",
13648ffc152SJunxian Huang 		      __entry->iova, __entry->size, __entry->key,
13748ffc152SJunxian Huang 		      __entry->pd, __entry->pbl_hop_num, __entry->npages,
13848ffc152SJunxian Huang 		      __entry->type, __entry->enabled)
13948ffc152SJunxian Huang );
14048ffc152SJunxian Huang 
14148ffc152SJunxian Huang TRACE_EVENT(hns_buf_attr,
14248ffc152SJunxian Huang 	    TP_PROTO(struct hns_roce_buf_attr *attr),
14348ffc152SJunxian Huang 	    TP_ARGS(attr),
14448ffc152SJunxian Huang 
14548ffc152SJunxian Huang 	    TP_STRUCT__entry(__field(unsigned int, region_count)
14648ffc152SJunxian Huang 			     __field(unsigned int, region0_size)
14748ffc152SJunxian Huang 			     __field(int, region0_hopnum)
14848ffc152SJunxian Huang 			     __field(unsigned int, region1_size)
14948ffc152SJunxian Huang 			     __field(int, region1_hopnum)
15048ffc152SJunxian Huang 			     __field(unsigned int, region2_size)
15148ffc152SJunxian Huang 			     __field(int, region2_hopnum)
15248ffc152SJunxian Huang 			     __field(unsigned int, page_shift)
15348ffc152SJunxian Huang 			     __field(bool, mtt_only)
15448ffc152SJunxian Huang 	    ),
15548ffc152SJunxian Huang 
15648ffc152SJunxian Huang 	    TP_fast_assign(__entry->region_count = attr->region_count;
15748ffc152SJunxian Huang 			   __entry->region0_size = attr->region[0].size;
15848ffc152SJunxian Huang 			   __entry->region0_hopnum = attr->region[0].hopnum;
15948ffc152SJunxian Huang 			   __entry->region1_size = attr->region[1].size;
16048ffc152SJunxian Huang 			   __entry->region1_hopnum = attr->region[1].hopnum;
16148ffc152SJunxian Huang 			   __entry->region2_size = attr->region[2].size;
16248ffc152SJunxian Huang 			   __entry->region2_hopnum = attr->region[2].hopnum;
16348ffc152SJunxian Huang 			   __entry->page_shift = attr->page_shift;
16448ffc152SJunxian Huang 			   __entry->mtt_only = attr->mtt_only;
16548ffc152SJunxian Huang 	    ),
16648ffc152SJunxian Huang 
16748ffc152SJunxian Huang 	    TP_printk("rg cnt:%u, pg_sft:0x%x, mtt_only:%s, rg 0 (sz:%u, hop:%u), rg 1 (sz:%u, hop:%u), rg 2 (sz:%u, hop:%u)\n",
16848ffc152SJunxian Huang 		      __entry->region_count, __entry->page_shift,
16948ffc152SJunxian Huang 		      str_yes_no(__entry->mtt_only),
17048ffc152SJunxian Huang 		      __entry->region0_size, __entry->region0_hopnum,
17148ffc152SJunxian Huang 		      __entry->region1_size, __entry->region1_hopnum,
17248ffc152SJunxian Huang 		      __entry->region2_size, __entry->region2_hopnum)
17348ffc152SJunxian Huang );
17448ffc152SJunxian Huang 
1756bd18dabSJunxian Huang DECLARE_EVENT_CLASS(cmdq,
1766bd18dabSJunxian Huang 		    TP_PROTO(struct hns_roce_dev *hr_dev,
1776bd18dabSJunxian Huang 			     struct hns_roce_cmq_desc *desc),
1786bd18dabSJunxian Huang 		    TP_ARGS(hr_dev, desc),
1796bd18dabSJunxian Huang 
1806bd18dabSJunxian Huang 		    TP_STRUCT__entry(__string(dev_name, dev_name(hr_dev->dev))
1816bd18dabSJunxian Huang 				     __field(u16, opcode)
1826bd18dabSJunxian Huang 				     __field(u16, flag)
1836bd18dabSJunxian Huang 				     __field(u16, retval)
184*6e7272afSJunxian Huang 				     __array(u32, data, 6)
1856bd18dabSJunxian Huang 		    ),
1866bd18dabSJunxian Huang 
1876bd18dabSJunxian Huang 		    TP_fast_assign(__assign_str(dev_name);
1886bd18dabSJunxian Huang 				   __entry->opcode = le16_to_cpu(desc->opcode);
1896bd18dabSJunxian Huang 				   __entry->flag = le16_to_cpu(desc->flag);
1906bd18dabSJunxian Huang 				   __entry->retval = le16_to_cpu(desc->retval);
191*6e7272afSJunxian Huang 				   for (int i = 0; i < 6; i++)
192*6e7272afSJunxian Huang 					__entry->data[i] = le32_to_cpu(desc->data[i]);
1936bd18dabSJunxian Huang 		    ),
1946bd18dabSJunxian Huang 
1956bd18dabSJunxian Huang 		    TP_printk("%s cmdq opcode:0x%x, flag:0x%x, retval:0x%x, data:%s\n",
1966bd18dabSJunxian Huang 			      __get_str(dev_name), __entry->opcode,
1976bd18dabSJunxian Huang 			      __entry->flag, __entry->retval,
1986bd18dabSJunxian Huang 			      __print_array(__entry->data, 6, sizeof(__le32)))
1996bd18dabSJunxian Huang );
2006bd18dabSJunxian Huang 
2016bd18dabSJunxian Huang DEFINE_EVENT(cmdq, hns_cmdq_req,
2026bd18dabSJunxian Huang 	     TP_PROTO(struct hns_roce_dev *hr_dev,
2036bd18dabSJunxian Huang 		      struct hns_roce_cmq_desc *desc),
2046bd18dabSJunxian Huang 	     TP_ARGS(hr_dev, desc));
2056bd18dabSJunxian Huang DEFINE_EVENT(cmdq, hns_cmdq_resp,
2066bd18dabSJunxian Huang 	     TP_PROTO(struct hns_roce_dev *hr_dev,
2076bd18dabSJunxian Huang 		      struct hns_roce_cmq_desc *desc),
2086bd18dabSJunxian Huang 	     TP_ARGS(hr_dev, desc));
2096bd18dabSJunxian Huang 
21002007e3dSJunxian Huang #endif /* __HNS_ROCE_TRACE_H */
21102007e3dSJunxian Huang 
21202007e3dSJunxian Huang #undef TRACE_INCLUDE_FILE
21302007e3dSJunxian Huang #define TRACE_INCLUDE_FILE hns_roce_trace
21402007e3dSJunxian Huang #undef TRACE_INCLUDE_PATH
21502007e3dSJunxian Huang #define TRACE_INCLUDE_PATH .
21602007e3dSJunxian Huang #include <trace/define_trace.h>
217