From: Alim Akhtar <alim.akhtar@samsung.com> To: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: JBottomley@odin.com, vinholikatti@gmail.com, gautam.vivek@samsung.com, essuuj@gmail.com, devicetree@vger.kernel.org, kishon@ti.com Subject: [PATCH v5 06/11] scsi: ufs: add quirk to enable host controller without hce Date: Mon, 09 Nov 2015 10:56:22 +0530 [thread overview] Message-ID: <1447046787-480-7-git-send-email-alim.akhtar@samsung.com> (raw) In-Reply-To: <1447046787-480-1-git-send-email-alim.akhtar@samsung.com> From: Seungwon Jeon <essuuj@gmail.com> Some host controller doesn't support host controller enable via HCE. Signed-off-by: Seungwon Jeon <essuuj@gmail.com> Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com> --- drivers/scsi/ufs/ufshcd.c | 75 +++++++++++++++++++++++++++++++++++++++++++-- drivers/scsi/ufs/ufshcd.h | 5 +++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index ca7483cd899e..e8b96ec65987 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2107,6 +2107,52 @@ static int ufshcd_dme_link_startup(struct ufs_hba *hba) "dme-link-startup: error code %d\n", ret); return ret; } +/** + * ufshcd_dme_reset - UIC command for DME_RESET + * @hba: per adapter instance + * + * DME_RESET command is issued in order to reset UniPro stack. + * This function now deal with cold reset. + * + * Returns 0 on success, non-zero value on failure + */ +static int ufshcd_dme_reset(struct ufs_hba *hba) +{ + struct uic_command uic_cmd = {0}; + int ret; + + uic_cmd.command = UIC_CMD_DME_RESET; + + ret = ufshcd_send_uic_cmd(hba, &uic_cmd); + if (ret) + dev_err(hba->dev, + "dme-reset: error code %d\n", ret); + + return ret; +} + +/** + * ufshcd_dme_enable - UIC command for DME_ENABLE + * @hba: per adapter instance + * + * DME_ENABLE command is issued in order to enable UniPro stack. + * + * Returns 0 on success, non-zero value on failure + */ +static int ufshcd_dme_enable(struct ufs_hba *hba) +{ + struct uic_command uic_cmd = {0}; + int ret; + + uic_cmd.command = UIC_CMD_DME_ENABLE; + + ret = ufshcd_send_uic_cmd(hba, &uic_cmd); + if (ret) + dev_err(hba->dev, + "dme-reset: error code %d\n", ret); + + return ret; +} static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba) { @@ -2642,7 +2688,7 @@ out: } /** - * ufshcd_hba_enable - initialize the controller + * ufshcd_hba_execute_hce - initialize the controller * @hba: per adapter instance * * The controller resets itself and controller firmware initialization @@ -2651,7 +2697,7 @@ out: * * Returns 0 on success, non-zero value on failure */ -static int ufshcd_hba_enable(struct ufs_hba *hba) +static int ufshcd_hba_execute_hce(struct ufs_hba *hba) { int retry; @@ -2715,6 +2761,31 @@ static int ufshcd_hba_enable(struct ufs_hba *hba) return 0; } +static int ufshcd_hba_enable(struct ufs_hba *hba) +{ + int ret; + + if (hba->quirks & UFSHCI_QUIRK_BROKEN_HCE) { + ufshcd_set_link_off(hba); + ufshcd_vops_hce_enable_notify(hba, PRE_CHANGE); + + /* enable UIC related interrupts */ + ufshcd_enable_intr(hba, UFSHCD_UIC_MASK); + ret = ufshcd_dme_reset(hba); + if (!ret) { + ret = ufshcd_dme_enable(hba); + if (!ret) + ufshcd_vops_hce_enable_notify(hba, POST_CHANGE); + if (ret) + dev_err(hba->dev, + "Host controller enable failed with non-hce\n"); + } + } else { + ret = ufshcd_hba_execute_hce(hba); + } + + return ret; +} static int ufshcd_disable_tx_lcc(struct ufs_hba *hba, bool peer) { int tx_lanes, i, err = 0; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 4ae32e9316de..500e137bf68a 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -485,6 +485,11 @@ struct ufs_hba { */ #define UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR UFS_BIT(8) + /* + * This quirks needs to be enabled if host controller cannot be + * enabled via HCE register. + */ + #define UFSHCI_QUIRK_BROKEN_HCE UFS_BIT(9) unsigned int quirks; /* Deviations from standard UFSHCI spec. */ wait_queue_head_t tm_wq; -- 1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: Alim Akhtar <alim.akhtar-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> To: linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: JBottomley-wo1vFcy6AUs@public.gmane.org, vinholikatti-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, gautam.vivek-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org, essuuj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kishon-l0cyMroinI0@public.gmane.org Subject: [PATCH v5 06/11] scsi: ufs: add quirk to enable host controller without hce Date: Mon, 09 Nov 2015 10:56:22 +0530 [thread overview] Message-ID: <1447046787-480-7-git-send-email-alim.akhtar@samsung.com> (raw) In-Reply-To: <1447046787-480-1-git-send-email-alim.akhtar-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> From: Seungwon Jeon <essuuj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Some host controller doesn't support host controller enable via HCE. Signed-off-by: Seungwon Jeon <essuuj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Signed-off-by: Alim Akhtar <alim.akhtar-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> --- drivers/scsi/ufs/ufshcd.c | 75 +++++++++++++++++++++++++++++++++++++++++++-- drivers/scsi/ufs/ufshcd.h | 5 +++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index ca7483cd899e..e8b96ec65987 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2107,6 +2107,52 @@ static int ufshcd_dme_link_startup(struct ufs_hba *hba) "dme-link-startup: error code %d\n", ret); return ret; } +/** + * ufshcd_dme_reset - UIC command for DME_RESET + * @hba: per adapter instance + * + * DME_RESET command is issued in order to reset UniPro stack. + * This function now deal with cold reset. + * + * Returns 0 on success, non-zero value on failure + */ +static int ufshcd_dme_reset(struct ufs_hba *hba) +{ + struct uic_command uic_cmd = {0}; + int ret; + + uic_cmd.command = UIC_CMD_DME_RESET; + + ret = ufshcd_send_uic_cmd(hba, &uic_cmd); + if (ret) + dev_err(hba->dev, + "dme-reset: error code %d\n", ret); + + return ret; +} + +/** + * ufshcd_dme_enable - UIC command for DME_ENABLE + * @hba: per adapter instance + * + * DME_ENABLE command is issued in order to enable UniPro stack. + * + * Returns 0 on success, non-zero value on failure + */ +static int ufshcd_dme_enable(struct ufs_hba *hba) +{ + struct uic_command uic_cmd = {0}; + int ret; + + uic_cmd.command = UIC_CMD_DME_ENABLE; + + ret = ufshcd_send_uic_cmd(hba, &uic_cmd); + if (ret) + dev_err(hba->dev, + "dme-reset: error code %d\n", ret); + + return ret; +} static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba) { @@ -2642,7 +2688,7 @@ out: } /** - * ufshcd_hba_enable - initialize the controller + * ufshcd_hba_execute_hce - initialize the controller * @hba: per adapter instance * * The controller resets itself and controller firmware initialization @@ -2651,7 +2697,7 @@ out: * * Returns 0 on success, non-zero value on failure */ -static int ufshcd_hba_enable(struct ufs_hba *hba) +static int ufshcd_hba_execute_hce(struct ufs_hba *hba) { int retry; @@ -2715,6 +2761,31 @@ static int ufshcd_hba_enable(struct ufs_hba *hba) return 0; } +static int ufshcd_hba_enable(struct ufs_hba *hba) +{ + int ret; + + if (hba->quirks & UFSHCI_QUIRK_BROKEN_HCE) { + ufshcd_set_link_off(hba); + ufshcd_vops_hce_enable_notify(hba, PRE_CHANGE); + + /* enable UIC related interrupts */ + ufshcd_enable_intr(hba, UFSHCD_UIC_MASK); + ret = ufshcd_dme_reset(hba); + if (!ret) { + ret = ufshcd_dme_enable(hba); + if (!ret) + ufshcd_vops_hce_enable_notify(hba, POST_CHANGE); + if (ret) + dev_err(hba->dev, + "Host controller enable failed with non-hce\n"); + } + } else { + ret = ufshcd_hba_execute_hce(hba); + } + + return ret; +} static int ufshcd_disable_tx_lcc(struct ufs_hba *hba, bool peer) { int tx_lanes, i, err = 0; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 4ae32e9316de..500e137bf68a 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -485,6 +485,11 @@ struct ufs_hba { */ #define UFSHCI_QUIRK_SKIP_RESET_INTR_AGGR UFS_BIT(8) + /* + * This quirks needs to be enabled if host controller cannot be + * enabled via HCE register. + */ + #define UFSHCI_QUIRK_BROKEN_HCE UFS_BIT(9) unsigned int quirks; /* Deviations from standard UFSHCI spec. */ wait_queue_head_t tm_wq; -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-11-09 5:29 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-11-09 5:26 [PATCH v5 00/11] exynos-ufs: add support for Exynos Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 01/11] Documentation: samsung-phy: Add dt bindings for UFS Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 02/11] phy: exynos-ufs: add UFS PHY driver for EXYNOS SoC Alim Akhtar 2015-11-17 6:16 ` Kishon Vijay Abraham I 2015-11-17 6:16 ` Kishon Vijay Abraham I 2015-11-17 8:11 ` Alim Akhtar 2015-11-19 13:39 ` Kishon Vijay Abraham I 2015-11-19 13:39 ` Kishon Vijay Abraham I [not found] ` <CGME20170203092123epcas4p20b1d56d7a6fdec46903c41fc65718795@epcas4p2.samsung.com> 2017-02-03 9:19 ` Alim Akhtar 2017-02-03 9:19 ` Alim Akhtar 2017-02-22 18:50 ` Alim Akhtar 2017-02-27 5:26 ` Kishon Vijay Abraham I 2017-02-27 5:26 ` Kishon Vijay Abraham I 2017-02-27 14:10 ` Alim Akhtar [not found] ` <58B4EFC8.2060300@ti.com> 2017-02-28 8:21 ` Alim Akhtar 2017-03-01 4:37 ` Kishon Vijay Abraham I 2017-03-01 4:37 ` Kishon Vijay Abraham I 2017-03-06 11:42 ` Alim Akhtar 2017-03-06 11:42 ` Alim Akhtar 2017-03-06 13:31 ` Kishon Vijay Abraham I 2017-03-06 13:31 ` Kishon Vijay Abraham I 2015-11-09 5:26 ` [PATCH v5 03/11] scsi: ufs: add quirk to contain unconformable utrd field Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 04/11] scsi: ufs: add quirk to fix mishandling utrlclr/utmrlclr Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 05/11] scsi: ufs: add quirk not to allow reset of interrupt aggregation Alim Akhtar 2015-11-09 5:26 ` Alim Akhtar [this message] 2015-11-09 5:26 ` [PATCH v5 06/11] scsi: ufs: add quirk to enable host controller without hce Alim Akhtar 2015-11-17 8:43 ` Arnd Bergmann 2015-11-17 8:43 ` Arnd Bergmann 2015-11-09 5:26 ` [PATCH v5 07/11] scsi: ufs: add specific callback for nexus type Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 08/11] scsi: ufs: add add specific callback for hibern8 Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 09/11] scsi: ufs: make ufshcd_config_pwr_mode of non-static func Alim Akhtar 2015-11-09 5:26 ` [PATCH v5 10/11] Documentation: devicetree: ufs: Add DT bindings for exynos UFS host controller Alim Akhtar 2015-11-09 16:23 ` Rob Herring 2015-11-10 8:35 ` Alim Akhtar 2015-11-10 8:35 ` Alim Akhtar 2015-11-10 13:18 ` Rob Herring 2015-11-09 5:26 ` [PATCH v5 11/11] scsi: ufs-exynos: add UFS host support for Exynos SoCs Alim Akhtar 2015-11-17 8:50 ` Arnd Bergmann 2015-11-17 8:50 ` Arnd Bergmann 2015-11-16 1:01 ` [PATCH v5 00/11] exynos-ufs: add support for Exynos Alim Akhtar 2015-11-17 5:30 ` Kishon Vijay Abraham I 2015-11-17 5:30 ` Kishon Vijay Abraham I
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1447046787-480-7-git-send-email-alim.akhtar@samsung.com \ --to=alim.akhtar@samsung.com \ --cc=JBottomley@odin.com \ --cc=devicetree@vger.kernel.org \ --cc=essuuj@gmail.com \ --cc=gautam.vivek@samsung.com \ --cc=kishon@ti.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-scsi@vger.kernel.org \ --cc=vinholikatti@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.