aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ufs/ufs-qcom.h
diff options
context:
space:
mode:
authorYaniv Gardi <ygardi@codeaurora.org>2015-10-28 07:15:51 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2015-11-09 18:03:55 -0500
commitf06fcc7155dcbcd9b697d499595a2c1a3945bda2 (patch)
tree16d733165dce040557335efc98e4c687c98fcddc /drivers/scsi/ufs/ufs-qcom.h
parent6e3fd44d7b7638e0f7e3331eaf7f90f3a629f3e7 (diff)
scsi: ufs-qcom: add QUniPro hardware support and power optimizations
New revisions of UFS host controller supports the new UniPro hardware controller (referred as QUniPro). This patch adds the support to enable this new UniPro controller hardware. This change also adds power optimization for bus scaling feature, as well as support for HS-G3 power mode. Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org> Reviewed-by: Gilad Broner <gbroner@codeaurora.org> Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/ufs/ufs-qcom.h')
-rw-r--r--drivers/scsi/ufs/ufs-qcom.h31
1 files changed, 29 insertions, 2 deletions
diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h
index 1b71a1b0be9f..36249b35f858 100644
--- a/drivers/scsi/ufs/ufs-qcom.h
+++ b/drivers/scsi/ufs/ufs-qcom.h
@@ -35,8 +35,8 @@
35 35
36#define UFS_QCOM_LIMIT_NUM_LANES_RX 2 36#define UFS_QCOM_LIMIT_NUM_LANES_RX 2
37#define UFS_QCOM_LIMIT_NUM_LANES_TX 2 37#define UFS_QCOM_LIMIT_NUM_LANES_TX 2
38#define UFS_QCOM_LIMIT_HSGEAR_RX UFS_HS_G2 38#define UFS_QCOM_LIMIT_HSGEAR_RX UFS_HS_G3
39#define UFS_QCOM_LIMIT_HSGEAR_TX UFS_HS_G2 39#define UFS_QCOM_LIMIT_HSGEAR_TX UFS_HS_G3
40#define UFS_QCOM_LIMIT_PWMGEAR_RX UFS_PWM_G4 40#define UFS_QCOM_LIMIT_PWMGEAR_RX UFS_PWM_G4
41#define UFS_QCOM_LIMIT_PWMGEAR_TX UFS_PWM_G4 41#define UFS_QCOM_LIMIT_PWMGEAR_TX UFS_PWM_G4
42#define UFS_QCOM_LIMIT_RX_PWR_PWM SLOW_MODE 42#define UFS_QCOM_LIMIT_RX_PWR_PWM SLOW_MODE
@@ -64,6 +64,11 @@ enum {
64 UFS_TEST_BUS_CTRL_2 = 0xF4, 64 UFS_TEST_BUS_CTRL_2 = 0xF4,
65 UFS_UNIPRO_CFG = 0xF8, 65 UFS_UNIPRO_CFG = 0xF8,
66 66
67 /*
68 * QCOM UFS host controller vendor specific registers
69 * added in HW Version 3.0.0
70 */
71 UFS_AH8_CFG = 0xFC,
67}; 72};
68 73
69/* QCOM UFS host controller vendor specific debug registers */ 74/* QCOM UFS host controller vendor specific debug registers */
@@ -83,6 +88,11 @@ enum {
83 UFS_UFS_DBG_RD_EDTL_RAM = 0x1900, 88 UFS_UFS_DBG_RD_EDTL_RAM = 0x1900,
84}; 89};
85 90
91#define UFS_CNTLR_2_x_x_VEN_REGS_OFFSET(x) (0x000 + x)
92#define UFS_CNTLR_3_x_x_VEN_REGS_OFFSET(x) (0x400 + x)
93
94/* bit definitions for REG_UFS_CFG1 register */
95#define QUNIPRO_SEL UFS_BIT(0)
86#define TEST_BUS_EN BIT(18) 96#define TEST_BUS_EN BIT(18)
87#define TEST_BUS_SEL GENMASK(22, 19) 97#define TEST_BUS_SEL GENMASK(22, 19)
88 98
@@ -131,6 +141,12 @@ enum ufs_qcom_phy_init_type {
131 (UFS_QCOM_DBG_PRINT_REGS_EN | UFS_QCOM_DBG_PRINT_ICE_REGS_EN | \ 141 (UFS_QCOM_DBG_PRINT_REGS_EN | UFS_QCOM_DBG_PRINT_ICE_REGS_EN | \
132 UFS_QCOM_DBG_PRINT_TEST_BUS_EN) 142 UFS_QCOM_DBG_PRINT_TEST_BUS_EN)
133 143
144/* QUniPro Vendor specific attributes */
145#define DME_VS_CORE_CLK_CTRL 0xD002
146/* bit and mask definitions for DME_VS_CORE_CLK_CTRL attribute */
147#define DME_VS_CORE_CLK_CTRL_CORE_CLK_DIV_EN_BIT BIT(8)
148#define DME_VS_CORE_CLK_CTRL_MAX_CORE_CLK_1US_CYCLES_MASK 0xFF
149
134static inline void 150static inline void
135ufs_qcom_get_controller_revision(struct ufs_hba *hba, 151ufs_qcom_get_controller_revision(struct ufs_hba *hba,
136 u8 *major, u16 *minor, u16 *step) 152 u8 *major, u16 *minor, u16 *step)
@@ -196,6 +212,12 @@ struct ufs_qcom_host {
196 * controller supports the QUniPro mode. 212 * controller supports the QUniPro mode.
197 */ 213 */
198 #define UFS_QCOM_CAP_QUNIPRO UFS_BIT(0) 214 #define UFS_QCOM_CAP_QUNIPRO UFS_BIT(0)
215
216 /*
217 * Set this capability if host controller can retain the secure
218 * configuration even after UFS controller core power collapse.
219 */
220 #define UFS_QCOM_CAP_RETAIN_SEC_CFG_AFTER_PWR_COLLAPSE UFS_BIT(1)
199 u32 caps; 221 u32 caps;
200 222
201 struct phy *generic_phy; 223 struct phy *generic_phy;
@@ -208,7 +230,12 @@ struct ufs_qcom_host {
208 struct clk *tx_l1_sync_clk; 230 struct clk *tx_l1_sync_clk;
209 bool is_lane_clks_enabled; 231 bool is_lane_clks_enabled;
210 232
233 void __iomem *dev_ref_clk_ctrl_mmio;
234 bool is_dev_ref_clk_enabled;
211 struct ufs_hw_version hw_ver; 235 struct ufs_hw_version hw_ver;
236
237 u32 dev_ref_clk_en_mask;
238
212 /* Bitmask for enabling debug prints */ 239 /* Bitmask for enabling debug prints */
213 u32 dbg_print_en; 240 u32 dbg_print_en;
214 struct ufs_qcom_testbus testbus; 241 struct ufs_qcom_testbus testbus;