162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * USBHS-DEV device controller driver. 462306a36Sopenharmony_ci * Trace support header file. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2023 Cadence. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Author: Pawel Laszczak <pawell@cadence.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#undef TRACE_SYSTEM 1262306a36Sopenharmony_ci#define TRACE_SYSTEM cdns2-dev 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* 1562306a36Sopenharmony_ci * The TRACE_SYSTEM_VAR defaults to TRACE_SYSTEM, but must be a 1662306a36Sopenharmony_ci * legitimate C variable. It is not exported to user space. 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_ci#undef TRACE_SYSTEM_VAR 1962306a36Sopenharmony_ci#define TRACE_SYSTEM_VAR cdns2_dev 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#if !defined(__LINUX_CDNS2_TRACE) || defined(TRACE_HEADER_MULTI_READ) 2262306a36Sopenharmony_ci#define __LINUX_CDNS2_TRACE 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#include <linux/types.h> 2562306a36Sopenharmony_ci#include <linux/tracepoint.h> 2662306a36Sopenharmony_ci#include <asm/byteorder.h> 2762306a36Sopenharmony_ci#include <linux/usb/ch9.h> 2862306a36Sopenharmony_ci#include "cdns2-gadget.h" 2962306a36Sopenharmony_ci#include "cdns2-debug.h" 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define CDNS2_MSG_MAX 500 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_enable_disable, 3462306a36Sopenharmony_ci TP_PROTO(int set), 3562306a36Sopenharmony_ci TP_ARGS(set), 3662306a36Sopenharmony_ci TP_STRUCT__entry( 3762306a36Sopenharmony_ci __field(int, set) 3862306a36Sopenharmony_ci ), 3962306a36Sopenharmony_ci TP_fast_assign( 4062306a36Sopenharmony_ci __entry->set = set; 4162306a36Sopenharmony_ci ), 4262306a36Sopenharmony_ci TP_printk("%s", __entry->set ? "enabled" : "disabled") 4362306a36Sopenharmony_ci); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_enable_disable, cdns2_pullup, 4662306a36Sopenharmony_ci TP_PROTO(int set), 4762306a36Sopenharmony_ci TP_ARGS(set) 4862306a36Sopenharmony_ci); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_enable_disable, cdns2_lpm, 5162306a36Sopenharmony_ci TP_PROTO(int set), 5262306a36Sopenharmony_ci TP_ARGS(set) 5362306a36Sopenharmony_ci); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_enable_disable, cdns2_may_wakeup, 5662306a36Sopenharmony_ci TP_PROTO(int set), 5762306a36Sopenharmony_ci TP_ARGS(set) 5862306a36Sopenharmony_ci); 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_simple, 6162306a36Sopenharmony_ci TP_PROTO(char *msg), 6262306a36Sopenharmony_ci TP_ARGS(msg), 6362306a36Sopenharmony_ci TP_STRUCT__entry( 6462306a36Sopenharmony_ci __string(text, msg) 6562306a36Sopenharmony_ci ), 6662306a36Sopenharmony_ci TP_fast_assign( 6762306a36Sopenharmony_ci __assign_str(text, msg); 6862306a36Sopenharmony_ci ), 6962306a36Sopenharmony_ci TP_printk("%s", __get_str(text)) 7062306a36Sopenharmony_ci); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_simple, cdns2_no_room_on_ring, 7362306a36Sopenharmony_ci TP_PROTO(char *msg), 7462306a36Sopenharmony_ci TP_ARGS(msg) 7562306a36Sopenharmony_ci); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_simple, cdns2_ep0_status_stage, 7862306a36Sopenharmony_ci TP_PROTO(char *msg), 7962306a36Sopenharmony_ci TP_ARGS(msg) 8062306a36Sopenharmony_ci); 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_simple, cdns2_ep0_set_config, 8362306a36Sopenharmony_ci TP_PROTO(char *msg), 8462306a36Sopenharmony_ci TP_ARGS(msg) 8562306a36Sopenharmony_ci); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_simple, cdns2_ep0_setup, 8862306a36Sopenharmony_ci TP_PROTO(char *msg), 8962306a36Sopenharmony_ci TP_ARGS(msg) 9062306a36Sopenharmony_ci); 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_simple, cdns2_device_state, 9362306a36Sopenharmony_ci TP_PROTO(char *msg), 9462306a36Sopenharmony_ci TP_ARGS(msg) 9562306a36Sopenharmony_ci); 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciTRACE_EVENT(cdns2_ep_halt, 9862306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *ep_priv, u8 halt, u8 flush), 9962306a36Sopenharmony_ci TP_ARGS(ep_priv, halt, flush), 10062306a36Sopenharmony_ci TP_STRUCT__entry( 10162306a36Sopenharmony_ci __string(name, ep_priv->name) 10262306a36Sopenharmony_ci __field(u8, halt) 10362306a36Sopenharmony_ci __field(u8, flush) 10462306a36Sopenharmony_ci ), 10562306a36Sopenharmony_ci TP_fast_assign( 10662306a36Sopenharmony_ci __assign_str(name, ep_priv->name); 10762306a36Sopenharmony_ci __entry->halt = halt; 10862306a36Sopenharmony_ci __entry->flush = flush; 10962306a36Sopenharmony_ci ), 11062306a36Sopenharmony_ci TP_printk("Halt %s for %s: %s", __entry->flush ? " and flush" : "", 11162306a36Sopenharmony_ci __get_str(name), __entry->halt ? "set" : "cleared") 11262306a36Sopenharmony_ci); 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ciTRACE_EVENT(cdns2_wa1, 11562306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *ep_priv, char *msg), 11662306a36Sopenharmony_ci TP_ARGS(ep_priv, msg), 11762306a36Sopenharmony_ci TP_STRUCT__entry( 11862306a36Sopenharmony_ci __string(ep_name, ep_priv->name) 11962306a36Sopenharmony_ci __string(msg, msg) 12062306a36Sopenharmony_ci ), 12162306a36Sopenharmony_ci TP_fast_assign( 12262306a36Sopenharmony_ci __assign_str(ep_name, ep_priv->name); 12362306a36Sopenharmony_ci __assign_str(msg, msg); 12462306a36Sopenharmony_ci ), 12562306a36Sopenharmony_ci TP_printk("WA1: %s %s", __get_str(ep_name), __get_str(msg)) 12662306a36Sopenharmony_ci); 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_doorbell, 12962306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, u32 ep_trbaddr), 13062306a36Sopenharmony_ci TP_ARGS(pep, ep_trbaddr), 13162306a36Sopenharmony_ci TP_STRUCT__entry( 13262306a36Sopenharmony_ci __string(name, pep->num ? pep->name : 13362306a36Sopenharmony_ci (pep->dir ? "ep0in" : "ep0out")) 13462306a36Sopenharmony_ci __field(u32, ep_trbaddr) 13562306a36Sopenharmony_ci ), 13662306a36Sopenharmony_ci TP_fast_assign( 13762306a36Sopenharmony_ci __assign_str(name, pep->name); 13862306a36Sopenharmony_ci __entry->ep_trbaddr = ep_trbaddr; 13962306a36Sopenharmony_ci ), 14062306a36Sopenharmony_ci TP_printk("%s, ep_trbaddr %08x", __get_str(name), 14162306a36Sopenharmony_ci __entry->ep_trbaddr) 14262306a36Sopenharmony_ci); 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_doorbell, cdns2_doorbell_ep0, 14562306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, u32 ep_trbaddr), 14662306a36Sopenharmony_ci TP_ARGS(pep, ep_trbaddr) 14762306a36Sopenharmony_ci); 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_doorbell, cdns2_doorbell_epx, 15062306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, u32 ep_trbaddr), 15162306a36Sopenharmony_ci TP_ARGS(pep, ep_trbaddr) 15262306a36Sopenharmony_ci); 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_usb_irq, 15562306a36Sopenharmony_ci TP_PROTO(u32 usb_irq, u32 ext_irq), 15662306a36Sopenharmony_ci TP_ARGS(usb_irq, ext_irq), 15762306a36Sopenharmony_ci TP_STRUCT__entry( 15862306a36Sopenharmony_ci __field(u32, usb_irq) 15962306a36Sopenharmony_ci __field(u32, ext_irq) 16062306a36Sopenharmony_ci ), 16162306a36Sopenharmony_ci TP_fast_assign( 16262306a36Sopenharmony_ci __entry->usb_irq = usb_irq; 16362306a36Sopenharmony_ci __entry->ext_irq = ext_irq; 16462306a36Sopenharmony_ci ), 16562306a36Sopenharmony_ci TP_printk("%s", cdns2_decode_usb_irq(__get_buf(CDNS2_MSG_MAX), 16662306a36Sopenharmony_ci CDNS2_MSG_MAX, 16762306a36Sopenharmony_ci __entry->usb_irq, 16862306a36Sopenharmony_ci __entry->ext_irq)) 16962306a36Sopenharmony_ci); 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_usb_irq, cdns2_usb_irq, 17262306a36Sopenharmony_ci TP_PROTO(u32 usb_irq, u32 ext_irq), 17362306a36Sopenharmony_ci TP_ARGS(usb_irq, ext_irq) 17462306a36Sopenharmony_ci); 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ciTRACE_EVENT(cdns2_dma_ep_ists, 17762306a36Sopenharmony_ci TP_PROTO(u32 dma_ep_ists), 17862306a36Sopenharmony_ci TP_ARGS(dma_ep_ists), 17962306a36Sopenharmony_ci TP_STRUCT__entry( 18062306a36Sopenharmony_ci __field(u32, dma_ep_ists) 18162306a36Sopenharmony_ci ), 18262306a36Sopenharmony_ci TP_fast_assign( 18362306a36Sopenharmony_ci __entry->dma_ep_ists = dma_ep_ists; 18462306a36Sopenharmony_ci ), 18562306a36Sopenharmony_ci TP_printk("OUT: 0x%04x, IN: 0x%04x", (u16)__entry->dma_ep_ists, 18662306a36Sopenharmony_ci __entry->dma_ep_ists >> 16) 18762306a36Sopenharmony_ci); 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_epx_irq, 19062306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev, struct cdns2_endpoint *pep), 19162306a36Sopenharmony_ci TP_ARGS(pdev, pep), 19262306a36Sopenharmony_ci TP_STRUCT__entry( 19362306a36Sopenharmony_ci __string(ep_name, pep->name) 19462306a36Sopenharmony_ci __field(u32, ep_sts) 19562306a36Sopenharmony_ci __field(u32, ep_ists) 19662306a36Sopenharmony_ci __field(u32, ep_traddr) 19762306a36Sopenharmony_ci ), 19862306a36Sopenharmony_ci TP_fast_assign( 19962306a36Sopenharmony_ci __assign_str(ep_name, pep->name); 20062306a36Sopenharmony_ci __entry->ep_sts = readl(&pdev->adma_regs->ep_sts); 20162306a36Sopenharmony_ci __entry->ep_ists = readl(&pdev->adma_regs->ep_ists); 20262306a36Sopenharmony_ci __entry->ep_traddr = readl(&pdev->adma_regs->ep_traddr); 20362306a36Sopenharmony_ci ), 20462306a36Sopenharmony_ci TP_printk("%s, ep_traddr: %08x", 20562306a36Sopenharmony_ci cdns2_decode_epx_irq(__get_buf(CDNS2_MSG_MAX), CDNS2_MSG_MAX, 20662306a36Sopenharmony_ci __get_str(ep_name), 20762306a36Sopenharmony_ci __entry->ep_ists, __entry->ep_sts), 20862306a36Sopenharmony_ci __entry->ep_traddr) 20962306a36Sopenharmony_ci); 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_epx_irq, cdns2_epx_irq, 21262306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev, struct cdns2_endpoint *pep), 21362306a36Sopenharmony_ci TP_ARGS(pdev, pep) 21462306a36Sopenharmony_ci); 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_ep0_irq, 21762306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev), 21862306a36Sopenharmony_ci TP_ARGS(pdev), 21962306a36Sopenharmony_ci TP_STRUCT__entry( 22062306a36Sopenharmony_ci __field(int, ep_dir) 22162306a36Sopenharmony_ci __field(u32, ep_ists) 22262306a36Sopenharmony_ci __field(u32, ep_sts) 22362306a36Sopenharmony_ci ), 22462306a36Sopenharmony_ci TP_fast_assign( 22562306a36Sopenharmony_ci __entry->ep_dir = pdev->selected_ep; 22662306a36Sopenharmony_ci __entry->ep_ists = readl(&pdev->adma_regs->ep_ists); 22762306a36Sopenharmony_ci __entry->ep_sts = readl(&pdev->adma_regs->ep_sts); 22862306a36Sopenharmony_ci ), 22962306a36Sopenharmony_ci TP_printk("%s", cdns2_decode_ep0_irq(__get_buf(CDNS2_MSG_MAX), 23062306a36Sopenharmony_ci CDNS2_MSG_MAX, 23162306a36Sopenharmony_ci __entry->ep_ists, __entry->ep_sts, 23262306a36Sopenharmony_ci __entry->ep_dir)) 23362306a36Sopenharmony_ci); 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ep0_irq, cdns2_ep0_irq, 23662306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev), 23762306a36Sopenharmony_ci TP_ARGS(pdev) 23862306a36Sopenharmony_ci); 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_ctrl, 24162306a36Sopenharmony_ci TP_PROTO(struct usb_ctrlrequest *ctrl), 24262306a36Sopenharmony_ci TP_ARGS(ctrl), 24362306a36Sopenharmony_ci TP_STRUCT__entry( 24462306a36Sopenharmony_ci __field(u8, bRequestType) 24562306a36Sopenharmony_ci __field(u8, bRequest) 24662306a36Sopenharmony_ci __field(u16, wValue) 24762306a36Sopenharmony_ci __field(u16, wIndex) 24862306a36Sopenharmony_ci __field(u16, wLength) 24962306a36Sopenharmony_ci ), 25062306a36Sopenharmony_ci TP_fast_assign( 25162306a36Sopenharmony_ci __entry->bRequestType = ctrl->bRequestType; 25262306a36Sopenharmony_ci __entry->bRequest = ctrl->bRequest; 25362306a36Sopenharmony_ci __entry->wValue = le16_to_cpu(ctrl->wValue); 25462306a36Sopenharmony_ci __entry->wIndex = le16_to_cpu(ctrl->wIndex); 25562306a36Sopenharmony_ci __entry->wLength = le16_to_cpu(ctrl->wLength); 25662306a36Sopenharmony_ci ), 25762306a36Sopenharmony_ci TP_printk("%s", usb_decode_ctrl(__get_buf(CDNS2_MSG_MAX), CDNS2_MSG_MAX, 25862306a36Sopenharmony_ci __entry->bRequestType, 25962306a36Sopenharmony_ci __entry->bRequest, __entry->wValue, 26062306a36Sopenharmony_ci __entry->wIndex, __entry->wLength) 26162306a36Sopenharmony_ci ) 26262306a36Sopenharmony_ci); 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ctrl, cdns2_ctrl_req, 26562306a36Sopenharmony_ci TP_PROTO(struct usb_ctrlrequest *ctrl), 26662306a36Sopenharmony_ci TP_ARGS(ctrl) 26762306a36Sopenharmony_ci); 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_request, 27062306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 27162306a36Sopenharmony_ci TP_ARGS(preq), 27262306a36Sopenharmony_ci TP_STRUCT__entry( 27362306a36Sopenharmony_ci __string(name, preq->pep->name) 27462306a36Sopenharmony_ci __field(struct usb_request *, request) 27562306a36Sopenharmony_ci __field(struct cdns2_request *, preq) 27662306a36Sopenharmony_ci __field(void *, buf) 27762306a36Sopenharmony_ci __field(unsigned int, actual) 27862306a36Sopenharmony_ci __field(unsigned int, length) 27962306a36Sopenharmony_ci __field(int, status) 28062306a36Sopenharmony_ci __field(dma_addr_t, dma) 28162306a36Sopenharmony_ci __field(int, zero) 28262306a36Sopenharmony_ci __field(int, short_not_ok) 28362306a36Sopenharmony_ci __field(int, no_interrupt) 28462306a36Sopenharmony_ci __field(struct scatterlist*, sg) 28562306a36Sopenharmony_ci __field(unsigned int, num_sgs) 28662306a36Sopenharmony_ci __field(unsigned int, num_mapped_sgs) 28762306a36Sopenharmony_ci __field(int, start_trb) 28862306a36Sopenharmony_ci __field(int, end_trb) 28962306a36Sopenharmony_ci ), 29062306a36Sopenharmony_ci TP_fast_assign( 29162306a36Sopenharmony_ci __assign_str(name, preq->pep->name); 29262306a36Sopenharmony_ci __entry->request = &preq->request; 29362306a36Sopenharmony_ci __entry->preq = preq; 29462306a36Sopenharmony_ci __entry->buf = preq->request.buf; 29562306a36Sopenharmony_ci __entry->actual = preq->request.actual; 29662306a36Sopenharmony_ci __entry->length = preq->request.length; 29762306a36Sopenharmony_ci __entry->status = preq->request.status; 29862306a36Sopenharmony_ci __entry->dma = preq->request.dma; 29962306a36Sopenharmony_ci __entry->zero = preq->request.zero; 30062306a36Sopenharmony_ci __entry->short_not_ok = preq->request.short_not_ok; 30162306a36Sopenharmony_ci __entry->no_interrupt = preq->request.no_interrupt; 30262306a36Sopenharmony_ci __entry->sg = preq->request.sg; 30362306a36Sopenharmony_ci __entry->num_sgs = preq->request.num_sgs; 30462306a36Sopenharmony_ci __entry->num_mapped_sgs = preq->request.num_mapped_sgs; 30562306a36Sopenharmony_ci __entry->start_trb = preq->start_trb; 30662306a36Sopenharmony_ci __entry->end_trb = preq->end_trb; 30762306a36Sopenharmony_ci ), 30862306a36Sopenharmony_ci TP_printk("%s: req: %p, preq: %p, req buf: %p, length: %u/%u, status: %d," 30962306a36Sopenharmony_ci "buf dma: (%pad), %s%s%s, sg: %p, num_sgs: %d, num_m_sgs: %d," 31062306a36Sopenharmony_ci "trb: [start: %d, end: %d]", 31162306a36Sopenharmony_ci __get_str(name), __entry->request, __entry->preq, 31262306a36Sopenharmony_ci __entry->buf, __entry->actual, __entry->length, 31362306a36Sopenharmony_ci __entry->status, &__entry->dma, 31462306a36Sopenharmony_ci __entry->zero ? "Z" : "z", 31562306a36Sopenharmony_ci __entry->short_not_ok ? "S" : "s", 31662306a36Sopenharmony_ci __entry->no_interrupt ? "I" : "i", 31762306a36Sopenharmony_ci __entry->sg, __entry->num_sgs, __entry->num_mapped_sgs, 31862306a36Sopenharmony_ci __entry->start_trb, 31962306a36Sopenharmony_ci __entry->end_trb 32062306a36Sopenharmony_ci ) 32162306a36Sopenharmony_ci); 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_request_enqueue, 32462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 32562306a36Sopenharmony_ci TP_ARGS(preq) 32662306a36Sopenharmony_ci); 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_request_enqueue_error, 32962306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 33062306a36Sopenharmony_ci TP_ARGS(preq) 33162306a36Sopenharmony_ci); 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_alloc_request, 33462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 33562306a36Sopenharmony_ci TP_ARGS(preq) 33662306a36Sopenharmony_ci); 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_free_request, 33962306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 34062306a36Sopenharmony_ci TP_ARGS(preq) 34162306a36Sopenharmony_ci); 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_ep_queue, 34462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 34562306a36Sopenharmony_ci TP_ARGS(preq) 34662306a36Sopenharmony_ci); 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_request_dequeue, 34962306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 35062306a36Sopenharmony_ci TP_ARGS(preq) 35162306a36Sopenharmony_ci); 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request, cdns2_request_giveback, 35462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *preq), 35562306a36Sopenharmony_ci TP_ARGS(preq) 35662306a36Sopenharmony_ci); 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ciTRACE_EVENT(cdns2_ep0_enqueue, 35962306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *dev_priv, struct usb_request *request), 36062306a36Sopenharmony_ci TP_ARGS(dev_priv, request), 36162306a36Sopenharmony_ci TP_STRUCT__entry( 36262306a36Sopenharmony_ci __field(int, dir) 36362306a36Sopenharmony_ci __field(int, length) 36462306a36Sopenharmony_ci ), 36562306a36Sopenharmony_ci TP_fast_assign( 36662306a36Sopenharmony_ci __entry->dir = dev_priv->eps[0].dir; 36762306a36Sopenharmony_ci __entry->length = request->length; 36862306a36Sopenharmony_ci ), 36962306a36Sopenharmony_ci TP_printk("Queue to ep0%s length: %u", __entry->dir ? "in" : "out", 37062306a36Sopenharmony_ci __entry->length) 37162306a36Sopenharmony_ci); 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_map_request, 37462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *priv_req), 37562306a36Sopenharmony_ci TP_ARGS(priv_req), 37662306a36Sopenharmony_ci TP_STRUCT__entry( 37762306a36Sopenharmony_ci __string(name, priv_req->pep->name) 37862306a36Sopenharmony_ci __field(struct usb_request *, req) 37962306a36Sopenharmony_ci __field(void *, buf) 38062306a36Sopenharmony_ci __field(dma_addr_t, dma) 38162306a36Sopenharmony_ci ), 38262306a36Sopenharmony_ci TP_fast_assign( 38362306a36Sopenharmony_ci __assign_str(name, priv_req->pep->name); 38462306a36Sopenharmony_ci __entry->req = &priv_req->request; 38562306a36Sopenharmony_ci __entry->buf = priv_req->request.buf; 38662306a36Sopenharmony_ci __entry->dma = priv_req->request.dma; 38762306a36Sopenharmony_ci ), 38862306a36Sopenharmony_ci TP_printk("%s: req: %p, req buf %p, dma %p", 38962306a36Sopenharmony_ci __get_str(name), __entry->req, __entry->buf, &__entry->dma 39062306a36Sopenharmony_ci ) 39162306a36Sopenharmony_ci); 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_map_request, cdns2_map_request, 39462306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *req), 39562306a36Sopenharmony_ci TP_ARGS(req) 39662306a36Sopenharmony_ci); 39762306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_map_request, cdns2_mapped_request, 39862306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *req), 39962306a36Sopenharmony_ci TP_ARGS(req) 40062306a36Sopenharmony_ci); 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_trb, 40362306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, struct cdns2_trb *trb), 40462306a36Sopenharmony_ci TP_ARGS(pep, trb), 40562306a36Sopenharmony_ci TP_STRUCT__entry( 40662306a36Sopenharmony_ci __string(name, pep->name) 40762306a36Sopenharmony_ci __field(struct cdns2_trb *, trb) 40862306a36Sopenharmony_ci __field(u32, buffer) 40962306a36Sopenharmony_ci __field(u32, length) 41062306a36Sopenharmony_ci __field(u32, control) 41162306a36Sopenharmony_ci __field(u32, type) 41262306a36Sopenharmony_ci ), 41362306a36Sopenharmony_ci TP_fast_assign( 41462306a36Sopenharmony_ci __assign_str(name, pep->name); 41562306a36Sopenharmony_ci __entry->trb = trb; 41662306a36Sopenharmony_ci __entry->buffer = le32_to_cpu(trb->buffer); 41762306a36Sopenharmony_ci __entry->length = le32_to_cpu(trb->length); 41862306a36Sopenharmony_ci __entry->control = le32_to_cpu(trb->control); 41962306a36Sopenharmony_ci __entry->type = usb_endpoint_type(pep->endpoint.desc); 42062306a36Sopenharmony_ci ), 42162306a36Sopenharmony_ci TP_printk("%s: trb V: %p, dma buf: P: 0x%08x, %s", 42262306a36Sopenharmony_ci __get_str(name), __entry->trb, __entry->buffer, 42362306a36Sopenharmony_ci cdns2_decode_trb(__get_buf(CDNS2_MSG_MAX), CDNS2_MSG_MAX, 42462306a36Sopenharmony_ci __entry->control, __entry->length, 42562306a36Sopenharmony_ci __entry->buffer)) 42662306a36Sopenharmony_ci); 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_trb, cdns2_queue_trb, 42962306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, struct cdns2_trb *trb), 43062306a36Sopenharmony_ci TP_ARGS(pep, trb) 43162306a36Sopenharmony_ci); 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_trb, cdns2_complete_trb, 43462306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep, struct cdns2_trb *trb), 43562306a36Sopenharmony_ci TP_ARGS(pep, trb) 43662306a36Sopenharmony_ci); 43762306a36Sopenharmony_ci 43862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_ring, 43962306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 44062306a36Sopenharmony_ci TP_ARGS(pep), 44162306a36Sopenharmony_ci TP_STRUCT__entry( 44262306a36Sopenharmony_ci __dynamic_array(u8, tr_seg, TR_SEG_SIZE) 44362306a36Sopenharmony_ci __dynamic_array(u8, pep, sizeof(struct cdns2_endpoint)) 44462306a36Sopenharmony_ci __dynamic_array(char, buffer, 44562306a36Sopenharmony_ci (TRBS_PER_SEGMENT * 65) + CDNS2_MSG_MAX) 44662306a36Sopenharmony_ci ), 44762306a36Sopenharmony_ci TP_fast_assign( 44862306a36Sopenharmony_ci memcpy(__get_dynamic_array(pep), pep, 44962306a36Sopenharmony_ci sizeof(struct cdns2_endpoint)); 45062306a36Sopenharmony_ci memcpy(__get_dynamic_array(tr_seg), pep->ring.trbs, 45162306a36Sopenharmony_ci TR_SEG_SIZE); 45262306a36Sopenharmony_ci ), 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_ci TP_printk("%s", 45562306a36Sopenharmony_ci cdns2_raw_ring((struct cdns2_endpoint *)__get_str(pep), 45662306a36Sopenharmony_ci (struct cdns2_trb *)__get_str(tr_seg), 45762306a36Sopenharmony_ci __get_str(buffer), 45862306a36Sopenharmony_ci (TRBS_PER_SEGMENT * 65) + CDNS2_MSG_MAX)) 45962306a36Sopenharmony_ci); 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ring, cdns2_ring, 46262306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 46362306a36Sopenharmony_ci TP_ARGS(pep) 46462306a36Sopenharmony_ci); 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_ep, 46762306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 46862306a36Sopenharmony_ci TP_ARGS(pep), 46962306a36Sopenharmony_ci TP_STRUCT__entry( 47062306a36Sopenharmony_ci __string(name, pep->name) 47162306a36Sopenharmony_ci __field(unsigned int, maxpacket) 47262306a36Sopenharmony_ci __field(unsigned int, maxpacket_limit) 47362306a36Sopenharmony_ci __field(unsigned int, flags) 47462306a36Sopenharmony_ci __field(unsigned int, dir) 47562306a36Sopenharmony_ci __field(u8, enqueue) 47662306a36Sopenharmony_ci __field(u8, dequeue) 47762306a36Sopenharmony_ci ), 47862306a36Sopenharmony_ci TP_fast_assign( 47962306a36Sopenharmony_ci __assign_str(name, pep->name); 48062306a36Sopenharmony_ci __entry->maxpacket = pep->endpoint.maxpacket; 48162306a36Sopenharmony_ci __entry->maxpacket_limit = pep->endpoint.maxpacket_limit; 48262306a36Sopenharmony_ci __entry->flags = pep->ep_state; 48362306a36Sopenharmony_ci __entry->dir = pep->dir; 48462306a36Sopenharmony_ci __entry->enqueue = pep->ring.enqueue; 48562306a36Sopenharmony_ci __entry->dequeue = pep->ring.dequeue; 48662306a36Sopenharmony_ci ), 48762306a36Sopenharmony_ci TP_printk("%s: mps: %d/%d, enq idx: %d, deq idx: %d, " 48862306a36Sopenharmony_ci "flags: %s%s%s%s, dir: %s", 48962306a36Sopenharmony_ci __get_str(name), __entry->maxpacket, 49062306a36Sopenharmony_ci __entry->maxpacket_limit, __entry->enqueue, 49162306a36Sopenharmony_ci __entry->dequeue, 49262306a36Sopenharmony_ci __entry->flags & EP_ENABLED ? "EN | " : "", 49362306a36Sopenharmony_ci __entry->flags & EP_STALLED ? "STALLED | " : "", 49462306a36Sopenharmony_ci __entry->flags & EP_WEDGE ? "WEDGE | " : "", 49562306a36Sopenharmony_ci __entry->flags & EP_RING_FULL ? "RING FULL |" : "", 49662306a36Sopenharmony_ci __entry->dir ? "IN" : "OUT" 49762306a36Sopenharmony_ci ) 49862306a36Sopenharmony_ci); 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ep, cdns2_gadget_ep_enable, 50162306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 50262306a36Sopenharmony_ci TP_ARGS(pep) 50362306a36Sopenharmony_ci); 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ep, cdns2_gadget_ep_disable, 50662306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 50762306a36Sopenharmony_ci TP_ARGS(pep) 50862306a36Sopenharmony_ci); 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ep, cdns2_iso_out_ep_disable, 51162306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 51262306a36Sopenharmony_ci TP_ARGS(pep) 51362306a36Sopenharmony_ci); 51462306a36Sopenharmony_ci 51562306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_ep, cdns2_ep_busy_try_halt_again, 51662306a36Sopenharmony_ci TP_PROTO(struct cdns2_endpoint *pep), 51762306a36Sopenharmony_ci TP_ARGS(pep) 51862306a36Sopenharmony_ci); 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_request_handled, 52162306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *priv_req, int current_index, 52262306a36Sopenharmony_ci int handled), 52362306a36Sopenharmony_ci TP_ARGS(priv_req, current_index, handled), 52462306a36Sopenharmony_ci TP_STRUCT__entry( 52562306a36Sopenharmony_ci __field(struct cdns2_request *, priv_req) 52662306a36Sopenharmony_ci __field(unsigned int, dma_position) 52762306a36Sopenharmony_ci __field(unsigned int, handled) 52862306a36Sopenharmony_ci __field(unsigned int, dequeue_idx) 52962306a36Sopenharmony_ci __field(unsigned int, enqueue_idx) 53062306a36Sopenharmony_ci __field(unsigned int, start_trb) 53162306a36Sopenharmony_ci __field(unsigned int, end_trb) 53262306a36Sopenharmony_ci ), 53362306a36Sopenharmony_ci TP_fast_assign( 53462306a36Sopenharmony_ci __entry->priv_req = priv_req; 53562306a36Sopenharmony_ci __entry->dma_position = current_index; 53662306a36Sopenharmony_ci __entry->handled = handled; 53762306a36Sopenharmony_ci __entry->dequeue_idx = priv_req->pep->ring.dequeue; 53862306a36Sopenharmony_ci __entry->enqueue_idx = priv_req->pep->ring.enqueue; 53962306a36Sopenharmony_ci __entry->start_trb = priv_req->start_trb; 54062306a36Sopenharmony_ci __entry->end_trb = priv_req->end_trb; 54162306a36Sopenharmony_ci ), 54262306a36Sopenharmony_ci TP_printk("Req: %p %s, DMA pos: %d, ep deq: %d, ep enq: %d," 54362306a36Sopenharmony_ci " start trb: %d, end trb: %d", 54462306a36Sopenharmony_ci __entry->priv_req, 54562306a36Sopenharmony_ci __entry->handled ? "handled" : "not handled", 54662306a36Sopenharmony_ci __entry->dma_position, __entry->dequeue_idx, 54762306a36Sopenharmony_ci __entry->enqueue_idx, __entry->start_trb, 54862306a36Sopenharmony_ci __entry->end_trb 54962306a36Sopenharmony_ci ) 55062306a36Sopenharmony_ci); 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_request_handled, cdns2_request_handled, 55362306a36Sopenharmony_ci TP_PROTO(struct cdns2_request *priv_req, int current_index, 55462306a36Sopenharmony_ci int handled), 55562306a36Sopenharmony_ci TP_ARGS(priv_req, current_index, handled) 55662306a36Sopenharmony_ci); 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(cdns2_log_epx_reg_config, 55962306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev, struct cdns2_endpoint *pep), 56062306a36Sopenharmony_ci TP_ARGS(pdev, pep), 56162306a36Sopenharmony_ci TP_STRUCT__entry( 56262306a36Sopenharmony_ci __string(ep_name, pep->name) 56362306a36Sopenharmony_ci __field(u8, burst_size) 56462306a36Sopenharmony_ci __field(__le16, maxpack_reg) 56562306a36Sopenharmony_ci __field(__u8, con_reg) 56662306a36Sopenharmony_ci __field(u32, ep_sel_reg) 56762306a36Sopenharmony_ci __field(u32, ep_sts_en_reg) 56862306a36Sopenharmony_ci __field(u32, ep_cfg_reg) 56962306a36Sopenharmony_ci ), 57062306a36Sopenharmony_ci TP_fast_assign( 57162306a36Sopenharmony_ci __assign_str(ep_name, pep->name); 57262306a36Sopenharmony_ci __entry->burst_size = pep->trb_burst_size; 57362306a36Sopenharmony_ci __entry->maxpack_reg = pep->dir ? readw(&pdev->epx_regs->txmaxpack[pep->num - 1]) : 57462306a36Sopenharmony_ci readw(&pdev->epx_regs->rxmaxpack[pep->num - 1]); 57562306a36Sopenharmony_ci __entry->con_reg = pep->dir ? readb(&pdev->epx_regs->ep[pep->num - 1].txcon) : 57662306a36Sopenharmony_ci readb(&pdev->epx_regs->ep[pep->num - 1].rxcon); 57762306a36Sopenharmony_ci __entry->ep_sel_reg = readl(&pdev->adma_regs->ep_sel); 57862306a36Sopenharmony_ci __entry->ep_sts_en_reg = readl(&pdev->adma_regs->ep_sts_en); 57962306a36Sopenharmony_ci __entry->ep_cfg_reg = readl(&pdev->adma_regs->ep_cfg); 58062306a36Sopenharmony_ci ), 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_ci TP_printk("%s, maxpack: %d, con: %02x, dma_ep_sel: %08x, dma_ep_sts_en: %08x" 58362306a36Sopenharmony_ci " dma_ep_cfg %08x", 58462306a36Sopenharmony_ci __get_str(ep_name), __entry->maxpack_reg, __entry->con_reg, 58562306a36Sopenharmony_ci __entry->ep_sel_reg, __entry->ep_sts_en_reg, 58662306a36Sopenharmony_ci __entry->ep_cfg_reg 58762306a36Sopenharmony_ci ) 58862306a36Sopenharmony_ci); 58962306a36Sopenharmony_ci 59062306a36Sopenharmony_ciDEFINE_EVENT(cdns2_log_epx_reg_config, cdns2_epx_hw_cfg, 59162306a36Sopenharmony_ci TP_PROTO(struct cdns2_device *pdev, struct cdns2_endpoint *pep), 59262306a36Sopenharmony_ci TP_ARGS(pdev, pep) 59362306a36Sopenharmony_ci); 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_ci#endif /* __LINUX_CDNS2_TRACE */ 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci/* This part must be outside header guard. */ 59862306a36Sopenharmony_ci 59962306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 60062306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 60362306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE cdns2-trace 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci#include <trace/define_trace.h> 606