• subhashj@codeaurora.org's avatar
    scsi: ufs: increase the scsi query response timeout · 10fe5888
    subhashj@codeaurora.org authored
    It is found thats UFS device may take longer than 30ms to respond to
    query requests and in this case we might run into following scenario:
    
    1. UFS host SW sends a query request to UFS device to read an attribute
       value. SW uses tag #31 for this purpose.
    2. UFS host SW waits for 30ms to get the query response (and doorbell
       to be cleared by UFS host HW).
    3. UFS device doesn't respond back within 30ms hence UFS host SW times
       out waiting for the query response.
    4. UFS host SW clears the tag#31 from UTRLCLR register.
    5. UFS host SW waits until UFS host HW to clear tag#31 from the doorbell
       register.
    6. UFS host SW retries the same query request on same tag#31 (sends a query
       request to device to read an attribute value).
    7. UFS host HW gets the query response from the device but this was
       intended as a query response for the 1st query request sent (step-1).
    8. Now UFS device sends another query response to host (for query request
       sent @step-6).
    
    Now there are 2 issues that could happen with above scenario:
    1. UFS device should have actually responded back with only one query
       response but it is found that device may respond back with 2 query
       responses.
    2. If UFS device responds back with 2 resposes on same tag, host HW/SW
       behaviour isn't predictable.
    
    To avoid running into above scenario, we would basically allow device
    to take longer (upto 1.5 seconds) for query response.
    Reviewed-by: default avatarGilad Broner <gbroner@codeaurora.org>
    Signed-off-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    10fe5888
ufshcd.c 175 KB