Hi Minas,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on next-20180309]
[cannot apply to v4.16-rc4 v4.16-rc3 v4.16-rc2 v4.16-rc6]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Minas-Harutyunyan/usb-dwc2-gadget-Update-ISOC-DDMA-flow/20180318-134649

smatch warnings:
drivers/usb/dwc2/gadget.c:2250 dwc2_gadget_complete_isoc_request_ddma() warn: 
signed overflow undefined. 'index - (index / dpi) * dpi + 1 < dpi'
drivers/usb/dwc2/gadget.c:2270 dwc2_gadget_complete_isoc_request_ddma() warn: 
should this be a bitwise op?
drivers/usb/dwc2/gadget.c:2270 dwc2_gadget_complete_isoc_request_ddma() warn: 
should this be a bitwise op?

# 
https://github.com/0day-ci/linux/commit/ffb8a411a9d55bf8c15292a6ded7c8663a8ac290
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout ffb8a411a9d55bf8c15292a6ded7c8663a8ac290
vim +2250 drivers/usb/dwc2/gadget.c

5b7d70c6 drivers/usb/gadget/s3c-hsotg.c Ben Dooks         2009-06-02  2066  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2067  
static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2068      
                           struct dwc2_hsotg_ep *hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2069  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2070  /*
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2071   * 
dwc2_gadget_complete_isoc_request_ddma - complete an isoc request in DDMA
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2072   * 
@hs_ep: The endpoint the request was on.
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2073   *
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2074   * 
Get first request from the ep queue, determine descriptor on which complete
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2075   * 
happened. SW discovers which descriptor currently in use by HW, adjusts
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2076   * 
dma_address and calculates index of completed descriptor based on the value
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2077   * 
of DEPDMA register. Update actual length of request, giveback to gadget.
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2078   */
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2079  
static void dwc2_gadget_complete_isoc_request_ddma(struct dwc2_hsotg_ep *hs_ep)
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2080  {
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2081      
struct dwc2_hsotg *hsotg = hs_ep->parent;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2082      
struct dwc2_hsotg_req *hs_req;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2083      
struct usb_request *ureq;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2084      
int index, idx;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2085      
dma_addr_t dma_addr;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2086      
u32 dma_reg;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2087      
u32 depdma;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2088      
u32 desc_sts;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2089      
u32 mask;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2090      
int dpi;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2091      
int ret;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2092      
int sumofpid;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2093  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2094      
dpi = 1;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2095      
if (!hs_ep->dir_in)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2096      
        dpi = hs_ep->mc;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2097  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2098      
hs_req = get_ep_head(hs_ep);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2099      
if (!hs_req) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2100      
        hs_ep->target_frame = TARGET_FRAME_INITIAL;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2101      
        dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2102      
        dev_warn(hsotg->dev, "%s: ISOC EP queue empty\n", __func__);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2103      
        return;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2104      
}
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2105  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2106      
ureq = &hs_req->req;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2107  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2108      
dma_addr = hs_ep->desc_list_dma;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2109  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2110      
dma_reg = hs_ep->dir_in ? DIEPDMA(hs_ep->index) : DOEPDMA(hs_ep->index);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2111      
depdma = dwc2_readl(hsotg->regs + dma_reg);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2112  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2113      
index = (depdma - dma_addr) / sizeof(struct dwc2_dma_desc) - 1;
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2114      
/* Check descriptor chain rollover */
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2115      
if (index < 0)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2116      
        index = dpi * MAX_DMA_DESC_NUM_GENERIC - 1;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2117  
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2118      
desc_sts = hs_ep->desc_list[index].status;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2119  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2120      
if (dpi == 1) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2121      
        /* Check completion status for not High Bandwidth ISOC Out */
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2122      
        if ((desc_sts & DEV_DMA_STS_MASK) >> DEV_DMA_STS_SHIFT ==
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2123      
            DEV_DMA_STS_SUCC) {
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2124      
                mask = hs_ep->dir_in ? DEV_DMA_ISOC_TX_NBYTES_MASK :
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2125      
                       DEV_DMA_ISOC_RX_NBYTES_MASK;
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2126      
                ureq->actual = ureq->length -
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2127      
                               ((desc_sts & mask) >>
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2128      
                                DEV_DMA_ISOC_NBYTES_SHIFT);
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2129  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2130      
                /* Adjust actual len for ISOC Out if len is
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2131      
                 * not align of 4.
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2132      
                 */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2133      
                if (!hs_ep->dir_in && dpi == 1 && ureq->length & 0x3)
95d2b037 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2134      
                        ureq->actual += 4 - (ureq->length & 0x3);
95d2b037 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2135  
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2136      
                dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0);
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2137      
        } else {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2138      
                dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req,
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2139      
                                            -ETIMEDOUT);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2140      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2141      
} else {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2142      
        /* Check completion status for High Bandwidth ISOC Out. */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2143      
        ret = 0;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2144      
        /* Ignore interrupt if it not last in uframe. */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2145      
        if (((desc_sts & DEV_DMA_ISOC_PID_MASK) >>
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2146      
              DEV_DMA_ISOC_PID_SHIFT) == DEV_DMA_ISOC_PID_MDATA)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2147      
                return;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2148  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2149      
        idx = 0;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2150      
        /* Complete requests with NODATA if some uframes are skiped */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2151      
        while (hs_ep->target_frame !=
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2152      
               (desc_sts & DEV_DMA_ISOC_FRNUM_MASK)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2153      
                >> DEV_DMA_ISOC_FRNUM_SHIFT) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2154      
                idx++;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2155      
                dwc2_hsotg_complete_request(hsotg, hs_ep,
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2156      
                                            hs_req, -ENODATA);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2157      
                hs_req = get_ep_head(hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2158      
                if (!hs_req) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2159      
                        hs_ep->target_frame = TARGET_FRAME_INITIAL;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2160      
                        dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2161      
                        dev_warn(hsotg->dev, "%s: ISOC EP queue empty\n",
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2162      
                                 __func__);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2163      
                        /* Clear late XFERCOMPL interrupts if any */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2164      
                        dwc2_writel(DXEPINT_XFERCOMPL, hsotg->regs +
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2165      
                                DOEPINT(hs_ep->index));
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2166      
                        return;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2167      
                }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2168  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2169      
                ureq = &hs_req->req;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2170  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2171      
                dwc2_gadget_incr_frame_num(hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2172      
                hs_ep->target_frame &= (DEV_DMA_ISOC_FRNUM_MASK >>
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2173      
                        DEV_DMA_ISOC_FRNUM_SHIFT);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2174      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2175      
        /* Increment 1 more to set target to next uframe */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2176      
        hs_ep->target_frame = (desc_sts & DEV_DMA_ISOC_FRNUM_MASK) >>
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2177      
                DEV_DMA_ISOC_FRNUM_SHIFT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2178      
        dwc2_gadget_incr_frame_num(hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2179      
        hs_ep->target_frame &= (DEV_DMA_ISOC_FRNUM_MASK >>
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2180      
                DEV_DMA_ISOC_FRNUM_SHIFT);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2181  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2182      
        /* Need to restart if any request completed in above loop */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2183      
        if (idx) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2184      
                dwc2_hsotg_complete_request(hsotg, hs_ep,
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2185      
                                            hs_req, -ENODATA);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2186      
                hs_req = get_ep_head(hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2187      
                if (!hs_req) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2188      
                        hs_ep->target_frame = TARGET_FRAME_INITIAL;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2189      
                        dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2190      
                        dev_warn(hsotg->dev, "%s: ISOC EP queue empty\n",
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2191      
                                 __func__);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2192      
                        /* Clear any late XFERCOMPL interrupts if any */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2193      
                        dwc2_writel(DXEPINT_XFERCOMPL, hsotg->regs +
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2194      
                                DOEPINT(hs_ep->index));
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2195      
                        return;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2196      
                }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2197      
                goto out;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2198      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2199      
        ureq = &hs_req->req;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2200  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2201      
        /* Because of interrupt latency after receiving interrupt
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2202      
         * for 1st descriptor and when start handling the descriptor
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2203      
         * index can be shifted to second or third descriptor.
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2204      
         * On last descriptor (for uframe) completion process all
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2205      
         * descritors for current uframe.
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2206      
         */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2207      
        sumofpid = 0;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2208  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2209      
        for (idx = (index / dpi) * dpi; idx <= index; idx++) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2210      
                desc_sts = hs_ep->desc_list[idx].status;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2211  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2212      
                if ((desc_sts & DEV_DMA_STS_MASK) >> DEV_DMA_STS_SHIFT
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2213      
                     == DEV_DMA_STS_SUCC) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2214      
                        ureq->actual += hs_ep->ep.maxpacket -
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2215      
                                        ((desc_sts &
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2216      
                                          DEV_DMA_ISOC_RX_NBYTES_MASK) >>
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2217      
                                          DEV_DMA_ISOC_NBYTES_SHIFT);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2218      
                        sumofpid += (desc_sts & DEV_DMA_ISOC_PID_MASK)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2219      
                                     >> DEV_DMA_ISOC_PID_SHIFT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2220      
                        } else {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2221      
                                ret = -ETIMEDOUT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2222      
                                break;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2223      
                        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2224      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2225  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2226      
        /* Safety check packets PID sequence based on sumofpids:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2227      
         * if packet count = 1 then sumofpid should be 0
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2228      
         * if packet count = 2 then sumofpid should be 3+2=5
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2229      
         * if packet count = 3 then sumofpid should be 3+3+1=7
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2230      
         */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2231      
        switch (index - (index / dpi) * dpi + 1) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2232      
        case 1:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2233      
                if (sumofpid != 0)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2234      
                        ret = -ETIMEDOUT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2235      
                break;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2236      
        case 2:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2237      
                if (sumofpid != 5)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2238      
                        ret = -ETIMEDOUT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2239      
                break;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2240      
        case 3:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2241      
                if (sumofpid != 7)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2242      
                        ret = -ETIMEDOUT;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2243      
                break;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2244      
        default:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2245      
                dev_dbg(hsotg->dev, "%s: wrong sum of PID's %d\n",
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2246      
                        __func__, sumofpid);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2247      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2248  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2249      
        /* Clear EOPF intr for frame if some descs should be skiped */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17 @2250      
        if ((index - (index / dpi) * dpi + 1) < dpi)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2251      
                dwc2_writel(GINTSTS_EOPF, hsotg->regs + GINTSTS);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2252  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2253      
        /* Safety check */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2254      
        if (ureq->actual > ureq->length)
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2255      
                ureq->actual = ureq->length;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2256  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2257      
        dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, ret);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2258  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2259      
        /* If packet count in current uframe less than mult then need
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2260      
         * to skip unused for uframe descrioptors by restarting xfers
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2261      
         */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2262      
        idx = dpi - (index % dpi) - 1;
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2263  out:
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2264      
        if (idx > 0) {
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2265      
                dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2266      
                dwc2_gadget_start_isoc_ddma(hs_ep);
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2267      
        }
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2268  
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2269      
        /* Clear late XFERCOMPL and OUTTKNEPDIS interrupts if any */
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17 @2270      
        dwc2_writel(DXEPINT_XFERCOMPL || DXEPINT_OUTTKNEPDIS,
ffb8a411 drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2271      
                    hsotg->regs + DOEPINT(hs_ep->index));
a19205da drivers/usb/dwc2/gadget.c      Minas Harutyunyan 2018-03-17  2272      
}
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2273  }
540ccba0 drivers/usb/dwc2/gadget.c      Vahram Aharonyan  2016-11-14  2274  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to