Skip to content
Commit ab6db44c authored by Sayali Lokhande's avatar Sayali Lokhande
Browse files

scsi: ufs: Serialise ufs clock gating and ungating



On ufs based targets we observed several unclocked register access
issues due to race conditions between clock gating and ungating.

Sequence of events causing race looks like:
[1]ungate_work_scheduled =   (tv64 = 27288.795244106),REQ_CLKS_ON
[2]gating_work_execute_end = (tv64 = 27288.795948169),REQ_CLKS_ON
[3]last intr status =        (tv64 = 27288.801560512)
[4]ungate_work_execute_start=(tv64 = 27288.801725304),REQ_CLKS_ON
[5]clk_rel ctx=XFR_REQ_COMPL)(tv64 = 27288.801950460),REQ_CLKS_OFF
[6]gating_work_scheduled =   (tv64 = 27288.812817231),REQ_CLKS_OFF
[7]gating_work_execute_start=(tv64 = 27288.813704106),REQ_CLKS_OFF
[8]clk_hold ctx = QUEUE_CMD) (tv64 = 27288.821010200)
[9](WRITE)issue_time_stamp = (tv64 = 27288.821059366),gating in progress!
[10]ungate_work_execute_end =(tv64 = 27288.821251866),CLKS_ON
[11]Gladiator Error Detected       = 27288.830788

Here clock gating work[6] is scheduled while ungating[4] is in progress
thus causing unclocked register access when request is issued[9].
This change is to avoid such race condition by using single
threaded workqueue for both gate and ungate work.

Change-Id: I710ff0dbe59df0c1eb903b18555b6184cb298fa3
Signed-off-by: default avatarSayali Lokhande <sayalil@codeaurora.org>
parent 814e5c69
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment