> > Some UFS host controller may need to configure some things around > > hibern8 enter/exit > > > > Signed-off-by: Kiwoong Kim <kwmad.kim@xxxxxxxxxxx> > > --- > > drivers/scsi/ufs/ufshcd.c | 10 ++++++++-- drivers/scsi/ufs/ufshcd.h > > | 10 ++++++++++ > > 2 files changed, 18 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > > index fdb0502..d4a5a9c 100644 > > --- a/drivers/scsi/ufs/ufshcd.c > > +++ b/drivers/scsi/ufs/ufshcd.c > > @@ -2697,6 +2697,8 @@ static int __ufshcd_uic_hibern8_enter(struct > > ufs_hba *hba) > > int ret; > > struct uic_command uic_cmd = {0}; > > > > + ufshcd_vops_setup_hibern8(hba, true, PRE_CHANGE); > > + > > uic_cmd.command = UIC_CMD_DME_HIBER_ENTER; > > ret = ufshcd_uic_pwr_ctrl(hba, &uic_cmd); > > > > @@ -2710,7 +2712,8 @@ static int __ufshcd_uic_hibern8_enter(struct > > ufs_hba *hba) > > */ > > if (ufshcd_link_recovery(hba)) > > ret = -ENOLINK; > > - } > > + } else > > + ufshcd_vops_setup_hibern8(hba, true, POST_CHANGE); > > > > return ret; > > } > > @@ -2733,13 +2736,16 @@ static int ufshcd_uic_hibern8_exit(struct > > ufs_hba *hba) > > struct uic_command uic_cmd = {0}; > > int ret; > > > > + ufshcd_vops_setup_hibern8(hba, false, PRE_CHANGE); > > + > > uic_cmd.command = UIC_CMD_DME_HIBER_EXIT; > > ret = ufshcd_uic_pwr_ctrl(hba, &uic_cmd); > > if (ret) { > > dev_err(hba->dev, "%s: hibern8 exit failed. ret = %d\n", > > __func__, ret); > > ret = ufshcd_link_recovery(hba); > > - } > > + } else > > + ufshcd_vops_setup_hibern8(hba, false, POST_CHANGE); > > > > return ret; > > } > > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > > index b084d89..13504b4 100644 > > --- a/drivers/scsi/ufs/ufshcd.h > > +++ b/drivers/scsi/ufs/ufshcd.h > > @@ -265,6 +265,8 @@ struct ufs_pwr_mode_info { > > * to set some things > > * @setup_task_mgmt: called before any task management request is > > issued > > * to set some things > > + * @setup_hibern8: called around hibern8 enter/exit > > + * to configure some things > > * @suspend: called during host controller PM callback > > * @resume: called during host controller PM callback > > * @dbg_register_dump: used to dump controller debug information @@ > > -290,6 +292,7 @@ struct ufs_hba_variant_ops { > > struct ufs_pa_layer_attr *); > > void (*setup_xfer_req)(struct ufs_hba *, int, bool); > > void (*setup_task_mgmt)(struct ufs_hba *, int, u8); > > + void (*setup_hibern8)(struct ufs_hba *, bool, bool); > > Can we change the name to "hibern8_notify" ? You may check other > ufs_hba_variant_ops for reference. Okay, I'll apply what you said. > > > int (*suspend)(struct ufs_hba *, enum ufs_pm_op); > > int (*resume)(struct ufs_hba *, enum ufs_pm_op); > > void (*dbg_register_dump)(struct ufs_hba *hba); > > @@ -821,6 +824,13 @@ static inline void > > ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba, > > return hba->vops->setup_task_mgmt(hba, tag, tm_function); } > > > > +static inline void ufshcd_vops_setup_hibern8(struct ufs_hba *hba, > > + bool enter, bool notify) > > Using bool to specify whether it is hibern8 enter or hibern8 exit doesn't > seem to be readable. May be you can pass the UIC_CMD_DME_HIBER_ENTER or > UIC_CMD_DME_HIBER_EXIT (in other words use "enum uic_cmd_dme" type). > > also "notify" type should be changed from "bool" to "enum > ufs_notify_change_status". Okay, I'll apply what you said and use "enum uic_cmd_dme" as 2nd argument date type. > > > +{ > > + if (hba->vops && hba->vops->setup_hibern8) > > + return hba->vops->setup_hibern8(hba, enter, notify); } > > + > > static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum > > ufs_pm_op op) { > > if (hba->vops && hba->vops->suspend) > > -- > The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a > Linux Foundation Collaborative Project > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at > http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html