scsi: ufs: core: Add missing post notify for power mode change
BugLink: https://bugs.launchpad.net/bugs/2102118
commit 7f45ed5f0cd5ccbbec79adc6c48a67d6a85fba56 upstream.
When the power mode change is successful but the power mode hasn't
actually changed, the post notification was missed. Similar to the
approach with hibernate/clock scale/hce enable, having pre/post
notifications in the same function will make it easier to maintain.
Additionally, supplement the description of power parameters for the
pwr_change_notify callback.
Fixes: 7eb584db73 ("ufs: refactor configuring power mode")
Cc: stable@vger.kernel.org #6.11.x
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Link: https://lore.kernel.org/r/20241122024943.30589-1-peter.wang@mediatek.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
@@ -4655,9 +4655,6 @@ static int ufshcd_change_power_mode(struct ufs_hba *hba,
|
||||
dev_err(hba->dev,
|
||||
"%s: power mode change failed %d\n", __func__, ret);
|
||||
} else {
|
||||
ufshcd_vops_pwr_change_notify(hba, POST_CHANGE, NULL,
|
||||
pwr_mode);
|
||||
|
||||
memcpy(&hba->pwr_info, pwr_mode,
|
||||
sizeof(struct ufs_pa_layer_attr));
|
||||
}
|
||||
@@ -4686,6 +4683,10 @@ int ufshcd_config_pwr_mode(struct ufs_hba *hba,
|
||||
|
||||
ret = ufshcd_change_power_mode(hba, &final_params);
|
||||
|
||||
if (!ret)
|
||||
ufshcd_vops_pwr_change_notify(hba, POST_CHANGE, NULL,
|
||||
&final_params);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ufshcd_config_pwr_mode);
|
||||
|
||||
@@ -306,7 +306,9 @@ struct ufs_pwr_mode_info {
|
||||
* to allow variant specific Uni-Pro initialization.
|
||||
* @pwr_change_notify: called before and after a power mode change
|
||||
* is carried out to allow vendor spesific capabilities
|
||||
* to be set.
|
||||
* to be set. PRE_CHANGE can modify final_params based
|
||||
* on desired_pwr_mode, but POST_CHANGE must not alter
|
||||
* the final_params parameter
|
||||
* @setup_xfer_req: called before any transfer request is issued
|
||||
* to set some things
|
||||
* @setup_task_mgmt: called before any task management request is issued
|
||||
@@ -343,9 +345,9 @@ struct ufs_hba_variant_ops {
|
||||
int (*link_startup_notify)(struct ufs_hba *,
|
||||
enum ufs_notify_change_status);
|
||||
int (*pwr_change_notify)(struct ufs_hba *,
|
||||
enum ufs_notify_change_status status,
|
||||
struct ufs_pa_layer_attr *,
|
||||
struct ufs_pa_layer_attr *);
|
||||
enum ufs_notify_change_status status,
|
||||
struct ufs_pa_layer_attr *desired_pwr_mode,
|
||||
struct ufs_pa_layer_attr *final_params);
|
||||
void (*setup_xfer_req)(struct ufs_hba *hba, int tag,
|
||||
bool is_scsi_cmd);
|
||||
void (*setup_task_mgmt)(struct ufs_hba *, int, u8);
|
||||
|
||||
Reference in New Issue
Block a user