linux/drivers/usb/mtu3/mtu3_trace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/**
   3 * mtu3_trace.h - trace support
   4 *
   5 * Copyright (C) 2019 MediaTek Inc.
   6 *
   7 * Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
   8 */
   9
  10#undef TRACE_SYSTEM
  11#define TRACE_SYSTEM mtu3
  12
  13#if !defined(__MTU3_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
  14#define __MTU3_TRACE_H__
  15
  16#include <linux/types.h>
  17#include <linux/tracepoint.h>
  18
  19#include "mtu3.h"
  20
  21#define MTU3_MSG_MAX    256
  22
  23TRACE_EVENT(mtu3_log,
  24        TP_PROTO(struct device *dev, struct va_format *vaf),
  25        TP_ARGS(dev, vaf),
  26        TP_STRUCT__entry(
  27                __string(name, dev_name(dev))
  28                __dynamic_array(char, msg, MTU3_MSG_MAX)
  29        ),
  30        TP_fast_assign(
  31                __assign_str(name, dev_name(dev));
  32                vsnprintf(__get_str(msg), MTU3_MSG_MAX, vaf->fmt, *vaf->va);
  33        ),
  34        TP_printk("%s: %s", __get_str(name), __get_str(msg))
  35);
  36
  37TRACE_EVENT(mtu3_u3_ltssm_isr,
  38        TP_PROTO(u32 intr),
  39        TP_ARGS(intr),
  40        TP_STRUCT__entry(
  41                __field(u32, intr)
  42        ),
  43        TP_fast_assign(
  44                __entry->intr = intr;
  45        ),
  46        TP_printk("(%08x) %s %s %s %s %s %s", __entry->intr,
  47                __entry->intr & HOT_RST_INTR ? "HOT_RST" : "",
  48                __entry->intr & WARM_RST_INTR ? "WARM_RST" : "",
  49                __entry->intr & ENTER_U3_INTR ? "ENT_U3" : "",
  50                __entry->intr & EXIT_U3_INTR ? "EXIT_U3" : "",
  51                __entry->intr & VBUS_RISE_INTR ? "VBUS_RISE" : "",
  52                __entry->intr & VBUS_FALL_INTR ? "VBUS_FALL" : ""
  53        )
  54);
  55
  56TRACE_EVENT(mtu3_u2_common_isr,
  57        TP_PROTO(u32 intr),
  58        TP_ARGS(intr),
  59        TP_STRUCT__entry(
  60                __field(u32, intr)
  61        ),
  62        TP_fast_assign(
  63                __entry->intr = intr;
  64        ),
  65        TP_printk("(%08x) %s %s %s", __entry->intr,
  66                __entry->intr & SUSPEND_INTR ? "SUSPEND" : "",
  67                __entry->intr & RESUME_INTR ? "RESUME" : "",
  68                __entry->intr & RESET_INTR ? "RESET" : ""
  69        )
  70);
  71
  72TRACE_EVENT(mtu3_qmu_isr,
  73        TP_PROTO(u32 done_intr, u32 exp_intr),
  74        TP_ARGS(done_intr, exp_intr),
  75        TP_STRUCT__entry(
  76                __field(u32, done_intr)
  77                __field(u32, exp_intr)
  78        ),
  79        TP_fast_assign(
  80                __entry->done_intr = done_intr;
  81                __entry->exp_intr = exp_intr;
  82        ),
  83        TP_printk("done (tx %04x, rx %04x), exp (%08x)",
  84                __entry->done_intr & 0xffff,
  85                __entry->done_intr >> 16,
  86                __entry->exp_intr
  87        )
  88);
  89
  90DECLARE_EVENT_CLASS(mtu3_log_setup,
  91        TP_PROTO(struct usb_ctrlrequest *setup),
  92        TP_ARGS(setup),
  93        TP_STRUCT__entry(
  94                __field(__u8, bRequestType)
  95                __field(__u8, bRequest)
  96                __field(__u16, wValue)
  97                __field(__u16, wIndex)
  98                __field(__u16, wLength)
  99        ),
 100        TP_fast_assign(
 101                __entry->bRequestType = setup->bRequestType;
 102                __entry->bRequest = setup->bRequest;
 103                __entry->wValue = le16_to_cpu(setup->wValue);
 104                __entry->wIndex = le16_to_cpu(setup->wIndex);
 105                __entry->wLength = le16_to_cpu(setup->wLength);
 106        ),
 107        TP_printk("setup - %02x %02x %04x %04x %04x",
 108                __entry->bRequestType, __entry->bRequest,
 109                __entry->wValue, __entry->wIndex, __entry->wLength
 110        )
 111);
 112
 113DEFINE_EVENT(mtu3_log_setup, mtu3_handle_setup,
 114        TP_PROTO(struct usb_ctrlrequest *setup),
 115        TP_ARGS(setup)
 116);
 117
 118DECLARE_EVENT_CLASS(mtu3_log_request,
 119        TP_PROTO(struct mtu3_request *mreq),
 120        TP_ARGS(mreq),
 121        TP_STRUCT__entry(
 122                __string(name, mreq->mep->name)
 123                __field(struct mtu3_request *, mreq)
 124                __field(struct qmu_gpd *, gpd)
 125                __field(unsigned int, actual)
 126                __field(unsigned int, length)
 127                __field(int, status)
 128                __field(int, zero)
 129                __field(int, no_interrupt)
 130        ),
 131        TP_fast_assign(
 132                __assign_str(name, mreq->mep->name);
 133                __entry->mreq = mreq;
 134                __entry->gpd = mreq->gpd;
 135                __entry->actual = mreq->request.actual;
 136                __entry->length = mreq->request.length;
 137                __entry->status = mreq->request.status;
 138                __entry->zero = mreq->request.zero;
 139                __entry->no_interrupt = mreq->request.no_interrupt;
 140        ),
 141        TP_printk("%s: req %p gpd %p len %u/%u %s%s --> %d",
 142                __get_str(name), __entry->mreq, __entry->gpd,
 143                __entry->actual, __entry->length,
 144                __entry->zero ? "Z" : "z",
 145                __entry->no_interrupt ? "i" : "I",
 146                __entry->status
 147        )
 148);
 149
 150DEFINE_EVENT(mtu3_log_request, mtu3_alloc_request,
 151        TP_PROTO(struct mtu3_request *req),
 152        TP_ARGS(req)
 153);
 154
 155DEFINE_EVENT(mtu3_log_request, mtu3_free_request,
 156        TP_PROTO(struct mtu3_request *req),
 157        TP_ARGS(req)
 158);
 159
 160DEFINE_EVENT(mtu3_log_request, mtu3_gadget_queue,
 161        TP_PROTO(struct mtu3_request *req),
 162        TP_ARGS(req)
 163);
 164
 165DEFINE_EVENT(mtu3_log_request, mtu3_gadget_dequeue,
 166        TP_PROTO(struct mtu3_request *req),
 167        TP_ARGS(req)
 168);
 169
 170DEFINE_EVENT(mtu3_log_request, mtu3_req_complete,
 171        TP_PROTO(struct mtu3_request *req),
 172        TP_ARGS(req)
 173);
 174
 175DECLARE_EVENT_CLASS(mtu3_log_gpd,
 176        TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd),
 177        TP_ARGS(mep, gpd),
 178        TP_STRUCT__entry(
 179                __string(name, mep->name)
 180                __field(struct qmu_gpd *, gpd)
 181                __field(u32, dw0)
 182                __field(u32, dw1)
 183                __field(u32, dw2)
 184                __field(u32, dw3)
 185        ),
 186        TP_fast_assign(
 187                __assign_str(name, mep->name);
 188                __entry->gpd = gpd;
 189                __entry->dw0 = le32_to_cpu(gpd->dw0_info);
 190                __entry->dw1 = le32_to_cpu(gpd->next_gpd);
 191                __entry->dw2 = le32_to_cpu(gpd->buffer);
 192                __entry->dw3 = le32_to_cpu(gpd->dw3_info);
 193        ),
 194        TP_printk("%s: gpd %p - %08x %08x %08x %08x",
 195                __get_str(name), __entry->gpd,
 196                __entry->dw0, __entry->dw1,
 197                __entry->dw2, __entry->dw3
 198        )
 199);
 200
 201DEFINE_EVENT(mtu3_log_gpd, mtu3_prepare_gpd,
 202        TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd),
 203        TP_ARGS(mep, gpd)
 204);
 205
 206DEFINE_EVENT(mtu3_log_gpd, mtu3_complete_gpd,
 207        TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd),
 208        TP_ARGS(mep, gpd)
 209);
 210
 211DEFINE_EVENT(mtu3_log_gpd, mtu3_zlp_exp_gpd,
 212        TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd),
 213        TP_ARGS(mep, gpd)
 214);
 215
 216DECLARE_EVENT_CLASS(mtu3_log_ep,
 217        TP_PROTO(struct mtu3_ep *mep),
 218        TP_ARGS(mep),
 219        TP_STRUCT__entry(
 220                __string(name, mep->name)
 221                __field(unsigned int, type)
 222                __field(unsigned int, slot)
 223                __field(unsigned int, maxp)
 224                __field(unsigned int, mult)
 225                __field(unsigned int, maxburst)
 226                __field(unsigned int, flags)
 227                __field(unsigned int, direction)
 228                __field(struct mtu3_gpd_ring *, gpd_ring)
 229        ),
 230        TP_fast_assign(
 231                __assign_str(name, mep->name);
 232                __entry->type = mep->type;
 233                __entry->slot = mep->slot;
 234                __entry->maxp = mep->ep.maxpacket;
 235                __entry->mult = mep->ep.mult;
 236                __entry->maxburst = mep->ep.maxburst;
 237                __entry->flags = mep->flags;
 238                __entry->direction = mep->is_in;
 239                __entry->gpd_ring = &mep->gpd_ring;
 240        ),
 241        TP_printk("%s: type %d maxp %d slot %d mult %d burst %d ring %p/%pad flags %c:%c%c%c:%c",
 242                __get_str(name), __entry->type,
 243                __entry->maxp, __entry->slot,
 244                __entry->mult, __entry->maxburst,
 245                __entry->gpd_ring, &__entry->gpd_ring->dma,
 246                __entry->flags & MTU3_EP_ENABLED ? 'E' : 'e',
 247                __entry->flags & MTU3_EP_STALL ? 'S' : 's',
 248                __entry->flags & MTU3_EP_WEDGE ? 'W' : 'w',
 249                __entry->flags & MTU3_EP_BUSY ? 'B' : 'b',
 250                __entry->direction ? '<' : '>'
 251        )
 252);
 253
 254DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_enable,
 255        TP_PROTO(struct mtu3_ep *mep),
 256        TP_ARGS(mep)
 257);
 258
 259DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_disable,
 260        TP_PROTO(struct mtu3_ep *mep),
 261        TP_ARGS(mep)
 262);
 263
 264DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_set_halt,
 265        TP_PROTO(struct mtu3_ep *mep),
 266        TP_ARGS(mep)
 267);
 268
 269#endif /* __MTU3_TRACE_H__ */
 270
 271/* this part has to be here */
 272
 273#undef TRACE_INCLUDE_PATH
 274#define TRACE_INCLUDE_PATH .
 275
 276#undef TRACE_INCLUDE_FILE
 277#define TRACE_INCLUDE_FILE mtu3_trace
 278
 279#include <trace/define_trace.h>
 280