]> git.sur5r.net Git - u-boot/blobdiff - drivers/usb/gadget/ci_udc.c
Merge branch 'master' of http://git.denx.de/u-boot-sunxi
[u-boot] / drivers / usb / gadget / ci_udc.c
index aadff42a9cdc66ea1879b05d9017d893f4c634d2..3e8eb8799f4e0227fc2fa24c3d9716175d786d5e 100644 (file)
@@ -221,8 +221,8 @@ static void ci_flush_qtd(int ep_num)
  */
 static void ci_flush_td(struct ept_queue_item *td)
 {
-       const uint32_t  start = (uint32_t)td;
-       const uint32_t end = (uint32_t) td + ILIST_ENT_SZ;
+       const unsigned long start = (unsigned long)td;
+       const unsigned long end = (unsigned long)td + ILIST_ENT_SZ;
        flush_dcache_range(start, end);
 }
 
@@ -249,8 +249,8 @@ static void ci_invalidate_qtd(int ep_num)
  */
 static void ci_invalidate_td(struct ept_queue_item *td)
 {
-       const uint32_t start = (uint32_t)td;
-       const uint32_t end = start + ILIST_ENT_SZ;
+       const unsigned long start = (unsigned long)td;
+       const unsigned long end = start + ILIST_ENT_SZ;
        invalidate_dcache_range(start, end);
 }
 
@@ -258,10 +258,12 @@ static struct usb_request *
 ci_ep_alloc_request(struct usb_ep *ep, unsigned int gfp_flags)
 {
        struct ci_ep *ci_ep = container_of(ep, struct ci_ep, ep);
-       int num;
+       int num = -1;
        struct ci_req *ci_req;
 
-       num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
+       if (ci_ep->desc)
+               num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
+
        if (num == 0 && controller.ep0_req)
                return &controller.ep0_req->req;
 
@@ -281,9 +283,11 @@ static void ci_ep_free_request(struct usb_ep *ep, struct usb_request *req)
 {
        struct ci_ep *ci_ep = container_of(ep, struct ci_ep, ep);
        struct ci_req *ci_req = container_of(req, struct ci_req, req);
-       int num;
+       int num = -1;
+
+       if (ci_ep->desc)
+               num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
 
-       num = ci_ep->desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
        if (num == 0) {
                if (!controller.ep0_req)
                        return;
@@ -459,7 +463,7 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep)
                if (len) {
                        qtd = (struct ept_queue_item *)
                               memalign(ILIST_ALIGN, ILIST_ENT_SZ);
-                       dtd->next = (uint32_t)qtd;
+                       dtd->next = (unsigned long)qtd;
                        dtd = qtd;
                        memset(dtd, 0, ILIST_ENT_SZ);
                }
@@ -503,10 +507,10 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep)
 
        ci_flush_qtd(num);
 
-       item = (struct ept_queue_item *)head->next;
+       item = (struct ept_queue_item *)(unsigned long)head->next;
        while (item->next != TERMINATE) {
-               ci_flush_td((struct ept_queue_item *)item->next);
-               item = (struct ept_queue_item *)item->next;
+               ci_flush_td((struct ept_queue_item *)(unsigned long)item->next);
+               item = (struct ept_queue_item *)(unsigned long)item->next;
        }
 
        DBG("ept%d %s queue len %x, req %p, buffer %p\n",
@@ -594,7 +598,8 @@ static void handle_ep_complete(struct ci_ep *ci_ep)
                        printf("EP%d/%s FAIL info=%x pg0=%x\n",
                               num, in ? "in" : "out", item->info, item->page0);
                if (j != ci_req->dtd_count - 1)
-                       next_td = (struct ept_queue_item *)item->next;
+                       next_td = (struct ept_queue_item *)(unsigned long)
+                               item->next;
                if (j != 0)
                        free(item);
        }