summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaniv Gardi <ygardi@codeaurora.org>2015-01-03 18:50:00 +0200
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 10:58:19 -0700
commitce7e8d0894ce8ac2ef897df29a6dc9c8f84c87cd (patch)
tree6c0b14cf09254bfb3347d8a642fce62ce54a2989
parenta8886a5856a4443f00dcff860285c5eb9d318d17 (diff)
scsi: ufs-qcom: remove support for save/restore phy configuration
Since support for 28nm phy removed in kernel 3.14, all related code that is specific to phy 28nm is also removed. Specifically the quirk that enables save/restore phy configuration is removed (and all its relevant callbacks) as it's unique to 28nm ufs phy. Change-Id: Ie723885bacb52548573fc1140d09b0ea5f067382 Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org> [venkatg@codeaurora.org: drop changes to include/linux/phy/phy-qcom-ufs.h] Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
-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