1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (c) 2025 Hisilicon Limited. 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM hns_roce 8 9 #if !defined(__HNS_ROCE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 10 #define __HNS_ROCE_TRACE_H 11 12 #include <linux/tracepoint.h> 13 #include <linux/string_choices.h> 14 #include "hns_roce_device.h" 15 #include "hns_roce_hw_v2.h" 16 17 DECLARE_EVENT_CLASS(flush_head_template, 18 TP_PROTO(unsigned long qpn, u32 pi, 19 enum hns_roce_trace_type type), 20 TP_ARGS(qpn, pi, type), 21 22 TP_STRUCT__entry(__field(unsigned long, qpn) 23 __field(u32, pi) 24 __field(enum hns_roce_trace_type, type) 25 ), 26 27 TP_fast_assign(__entry->qpn = qpn; 28 __entry->pi = pi; 29 __entry->type = type; 30 ), 31 32 TP_printk("%s 0x%lx flush head 0x%x.", 33 trace_type_to_str(__entry->type), 34 __entry->qpn, __entry->pi) 35 ); 36 37 DEFINE_EVENT(flush_head_template, hns_sq_flush_cqe, 38 TP_PROTO(unsigned long qpn, u32 pi, 39 enum hns_roce_trace_type type), 40 TP_ARGS(qpn, pi, type)); 41 DEFINE_EVENT(flush_head_template, hns_rq_flush_cqe, 42 TP_PROTO(unsigned long qpn, u32 pi, 43 enum hns_roce_trace_type type), 44 TP_ARGS(qpn, pi, type)); 45 46 #define MAX_SGE_PER_WQE 64 47 #define MAX_WQE_SIZE (MAX_SGE_PER_WQE * HNS_ROCE_SGE_SIZE) 48 DECLARE_EVENT_CLASS(wqe_template, 49 TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, 50 u64 id, enum hns_roce_trace_type type), 51 TP_ARGS(qpn, idx, wqe, len, id, type), 52 53 TP_STRUCT__entry(__field(unsigned long, qpn) 54 __field(u32, idx) 55 __array(u32, wqe, 56 MAX_WQE_SIZE / sizeof(__le32)) 57 __field(u32, len) 58 __field(u64, id) 59 __field(enum hns_roce_trace_type, type) 60 ), 61 62 TP_fast_assign(__entry->qpn = qpn; 63 __entry->idx = idx; 64 __entry->id = id; 65 __entry->len = len / sizeof(__le32); 66 __entry->type = type; 67 for (int i = 0; i < __entry->len; i++) 68 __entry->wqe[i] = le32_to_cpu(((__le32 *)wqe)[i]); 69 ), 70 71 TP_printk("%s 0x%lx wqe(0x%x/0x%llx): %s", 72 trace_type_to_str(__entry->type), 73 __entry->qpn, __entry->idx, __entry->id, 74 __print_array(__entry->wqe, __entry->len, 75 sizeof(__le32))) 76 ); 77 78 DEFINE_EVENT(wqe_template, hns_sq_wqe, 79 TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id, 80 enum hns_roce_trace_type type), 81 TP_ARGS(qpn, idx, wqe, len, id, type)); 82 DEFINE_EVENT(wqe_template, hns_rq_wqe, 83 TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id, 84 enum hns_roce_trace_type type), 85 TP_ARGS(qpn, idx, wqe, len, id, type)); 86 DEFINE_EVENT(wqe_template, hns_srq_wqe, 87 TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id, 88 enum hns_roce_trace_type type), 89 TP_ARGS(qpn, idx, wqe, len, id, type)); 90 91 TRACE_EVENT(hns_ae_info, 92 TP_PROTO(int event_type, void *aeqe, unsigned int len), 93 TP_ARGS(event_type, aeqe, len), 94 95 TP_STRUCT__entry(__field(int, event_type) 96 __array(u32, aeqe, 97 HNS_ROCE_V3_EQE_SIZE / sizeof(__le32)) 98 __field(u32, len) 99 ), 100 101 TP_fast_assign(__entry->event_type = event_type; 102 __entry->len = len / sizeof(__le32); 103 for (int i = 0; i < __entry->len; i++) 104 __entry->aeqe[i] = le32_to_cpu(((__le32 *)aeqe)[i]); 105 ), 106 107 TP_printk("event %2d aeqe: %s", __entry->event_type, 108 __print_array(__entry->aeqe, __entry->len, sizeof(__le32))) 109 ); 110 111 TRACE_EVENT(hns_mr, 112 TP_PROTO(struct hns_roce_mr *mr), 113 TP_ARGS(mr), 114 115 TP_STRUCT__entry(__field(u64, iova) 116 __field(u64, size) 117 __field(u32, key) 118 __field(u32, pd) 119 __field(u32, pbl_hop_num) 120 __field(u32, npages) 121 __field(int, type) 122 __field(int, enabled) 123 ), 124 125 TP_fast_assign(__entry->iova = mr->iova; 126 __entry->size = mr->size; 127 __entry->key = mr->key; 128 __entry->pd = mr->pd; 129 __entry->pbl_hop_num = mr->pbl_hop_num; 130 __entry->npages = mr->npages; 131 __entry->type = mr->type; 132 __entry->enabled = mr->enabled; 133 ), 134 135 TP_printk("iova:0x%llx, size:%llu, key:%u, pd:%u, pbl_hop:%u, npages:%u, type:%d, status:%d", 136 __entry->iova, __entry->size, __entry->key, 137 __entry->pd, __entry->pbl_hop_num, __entry->npages, 138 __entry->type, __entry->enabled) 139 ); 140 141 TRACE_EVENT(hns_buf_attr, 142 TP_PROTO(struct hns_roce_buf_attr *attr), 143 TP_ARGS(attr), 144 145 TP_STRUCT__entry(__field(unsigned int, region_count) 146 __field(unsigned int, region0_size) 147 __field(int, region0_hopnum) 148 __field(unsigned int, region1_size) 149 __field(int, region1_hopnum) 150 __field(unsigned int, region2_size) 151 __field(int, region2_hopnum) 152 __field(unsigned int, page_shift) 153 __field(bool, mtt_only) 154 ), 155 156 TP_fast_assign(__entry->region_count = attr->region_count; 157 __entry->region0_size = attr->region[0].size; 158 __entry->region0_hopnum = attr->region[0].hopnum; 159 __entry->region1_size = attr->region[1].size; 160 __entry->region1_hopnum = attr->region[1].hopnum; 161 __entry->region2_size = attr->region[2].size; 162 __entry->region2_hopnum = attr->region[2].hopnum; 163 __entry->page_shift = attr->page_shift; 164 __entry->mtt_only = attr->mtt_only; 165 ), 166 167 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", 168 __entry->region_count, __entry->page_shift, 169 str_yes_no(__entry->mtt_only), 170 __entry->region0_size, __entry->region0_hopnum, 171 __entry->region1_size, __entry->region1_hopnum, 172 __entry->region2_size, __entry->region2_hopnum) 173 ); 174 175 DECLARE_EVENT_CLASS(cmdq, 176 TP_PROTO(struct hns_roce_dev *hr_dev, 177 struct hns_roce_cmq_desc *desc), 178 TP_ARGS(hr_dev, desc), 179 180 TP_STRUCT__entry(__string(dev_name, dev_name(hr_dev->dev)) 181 __field(u16, opcode) 182 __field(u16, flag) 183 __field(u16, retval) 184 __array(u32, data, 6) 185 ), 186 187 TP_fast_assign(__assign_str(dev_name); 188 __entry->opcode = le16_to_cpu(desc->opcode); 189 __entry->flag = le16_to_cpu(desc->flag); 190 __entry->retval = le16_to_cpu(desc->retval); 191 for (int i = 0; i < 6; i++) 192 __entry->data[i] = le32_to_cpu(desc->data[i]); 193 ), 194 195 TP_printk("%s cmdq opcode:0x%x, flag:0x%x, retval:0x%x, data:%s\n", 196 __get_str(dev_name), __entry->opcode, 197 __entry->flag, __entry->retval, 198 __print_array(__entry->data, 6, sizeof(__le32))) 199 ); 200 201 DEFINE_EVENT(cmdq, hns_cmdq_req, 202 TP_PROTO(struct hns_roce_dev *hr_dev, 203 struct hns_roce_cmq_desc *desc), 204 TP_ARGS(hr_dev, desc)); 205 DEFINE_EVENT(cmdq, hns_cmdq_resp, 206 TP_PROTO(struct hns_roce_dev *hr_dev, 207 struct hns_roce_cmq_desc *desc), 208 TP_ARGS(hr_dev, desc)); 209 210 #endif /* __HNS_ROCE_TRACE_H */ 211 212 #undef TRACE_INCLUDE_FILE 213 #define TRACE_INCLUDE_FILE hns_roce_trace 214 #undef TRACE_INCLUDE_PATH 215 #define TRACE_INCLUDE_PATH . 216 #include <trace/define_trace.h> 217