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