Loading drivers/scsi/ufs/ufs-qcom-ice.c +7 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,13 @@ int ufs_qcom_ice_reset(struct ufs_qcom_host *qcom_host) err = -ETIMEDOUT; } if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE) { dev_err(qcom_host->hba->dev, "%s: error. ice.state (%d) is not in active state\n", __func__, qcom_host->ice.state); err = -EINVAL; } out: return err; } Loading drivers/scsi/ufs/ufs-qcom.c +24 −16 Original line number Diff line number Diff line Loading @@ -304,18 +304,20 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba, bool status) * is initialized. */ err = ufs_qcom_enable_lane_clks(host); if (!err && host->ice.pdev) { err = ufs_qcom_ice_init(host); if (err) { dev_err(hba->dev, "%s: ICE init failed (%d)\n", __func__, err); err = -EINVAL; } } break; case POST_CHANGE: /* check if UFS PHY moved from DISABLED to HIBERN8 */ err = ufs_qcom_check_hibern8(hba); ufs_qcom_enable_hw_clk_gating(hba); if (!err) { err = ufs_qcom_ice_reset(host); if (err) dev_err(hba->dev, "%s: ufs_qcom_ice_reset() failed %d\n", __func__, err); } break; default: Loading Loading @@ -612,6 +614,20 @@ out: return err; } static int ufs_qcom_crytpo_engine_reset(struct ufs_hba *hba) { struct ufs_qcom_host *host = hba->priv; int err = 0; if (!host->ice.pdev) goto out; err = ufs_qcom_ice_reset(host); out: return err; } static int ufs_qcom_crypto_engine_eh(struct ufs_hba *hba) { struct ufs_qcom_host *host = hba->priv; Loading Loading @@ -1175,15 +1191,6 @@ static int ufs_qcom_init(struct ufs_hba *hba) hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND; hba->caps |= UFSHCD_CAP_HIBERN8_ENTER_ON_IDLE; ufs_qcom_setup_clocks(hba, true); if (host->ice.pdev) { err = ufs_qcom_ice_init(host); if (err) { dev_err(dev, "%s: ICE driver initialization failed (%d)\n", __func__, err); device_remove_file(dev, &host->bus_vote.max_bus_bw); goto out_disable_phy; } } if (hba->dev->id < MAX_UFS_QCOM_HOSTS) ufs_qcom_hosts[hba->dev->id] = host; Loading Loading @@ -1351,6 +1358,7 @@ const struct ufs_hba_variant_ops ufs_hba_qcom_vops = { .resume = ufs_qcom_resume, .update_sec_cfg = ufs_qcom_update_sec_cfg, .crypto_engine_cfg = ufs_qcom_crytpo_engine_cfg, .crypto_engine_reset = ufs_qcom_crytpo_engine_reset, .crypto_engine_eh = ufs_qcom_crypto_engine_eh, .crypto_engine_get_err = ufs_qcom_crypto_engine_get_err, .crypto_engine_reset_err = ufs_qcom_crypto_engine_reset_err, Loading drivers/scsi/ufs/ufshcd.c +14 −1 Original line number Diff line number Diff line Loading @@ -5853,8 +5853,21 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba) /* Establish the link again and restore the device */ err = ufshcd_probe_hba(hba); if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)) if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)) { err = -EIO; goto out; } if (hba->vops->crypto_engine_reset) { err = hba->vops->crypto_engine_reset(hba); if (err) { dev_err(hba->dev, "%s: failed to reset crypto engine %d\n", __func__, err); goto out; } } out: if (err) dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err); Loading include/linux/scsi/ufs/ufshcd.h +1 −0 Original line number Diff line number Diff line Loading @@ -397,6 +397,7 @@ struct ufs_hba_variant_ops { int (*resume)(struct ufs_hba *, enum ufs_pm_op); int (*update_sec_cfg)(struct ufs_hba *hba, bool restore_sec_cfg); int (*crypto_engine_cfg)(struct ufs_hba *, unsigned int); int (*crypto_engine_reset)(struct ufs_hba *); int (*crypto_engine_eh)(struct ufs_hba *); int (*crypto_engine_get_err)(struct ufs_hba *); void (*crypto_engine_reset_err)(struct ufs_hba *); Loading Loading
drivers/scsi/ufs/ufs-qcom-ice.c +7 −0 Original line number Diff line number Diff line Loading @@ -362,6 +362,13 @@ int ufs_qcom_ice_reset(struct ufs_qcom_host *qcom_host) err = -ETIMEDOUT; } if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE) { dev_err(qcom_host->hba->dev, "%s: error. ice.state (%d) is not in active state\n", __func__, qcom_host->ice.state); err = -EINVAL; } out: return err; } Loading
drivers/scsi/ufs/ufs-qcom.c +24 −16 Original line number Diff line number Diff line Loading @@ -304,18 +304,20 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba, bool status) * is initialized. */ err = ufs_qcom_enable_lane_clks(host); if (!err && host->ice.pdev) { err = ufs_qcom_ice_init(host); if (err) { dev_err(hba->dev, "%s: ICE init failed (%d)\n", __func__, err); err = -EINVAL; } } break; case POST_CHANGE: /* check if UFS PHY moved from DISABLED to HIBERN8 */ err = ufs_qcom_check_hibern8(hba); ufs_qcom_enable_hw_clk_gating(hba); if (!err) { err = ufs_qcom_ice_reset(host); if (err) dev_err(hba->dev, "%s: ufs_qcom_ice_reset() failed %d\n", __func__, err); } break; default: Loading Loading @@ -612,6 +614,20 @@ out: return err; } static int ufs_qcom_crytpo_engine_reset(struct ufs_hba *hba) { struct ufs_qcom_host *host = hba->priv; int err = 0; if (!host->ice.pdev) goto out; err = ufs_qcom_ice_reset(host); out: return err; } static int ufs_qcom_crypto_engine_eh(struct ufs_hba *hba) { struct ufs_qcom_host *host = hba->priv; Loading Loading @@ -1175,15 +1191,6 @@ static int ufs_qcom_init(struct ufs_hba *hba) hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND; hba->caps |= UFSHCD_CAP_HIBERN8_ENTER_ON_IDLE; ufs_qcom_setup_clocks(hba, true); if (host->ice.pdev) { err = ufs_qcom_ice_init(host); if (err) { dev_err(dev, "%s: ICE driver initialization failed (%d)\n", __func__, err); device_remove_file(dev, &host->bus_vote.max_bus_bw); goto out_disable_phy; } } if (hba->dev->id < MAX_UFS_QCOM_HOSTS) ufs_qcom_hosts[hba->dev->id] = host; Loading Loading @@ -1351,6 +1358,7 @@ const struct ufs_hba_variant_ops ufs_hba_qcom_vops = { .resume = ufs_qcom_resume, .update_sec_cfg = ufs_qcom_update_sec_cfg, .crypto_engine_cfg = ufs_qcom_crytpo_engine_cfg, .crypto_engine_reset = ufs_qcom_crytpo_engine_reset, .crypto_engine_eh = ufs_qcom_crypto_engine_eh, .crypto_engine_get_err = ufs_qcom_crypto_engine_get_err, .crypto_engine_reset_err = ufs_qcom_crypto_engine_reset_err, Loading
drivers/scsi/ufs/ufshcd.c +14 −1 Original line number Diff line number Diff line Loading @@ -5853,8 +5853,21 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba) /* Establish the link again and restore the device */ err = ufshcd_probe_hba(hba); if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)) if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)) { err = -EIO; goto out; } if (hba->vops->crypto_engine_reset) { err = hba->vops->crypto_engine_reset(hba); if (err) { dev_err(hba->dev, "%s: failed to reset crypto engine %d\n", __func__, err); goto out; } } out: if (err) dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err); Loading
include/linux/scsi/ufs/ufshcd.h +1 −0 Original line number Diff line number Diff line Loading @@ -397,6 +397,7 @@ struct ufs_hba_variant_ops { int (*resume)(struct ufs_hba *, enum ufs_pm_op); int (*update_sec_cfg)(struct ufs_hba *hba, bool restore_sec_cfg); int (*crypto_engine_cfg)(struct ufs_hba *, unsigned int); int (*crypto_engine_reset)(struct ufs_hba *); int (*crypto_engine_eh)(struct ufs_hba *); int (*crypto_engine_get_err)(struct ufs_hba *); void (*crypto_engine_reset_err)(struct ufs_hba *); Loading