From 1b64983eb0575b06361a183dc4a2e758cb168b84 Mon Sep 17 00:00:00 2001 From: Pratham Pratap Date: Tue, 13 Oct 2020 17:03:55 +0530 Subject: [PATCH] usb: dwc3: core: Add ipc logs when sg lists are used Currently ipc_logging will capture the usb request's dma address but when sg list is used usb request's dma address is not populated. This change adds start_sg's dma address which is populated when sg list is used for usb transfers. Also increase the number of log pages to capture more ep events. Change-Id: I36ada11429e168e2d3d09cf3427b1f3bcdacc285 Signed-off-by: Pratham Pratap --- drivers/usb/dwc3/core.c | 2 +- drivers/usb/dwc3/debug_ipc.c | 38 +++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 5ed3fd54a05e..ea06853aaaca 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1681,7 +1681,7 @@ static int dwc3_probe(struct platform_device *pdev) snprintf(dma_ipc_log_ctx_name, sizeof(dma_ipc_log_ctx_name), "%s.ep_events", dev_name(dwc->dev)); - dwc->dwc_dma_ipc_log_ctxt = ipc_log_context_create(NUM_LOG_PAGES, + dwc->dwc_dma_ipc_log_ctxt = ipc_log_context_create(2 * NUM_LOG_PAGES, dma_ipc_log_ctx_name, 0); if (!dwc->dwc_dma_ipc_log_ctxt) dev_err(dwc->dev, "Error getting ipc_log_ctxt for ep_events\n"); diff --git a/drivers/usb/dwc3/debug_ipc.c b/drivers/usb/dwc3/debug_ipc.c index 71a13d4b011c..4126936aed87 100644 --- a/drivers/usb/dwc3/debug_ipc.c +++ b/drivers/usb/dwc3/debug_ipc.c @@ -140,19 +140,39 @@ void dwc3_dbg_print_reg(struct dwc3 *dwc, const char *name, int reg) void dwc3_dbg_dma_unmap(struct dwc3 *dwc, u8 ep_num, struct dwc3_request *req) { - ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, - "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx %d", ep_num >> 1, - ep_num & 1 ? "IN":"OUT", "UNMAP", &req->request, - req->request.dma, req->request.length, req->trb_dma, - req->trb->ctrl & DWC3_TRB_CTRL_HWO); + if (req->request.num_sgs > 0) { + ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, + "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx mapped_sgs:%d queued_sgs:%d %d", + ep_num >> 1, ep_num & 1 ? "IN":"OUT", "UNMAP", + &req->request, sg_dma_address(req->start_sg), + sg_dma_len(req->start_sg), req->trb_dma, + req->request.num_mapped_sgs, req->num_queued_sgs, + req->trb->ctrl & DWC3_TRB_CTRL_HWO); + } else { + ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, + "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx %d", + ep_num >> 1, ep_num & 1 ? "IN":"OUT", "UNMAP", + &req->request, req->request.dma, req->request.length, + req->trb_dma, req->trb->ctrl & DWC3_TRB_CTRL_HWO); + } } void dwc3_dbg_dma_map(struct dwc3 *dwc, u8 ep_num, struct dwc3_request *req) { - ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, - "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx", ep_num >> 1, - ep_num & 1 ? "IN":"OUT", "MAP", &req->request, req->request.dma, - req->request.length, req->trb_dma); + if (req->request.num_sgs > 0) { + ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, + "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx mapped_sgs:%d queued_sgs:%d", + ep_num >> 1, ep_num & 1 ? "IN":"OUT", "MAP", + &req->request, sg_dma_address(req->start_sg), + sg_dma_len(req->start_sg), req->trb_dma, + req->request.num_mapped_sgs, req->num_queued_sgs); + } else { + ipc_log_string(dwc->dwc_dma_ipc_log_ctxt, + "%02X-%-3.3s %-25.25s 0x%pK 0x%lx %u 0x%lx", + ep_num >> 1, ep_num & 1 ? "IN":"OUT", "MAP", + &req->request, req->request.dma, req->request.length, + req->trb_dma); + } } void dwc3_dbg_dma_dequeue(struct dwc3 *dwc, u8 ep_num, struct dwc3_request *req)