summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-03-22scsi: ufs-qcom: save controller revision before phy_init()Subhash Jadavani
phy_init() calls "init" phy_ops and UFS phy driver might need to know the UFS controller revision in this "init" ops hence save the controller revision before calling phy_init(). Change-Id: I3e9d780dfa3da603b372b1fc4465dfd5f7cfb31a Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: set right GenSelectorIndex for M-PHY attributesSubhash Jadavani
DME attributes read/write commands need GenSelectorIndex argument and according to UFS host controller specification, it should specify the targeted M-PHY data lane. This is the valid range of GenSelectorIndex for M-PHY attributes: 0 to (2 * PA_MaxDataLanes - 1) Example (Note: PA_MaxDataLanes is UniPro protocol constant set to 4): --------------------------------------- MPHY Access target | GenSelectorIndex --------------------------------------- TX Lane0 | 0 TX Lane1 | 1 RX Lane0 | 4 RX Lane1 | 5 --------------------------------------- This change make sure that correct GenSelectorIndex is passed for M-PHY attributes Change-Id: I38c14b5801ece7fce7a7970385756859618efd32 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs-qcom: remove unnecessary quirks for QUniProSubhash Jadavani
QUniPro doesn't require some of the quirks required for legacy UniPro controller hence this change disables those quirks. Change-Id: Ic97ec38d4a9ee7a51d8f336bcbc8fd9533db2f8d Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs-qcom: add QUniPro hardware supportSubhash Jadavani
New revisions of UFS host controller supports the new UniPro hardware controller (referred as QUniPro). This patch adds the support to enable this new UniPro controller hardware. Change-Id: Iccbcc38c36e6d9b9fcbb5c7fd7a3e3326c1c4ce0 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs-qcom: remove support for save/restore phy configurationYaniv Gardi
Since support for 28nm phy removed in kernel 3.14, all related code that is specific to phy 28nm is also removed. Specifically the quirk that enables save/restore phy configuration is removed (and all its relevant callbacks) as it's unique to 28nm ufs phy. Change-Id: Ie723885bacb52548573fc1140d09b0ea5f067382 Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org> [venkatg@codeaurora.org: drop changes to include/linux/phy/phy-qcom-ufs.h] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs: fix spinlock recursion in ufshcd_queuecommand()Gilad Broner
Before calling ufshcd_send_command() the host spinlock is taken. In case error is returned ufshcd_release_all() is called, which in turn attempts to lock the host spinlock again. Unlocked the host spinlock in case error was returned to prevent the spinlock recursion. Change-Id: I630ac8b901f03285a37547bfbcd49ec575e7545a Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: fail ufshcd_probe_hba() if power configuration failsDov 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 Change-Id: I8d6faefadf42385aace903f90ab967c6ddcf7460 Signed-off-by: Dov Levenglick <dovl@codeaurora.org>
2016-03-22scsi: ufs-qcom: add number of lanes per directionGilad Broner
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. Change-Id: Ida8b13b916f76b3cc7afd3da3d04219e95627678 Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: Clear the aborted tag in case of ICE errorMaya Erez
ICE error is handled as a fatal error, hence all the outstanding requests are being aborted. This patch clears the tag in case of device management requests and fixes a bug where outstanding_tasks was cleared instead of outstanding_reqs. Change-Id: If160b6179edd4e36c541ed7f1b14dfc01de0842b Signed-off-by: Maya Erez <merez@codeaurora.org>
2016-03-22scsi: ufs: optimize system suspend handlingSubhash Jadavani
Consider following sequence of events: 1. UFS is runtime suspended, link_state = Hibern8, device_state = sleep 2. System goes into system suspend, ufshcd_system_suspend() brings both link and device to active state and then puts the device in Power_Down state and link in OFF state. 3. System resumes at some later point in time, ufshcd_system_resume() doesn't do anything as UFS state is runtime suspended. Note that link is still on OFF state and device is in Power_Down state. 4. Now system again goes into suspend without any UFS accesses before it. ufshcd_system_suspend() again brings both link and device to active state and then puts the device in Power_Down state and link if OFF state. But it's unnecessary to bring the link & device in active state as both link and device are already in desired low power states. This change fixes this issue by adding proper state checks in ufshcd_system_suspend(). Change-Id: I6ada697f5f844724e0da77fa960401d1d6a1288e Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [gbroner@codeaurora.org: fix compilation errors due to changes in kernel 3.14] Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix locking in __ufshcd_pm_qos_holdGilad Broner
The function is called with locked spinlock and disabled interrupts which is done in a wrapper function ufshcd_pm_qos_hold(). Before flushing the PM QoS voting work spinlock must be released and interrupts must be restored. As the interrupts flags state is saved in the wrapper function, we cannot restore the state. Moving the locking to the internal function fixes this, which makes the wrapper function redundant so it is deleted. Change-Id: I167292305a25d2b8c3524dcddb51f5a7109444aa Signed-off-by: Gilad Broner <gbroner@codeaurora.org> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: define cpu affinity mask for PM QoS votingGilad Broner
PM QoS request type PM_QOS_REQ_AFFINE_CORES specifies for which CPU cores the voting is applied to by the cpu affinity mask. This change defines the cpu mask to be used for the voting in the device tree node so it can be customized for each target. Change-Id: I004dea47b42eaf3cdf0489427b2bb894c9982f22 Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: adjust DME command delayGilad Broner
DME command delay is used to ensure a sufficient interval between subsequent commands. The hardware programming guide specified 1ms. Value of 700us was used as optimization, but it seems to be too short so DME commands would sometimes fail. Update the command delay to 1ms as recommended. Change-Id: I8960f8488c261013ec95ef8c49b58ceda9d065f6 Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: optimize clock, pm_qos, hibern8 handling in queuecommandSubhash Jadavani
ufshcd_queuecommand() vote for the resources in this order: clocks, pm_qos latency, hibern8 exit. If any of these votes are not already applied, each one has to be applied asynchronously and in that case we are releasing all the previously applied resource votes (for example, if hibern8 exit has to be completed asynchronously, we release the votes for pm_qos and clocks as well). This is not a optimal solution instead we should skip scheduling the unvoting work for already voted resources. Change-Id: Ie700d9b3bf64370a5885787f7313d41adb5b3566 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix possible unclocked register access during hibern8 exitSubhash Jadavani
ufshcd_queuecommand() function calls ufshcd_hibern8_hold() to bring the link out of hibern8 asynchronously. If the link was in hibern8 state then it schedules a work to execute the hibern8 without any timeout and returns error back to ufshcd_queuecommand(). ufshcd_queuecommand() calls ufshcd_release() which schedules the clock gating work to be executed after clock gating timeout (50ms at this moment). Ideally hibern8 exit work should have finished much before clock gating work starts execution but it may not be true on heavily loaded system. To protect this race, hibern8 exit work should make sure that clocks are running (by calling ufshcd_hold()) before executing hibern8 exit. Change-Id: I572b26881277886f5ec17b0eed96ee9e59ca1fbf Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: reduce printout for aborted requestsGilad Broner
Details printed for each request that is aborted can overload the target as there can be several requests that are aborted at once. This change will print full request details only for the first aborted request since the last link reset, and minimal details for other subsequent requests. Change-Id: I2868262e0b687c9ddd771a52708428b7de14bea2 Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: suspend clock scaling for failed runtime_resumeGilad 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 NOC error. Change-Id: I3faf46109420ac54404c18b209b4d42982e963b2 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: set REQUEST_SENSE command size to 18 bytesGilad Broner
According to UFS device specification REQUEST_SENSE command can only report back up to 18 bytes of data. Change-Id: I1121b016ddabfa0e7182a1b6c9b30c27061694d2 Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs_quirks: remove no link off quirk for ToshibaSubhash Jadavani
UFS_DEVICE_QUIRK_NO_LINK_OFF quirk was enabled for Toshiba devices as these device may stop resonding back on resume after the link initialization. But we now have proper workaround in place to allow link off for these UFS devices hence this patch disables the UFS_DEVICE_QUIRK_NO_LINK_OFF. Change-Id: I52af7c2088d4d85cb517ee1bd76c0238db80a2d0 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: send request sense after the link reinitializationSubhash Jadavani
After link reintialization, device would set the UNIT ATTENTION condition for each logical units. UNIT ATTENTION condition gets automatically cleared on either receiving explicit REQUEST SENSE command or data commands to LUs. Although some devices may stop responding to data commands if we do UFS link hibern8 enter/exit after link reinitialization but before any data commands. This change works around above mentioned issue by sending the explicit REQUEST SENSE command to all LUs after the link reinitialization. Change-Id: Ia191b8f05f9521bf587a713924b71bf19c801c31 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: Set DBD setting in mode sense for caching mode pageMaya Erez
Host sends MODE_SENSE_10 with caching mode page, to check if the device supports the cache feature. UFS standards requires DBD field to be set to 1. Some card vendors are more strict and check the DBD field, hence respond with CHECK_CONDITION (Sense key set to ILLEGAL_REQUEST and ASC set to INVALID FIELD IN CDB). As a result of the CHECK_CONDITION response, host assumes that the device doesn't support the cache feature and doesn't send SYNCHORONIZE_CACHE commands to flush the device cache. This can result in data corruption in case of sudden power down, when there is data stored in the device cache. This patch fixes the DBD field setting in case of caching mode page. Change-Id: I4d63cba26331f04c34e87b99dbdf17c05ab96839 Signed-off-by: Maya Erez <merez@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs-qcom: save ufs_qcom_host object pointersGilad Broner
Analyzing crash logs is made easier when the different UFS objects state is accessible. Save a pointer to the main ufs_qcom_host object when it is allocated. Change-Id: I8eb909729dee7209e5d9b1af2652fe76ccd3c0ca Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: skip request abort task when previous aborts failedGilad Broner
On certain error conditions request abort task itself might fail when aborting a request. In such case, subsequent request aborts should skip issuing the abort task as it is expected to fail as well, and device reset handler will be called next. Change-Id: I28c111c58e8c7fd54b836c6933d5fc56682c28b9 Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: set the hibern8 on idle state at missing placesSubhash Jadavani
Hibern8 on idle state should be set to HIBERN8_EXITED during initialization and also during resume if the link is reinitialized but its missing as of now, this change takes care of it. Change-Id: I9f3b25df3904a666f0efe9bc23f75c0c4116e960 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add quirk for not allowing link offSubhash Jadavani
Some UFS devices may not work properly after resume if the link was kept in off state during suspend. This change adds a quirk which will not allow the link to be kept in off state for such devices. Change-Id: I72c4baebccbe79ff731282f76c3b22782e1edf3e Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add error recovery after DL NAC errorSubhash Jadavani
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. Change-Id: Id2f0c05c414d700ba923513f8c9e3d1e6a8a749a Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: make error handling bit fasterSubhash Jadavani
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). Change-Id: I1ce761a140d84b6e1ed53aa215fc8141e336ff64 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [gbroner@codeaurora.org: fix merge conflict] Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix the downdifferntial value for clock scalingSubhash Jadavani
"downdifferntial" parameter of devfreq ondemand governor should be set to value such that if the load is under upthreshold minus downdifferential, the governor may consider slowing the frequency down. As the devfreq ondemand governor is now fixed to handle the downdifferential correctly, update the downdifferential parameter for UFS clock scaling (which uses the devfreq ondemand governor). Change-Id: I14efbe5706a56af00d72fad08392b3db13cbbca9 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add retries for hibern8 enterSubhash Jadavani
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. Change-Id: I6ae6d1371126b3b71ba2154182d6b9920e8996f5 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix error recovery after the hibern8 exit failureSubhash Jadavani
Hibern8 exit can be called from 3 different context: - 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. Change-Id: I4d46e53eb052bddae29797cd9780fc5cf33b09ba Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs-qcom: implement ufs dbg_register_dump cbDolev Raviv
Errors such as UIC errors, illegal OCS values, and others may require information kept in non standard UFS registers but controller debug registers. Implementing dbg_register_dump cb gives access to such register while debugging those issues. Change-Id: I259c3d691b95f72ea62ed162492f9081d472de80 Signed-off-by: Dolev Raviv <draviv@codeaurora.org> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: Improve fatal error logsDolev Raviv
Errors such as UIC error, illegal OCS values, and others may require more information for debugging. Such information could be hibern8 events, events sequences, recoverable errors, error history, and more. This patch improves tracking of important errors and events in debug level to be enabled when debugging a such issues. It includes: * UIC error history * Successful hibern8 events * Successful command after hibern8 exit * Clk-freq info * Failed device command * Infrastructure for dumping host controller debug information Change-Id: If3b38b86caeec4ffc669d001b452050a4a6b5173 Signed-off-by: Dolev Raviv <draviv@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add trace event for ufs commandsLee Susman
Use the ftrace infrastructure to conditionally trace ufs command events. New trace event is created, which samples the following ufs command data: - device name - optional identification string - task tag - doorbell register - number of transfer bytes - interrupt status register - request start LBA - command opcode Currently we only fully trace read(10) and write(10) commands. All other commands which pass through ufshcd_send_command() will be printed with "-1" in the lba and transfer_len fields. Usage: echo 1 > /sys/kernel/debug/tracing/events/ufs/enable cat /sys/kernel/debug/tracing/trace_pipe Change-Id: Id6e16a8c0b2a833c5453ed9923384f641e374a71 Signed-off-by: Lee Susman <lsusman@codeaurora.org> [gbroner@codeaurora.org: fix merge conflict] Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved merge conflicts and compilation error] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: clear fields UTRD, UPIU req and rsp before new transfersSubhash Jadavani
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. Change-Id: Iac02618cd5e9d97883652e134c5365884f3d0b44 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: increase fDeviceInit query response timeoutSubhash Jadavani
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. Change-Id: Ib44fef65c9e408201eb6e0ff9e02d0703d4bf5d9 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: reduce the delay before DME access commandsSubhash Jadavani
If UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS quirk is enabled then we are always adding 1ms delay before issuing DME commands but after experiments show that 700us delay is more than enough. As we have atleast 20 different DME commands issued during link initialization phase (as part of UFS device detection), this change should help reduce the total UFS device detection time by atleast 6ms. Change-Id: I495cec3916dbaa974d204d790f0dbc3d6753ba6f [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs: disable vccq if it's not needed by UFS deviceSubhash Jadavani
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. Change-Id: I7f0ffb9141bf9f13ce457c8c5eba7705ae288872 [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs-qcom: put the UFS phy in reset state when link is offSubhash Jadavani
When UFS link is in off, put the UFS phy in reset state to reduce the leakage from PHY. Change-Id: I27473cbb5be19b331e0a0258c5a20546317d064c Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix leakage during link off stateSubhash Jadavani
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. Change-Id: I157c0c0c246fb83692b57a3d8f5a7868c0703cf0 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: stub UFS shutdown handlerSubhash Jadavani
Currently it seems possible that UFS shutdown handler may race with some other UFS transfer requests and it may disable the clocks while normal UFS requests are in progress. Until we fix this race properly, this change stubs out the UFS shutdown handler. Stubbing out UFS shutdown handler shouldn't have any functional side effects as UFS device's cache should anyway be synced by the SCSI shutdown handler. UFS shutdown handler's main purpose was to send power down notification to UFS device but it should work even without this explicit notification. Change-Id: I557891c71defbde722bba1a884f608f4ba3c7da3 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add cpu-dma latency PM QOS requestGilad Broner
Add PM QOS cpu-dma latency request to the driver. Latency parameter value is taken from the device tree node using an optional parameter 'qcom,cpu-dma-latency-us'. Unless specified, a default of 200us is used. Change-Id: I3e10da9e65fc7324897c866b0c2a40cc5e6ca070 Signed-off-by: Gilad Broner <gbroner@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs-qcom: add support to control the device ref_clkSubhash Jadavani
On Qualcomm platforms, there will be many consumers of the source clock which also supply ref_clk to UFS Device. So even if generic UFS driver (ufshcd) vote to turn off the source ref_clk, it's very likely that device ref_clk is still running. Hence some of the qualcomm chipsets have separate control bit to gate & ungate the UFS ref_clk to device. This control bit is part of the TLMM register adddress space so it can't be simulated at clock control bit which means UFS qcom driver has to manually control this bit to gate or ungate the device ref_clk. This change adds support for the same. Change-Id: I3ee1187292eaadfdb552d33c2bb6f58922c9e501 [subhashj@codeaurora.org: resolved merge conflicts, dropped changes to msm8994.dtsi] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts, drop changes to include/linux/phy/phy-qcom-ufs.h] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs-qcom: disable the UFS PHY reference clock during clock gatingSubhash Jadavani
If UFS link is inactive then UFS PHY reference clock can be switched off to save power. As of now, this clock is turned off only during the suspend (runtime and system). This change extend support to turn off the PHY reference clock during clock gating (after pre-defined idle timeout) as well. Change-Id: Id1f83a003e228abedf222157691998470c3f7932 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add Inline Crypto Engine (ICE) support to UFSMaya Erez
In-order to enhance storage encryption performance, an Inline Cryptographic Engine is introduced to UFS. This patch adds in-line encryption capabilities to the UFS driver. Change-Id: Id3cb913498809b32e1f7eba96395b05a9bf3219f Signed-off-by: Noa Rubens <noag@codeaurora.org> Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org> Signed-off-by: Maya Erez <merez@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [venkatg@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
2016-03-22scsi: ufs: add time profiling supportSubhash Jadavani
This patch adds the profiling support for some of the time critical operations like hibern8 enter/exit, clock gating & clock scaling. Change-Id: I4dde1078dcd2af47f051639b03c44c423ee344fa Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: print the correct error stateSubhash Jadavani
UFS driver's error handler is not printing the saved error state information, this change fixes it. Change-Id: I02b06a8c49a32e8ce19a5523d7ccda8cd0b9a8ac Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: fix setting init power modeSubhash Jadavani
Immediately after successful UFS link startup, UFS link power mode would be in PWM-G1, 1-lane, SLOW-AUTO mode. But currently we are doing few of the DME local/peer attributes access before setting the "hba->pwr_info" to default power mode. If we are doing link startup as part of error recovery then old power mode might be set to FAST mode and doing DME peer access (after link startup but before updating "hba->pwr_info" to default power mode) unintentionally tries to switch from FAST to FAST_AUTO mode (if UFSHCD_QUIRK_DME_PEER_ACCESS_AUTO_MODE quirk is enabled). Above issue is fixed by setting the default power mode immediately after successful link startup. Change-Id: Ica332298114c9d24ecf67c7e452cebc07656415c Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [subhashj@codeaurora.org: resolved trivial merge conflicts] Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: add capability to keep auto bkops always enabledSubhash Jadavani
UFS device requires to perform bkops (back ground operations) periodically but host can control (via auto-bkops parameter of device) when device can perform bkops based on its performance requirements. In general, host would like to enable the device's auto-bkops only when it's not doing any regular data transfer but sometimes device may not behave properly if host keeps the auto-bkops disabled. This change adds the capability to let the device auto-bkops always enabled except suspend. Change-Id: I92c4531f88cb75a563568270584926eb73b53c98 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
2016-03-22scsi: ufs: commit descriptors before setting the doorbellGilad 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. Change-Id: Ifb3fb294eda81a5bccddb05227eade1b7453921a Signed-off-by: Gilad Broner <gbroner@codeaurora.org> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> [gbroner@codeaurora.org: fix merge conflict] Signed-off-by: Gilad Broner <gbroner@codeaurora.org>
2016-03-22scsi: ufs: change clock gating timeout to 50msSubhash Jadavani
Clock gating timeout is generally choosen such a way that it doesn't impact storage benchmark performance numbers. Although current timeout value of 150ms seems high hence this change reduces it to 50ms to save power clock gating timeout. Reducing it to 50ms doesn't affect the storage performance benchmark numbers. Change-Id: Ia131fc420995f44d8446f3800c19de40fedea504 Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>