]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
usb: dwc3: Log dwc3 address in traces
authorPrashanth K <prashanth.k@oss.qualcomm.com>
Thu, 22 Jan 2026 10:50:00 +0000 (16:20 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Jan 2026 14:52:45 +0000 (15:52 +0100)
When multiple DWC3 controllers are being used, trace events from
different instances get mixed up making debugging difficult as
there's no way to distinguish which instance generated the trace.

Use the register base address of dwc3 controller and append it to
trace events, so that the source instance is clearly identifiable.

Example trace output,
before ->  dwc3_event: event (00000101): Reset [U0]
after  ->  dwc3_event: 0x000000000a600000: event (00000101): Reset [U0]

Signed-off-by: Prashanth K <prashanth.k@oss.qualcomm.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://patch.msgid.link/20260122105000.4126769-1-prashanth.k@oss.qualcomm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/core.c
drivers/usb/dwc3/ep0.c
drivers/usb/dwc3/gadget.c
drivers/usb/dwc3/io.h
drivers/usb/dwc3/trace.h

index f32b67bf73a4555a8b4ff89b2fde8b19851f8724..c07ffe82c85049364c38c7ba152aab0ff764d95e 100644 (file)
@@ -158,7 +158,7 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy)
        dwc3_writel(dwc, DWC3_GCTL, reg);
 
        dwc->current_dr_role = mode;
-       trace_dwc3_set_prtcap(mode);
+       trace_dwc3_set_prtcap(dwc, mode);
 }
 EXPORT_SYMBOL_GPL(dwc3_set_prtcap);
 
index a8ff8db610d349ec5ed8bb4341b2ea6db167f3ae..bfe616194dfad407dd6ab0f5d3a3eea529cee4ee 100644 (file)
@@ -833,7 +833,7 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc,
        if (!dwc->gadget_driver || !dwc->softconnect || !dwc->connected)
                goto out;
 
-       trace_dwc3_ctrl_req(ctrl);
+       trace_dwc3_ctrl_req(dwc, ctrl);
 
        len = le16_to_cpu(ctrl->wLength);
        if (!len) {
index 9355c952c140668d5a62f74f9bab5bde35da41cd..384963151eced6368eb98cc0598ed90f031262cc 100644 (file)
@@ -278,7 +278,7 @@ int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned int cmd,
                status = -ETIMEDOUT;
        }
 
-       trace_dwc3_gadget_generic_cmd(cmd, param, status);
+       trace_dwc3_gadget_generic_cmd(dwc, cmd, param, status);
 
        return ret;
 }
index 7dd0c1e0cf74f7c5e117d659031a5dacb3ece359..cad9a2ae1547cbcdf0c5e04f52c5b0e00ecd7d3c 100644 (file)
@@ -33,7 +33,7 @@ static inline u32 dwc3_readl(struct dwc3 *dwc, u32 offset)
         * documentation, so we revert it back to the proper addresses, the
         * same way they are described on SNPS documentation
         */
-       trace_dwc3_readl(base - DWC3_GLOBALS_REGS_START, offset, value);
+       trace_dwc3_readl(dwc, base - DWC3_GLOBALS_REGS_START, offset, value);
 
        return value;
 }
@@ -54,7 +54,7 @@ static inline void dwc3_writel(struct dwc3 *dwc, u32 offset, u32 value)
         * documentation, so we revert it back to the proper addresses, the
         * same way they are described on SNPS documentation
         */
-       trace_dwc3_writel(base - DWC3_GLOBALS_REGS_START, offset, value);
+       trace_dwc3_writel(dwc, base - DWC3_GLOBALS_REGS_START, offset, value);
 }
 
 #endif /* __DRIVERS_USB_DWC3_IO_H */
