- 09 11月, 2016 6 次提交
-
-
由 Dov Levenglick 提交于
In case the power configuration fails, skip further processing of the probing function and return immediately. This has 2 reasons: 1. Don't allow the UFS to continue running in PWM 2. Avoid multiple calls to pm_runtime_put_sync() when not in error handling or power management contexts Signed-off-by: NDov Levenglick <dovl@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Gilad Broner 提交于
During runtime resume operation, clock scaling may get indirectly resumed via call to ufshcd_set_dev_pwr_mode(): Start/Stop Unit command times out and SCSI error handling ultimately calls the host reset handler to recover, during which clock scaling is resumed. Error case exit path of runtime resume will disable clocks. As clock scaling was already resumed, it will get scheduled later on and try to access UFS registers while clocks are disabled, resulting in unclocked register access. Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Gilad Broner 提交于
According to UFS device specification, sense data can be only 18 bytes long, this change makes the changes accordingly. Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Gilad Broner 提交于
Add a write memory barrier to make sure descriptors prepared are actually written to memory before ringing the doorbell. We have also added the write memory barrier after ringing the doorbell register so that controller sees the new request immediately. Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
In this change there are a few fixes of possible NULL pointer access and possible access to index that exceeds array boundaries. Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Subhash Jadavani 提交于
Vendor specific setup_clocks callback may require the clocks managed by ufshcd driver to be ON. So if the vendor specific setup_clocks callback is called while the required clocks are turned off, it could result into unclocked register access. To prevent possible unclock register access, this change adds one more argument to setup_clocks callback to let it know whether it is called pre/post the clock changes by core driver. Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Reviewed-by: NKiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 30 9月, 2016 2 次提交
-
-
由 Wei Yongjun 提交于
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function. Signed-off-by: NWei Yongjun <weiyongjun1@huawei.com> Reviewed-by: NSubhash Jadavani <subhashj@codeaurora.org> Reviewed-by: NKiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Zang Leigang 提交于
Some devices have problems handling a Query UPIU with Data Segment set. Only set it for WRITE DESCRIPTOR commands. [mkp: updated patch description] Signed-off-by: NZang Leigang <zangleigang@hisilicon.com> Reviewed-by: NSubhash Jadavani <subhashj@codeaurora.org> Reviewed-by: NKiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 22 9月, 2016 1 次提交
-
-
由 Kiwoong Kim 提交于
When any UFS host controller receives a TM(Task Management) response from a UFS device, UFS driver has been recognize like receiving a message of "Task Management Function Complete"(00h) in all cases, so far. That means there is no pending task for a tag of the TM request sent before in the UFS device. That's because the byte offset 6 in TM response which has been used to get a TM service response so far represents just whether or not a TM transmission passes. Regarding UFS spec, the correct byte offset to get TM service response is 15, not 6. I tested that UFS driver responds properly for the TM response from a UFS device with an reference board with exynos8890, as follow: No pending task -> Task Management Function Complete (00h) Pending task -> Task Management Function Succeeded (08h) [mkp: applied by hand] Signed-off-by: NKiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NHeonGwang Chu <hg.chu@samsung.com> Tested-by: N: Kiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 09 9月, 2016 1 次提交
-
-
由 Kiwoong Kim 提交于
I modified a string as described in UFS spec as follow: umpcrs -> upmcrs. [mkp: applied by hand] Signed-off-by: NKiwoong Kim <kwmad.kim@samsung.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 16 7月, 2016 1 次提交
-
-
由 Tiezhu Yang 提交于
When buff_ascii kmalloc failed, there is no need to call kfree, it should return -ENOMEM directly, this patch fixes it. Signed-off-by: NTiezhu Yang <kernelpatch@126.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 13 7月, 2016 1 次提交
-
-
由 Joao Pinto 提交于
Add UFS 2.0 support to the UFS core driver. Signed-off-by: NJoao Pinto <jpinto@synopsys.com> Acked-by: NArnd Bergmann <arnd@arndb.de> Acked-by: NTomas Winkler <tomas.winkler@intel.com> Reviewed-by: NHannes Reinecke <hare@suse.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 15 3月, 2016 14 次提交
-
-
由 Yaniv Gardi 提交于
We put the UFS device in sleep state & UFS link in hibern8 state during runtime suspend. After this we put all the UFS rails in low power modes immediately but it seems some devices may still draw more than sleep current from UFS rails (especially from VCCQ rail) at-least for 500us. To avoid this situation, this change adds 2ms delay before putting these UFS rails in LPM mode. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Currently when we try to put the link in off/disabled state during suspend, it seems link is not being kept in low power mode. This patch fixes the issue by putting the link in hibern8 first (so device also puts the link in low power mode) and then stop the host controller. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Optimal values of local UniPro parameters like PA_Hibern8Time & PA_TActivate can help reduce the hibern8 exit latency. If both host and device supports UniPro ver1.6 or later, these parameters will be automatically tuned during link startup itself. But if either host or device doesn't support UniPro ver 1.6 or later, we have to manually tune them. But to keep manual tuning logic simple, we will only do manual tuning if local unipro version doesn't support ver1.6 or later. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
We are seeing that some devices are raising the urgent bkops exception events even when BKOPS status doesn't indicate performace impacted or critical. Handle these device by determining their urgent bkops status at runtime. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Query commands have 100ms timeout and it may timeout if they are issued in parallel to ongoing read/write SCSI commands, this change adds the retry (max: 10) in case command timeouts. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Some vendor's UFS device sends back to back NACs for the DL data frames causing the host controller to raise the DFES error status. Sometimes such UFS devices send back to back NAC without waiting for new retransmitted DL frame from the host and in such cases it might be possible the Host UniPro goes into bad state without raising the DFES error interrupt. If this happens then all the pending commands would timeout only after respective SW command (which is generally too large). This change workarounds such device behaviour like this: - As soon as SW sees the DL NAC error, it would schedule the error handler - Error handler would sleep for 50ms to see if there any fatal errors raised by UFS controller. - If there are fatal errors then SW does normal error recovery. - If there are no fatal errors then SW sends the NOP command to device to check if link is alive. - If NOP command times out, SW does normal error recovery - If NOP command succeed, skip the error handling. If DL NAC error is seen multiple times with some vendor's UFS devices then enable this quirk to initiate quick error recovery and also silence related error logs to reduce spamming of kernel logs. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
UFS driver's error handler forcefully tries to clear all the pending requests. For each pending request in the queue, it waits 1 sec for it to get cleared. If we have multiple requests in the queue then it's possible that we might end up waiting for those many seconds before resetting the host. But note that resetting host would any way clear all the pending requests from the hardware. Hence this change skips the forceful clear of the pending requests if we are anyway going to reset the host (for fatal errors). Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Some UFS devices don't require VCCQ rail for device operations hence this change adds support to recognize such devices and remove vote for the unused VCCQ rail. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Currently we use the host quirks mechanism in order to handle both device and host controller quirks. In order to support various of UFS devices we should separate handling the device quirks from the host controller's. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NRaviv Shvili <rshvili@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
This change adds support to read device descriptor and string descriptor from a UFS device Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NHannes Reinecke <hare@suse.com> Signed-off-by: NRaviv Shvili <rshvili@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Sometimes due to hw issues it takes some time to the host controller register to update. In order to verify the register has updated, a polling is done until its value is set. In addition the functions ufshcd_hba_stop() and ufshcd_wait_for_register() was updated with an additional input parameter, indicating the timeout between reads will be done by sleeping or spinning the cpu. Reviewed-by: NHannes Reinecke <hare@suse.com> Signed-off-by: NRaviv Shvili <rshvili@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
A race condition exists between request requeueing and scsi layer error handling: When UFS driver queuecommand returns a busy status for a request, it will be requeued and its tag will be freed and set to -1. At the same time it is possible that the request will timeout and scsi layer will start error handling for it. The scsi layer reuses the request and its tag to send error related commands to the device, however its tag is no longer valid. As this request was never really sent to the device, there is no point to start error handling with the device. Implement the scsi error handling timeout callback and bypass SCSI error handling for request that were not actually sent to the device. For such requests simply reset the block layer timer. Otherwise, let SCSI layer perform the usual error handling. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
When control reaches to Linux UFS driver during UFS boot mode, UFS host controller interrupt status/enable registers may have left over settings. In order to avoid any spurious interrupts due to these left overs, it's important to clear these interrupt status/enable registers before enabling UFS interrupt handling. Reviewed-by: NHannes Reinecke <hare@suse.de> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Different platform may have different number of lanes for the UFS link. Add parameter to device tree specifying how many lanes should be configured for the UFS link. Reviewed-by: NHannes Reinecke <hare@suse.de> Acked-by: NRob Herring <robh@kernel.org> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
- 24 2月, 2016 14 次提交
-
-
由 Tomas Winkler 提交于
QUERY_DESC_GEOMETRY_MAZ_SIZE QUERY_DESC_GEOMETRY_MAX_SIZE Signed-off-by: NTomas Winkler <tomas.winkler@intel.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Sometimes queries from the device might return a failure so it is recommended to retry sending the query, before giving up. This change adds a wrapper to retry sending a query attribute, in cases where we need to wait longer, before we continue, or before reporting a failure. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Add a write memory barrier to make sure descriptors prepared are actually written to memory before ringing the doorbell. We have also added the write memory barrier after ringing the doorbell register so that controller sees the new request immediately. Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Performing several writes to UFS host controller registers has no guarantee of ordering, so we must make sure register writes to setup request list base address etc. are performed before the run/stop register is enabled. In addition, when setting up a task request, we must make sure the updating of descriptors takes places before ringing the doorbell, similarly to setting up a transfer request. Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
DME commands such as Hibern8 enter/exit and gear switch generate 2 completion interrupts, one for confirmation that command is received by local UniPro and 2nd one is the final confirmation after communication with remote UniPro. Currently both of these completions are registered as interrupt events which is not quite necessary and instead we can just wait for the interrupt of 2nd completion, this should reduce the number of interrupts and could reduce the unnecessary CPU wakeups to handle extra interrupts. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
UFS flag query requests may fail sometimes due to timeouts etc. Add a wrapper function to retry up to 10 times in case of such failure, similar to retries being made for attribute queries. Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Hibern8 exit can be called from 3 different contexts: - ufshcd_hibern8_exit_work - ufshcd_ungate_work - runtime/system resume If hibern8 exit fails for some reason then we try to bring the link to active state by link startup but this recovery mechanism results into deadlock or errors from first 2 context listed above. This change fixes the recovery by adding proper error handling mechanism. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
If hibern8 enter command fails then UFS link state may be unknown which may result into timeout of all the commands issued after failure. This change does 2 things (for pre-defined number of retry counts) after hibern8 enter failure: 1. Recovers the UFS link to active state 2. If link is recovered to active state, tries to put the UFS link in hibern8 enter again until retry count expires. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
The dme_peer get/set attribute commands are prone to errors, therefore we add three retries for the UIC command sending. Error code returned from ufshcd_send_uic_cmd() is checked, and unless it was successful or the retries have finished, another command will be sent. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NLee Susman <lsusman@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
If device raises the exception event in the response to the commands sent during the runtime/system PM callbacks, exception event handler might run in parallel with PM callbacks and may see unclocked register accesses. This change fixes this issue by not scheduling the exception event handler while PM callbacks are running. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
fDeviceInit query response time for some devices is too long that default query request timeout of 100ms may not be enough. Experiments show that fDeviceInit response sometimes takes 500ms so to be on safer side this change sets the timeout to 600ms. Without this change, we might unnecessarily have to retry fDeviceInit query requests multiple times and each query request timeout prints one error message. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
When sending a query to the device returns with a timeout error, we clear the corresponding bit in the DOORBELL register but we don't clear the outstanding_request field as we should. This patch fixes this bug. Reviewed-by: NSubhash Jadavani <subhashj@codeaurora.org> Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
A race condition appear to exist between request completion when scsi_done() is called to end the request and set the tag back to -1 (at blk_queue_end_tag() scsi_end_request), and scsi layer error handling which aborts the command and reuses it to request sense data. Sending the request sense is done with tag which was set to -1 and so it is invalid. Assert command tag passed from scsi layer is valid. Reviewed-by: NSubhash Jadavani <subhashj@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NGilad Broner <gbroner@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-
由 Yaniv Gardi 提交于
Some of the data structures (like response UPIU) and/or its elements (unused fields) should be cleared before sending out the respective command to UFS device. This change clears the UPIU response data structure for query commands and NOP command before sending out the command. We also initialize the PRDT table length to zero which should take care of commands which doesn't have any data associated with it. We are also clearing the unused fields in request UPIU for NOP command. Reviewed-by: NGilad Broner <gbroner@codeaurora.org> Reviewed-by: NDolev Raviv <draviv@codeaurora.org> Signed-off-by: NSubhash Jadavani <subhashj@codeaurora.org> Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org> Tested-by: NTomas Winkler <tomas.winkler@intel.com> Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
-