]> git.itanic.dy.fi Git - linux-stable/commitdiff
usb: cdns3: ep0: fix some endian issues
authorPeter Chen <peter.chen@nxp.com>
Wed, 3 Jun 2020 06:53:54 +0000 (14:53 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Jul 2020 08:19:52 +0000 (10:19 +0200)
[ Upstream commit 9f81d45c79271def8a9b90447b04b9c6323291f9 ]

It is found by sparse.

Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/cdns3/ep0.c

index da4c5eb03d7eef2a2a934858e251e79cfdebdfa2..666cebd9c5f295f0e79298d158e9a5401fdae96b 100644 (file)
@@ -37,18 +37,18 @@ static void cdns3_ep0_run_transfer(struct cdns3_device *priv_dev,
        struct cdns3_usb_regs __iomem *regs = priv_dev->regs;
        struct cdns3_endpoint *priv_ep = priv_dev->eps[0];
 
-       priv_ep->trb_pool[0].buffer = TRB_BUFFER(dma_addr);
-       priv_ep->trb_pool[0].length = TRB_LEN(length);
+       priv_ep->trb_pool[0].buffer = cpu_to_le32(TRB_BUFFER(dma_addr));
+       priv_ep->trb_pool[0].length = cpu_to_le32(TRB_LEN(length));
 
        if (zlp) {
-               priv_ep->trb_pool[0].control = TRB_CYCLE | TRB_TYPE(TRB_NORMAL);
-               priv_ep->trb_pool[1].buffer = TRB_BUFFER(dma_addr);
-               priv_ep->trb_pool[1].length = TRB_LEN(0);
-               priv_ep->trb_pool[1].control = TRB_CYCLE | TRB_IOC |
-                   TRB_TYPE(TRB_NORMAL);
+               priv_ep->trb_pool[0].control = cpu_to_le32(TRB_CYCLE | TRB_TYPE(TRB_NORMAL));
+               priv_ep->trb_pool[1].buffer = cpu_to_le32(TRB_BUFFER(dma_addr));
+               priv_ep->trb_pool[1].length = cpu_to_le32(TRB_LEN(0));
+               priv_ep->trb_pool[1].control = cpu_to_le32(TRB_CYCLE | TRB_IOC |
+                   TRB_TYPE(TRB_NORMAL));
        } else {
-               priv_ep->trb_pool[0].control = TRB_CYCLE | TRB_IOC |
-                   TRB_TYPE(TRB_NORMAL);
+               priv_ep->trb_pool[0].control = cpu_to_le32(TRB_CYCLE | TRB_IOC |
+                   TRB_TYPE(TRB_NORMAL));
                priv_ep->trb_pool[1].control = 0;
        }
 
@@ -264,11 +264,11 @@ static int cdns3_req_ep0_get_status(struct cdns3_device *priv_dev,
        case USB_RECIP_INTERFACE:
                return cdns3_ep0_delegate_req(priv_dev, ctrl);
        case USB_RECIP_ENDPOINT:
-               index = cdns3_ep_addr_to_index(ctrl->wIndex);
+               index = cdns3_ep_addr_to_index(le16_to_cpu(ctrl->wIndex));
                priv_ep = priv_dev->eps[index];
 
                /* check if endpoint is stalled or stall is pending */
-               cdns3_select_ep(priv_dev, ctrl->wIndex);
+               cdns3_select_ep(priv_dev, le16_to_cpu(ctrl->wIndex));
                if (EP_STS_STALL(readl(&priv_dev->regs->ep_sts)) ||
                    (priv_ep->flags & EP_STALL_PENDING))
                        usb_status =  BIT(USB_ENDPOINT_HALT);
@@ -388,10 +388,10 @@ static int cdns3_ep0_feature_handle_endpoint(struct cdns3_device *priv_dev,
        if (!(ctrl->wIndex & ~USB_DIR_IN))
                return 0;
 
-       index = cdns3_ep_addr_to_index(ctrl->wIndex);
+       index = cdns3_ep_addr_to_index(le16_to_cpu(ctrl->wIndex));
        priv_ep = priv_dev->eps[index];
 
-       cdns3_select_ep(priv_dev, ctrl->wIndex);
+       cdns3_select_ep(priv_dev, le16_to_cpu(ctrl->wIndex));
 
        if (set)
                __cdns3_gadget_ep_set_halt(priv_ep);
@@ -452,7 +452,7 @@ static int cdns3_req_ep0_set_sel(struct cdns3_device *priv_dev,
        if (priv_dev->gadget.state < USB_STATE_ADDRESS)
                return -EINVAL;
 
-       if (ctrl_req->wLength != 6) {
+       if (le16_to_cpu(ctrl_req->wLength) != 6) {
                dev_err(priv_dev->dev, "Set SEL should be 6 bytes, got %d\n",
                        ctrl_req->wLength);
                return -EINVAL;
@@ -476,7 +476,7 @@ static int cdns3_req_ep0_set_isoch_delay(struct cdns3_device *priv_dev,
        if (ctrl_req->wIndex || ctrl_req->wLength)
                return -EINVAL;
 
-       priv_dev->isoch_delay = ctrl_req->wValue;
+       priv_dev->isoch_delay = le16_to_cpu(ctrl_req->wValue);
 
        return 0;
 }