The previous code could use the first USB-DMAC with IPMMU if iommus
property was set into this device node. However, in this case, it
could not control the second USB-DMAC with IPMMU because a parameter
of IPMMU (micro-TLB id) is different with each USB-DMAC.

So, this patch uses the usb_gadget_{un}map_request_by_dev() APIs for
IPMMU. (Then, iommus property should be set into USB-DMAC node(s).)

Signed-off-by: Yoshihiro Shimoda <[email protected]>
---
 drivers/usb/renesas_usbhs/mod_gadget.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index 0ebc4a9..12db6e6 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -193,8 +193,6 @@ static int usbhsg_dma_map_ctrl(struct device *dma_dev, 
struct usbhs_pkt *pkt,
        struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
        struct usb_request *req = &ureq->req;
        struct usbhs_pipe *pipe = pkt->pipe;
-       struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
-       struct usbhsg_gpriv *gpriv = usbhsg_uep_to_gpriv(uep);
        enum dma_data_direction dir;
        int ret = 0;
 
@@ -204,13 +202,13 @@ static int usbhsg_dma_map_ctrl(struct device *dma_dev, 
struct usbhs_pkt *pkt,
                /* it can not use scatter/gather */
                WARN_ON(req->num_sgs);
 
-               ret = usb_gadget_map_request(&gpriv->gadget, req, dir);
+               ret = usb_gadget_map_request_by_dev(dma_dev, req, dir);
                if (ret < 0)
                        return ret;
 
                pkt->dma = req->dma;
        } else {
-               usb_gadget_unmap_request(&gpriv->gadget, req, dir);
+               usb_gadget_unmap_request_by_dev(dma_dev, req, dir);
        }
 
        return ret;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to