index b6ba984bafcd9085840ae47b8799e62fdd5821ed..5253da23d8b003d4f81c1d729edf62ec04da26f8 100644 (file)
 #include "debug.h"
 
 DECLARE_EVENT_CLASS(dwc3_log_set_prtcap,
-       TP_PROTO(u32 mode),
-       TP_ARGS(mode),
+       TP_PROTO(struct dwc3 *dwc, u32 mode),
+       TP_ARGS(dwc, mode),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __field(u32, mode)
        ),
        TP_fast_assign(
+               __entry->base_address = dwc->xhci_resources[0].start;
                __entry->mode = mode;
        ),
-       TP_printk("mode %s", dwc3_mode_string(__entry->mode))
+       TP_printk("%pa: mode %s", &__entry->base_address, dwc3_mode_string(__entry->mode))
 );
 
 DEFINE_EVENT(dwc3_log_set_prtcap, dwc3_set_prtcap,
-       TP_PROTO(u32 mode),
-       TP_ARGS(mode)
+       TP_PROTO(struct dwc3 *dwc, u32 mode),
+       TP_ARGS(dwc, mode)
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_io,
-       TP_PROTO(void *base, u32 offset, u32 value),
-       TP_ARGS(base, offset, value),
+       TP_PROTO(struct dwc3 *dwc, void *base, u32 offset, u32 value),
+       TP_ARGS(dwc, base, offset, value),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __field(void *, base)
                __field(u32, offset)
                __field(u32, value)
        ),
        TP_fast_assign(
+               __entry->base_address = dwc->xhci_resources[0].start;
                __entry->base = base;
                __entry->offset = offset;
                __entry->value = value;
        ),
-       TP_printk("addr %p offset %04x value %08x",
+       TP_printk("%pa: addr %p offset %04x value %08x",
+               &__entry->base_address,
                __entry->base + __entry->offset,
                __entry->offset,
                __entry->value)
 );
 
 DEFINE_EVENT(dwc3_log_io, dwc3_readl,
-       TP_PROTO(void __iomem *base, u32 offset, u32 value),
-       TP_ARGS(base, offset, value)
+       TP_PROTO(struct dwc3 *dwc, void __iomem *base, u32 offset, u32 value),
+       TP_ARGS(dwc, base, offset, value)
 );
 
 DEFINE_EVENT(dwc3_log_io, dwc3_writel,
-       TP_PROTO(void __iomem *base, u32 offset, u32 value),
-       TP_ARGS(base, offset, value)
+       TP_PROTO(struct dwc3 *dwc, void __iomem *base, u32 offset, u32 value),
+       TP_ARGS(dwc, base, offset, value)
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_event,
        TP_PROTO(u32 event, struct dwc3 *dwc),
        TP_ARGS(event, dwc),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __field(u32, event)
                __field(u32, ep0state)
        ),
        TP_fast_assign(
+               __entry->base_address = dwc->xhci_resources[0].start;
                __entry->event = event;
                __entry->ep0state = dwc->ep0state;
        ),
-       TP_printk("event (%08x): %s", __entry->event,
+       TP_printk("%pa: event (%08x): %s", &__entry->base_address, __entry->event,
                        dwc3_decode_event(__get_buf(DWC3_MSG_MAX), DWC3_MSG_MAX,
                                        __entry->event, __entry->ep0state))
 );
