Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b41d8a6a authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Felipe Balbi
Browse files

usb: renesas_usbhs: use usb_gadget_{un}map_request_by_dev() for IPMMU



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: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent c3cdcac7
Loading
Loading
Loading
Loading
+2 −4
Original line number Original line Diff line number Diff line
@@ -197,8 +197,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 usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
	struct usb_request *req = &ureq->req;
	struct usb_request *req = &ureq->req;
	struct usbhs_pipe *pipe = pkt->pipe;
	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;
	enum dma_data_direction dir;
	int ret = 0;
	int ret = 0;


@@ -208,13 +206,13 @@ static int usbhsg_dma_map_ctrl(struct device *dma_dev, struct usbhs_pkt *pkt,
		/* it can not use scatter/gather */
		/* it can not use scatter/gather */
		WARN_ON(req->num_sgs);
		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)
		if (ret < 0)
			return ret;
			return ret;


		pkt->dma = req->dma;
		pkt->dma = req->dma;
	} else {
	} else {
		usb_gadget_unmap_request(&gpriv->gadget, req, dir);
		usb_gadget_unmap_request_by_dev(dma_dev, req, dir);
	}
	}


	return ret;
	return ret;