• Asutosh Das's avatar
    scsi: ufs: core: Enable power management for wlun · b294ff3e
    Asutosh Das authored
    During runtime-suspend of ufs host, the SCSI devices are already suspended
    and so are the queues associated with them. However, the ufs host sends SSU
    (START_STOP_UNIT) to the wlun during runtime-suspend.
    
    During the process blk_queue_enter() checks if the queue is not in suspended
    state. If so, it waits for the queue to resume, and never comes out of
    it. Commit 52abca64 ("scsi: block: Do not accept any requests while
    suspended") adds the check to see if the queue is in suspended state in
    blk_queue_enter().
    
    Call trace:
     __switch_to+0x174/0x2c4
     __schedule+0x478/0x764
     schedule+0x9c/0xe0
     blk_queue_enter+0x158/0x228
     blk_mq_alloc_request+0x40/0xa4
     blk_get_request+0x2c/0x70
     __scsi_execute+0x60/0x1c4
     ufshcd_set_dev_pwr_mode+0x124/0x1e4
     ufshcd_suspend+0x208/0x83c
     ufshcd_runtime_suspend+0x40/0x154
     ufshcd_pltfrm_runtime_suspend+0x14/0x20
     pm_generic_runtime_suspend+0x28/0x3c
     __rpm_callback+0x80/0x2a4
     rpm_suspend+0x308/0x614
     rpm_idle+0x158/0x228
     pm_runtime_work+0x84/0xac
     process_one_work+0x1f0/0x470
     worker_thread+0x26c/0x4c8
     kthread+0x13c/0x320
     ret_from_fork+0x10/0x18
    
    Fix this by registering ufs device wlun as a SCSI driver and registering it
    for block runtime-pm. Also make this a supplier for all other LUNs. This
    way the wlun device suspends after all the consumers and resumes after HBA
    resumes. This also registers a new SCSI driver for rpmb wlun. This new
    driver is mostly used to clear rpmb uac.
    
    [mkp: resolve merge conflict with 5.13-rc1 and fix doc warning]
    
    Fixed smatch warnings:
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    
    Link: https://lore.kernel.org/r/4662c462e79e3e7f541f54f88f8993f421026d83.1619223249.git.asutoshd@codeaurora.orgReviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Co-developed-by: default avatarCan Guo <cang@codeaurora.org>
    Signed-off-by: default avatarCan Guo <cang@codeaurora.org>
    Signed-off-by: default avatarAsutosh Das <asutoshd@codeaurora.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    b294ff3e
ufs-qcom.c 38.8 KB