Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * Copyright(c) 2015 - 2020 Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * This file is provided under a dual BSD/GPLv2 license.  When using or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * redistributing this file, you may do so under either license.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * GPL LICENSE SUMMARY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * it under the terms of version 2 of the GNU General Public License as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * published by the Free Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * This program is distributed in the hope that it will be useful, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  * BSD LICENSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)  * modification, are permitted provided that the following conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)  * are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  *  - Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  *    notice, this list of conditions and the following disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  *  - Redistributions in binary form must reproduce the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  *    notice, this list of conditions and the following disclaimer in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  *    the documentation and/or other materials provided with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  *    distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  *  - Neither the name of Intel Corporation nor the names of its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  *    contributors may be used to endorse or promote products derived
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  *    from this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define CREATE_TRACE_POINTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #include "trace.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #include "exp_rcv.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #include "ipoib.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) static u8 __get_ib_hdr_len(struct ib_header *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	struct ib_other_headers *ohdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	u8 opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 		ohdr = &hdr->u.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 		ohdr = &hdr->u.l.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	return hdr_len_by_opcode[opcode] == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	       0 : hdr_len_by_opcode[opcode] - (12 + 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) static u8 __get_16b_hdr_len(struct hfi1_16b_header *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	struct ib_other_headers *ohdr = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	u8 opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	u8 l4 = hfi1_16B_get_l4(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	if (l4 == OPA_16B_L4_FM) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 		opcode = IB_OPCODE_UD_SEND_ONLY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 		return (8 + 8); /* No BTH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	if (l4 == OPA_16B_L4_IB_LOCAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 		ohdr = &hdr->u.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 		ohdr = &hdr->u.l.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	return hdr_len_by_opcode[opcode] == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	       0 : hdr_len_by_opcode[opcode] - (12 + 8 + 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	if (packet->etype != RHF_RCV_TYPE_BYPASS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 		return __get_ib_hdr_len(packet->hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 		return __get_16b_hdr_len(packet->hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opa_hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	if (!opa_hdr->hdr_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 		return __get_ib_hdr_len(&opa_hdr->ibh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		return __get_16b_hdr_len(&opa_hdr->opah);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) const char *hfi1_trace_get_packet_l4_str(u8 l4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	if (l4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 		return "16B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 		return "9B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) const char *hfi1_trace_get_packet_l2_str(u8 l2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	switch (l2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	case 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 		return "0";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 		return "1";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	case 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 		return "16B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 		return "9B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	return "";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define IMM_PRN  "imm:%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define DETH_PRN "deth qkey:0x%.8x sqpn:0x%.6x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define DETH_ENTROPY_PRN "deth qkey:0x%.8x sqpn:0x%.6x entropy:0x%.2x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define IETH_PRN "ieth rkey:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define ATOMICACKETH_PRN "origdata:%llx"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define ATOMICETH_PRN "vaddr:0x%llx rkey:0x%.8x sdata:%llx cdata:%llx"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define TID_RDMA_KDETH "kdeth0 0x%x kdeth1 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define TID_RDMA_KDETH_DATA "kdeth0 0x%x: kver %u sh %u intr %u tidctrl %u tid %x offset %x kdeth1 0x%x: jkey %x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define TID_READ_REQ_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define TID_READ_RSP_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define TID_WRITE_REQ_PRN "original_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define TID_WRITE_RSP_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define TID_WRITE_DATA_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define TID_ACK_PRN "tid_flow_psn 0x%x verbs_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define TID_RESYNC_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define OP(transport, op) IB_OPCODE_## transport ## _ ## op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) static const char *parse_syndrome(u8 syndrome)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	switch (syndrome >> 5) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	case 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 		return "ACK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 		return "RNRNAK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 		return "NAK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	return "";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 			     u8 *ack, bool *becn, bool *fecn, u8 *mig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 			     u8 *se, u8 *pad, u8 *opcode, u8 *tver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 			     u16 *pkey, u32 *psn, u32 *qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	*ack = ib_bth_get_ackreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	*becn = ib_bth_get_becn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	*fecn = ib_bth_get_fecn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	*mig = ib_bth_get_migreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	*se = ib_bth_get_se(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	*pad = ib_bth_get_pad(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	*opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	*tver = ib_bth_get_tver(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	*pkey = ib_bth_get_pkey(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	*psn = mask_psn(ib_bth_get_psn(ohdr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	*qpn = ib_bth_get_qpn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 			      u8 *ack, u8 *mig, u8 *opcode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 			      u8 *pad, u8 *se, u8 *tver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 			      u32 *psn, u32 *qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	*ack = ib_bth_get_ackreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	*mig = ib_bth_get_migreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	*opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	*pad = ib_bth_get_pad(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	*se = ib_bth_get_se(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	*tver = ib_bth_get_tver(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	*psn = mask_psn(ib_bth_get_psn(ohdr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	*qpn = ib_bth_get_qpn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 			     u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 			     u16 *len, u32 *dlid, u32 *slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	*lnh = ib_get_lnh(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	*lver = ib_get_lver(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	*sl = ib_get_sl(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	*sc = ib_get_sc(hdr) | (sc5 << 4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	*len = ib_get_len(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	*dlid = ib_get_dlid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	*slid = ib_get_slid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) void hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 			      u8 *age, bool *becn, bool *fecn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 			      u8 *l4, u8 *rc, u8 *sc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 			      u16 *entropy, u16 *len, u16 *pkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 			      u32 *dlid, u32 *slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	*age = hfi1_16B_get_age(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	*becn = hfi1_16B_get_becn(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	*fecn = hfi1_16B_get_fecn(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	*l4 = hfi1_16B_get_l4(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	*rc = hfi1_16B_get_rc(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	*sc = hfi1_16B_get_sc(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	*entropy = hfi1_16B_get_entropy(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	*len = hfi1_16B_get_len(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	*pkey = hfi1_16B_get_pkey(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	*dlid = hfi1_16B_get_dlid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	*slid = hfi1_16B_get_slid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define LRH_PRN "len:%d sc:%d dlid:0x%.4x slid:0x%.4x "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define LRH_9B_PRN "lnh:%d,%s lver:%d sl:%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define LRH_16B_PRN "age:%d becn:%d fecn:%d l4:%d " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 		    "rc:%d sc:%d pkey:0x%.4x entropy:0x%.4x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) const char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 			       u8 age, bool becn, bool fecn, u8 l4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 			       u8 lnh, const char *lnh_name, u8 lver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 			       u8 rc, u8 sc, u8 sl, u16 entropy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 			       u16 len, u16 pkey, u32 dlid, u32 slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	trace_seq_printf(p, LRH_PRN, len, sc, dlid, slid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	if (bypass)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 		trace_seq_printf(p, LRH_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 				 age, becn, fecn, l4, rc, sc, pkey, entropy);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 		trace_seq_printf(p, LRH_9B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 				 lnh, lnh_name, lver, sl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define BTH_9B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	"op:0x%.2x,%s se:%d m:%d pad:%d tver:%d pkey:0x%.4x " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	"f:%d b:%d qpn:0x%.6x a:%d psn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define BTH_16B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	"op:0x%.2x,%s se:%d m:%d pad:%d tver:%d " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	"qpn:0x%.6x a:%d psn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define L4_FM_16B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	"op:0x%.2x,%s dest_qpn:0x%.6x src_qpn:0x%.6x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) const char *hfi1_trace_fmt_rest(struct trace_seq *p, bool bypass, u8 l4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 				u8 ack, bool becn, bool fecn, u8 mig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 				u8 se, u8 pad, u8 opcode, const char *opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 				u8 tver, u16 pkey, u32 psn, u32 qpn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 				u32 dest_qpn, u32 src_qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	if (bypass)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 		if (l4 == OPA_16B_L4_FM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 			trace_seq_printf(p, L4_FM_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 					 opcode, opname, dest_qpn, src_qpn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 			trace_seq_printf(p, BTH_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 					 opcode, opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 					 se, mig, pad, tver, qpn, ack, psn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 		trace_seq_printf(p, BTH_9B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 				 opcode, opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 				 se, mig, pad, tver, pkey, fecn, becn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 				 qpn, ack, psn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) const char *parse_everbs_hdrs(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	u8 opcode, u8 l4, u32 dest_qpn, u32 src_qpn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	void *ehdrs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	union ib_ehdrs *eh = ehdrs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	if (l4 == OPA_16B_L4_FM) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 		trace_seq_printf(p, "mgmt pkt");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 		goto out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	switch (opcode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	/* imm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	case OP(RC, SEND_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	case OP(UC, SEND_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	case OP(RC, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	case OP(UC, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	case OP(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	case OP(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 		trace_seq_printf(p, IMM_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 				 be32_to_cpu(eh->imm_data));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	/* reth + imm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	case OP(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	case OP(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 		trace_seq_printf(p, RETH_PRN " " IMM_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 				 get_ib_reth_vaddr(&eh->rc.reth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 				 be32_to_cpu(eh->rc.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 				 be32_to_cpu(eh->rc.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 				 be32_to_cpu(eh->rc.imm_data));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	/* reth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	case OP(RC, RDMA_READ_REQUEST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	case OP(RC, RDMA_WRITE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	case OP(UC, RDMA_WRITE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	case OP(RC, RDMA_WRITE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	case OP(UC, RDMA_WRITE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 		trace_seq_printf(p, RETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 				 get_ib_reth_vaddr(&eh->rc.reth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 				 be32_to_cpu(eh->rc.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 				 be32_to_cpu(eh->rc.reth.length));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	case OP(RC, RDMA_READ_RESPONSE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	case OP(RC, RDMA_READ_RESPONSE_LAST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	case OP(RC, RDMA_READ_RESPONSE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	case OP(RC, ACKNOWLEDGE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 		trace_seq_printf(p, AETH_PRN, be32_to_cpu(eh->aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 				 parse_syndrome(be32_to_cpu(eh->aeth) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 				 be32_to_cpu(eh->aeth) & IB_MSN_MASK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	case OP(TID_RDMA, WRITE_REQ):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 		trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 				 TID_WRITE_REQ_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 				 le32_to_cpu(eh->tid_rdma.w_req.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 				 le32_to_cpu(eh->tid_rdma.w_req.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 				 ib_u64_get(&eh->tid_rdma.w_req.reth.vaddr),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 				 be32_to_cpu(eh->tid_rdma.w_req.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 				 be32_to_cpu(eh->tid_rdma.w_req.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 				 be32_to_cpu(eh->tid_rdma.w_req.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	case OP(TID_RDMA, WRITE_RESP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 		trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 				 TID_WRITE_RSP_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 				 le32_to_cpu(eh->tid_rdma.w_rsp.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 				 le32_to_cpu(eh->tid_rdma.w_rsp.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 				 be32_to_cpu(eh->tid_rdma.w_rsp.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 				 parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 					 be32_to_cpu(eh->tid_rdma.w_rsp.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 					 >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 				 (be32_to_cpu(eh->tid_rdma.w_rsp.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 				  IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 				 be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 				 be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 				 be32_to_cpu(eh->tid_rdma.w_rsp.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	case OP(TID_RDMA, WRITE_DATA_LAST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	case OP(TID_RDMA, WRITE_DATA):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 		trace_seq_printf(p, TID_RDMA_KDETH_DATA " " TID_WRITE_DATA_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 				 le32_to_cpu(eh->tid_rdma.w_data.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, KVER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, SH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, INTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, TIDCTRL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, TID),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth0, OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 				 le32_to_cpu(eh->tid_rdma.w_data.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 				 KDETH_GET(eh->tid_rdma.w_data.kdeth1, JKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 				 be32_to_cpu(eh->tid_rdma.w_data.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	case OP(TID_RDMA, READ_REQ):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 		trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 				 TID_READ_REQ_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 				 le32_to_cpu(eh->tid_rdma.r_req.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 				 le32_to_cpu(eh->tid_rdma.r_req.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 				 ib_u64_get(&eh->tid_rdma.r_req.reth.vaddr),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 				 be32_to_cpu(eh->tid_rdma.r_req.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 				 be32_to_cpu(eh->tid_rdma.r_req.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 				 be32_to_cpu(eh->tid_rdma.r_req.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 				 be32_to_cpu(eh->tid_rdma.r_req.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 				 be32_to_cpu(eh->tid_rdma.r_req.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	case OP(TID_RDMA, READ_RESP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 		trace_seq_printf(p, TID_RDMA_KDETH_DATA " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 				 TID_READ_RSP_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 				 le32_to_cpu(eh->tid_rdma.r_rsp.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, KVER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, SH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, INTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TIDCTRL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TID),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 				 le32_to_cpu(eh->tid_rdma.r_rsp.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 				 KDETH_GET(eh->tid_rdma.r_rsp.kdeth1, JKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 				 be32_to_cpu(eh->tid_rdma.r_rsp.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 				 parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 					 be32_to_cpu(eh->tid_rdma.r_rsp.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 					 >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 				 (be32_to_cpu(eh->tid_rdma.r_rsp.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 				  IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 				 be32_to_cpu(eh->tid_rdma.r_rsp.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	case OP(TID_RDMA, ACK):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 		trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 				 TID_ACK_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 				 le32_to_cpu(eh->tid_rdma.ack.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 				 le32_to_cpu(eh->tid_rdma.ack.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 				 be32_to_cpu(eh->tid_rdma.ack.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 				 parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 					 be32_to_cpu(eh->tid_rdma.ack.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 					 >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 				 (be32_to_cpu(eh->tid_rdma.ack.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 				  IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 				 be32_to_cpu(eh->tid_rdma.ack.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 				 be32_to_cpu(eh->tid_rdma.ack.verbs_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 				 be32_to_cpu(eh->tid_rdma.ack.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 				 be32_to_cpu(eh->tid_rdma.ack.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	case OP(TID_RDMA, RESYNC):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 		trace_seq_printf(p, TID_RDMA_KDETH " " TID_RESYNC_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 				 le32_to_cpu(eh->tid_rdma.resync.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 				 le32_to_cpu(eh->tid_rdma.resync.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 				 be32_to_cpu(eh->tid_rdma.resync.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	/* aeth + atomicacketh */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	case OP(RC, ATOMIC_ACKNOWLEDGE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 		trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 				 be32_to_cpu(eh->at.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 				 parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 				 be32_to_cpu(eh->at.aeth) & IB_MSN_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 				 ib_u64_get(&eh->at.atomic_ack_eth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	/* atomiceth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	case OP(RC, COMPARE_SWAP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	case OP(RC, FETCH_ADD):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 		trace_seq_printf(p, ATOMICETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 				 get_ib_ateth_vaddr(&eh->atomic_eth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 				 eh->atomic_eth.rkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 				 get_ib_ateth_swap(&eh->atomic_eth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 				 get_ib_ateth_compare(&eh->atomic_eth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	/* deth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	case OP(UD, SEND_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 		trace_seq_printf(p, DETH_ENTROPY_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 				 be32_to_cpu(eh->ud.deth[0]),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 				 be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 				 be32_to_cpu(eh->ud.deth[1]) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 					     HFI1_IPOIB_ENTROPY_SHIFT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	case OP(UD, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 		trace_seq_printf(p, DETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 				 be32_to_cpu(eh->ud.deth[0]),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 				 be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	/* ieth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	case OP(RC, SEND_LAST_WITH_INVALIDATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	case OP(RC, SEND_ONLY_WITH_INVALIDATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 		trace_seq_printf(p, IETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 				 be32_to_cpu(eh->ieth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) out:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) const char *parse_sdma_flags(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 	u64 desc0, u64 desc1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	char flags[5] = { 'x', 'x', 'x', 'x', 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	flags[0] = (desc1 & SDMA_DESC1_INT_REQ_FLAG) ? 'I' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	flags[1] = (desc1 & SDMA_DESC1_HEAD_TO_HOST_FLAG) ?  'H' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 	flags[2] = (desc0 & SDMA_DESC0_FIRST_DESC_FLAG) ? 'F' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	flags[3] = (desc0 & SDMA_DESC0_LAST_DESC_FLAG) ? 'L' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	trace_seq_printf(p, "%s", flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	if (desc0 & SDMA_DESC0_FIRST_DESC_FLAG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 		trace_seq_printf(p, " amode:%u aidx:%u alen:%u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 				 (u8)((desc1 >> SDMA_DESC1_HEADER_MODE_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 				      SDMA_DESC1_HEADER_MODE_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 				 (u8)((desc1 >> SDMA_DESC1_HEADER_INDEX_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 				      SDMA_DESC1_HEADER_INDEX_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 				 (u8)((desc1 >> SDMA_DESC1_HEADER_DWS_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 				      SDMA_DESC1_HEADER_DWS_MASK));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) const char *print_u32_array(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 	struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 	u32 *arr, int len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 	for (i = 0; i < len ; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 		trace_seq_printf(p, "%s%#x", i == 0 ? "" : " ", arr[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) u8 hfi1_trace_get_tid_ctrl(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	return EXP_TID_GET(ent, CTRL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) u16 hfi1_trace_get_tid_len(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	return EXP_TID_GET(ent, LEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) u16 hfi1_trace_get_tid_idx(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	return EXP_TID_GET(ent, IDX);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) struct hfi1_ctxt_hist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	atomic_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	atomic_t data[255];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) struct hfi1_ctxt_hist hist = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 	.count = ATOMIC_INIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) const char *hfi1_trace_print_rsm_hist(struct trace_seq *p, unsigned int ctxt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	int i, len = ARRAY_SIZE(hist.data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	unsigned long packet_count = atomic_fetch_inc(&hist.count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	trace_seq_printf(p, "packet[%lu]", packet_count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	for (i = 0; i < len; ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 		unsigned long val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 		atomic_t *count = &hist.data[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 		if (ctxt == i)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 			val = atomic_fetch_inc(count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 			val = atomic_read(count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 		if (val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 			trace_seq_printf(p, "(%d:%lu)", i, val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) __hfi1_trace_fn(AFFINITY);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) __hfi1_trace_fn(PKT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __hfi1_trace_fn(PROC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) __hfi1_trace_fn(SDMA);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) __hfi1_trace_fn(LINKVERB);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) __hfi1_trace_fn(DEBUG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) __hfi1_trace_fn(SNOOP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) __hfi1_trace_fn(CNTR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __hfi1_trace_fn(PIO);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) __hfi1_trace_fn(DC8051);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __hfi1_trace_fn(FIRMWARE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __hfi1_trace_fn(RCVCTRL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) __hfi1_trace_fn(TID);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) __hfi1_trace_fn(MMU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) __hfi1_trace_fn(IOCTL);