lkml.org 
[lkml]   [2019]   [Jun]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH v6 5/6] usb:cdns3 Add Cadence USB3 DRD Driver
    From
    Date
    On 10/04/19 1:18 PM, Pawel Laszczak wrote:
    > +static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev,
    > + struct cdns3_endpoint *priv_ep)
    > +{
    > + int dma_index;
    > + u32 doorbell;
    > +
    > + doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);

    > + dma_index = (readl(&priv_dev->regs->ep_traddr) -
    > + priv_ep->trb_pool_dma) / TRB_SIZE;

    This gets upgraded to 64-bit by 64-bit division whenever dma_addr_t is
    64-bit. That should be avoided. Following diff should fix it.
    But please review the logic itself. You are subtracting a 64 bit entity
    from a 32-bit entity. What is guaranteeing that priv_ep->trb_pool_dma is
    32-bit?

    There is one more instance of same issue in cdns3_request_handled().

    Thanks,
    Sekhar

    [1]
    diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
    index bfd5dbf40c7e..e73b618501fb 100644
    --- a/drivers/usb/cdns3/gadget.c
    +++ b/drivers/usb/cdns3/gadget.c
    @@ -749,8 +749,8 @@ static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev,
    u32 doorbell;

    doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
    - dma_index = (readl(&priv_dev->regs->ep_traddr) -
    - priv_ep->trb_pool_dma) / TRB_SIZE;
    + dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma;
    + dma_index /= TRB_SIZE;

    \
     
     \ /
      Last update: 2019-06-04 09:47    [W:2.696 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site