aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/ufs/ufshcd.c2
-rw-r--r--drivers/scsi/ufs/ufshcd.h18
-rw-r--r--drivers/scsi/ufs/unipro.h56
3 files changed, 76 insertions, 0 deletions
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 3a2de56fe080..497c38a4a866 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -5114,6 +5114,8 @@ int ufshcd_system_suspend(struct ufs_hba *hba)
5114 5114
5115 ret = ufshcd_suspend(hba, UFS_SYSTEM_PM); 5115 ret = ufshcd_suspend(hba, UFS_SYSTEM_PM);
5116out: 5116out:
5117 if (!ret)
5118 hba->is_sys_suspended = true;
5117 return ret; 5119 return ret;
5118} 5120}
5119EXPORT_SYMBOL(ufshcd_system_suspend); 5121EXPORT_SYMBOL(ufshcd_system_suspend);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index d7fec869d590..58ecdff5065c 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -474,6 +474,7 @@ struct ufs_hba {
474 474
475 struct devfreq *devfreq; 475 struct devfreq *devfreq;
476 struct ufs_clk_scaling clk_scaling; 476 struct ufs_clk_scaling clk_scaling;
477 bool is_sys_suspended;
477}; 478};
478 479
479/* Returns true if clocks can be gated. Otherwise false */ 480/* Returns true if clocks can be gated. Otherwise false */
@@ -499,6 +500,23 @@ static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba)
499#define ufshcd_readl(hba, reg) \ 500#define ufshcd_readl(hba, reg) \
500 readl((hba)->mmio_base + (reg)) 501 readl((hba)->mmio_base + (reg))
501 502
503/**
504 * ufshcd_rmwl - read modify write into a register
505 * @hba - per adapter instance
506 * @mask - mask to apply on read value
507 * @val - actual value to write
508 * @reg - register address
509 */
510static inline void ufshcd_rmwl(struct ufs_hba *hba, u32 mask, u32 val, u32 reg)
511{
512 u32 tmp;
513
514 tmp = ufshcd_readl(hba, reg);
515 tmp &= ~mask;
516 tmp |= (val & mask);
517 ufshcd_writel(hba, tmp, reg);
518}
519
502int ufshcd_alloc_host(struct device *, struct ufs_hba **); 520int ufshcd_alloc_host(struct device *, struct ufs_hba **);
503int ufshcd_init(struct ufs_hba * , void __iomem * , unsigned int); 521int ufshcd_init(struct ufs_hba * , void __iomem * , unsigned int);
504void ufshcd_remove(struct ufs_hba *); 522void ufshcd_remove(struct ufs_hba *);
diff --git a/drivers/scsi/ufs/unipro.h b/drivers/scsi/ufs/unipro.h
index 0bb8041c047a..3fc3e21b746b 100644
--- a/drivers/scsi/ufs/unipro.h
+++ b/drivers/scsi/ufs/unipro.h
@@ -13,6 +13,44 @@
13#define _UNIPRO_H_ 13#define _UNIPRO_H_
14 14
15/* 15/*
16 * M-TX Configuration Attributes
17 */
18#define TX_MODE 0x0021
19#define TX_HSRATE_SERIES 0x0022
20#define TX_HSGEAR 0x0023
21#define TX_PWMGEAR 0x0024
22#define TX_AMPLITUDE 0x0025
23#define TX_HS_SLEWRATE 0x0026
24#define TX_SYNC_SOURCE 0x0027
25#define TX_HS_SYNC_LENGTH 0x0028
26#define TX_HS_PREPARE_LENGTH 0x0029
27#define TX_LS_PREPARE_LENGTH 0x002A
28#define TX_HIBERN8_CONTROL 0x002B
29#define TX_LCC_ENABLE 0x002C
30#define TX_PWM_BURST_CLOSURE_EXTENSION 0x002D
31#define TX_BYPASS_8B10B_ENABLE 0x002E
32#define TX_DRIVER_POLARITY 0x002F
33#define TX_HS_UNTERMINATED_LINE_DRIVE_ENABLE 0x0030
34#define TX_LS_TERMINATED_LINE_DRIVE_ENABLE 0x0031
35#define TX_LCC_SEQUENCER 0x0032
36#define TX_MIN_ACTIVATETIME 0x0033
37#define TX_PWM_G6_G7_SYNC_LENGTH 0x0034
38
39/*
40 * M-RX Configuration Attributes
41 */
42#define RX_MODE 0x00A1
43#define RX_HSRATE_SERIES 0x00A2
44#define RX_HSGEAR 0x00A3
45#define RX_PWMGEAR 0x00A4
46#define RX_LS_TERMINATED_ENABLE 0x00A5
47#define RX_HS_UNTERMINATED_ENABLE 0x00A6
48#define RX_ENTER_HIBERN8 0x00A7
49#define RX_BYPASS_8B10B_ENABLE 0x00A8
50#define RX_TERMINATION_FORCE_ENABLE 0x0089
51
52#define is_mphy_tx_attr(attr) (attr < RX_MODE)
53/*
16 * PHY Adpater attributes 54 * PHY Adpater attributes
17 */ 55 */
18#define PA_ACTIVETXDATALANES 0x1560 56#define PA_ACTIVETXDATALANES 0x1560
@@ -87,6 +125,24 @@ enum {
87 PA_HS_MODE_B = 2, 125 PA_HS_MODE_B = 2,
88}; 126};
89 127
128enum ufs_pwm_gear_tag {
129 UFS_PWM_DONT_CHANGE, /* Don't change Gear */
130 UFS_PWM_G1, /* PWM Gear 1 (default for reset) */
131 UFS_PWM_G2, /* PWM Gear 2 */
132 UFS_PWM_G3, /* PWM Gear 3 */
133 UFS_PWM_G4, /* PWM Gear 4 */
134 UFS_PWM_G5, /* PWM Gear 5 */
135 UFS_PWM_G6, /* PWM Gear 6 */
136 UFS_PWM_G7, /* PWM Gear 7 */
137};
138
139enum ufs_hs_gear_tag {
140 UFS_HS_DONT_CHANGE, /* Don't change Gear */
141 UFS_HS_G1, /* HS Gear 1 (default for reset) */
142 UFS_HS_G2, /* HS Gear 2 */
143 UFS_HS_G3, /* HS Gear 3 */
144};
145
90/* 146/*
91 * Data Link Layer Attributes 147 * Data Link Layer Attributes
92 */ 148 */