adb调试流程记录

6 篇文章 0 订阅
2 篇文章 0 订阅
diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
index d41d07a..fd3787e 100644
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -867,6 +867,7 @@ void usb_gadget_unmap_request(struct usb_gadget *gadget,
 void usb_gadget_giveback_request(struct usb_ep *ep,
                struct usb_request *req)
 {
+pr_err("usb_gadget_giveback_request into\n");
        if (likely(req->status == 0))
                usb_led_activity(USB_LED_EVENT_GADGET);
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 7653ea6..2affb1e 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -506,12 +506,14 @@ static inline void *dma_alloc_attrs(struct device *dev, size_t size,
static inline void *dma_alloc_attrs(struct device *dev, size_t size,
                                       dma_addr_t *dma_handle, gfp_t flag,
                                       unsigned long attrs)
{
        const struct dma_map_ops *ops = get_dma_ops(dev);
        void *cpu_addr;
 
        BUG_ON(!ops);
+pr_err("dma_alloc_attrs into\n");
 
        if (dma_alloc_from_dev_coherent(dev, size, dma_handle, &cpu_addr))
                return cpu_addr;


diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 7870d32..6045fa8 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2254,8 +2254,7 @@ static void musb_deassert_reset(struct work_struct *work)
         * the dma function in arm64, otherwise dma_alloc_coherent will failed.
         */
        if (get_dma_ops(musb->controller) == get_dma_ops(NULL))
-//             musb->controller->archdata.dma_ops = get_dma_ops(dev->parent);
-               musb->controller->archdata.dev_dma_ops = get_dma_ops(dev->parent);
+               musb->controller->dma_ops = get_dma_ops(dev->parent);


diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index bc6d171..1a5c3a9 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -45,7 +45,9 @@
 
 #include "musb_core.h"
 #include "musb_trace.h"
-
+#ifdef CONFIG_USB_SPRD_DMA
+#include "sprd_musbhsdma.h"
+#endif
 
 /* ----------------------------------------------------------------------- */
 
@@ -102,6 +104,7 @@ static inline void map_dma_buffer(struct musb_request *request,
                                : DMA_FROM_DEVICE);
                request->map_state = PRE_MAPPED;
        }
+       printk("%s %d 0x%p 0x%llx\n",__func__, __LINE__,request->request.buf,request->request.dma);
 }
 
 /* Unmap the buffer from dma and maps it back to cpu */
@@ -157,6 +160,9 @@ void musb_g_giveback(
 
        req = to_musb_request(request);
 
+printk("%s req->request.buf:%p", __func__, req->request.buf);
+printk("%s req->request.buf:%s", __func__, (char *)req->request.buf);
+
        list_del(&req->list);
        if (req->request.status == -EINPROGRESS)
                req->request.status = status;
@@ -165,8 +171,10 @@ void musb_g_giveback(
        ep->busy = 1;
        spin_unlock(&musb->lock);
 
-       if (!dma_mapping_error(&musb->g.dev, request->dma))
+       if (!dma_mapping_error(musb->controller, request->dma)) {
+               printk("%s into unmap_dma_buffer\n", __func__);
                unmap_dma_buffer(req, musb);
+       }
 

 static int musb_ep_restart_resume_work(struct musb *musb, void *data)
@@ -1319,6 +1349,17 @@ static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request)
 
        spin_lock_irqsave(&musb->lock, flags);
 
+       if (list_empty(&musb_ep->req_list)) {
+               if (musb_ep->dma) {
+                       struct dma_controller   *c = musb->dma_controller;
+
+                       musb_ep_select(musb->mregs, musb_ep->current_epnum);
+                       if (c->channel_abort)
+                               status = c->channel_abort(musb_ep->dma);
+                       goto done;
+               }
+       }
+
        list_for_each_entry(r, &musb_ep->req_list, list) {
                if (r == req)
                        break;


        /* NOTE: this assumes we are sensing vbus; we'd rather
@@ -1800,6 +1868,19 @@ static int musb_gadget_start(struct usb_gadget *g,
                list_add_tail(&ep->end_point.ep_list, &musb->g.ep_list);
        }
 
+#ifdef CONFIG_USB_SPRD_DMA
+       if (epnum) {
+               ep->dma_linklist = dma_alloc_coherent(musb->controller,
+                       sizeof(struct linklist_node_s) * LISTNODE_NUM,
+                       &ep->list_dma_addr, GFP_KERNEL);
+
+pr_err("%s:%p,%llx\n",__func__, ep->dma_linklist, ep->list_dma_addr);
+
+               if (!ep->dma_linklist)
+                       dev_err(musb->controller, "failed to allocate dma linklist\n");
+       }
+#endif
+
        if (!epnum || hw_ep->is_shared_fifo) {
                ep->end_point.caps.dir_in = true;
                ep->end_point.caps.dir_out = true;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值