1. 18 1月, 2013 9 次提交
    • P
      usb: dwc3: gadget: req->queued must be forced to false in cleanup · c9fda7d6
      Pratyush Anand 提交于
      I am not sure, why I found it during SG debugging. But, I noticed that
      even when req_queued list was empty, there were some request in
      request_list having queued flag true. If I run test second time, it
      first removes all request from request_list and hence busy_slot was
      wrongly incremented.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      c9fda7d6
    • P
      usb: dwc3: gadget: fix scatter gather implementation · e5ba5ec8
      Pratyush Anand 提交于
      To work with scatter gather properly, fixes have been done in number of
      functions. I will explain requirement of each fixes one by one.
      
      start_slot: used to retrieve all request of SG during cleanup
      
      dwc3_gadget_giveback: We need to skip link TRB if it was one of the
      intermediate TRB of SG.
      
      dwc3_prepare_one_trb: We need to track all submitted TRBs during
      cleanup. Since, all TRBs would be serially allocated, so we can just
      keep starting slot info and we can always find rest of them. We need to
      pass sg node number, so that we cab appropriately program ISOC_FIRST/ISOC,
      Chain etc.
      
      dwc3_prepare_trbs: last_one should be set when it is last node
      of SG as well as last node of request_list.
      
      __dwc3_cleanup_done_trbs: It has been prepared after re-factorization of
      dwc3_cleanup_done_reqs. It is called for each TRB of SG.
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      e5ba5ec8
    • P
      usb: dwc3: gadget: no need to pass params in case of UPDATE_TRANSFER · 1877d6c9
      Pratyush Anand 提交于
      UPDATE_TRANSFER does not need any parameters. So, no need to prepare it.
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      1877d6c9
    • P
      usb: dwc3: gadget: fix skip LINK_TRB on ISOC · 915e202a
      Pratyush Anand 提交于
      When we reach to link trb, we just need to increase free_slot and then
      calculate TRB. Return is not correct, as it will cause wrong TRB DMA
      address to fetch in case of update transfer.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      915e202a
    • P
      usb: dwc3: gadget: fix isoc END TRANSFER Condition · cdc359dd
      Pratyush Anand 提交于
      There were still some corner cases where isoc transfer was not able to
      restart, specially when missed isoc does not happen , and in fact gadget does
      not queue any new request during giveback.
      
      Cleanup function calls giveback first, which provides a way to queue
      another request to gadget. But gadget did not had any data. So , it did
      not call ep_queue. To twist it further, gadget did not queue till
      cleanup for last queued TRB is called. If we ever reach this scenario,
      we must call END TRANSFER, so that we receive a new  xfernotready with
      information about current microframe number.
      
      Also insure that there is no request submitted to core when issuing END
      TRANSFER.
      
      Cc: <stable@vger.kernel.org> # v3.8
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      cdc359dd
    • P
      usb: dwc3: gadget: correct return from ep_queue · 15f86bde
      Pratyush Anand 提交于
      Its better to return from each if condition as they are mutually
      exclusive.
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      15f86bde
    • P
      usb: dwc3: gadget: fix missed isoc · 7efea86c
      Pratyush Anand 提交于
      There are two reasons to generate missed isoc.
      
      1. when the host does not poll for all the data.
      2. because of application-side delays that prevent all the data from
      being transferred in programmed microframe.
      
      Current code was able to handle first case only.  This patch handles
      scenario 2 as well.Scenario 2 sometime may occur with complex gadget
      application, however it can be easily reproduced for testing purpose as
      follows:
      
      a. use isoc binterval as 1 in f_sourcesink.
      b. use pattern=0
      c. introduce a delay of 150us deliberately in source_sink_complete, so
      that after few frames it lands into scenario 2.
      d. now run testusb 16 (isoc in  test). You will notice that if this
      patch is not applied then isoc transfer is not able to recover after
      first missed.
      
      Current patch's approach is as under:
      
      If missed isoc occurs and there is no request queued then issue END
      TRANSFER, so that core generates next xfernotready and we will issue a
      fresh START TRANSFER.
      If there are still queued request then wait, do not issue either END or
      UPDATE TRANSFER, just attach next request in request_list during giveback.
      If any future queued request is successfully transferred then we will issue
      UPDATE TRANSFER for all request in the request_list.
      
      Cc: <stable@vger.kernel.org> # v3.6 v3.7 v3.8
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7efea86c
    • P
      usb: dwc3: Enable usb2 LPM only when connected as usb2.0 · 2b758350
      Pratyush Anand 提交于
      Synopsys says:
      The HIRD Threshold field must be set to ‘0’ when the device core is
      operating in super speed mode.
      
      This patch implements above statement.
      
      Cc: <stable@vger.kernel.org> # v3.6 v3.7 v3.8
      Acked-by: NPaul Zimmerman <paulz@synopsys.com>
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      2b758350
    • F
      usb: dwc3: gadget: don't redefine 'ret' · 7dbdf4e4
      Felipe Balbi 提交于
      we have an extra 'ret' variable shadowing a previous
      definition. Remove it.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7dbdf4e4
  2. 22 11月, 2012 1 次提交
  3. 15 10月, 2012 1 次提交
    • F
      usb: dwc3: gadget: fix 'endpoint always busy' bug · 041d81f4
      Felipe Balbi 提交于
      If a USB transfer has already been started, meaning
      we have already issued StartTransfer command to that
      particular endpoint, DWC3_EP_BUSY flag has also
      already been set.
      
      When we try to cancel this transfer which is already
      in controller's cache, we will not receive XferComplete
      event and we must clear DWC3_EP_BUSY in order to allow
      subsequent requests to be properly started.
      
      The best place to clear that flag is right after issuing
      DWC3_DEPCMD_ENDTRANSFER.
      
      Cc: stable@vger.kernel.org # v3.4 v3.5 v3.6
      Reported-by: NMoiz Sonasath <m-sonasath@ti.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      041d81f4
  4. 07 9月, 2012 2 次提交
  5. 31 8月, 2012 1 次提交
    • C
      usb: dwc3: set up burst size only superspeed mode · d2e9a13a
      Chanho Park 提交于
      When connection is established non-ss mode, endpoint.maxburst is correctly set
      to 0, this means that current code will set maxburst bitfield on DEPCFG's
      parameter 0 to the highest possible value (0x0f) which is wrong.
      
      Even though this hasn't caused any issues so far (HW seems to ignore that when
      not running in SS mode) we want to make sure maxburst bitfield is only set to
      anything other than zero if we're running on SuperSpeed mode. In order to
      achieve that, let's check for gadget's operating speed before setting maxburst
      bitfield when issuing DEPCFG command.
      
      [ balbi@ti.com : improved commit log a bit in order to clarify the situation ]
      Signed-off-by: NChanho Park <chanho61.park@samsung.com>
      Signed-off-by: NKyungmin Park <kyungmin.park@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      d2e9a13a
  6. 15 8月, 2012 1 次提交
    • F
      usb: dwc3: gadget: warn about endpoint already enabled before changing ep name · c6f83f38
      Felipe Balbi 提交于
      In case some gadget driver tries to enable an endpoint
      which is already enabled, we print a nice WARN so we
      can track broken gadget drivers. The only problem is that
      we're printing the WARN when we already changed endpoint's
      name, which would result in endpoints named as:
      
      ep1in-bulk-bulk-bulk-bulk-bulk-bulk-bulk
      
      To prevent that, we will continue to print the WARN,
      but do so before changing endpoint's name and return
      early.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      c6f83f38
  7. 09 8月, 2012 1 次提交
  8. 07 8月, 2012 2 次提交
    • P
      usb: dwc3: gadget: correct missed isoc when endpoint is busy · 79c9046e
      Pratyush Anand 提交于
      When MISSED_ISOC is set, BUSY is also set. Since, we are handling
      MISSED_ISOC as a separate case in third scenario, therefore handle only
      BUSY but not MISSED_ISOC in second scenario.
      Signed-off-by: NPratyush Anand <pratyush.anand@st.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      79c9046e
    • M
      usb: dwc3: gadget: Fix sparse warnings · 348e026f
      Moiz Sonasath 提交于
      This patch fixes the following sparse warnings:
      
      drivers/usb/dwc3/gadget.c:1096:7: warning: symbol 'ret' shadows an earlier one
      drivers/usb/dwc3/gadget.c:1058:8: originally declared here
      drivers/usb/dwc3/gadget.c:1100:16: warning: symbol 'dwc' shadows an earlier one
      drivers/usb/dwc3/gadget.c:1057:15: originally declared here
      drivers/usb/dwc3/gadget.c:1118:16: warning: symbol 'dwc' shadows an earlier one
      drivers/usb/dwc3/gadget.c:1057:15: originally declared here
      drivers/usb/dwc3/gadget.c:1800:19: warning: symbol 'dep' shadows an earlier one
      drivers/usb/dwc3/gadget.c:1778:18: originally declared here
      
      Also, fix the potential checkpatch errors around the if() loops that
      this fix patch can create.
      Signed-off-by: NMoiz Sonasath <m-sonasath@ti.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      348e026f
  9. 03 8月, 2012 1 次提交
  10. 02 7月, 2012 5 次提交
  11. 25 6月, 2012 4 次提交
  12. 15 6月, 2012 2 次提交
  13. 12 6月, 2012 1 次提交
  14. 06 6月, 2012 5 次提交
  15. 04 6月, 2012 4 次提交