summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/phy/phy-qcom-ufs.c57
-rw-r--r--drivers/scsi/ufs/ufs-qcom.c59
-rw-r--r--include/linux/phy/phy-qcom-ufs.h2
3 files changed, 3 insertions, 115 deletions
diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c
index e526bc846edc..2a053c3cd30b 100644
--- a/drivers/phy/phy-qcom-ufs.c
+++ b/drivers/phy/phy-qcom-ufs.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2015, Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -477,22 +477,6 @@ void ufs_qcom_phy_disable_dev_ref_clk(struct phy *generic_phy)
ufs_qcom_phy_dev_ref_clk_ctrl(generic_phy, false);
}
-void ufs_qcom_phy_restore_swi_regs(struct phy *generic_phy)
-{
- int i;
- struct ufs_qcom_phy *phy = get_ufs_qcom_phy(generic_phy);
-
- for (i = 0; i < phy->cached_regs_table_size; i++) {
- struct ufs_qcom_phy_calibration *table =
- (struct ufs_qcom_phy_calibration *)phy->cached_regs;
- writel_relaxed(table[i].cfg_value, phy->mmio +
- table[i].reg_offset);
- }
-
- /* flush buffered writes */
- mb();
-}
-
/* Turn ON M-PHY RMMI interface clocks */
int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy)
{
@@ -533,13 +517,6 @@ void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy)
}
}
-int ufs_qcom_phy_is_cfg_restore_quirk_enabled(struct phy *phy)
-{
- struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(phy);
-
- return ufs_qcom_phy->quirks & UFS_QCOM_PHY_QUIRK_CFG_RESTORE;
-}
-
int ufs_qcom_phy_start_serdes(struct phy *generic_phy)
{
struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(generic_phy);
@@ -638,38 +615,6 @@ int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy)
is_physical_coding_sublayer_ready(ufs_qcom_phy);
}
-int ufs_qcom_phy_save_configuration(struct phy *generic_phy)
-{
- struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(generic_phy);
- int ret = 0;
-
- if (!ufs_qcom_phy->phy_spec_ops->save_configuration) {
- dev_err(ufs_qcom_phy->dev, "%s: save_configuration() callback is not supported\n",
- __func__);
- ret = -ENOTSUPP;
- } else {
- ufs_qcom_phy->phy_spec_ops->save_configuration(ufs_qcom_phy);
- }
-
- return ret;
-}
-
-int ufs_qcom_phy_restore_configuration(struct phy *generic_phy)
-{
- struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(generic_phy);
- int ret = 0;
-
- if (!ufs_qcom_phy->phy_spec_ops->restore_configuration) {
- dev_err(ufs_qcom_phy->dev, "%s: restore_configuration() callback is not supported\n",
- __func__);
- ret = -ENOTSUPP;
- } else {
- ufs_qcom_phy->phy_spec_ops->restore_configuration(ufs_qcom_phy);
- }
-
- return ret;
-}
-
int ufs_qcom_phy_power_on(struct phy *generic_phy)
{
struct ufs_qcom_phy *phy_common = get_ufs_qcom_phy(generic_phy);
diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index 07955d70a76f..d1391c9f021a 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2015, Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -498,13 +498,6 @@ static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
* rail and low noise analog power rail for PLL can be switched off.
*/
if (!ufs_qcom_is_link_active(hba)) {
- if (ufs_qcom_phy_is_cfg_restore_quirk_enabled(phy) &&
- ufs_qcom_is_link_hibern8(hba)) {
- ret = ufs_qcom_phy_save_configuration(phy);
- if (ret)
- dev_err(hba->dev, "%s: failed ufs_qcom_phy_save_configuration %d\n",
- __func__, ret);
- }
phy_power_off(phy);
ufs_qcom_ice_suspend(host);
}
@@ -513,28 +506,12 @@ out:
return ret;
}
-static bool ufs_qcom_is_phy_config_restore_required(struct ufs_hba *hba)
-{
- struct ufs_qcom_host *host = hba->priv;
- struct phy *phy = host->generic_phy;
-
- return ufs_qcom_phy_is_cfg_restore_quirk_enabled(phy)
- && ufshcd_is_link_hibern8(hba)
- && hba->is_sys_suspended;
-}
-
static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
{
struct ufs_qcom_host *host = hba->priv;
struct phy *phy = host->generic_phy;
int err;
- if (ufs_qcom_is_phy_config_restore_required(hba)) {
- ufs_qcom_assert_reset(hba);
- /* provide 1ms delay to let the reset pulse propagate */
- usleep_range(1000, 1100);
- }
-
err = phy_power_on(phy);
if (err) {
dev_err(hba->dev, "%s: failed enabling regs, err = %d\n",
@@ -542,40 +519,6 @@ static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
goto out;
}
- if (ufs_qcom_is_phy_config_restore_required(hba)) {
- ufs_qcom_phy_restore_swi_regs(phy);
-
- /* De-assert PHY reset and start serdes */
- ufs_qcom_deassert_reset(hba);
-
- /*
- * after reset deassertion, phy will need all ref clocks,
- * voltage, current to settle down before starting serdes.
- */
- usleep_range(1000, 1100);
-
- err = ufs_qcom_phy_start_serdes(phy);
- if (err) {
- dev_err(hba->dev, "%s: ufs_qcom_phy_start_serdes() failed, err = %d\n",
- __func__, err);
- goto out;
- }
-
- err = ufs_qcom_phy_restore_configuration(phy);
- if (err) {
- dev_err(hba->dev, "%s: ufs_qcom_phy_restore_configuration() failed, err = %d\n",
- __func__, err);
- goto out;
- }
-
- err = ufs_qcom_phy_is_pcs_ready(phy);
- if (err) {
- dev_err(hba->dev, "%s: is_physical_coding_sublayer_ready() failed, err = %d\n",
- __func__, err);
- goto out;
- }
- }
-
err = ufs_qcom_ice_resume(host);
if (err) {
dev_err(hba->dev, "%s: ufs_qcom_ice_resume failed, err = %d\n",
diff --git a/include/linux/phy/phy-qcom-ufs.h b/include/linux/phy/phy-qcom-ufs.h
index 689bd2491d2b..8153cc7ab966 100644
--- a/include/linux/phy/phy-qcom-ufs.h
+++ b/include/linux/phy/phy-qcom-ufs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2015, Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and