@@ -87,9 +94,10 @@ DEFINE_EVENT(dwc3_log_event, dwc3_event,
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_ctrl,
-       TP_PROTO(struct usb_ctrlrequest *ctrl),
-       TP_ARGS(ctrl),
+       TP_PROTO(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl),
+       TP_ARGS(dwc, ctrl),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __field(__u8, bRequestType)
                __field(__u8, bRequest)
                __field(__u16, wValue)
@@ -97,13 +105,15 @@ DECLARE_EVENT_CLASS(dwc3_log_ctrl,
                __field(__u16, wLength)
        ),
        TP_fast_assign(
+               __entry->base_address = dwc->xhci_resources[0].start;
                __entry->bRequestType = ctrl->bRequestType;
                __entry->bRequest = ctrl->bRequest;
                __entry->wValue = le16_to_cpu(ctrl->wValue);
                __entry->wIndex = le16_to_cpu(ctrl->wIndex);
                __entry->wLength = le16_to_cpu(ctrl->wLength);
        ),
-       TP_printk("%s", usb_decode_ctrl(__get_buf(DWC3_MSG_MAX), DWC3_MSG_MAX,
+       TP_printk("%pa: %s", &__entry->base_address, usb_decode_ctrl(__get_buf(DWC3_MSG_MAX),
+                                       DWC3_MSG_MAX,
                                        __entry->bRequestType,
                                        __entry->bRequest, __entry->wValue,
                                        __entry->wIndex, __entry->wLength)
@@ -111,14 +121,15 @@ DECLARE_EVENT_CLASS(dwc3_log_ctrl,
 );
 
 DEFINE_EVENT(dwc3_log_ctrl, dwc3_ctrl_req,
-       TP_PROTO(struct usb_ctrlrequest *ctrl),
-       TP_ARGS(ctrl)
+       TP_PROTO(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl),
+       TP_ARGS(dwc, ctrl)
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_request,
        TP_PROTO(struct dwc3_request *req),
        TP_ARGS(req),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __string(name, req->dep->name)
                __field(struct dwc3_request *, req)
                __field(unsigned int, actual)
@@ -129,7 +140,7 @@ DECLARE_EVENT_CLASS(dwc3_log_request,
                __field(int, no_interrupt)
        ),
        TP_fast_assign(
-               __assign_str(name);
+               __entry->base_address = req->dep->dwc->xhci_resources[0].start;
                __entry->req = req;
                __entry->actual = req->request.actual;
                __entry->length = req->request.length;
@@ -138,8 +149,10 @@ DECLARE_EVENT_CLASS(dwc3_log_request,
                __entry->short_not_ok = req->request.short_not_ok;
                __entry->no_interrupt = req->request.no_interrupt;
        ),
-       TP_printk("%s: req %p length %u/%u %s%s%s ==> %d",
-               __get_str(name), __entry->req, __entry->actual, __entry->length,
+       TP_printk("%pa: %s: req %p length %u/%u %s%s%s ==> %d",
+               &__entry->base_address,
+               __get_str(name), __entry->req,
+               __entry->actual, __entry->length,
                __entry->zero ? "Z" : "z",
                __entry->short_not_ok ? "S" : "s",
                __entry->no_interrupt ? "i" : "I",
@@ -173,28 +186,30 @@ DEFINE_EVENT(dwc3_log_request, dwc3_gadget_giveback,
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_generic_cmd,
-       TP_PROTO(unsigned int cmd, u32 param, int status),
-       TP_ARGS(cmd, param, status),
+       TP_PROTO(struct dwc3 *dwc, unsigned int cmd, u32 param, int status),
+       TP_ARGS(dwc, cmd, param, status),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __field(unsigned int, cmd)
                __field(u32, param)
                __field(int, status)
        ),
        TP_fast_assign(
+               __entry->base_address = dwc->xhci_resources[0].start;
                __entry->cmd = cmd;
                __entry->param = param;
                __entry->status = status;
        ),
-       TP_printk("cmd '%s' [%x] param %08x --> status: %s",
-               dwc3_gadget_generic_cmd_string(__entry->cmd),
+       TP_printk("%pa: cmd '%s' [%x] param %08x --> status: %s",
+               &__entry->base_address, dwc3_gadget_generic_cmd_string(__entry->cmd),
                __entry->cmd, __entry->param,
                dwc3_gadget_generic_cmd_status_string(__entry->status)
        )
 );
 
 DEFINE_EVENT(dwc3_log_generic_cmd, dwc3_gadget_generic_cmd,
-       TP_PROTO(unsigned int cmd, u32 param, int status),
-       TP_ARGS(cmd, param, status)
+       TP_PROTO(struct dwc3 *dwc, unsigned int cmd, u32 param, int status),
+       TP_ARGS(dwc, cmd, param, status)
 );
 
 DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,
@@ -202,6 +217,7 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,
                struct dwc3_gadget_ep_cmd_params *params, int cmd_status),
        TP_ARGS(dep, cmd, params, cmd_status),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __string(name, dep->name)
                __field(unsigned int, cmd)
                __field(u32, param0)
@@ -210,6 +226,7 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,
                __field(int, cmd_status)
        ),
        TP_fast_assign(
+               __entry->base_address = dep->dwc->xhci_resources[0].start;
                __assign_str(name);
                __entry->cmd = cmd;
                __entry->param0 = params->param0;
@@ -217,8 +234,9 @@ DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,
                __entry->param2 = params->param2;
                __entry->cmd_status = cmd_status;
        ),
-       TP_printk("%s: cmd '%s' [%x] params %08x %08x %08x --> status: %s",
-               __get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd),
+       TP_printk("%pa: %s: cmd '%s' [%x] params %08x %08x %08x --> status: %s",
+               &__entry->base_address, __get_str(name),
+               dwc3_gadget_ep_cmd_string(__entry->cmd),
                __entry->cmd, __entry->param0,
                __entry->param1, __entry->param2,
                dwc3_ep_cmd_status_string(__entry->cmd_status)
@@ -235,6 +253,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb,
        TP_PROTO(struct dwc3_ep *dep, struct dwc3_trb *trb),
        TP_ARGS(dep, trb),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __string(name, dep->name)
                __field(struct dwc3_trb *, trb)
                __field(u32, bpl)
@@ -246,6 +265,7 @@ DECLARE_EVENT_CLASS(dwc3_log_trb,
                __field(u32, dequeue)
        ),
        TP_fast_assign(
+               __entry->base_address = dep->dwc->xhci_resources[0].start;
                __assign_str(name);
                __entry->trb = trb;
                __entry->bpl = trb->bpl;
@@ -256,8 +276,8 @@ DECLARE_EVENT_CLASS(dwc3_log_trb,
                __entry->enqueue = dep->trb_enqueue;
                __entry->dequeue = dep->trb_dequeue;
        ),
-       TP_printk("%s: trb %p (E%d:D%d) buf %08x%08x size %s%d ctrl %08x sofn %08x (%c%c%c%c:%c%c:%s)",
-               __get_str(name), __entry->trb, __entry->enqueue,
+       TP_printk("%pa: %s: trb %p (E%d:D%d) buf %08x%08x size %s%d ctrl %08x sofn %08x (%c%c%c%c:%c%c:%s)",
+               &__entry->base_address, __get_str(name), __entry->trb, __entry->enqueue,
                __entry->dequeue, __entry->bph, __entry->bpl,
                ({char *s;
                int pcm = ((__entry->size >> 24) & 3) + 1;
@@ -307,6 +327,7 @@ DECLARE_EVENT_CLASS(dwc3_log_ep,
        TP_PROTO(struct dwc3_ep *dep),
        TP_ARGS(dep),
        TP_STRUCT__entry(
+               __field(phys_addr_t, base_address)
                __string(name, dep->name)
                __field(unsigned int, maxpacket)
                __field(unsigned int, maxpacket_limit)
@@ -318,6 +339,7 @@ DECLARE_EVENT_CLASS(dwc3_log_ep,
                __field(u8, trb_dequeue)
        ),
        TP_fast_assign(
+               __entry->base_address = dep->dwc->xhci_resources[0].start;
                __assign_str(name);
                __entry->maxpacket = dep->endpoint.maxpacket;
                __entry->maxpacket_limit = dep->endpoint.maxpacket_limit;
@@ -328,8 +350,8 @@ DECLARE_EVENT_CLASS(dwc3_log_ep,
                __entry->trb_enqueue = dep->trb_enqueue;
                __entry->trb_dequeue = dep->trb_dequeue;
        ),
-       TP_printk("%s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c:%c",
-               __get_str(name), __entry->maxpacket,
+       TP_printk("%pa: %s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c:%c",
+               &__entry->base_address, __get_str(name), __entry->maxpacket,
                __entry->maxpacket_limit, __entry->max_streams,
                __entry->maxburst, __entry->trb_enqueue,
                __entry->trb_dequeue,