18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * UFS Host Controller driver for Exynos specific extensions
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014-2015 Samsung Electronics Co., Ltd.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef _UFS_EXYNOS_H_
108c2ecf20Sopenharmony_ci#define _UFS_EXYNOS_H_
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/*
138c2ecf20Sopenharmony_ci * UNIPRO registers
148c2ecf20Sopenharmony_ci */
158c2ecf20Sopenharmony_ci#define UNIPRO_DBG_FORCE_DME_CTRL_STATE		0x150
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/*
188c2ecf20Sopenharmony_ci * MIBs for PA debug registers
198c2ecf20Sopenharmony_ci */
208c2ecf20Sopenharmony_ci#define PA_DBG_CLK_PERIOD	0x9514
218c2ecf20Sopenharmony_ci#define PA_DBG_TXPHY_CFGUPDT	0x9518
228c2ecf20Sopenharmony_ci#define PA_DBG_RXPHY_CFGUPDT	0x9519
238c2ecf20Sopenharmony_ci#define PA_DBG_MODE		0x9529
248c2ecf20Sopenharmony_ci#define PA_DBG_SKIP_RESET_PHY	0x9539
258c2ecf20Sopenharmony_ci#define PA_DBG_OV_TM		0x9540
268c2ecf20Sopenharmony_ci#define PA_DBG_SKIP_LINE_RESET	0x9541
278c2ecf20Sopenharmony_ci#define PA_DBG_LINE_RESET_REQ	0x9543
288c2ecf20Sopenharmony_ci#define PA_DBG_OPTION_SUITE	0x9564
298c2ecf20Sopenharmony_ci#define PA_DBG_OPTION_SUITE_DYN	0x9565
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci/*
328c2ecf20Sopenharmony_ci * MIBs for Transport Layer debug registers
338c2ecf20Sopenharmony_ci */
348c2ecf20Sopenharmony_ci#define T_DBG_SKIP_INIT_HIBERN8_EXIT	0xc001
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci/*
378c2ecf20Sopenharmony_ci * Exynos MPHY attributes
388c2ecf20Sopenharmony_ci */
398c2ecf20Sopenharmony_ci#define TX_LINERESET_N_VAL	0x0277
408c2ecf20Sopenharmony_ci#define TX_LINERESET_N(v)	(((v) >> 10) & 0xFF)
418c2ecf20Sopenharmony_ci#define TX_LINERESET_P_VAL	0x027D
428c2ecf20Sopenharmony_ci#define TX_LINERESET_P(v)	(((v) >> 12) & 0xFF)
438c2ecf20Sopenharmony_ci#define TX_OV_SLEEP_CNT_TIMER	0x028E
448c2ecf20Sopenharmony_ci#define TX_OV_H8_ENTER_EN	(1 << 7)
458c2ecf20Sopenharmony_ci#define TX_OV_SLEEP_CNT(v)	(((v) >> 5) & 0x7F)
468c2ecf20Sopenharmony_ci#define TX_HIGH_Z_CNT_11_08	0x028C
478c2ecf20Sopenharmony_ci#define TX_HIGH_Z_CNT_H(v)	(((v) >> 8) & 0xF)
488c2ecf20Sopenharmony_ci#define TX_HIGH_Z_CNT_07_00	0x028D
498c2ecf20Sopenharmony_ci#define TX_HIGH_Z_CNT_L(v)	((v) & 0xFF)
508c2ecf20Sopenharmony_ci#define TX_BASE_NVAL_07_00	0x0293
518c2ecf20Sopenharmony_ci#define TX_BASE_NVAL_L(v)	((v) & 0xFF)
528c2ecf20Sopenharmony_ci#define TX_BASE_NVAL_15_08	0x0294
538c2ecf20Sopenharmony_ci#define TX_BASE_NVAL_H(v)	(((v) >> 8) & 0xFF)
548c2ecf20Sopenharmony_ci#define TX_GRAN_NVAL_07_00	0x0295
558c2ecf20Sopenharmony_ci#define TX_GRAN_NVAL_L(v)	((v) & 0xFF)
568c2ecf20Sopenharmony_ci#define TX_GRAN_NVAL_10_08	0x0296
578c2ecf20Sopenharmony_ci#define TX_GRAN_NVAL_H(v)	(((v) >> 8) & 0x3)
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci#define RX_FILLER_ENABLE	0x0316
608c2ecf20Sopenharmony_ci#define RX_FILLER_EN		(1 << 1)
618c2ecf20Sopenharmony_ci#define RX_LINERESET_VAL	0x0317
628c2ecf20Sopenharmony_ci#define RX_LINERESET(v)	(((v) >> 12) & 0xFF)
638c2ecf20Sopenharmony_ci#define RX_LCC_IGNORE		0x0318
648c2ecf20Sopenharmony_ci#define RX_SYNC_MASK_LENGTH	0x0321
658c2ecf20Sopenharmony_ci#define RX_HIBERN8_WAIT_VAL_BIT_20_16	0x0331
668c2ecf20Sopenharmony_ci#define RX_HIBERN8_WAIT_VAL_BIT_15_08	0x0332
678c2ecf20Sopenharmony_ci#define RX_HIBERN8_WAIT_VAL_BIT_07_00	0x0333
688c2ecf20Sopenharmony_ci#define RX_OV_SLEEP_CNT_TIMER	0x0340
698c2ecf20Sopenharmony_ci#define RX_OV_SLEEP_CNT(v)	(((v) >> 6) & 0x1F)
708c2ecf20Sopenharmony_ci#define RX_OV_STALL_CNT_TIMER	0x0341
718c2ecf20Sopenharmony_ci#define RX_OV_STALL_CNT(v)	(((v) >> 4) & 0xFF)
728c2ecf20Sopenharmony_ci#define RX_BASE_NVAL_07_00	0x0355
738c2ecf20Sopenharmony_ci#define RX_BASE_NVAL_L(v)	((v) & 0xFF)
748c2ecf20Sopenharmony_ci#define RX_BASE_NVAL_15_08	0x0354
758c2ecf20Sopenharmony_ci#define RX_BASE_NVAL_H(v)	(((v) >> 8) & 0xFF)
768c2ecf20Sopenharmony_ci#define RX_GRAN_NVAL_07_00	0x0353
778c2ecf20Sopenharmony_ci#define RX_GRAN_NVAL_L(v)	((v) & 0xFF)
788c2ecf20Sopenharmony_ci#define RX_GRAN_NVAL_10_08	0x0352
798c2ecf20Sopenharmony_ci#define RX_GRAN_NVAL_H(v)	(((v) >> 8) & 0x3)
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci#define CMN_PWM_CLK_CTRL	0x0402
828c2ecf20Sopenharmony_ci#define PWM_CLK_CTRL_MASK	0x3
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci#define IATOVAL_NSEC		20000	/* unit: ns */
858c2ecf20Sopenharmony_ci#define UNIPRO_PCLK_PERIOD(ufs) (NSEC_PER_SEC / ufs->pclk_rate)
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_cistruct exynos_ufs;
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci/* vendor specific pre-defined parameters */
908c2ecf20Sopenharmony_ci#define SLOW 1
918c2ecf20Sopenharmony_ci#define FAST 2
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_NUM_LANES_RX	2
948c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_NUM_LANES_TX	2
958c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_HSGEAR_RX	UFS_HS_G3
968c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_HSGEAR_TX	UFS_HS_G3
978c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_PWMGEAR_RX	UFS_PWM_G4
988c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_PWMGEAR_TX	UFS_PWM_G4
998c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_RX_PWR_PWM	SLOW_MODE
1008c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_TX_PWR_PWM	SLOW_MODE
1018c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_RX_PWR_HS	FAST_MODE
1028c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_TX_PWR_HS	FAST_MODE
1038c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_HS_RATE		PA_HS_MODE_B
1048c2ecf20Sopenharmony_ci#define UFS_EXYNOS_LIMIT_DESIRED_MODE	FAST
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci#define RX_ADV_FINE_GRAN_SUP_EN	0x1
1078c2ecf20Sopenharmony_ci#define RX_ADV_FINE_GRAN_STEP_VAL	0x3
1088c2ecf20Sopenharmony_ci#define RX_ADV_MIN_ACTV_TIME_CAP	0x9
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci#define PA_GRANULARITY_VAL	0x6
1118c2ecf20Sopenharmony_ci#define PA_TACTIVATE_VAL	0x3
1128c2ecf20Sopenharmony_ci#define PA_HIBERN8TIME_VAL	0x20
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci#define PCLK_AVAIL_MIN	70000000
1158c2ecf20Sopenharmony_ci#define PCLK_AVAIL_MAX	133000000
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_cistruct exynos_ufs_uic_attr {
1188c2ecf20Sopenharmony_ci	/* TX Attributes */
1198c2ecf20Sopenharmony_ci	unsigned int tx_trailingclks;
1208c2ecf20Sopenharmony_ci	unsigned int tx_dif_p_nsec;
1218c2ecf20Sopenharmony_ci	unsigned int tx_dif_n_nsec;
1228c2ecf20Sopenharmony_ci	unsigned int tx_high_z_cnt_nsec;
1238c2ecf20Sopenharmony_ci	unsigned int tx_base_unit_nsec;
1248c2ecf20Sopenharmony_ci	unsigned int tx_gran_unit_nsec;
1258c2ecf20Sopenharmony_ci	unsigned int tx_sleep_cnt;
1268c2ecf20Sopenharmony_ci	unsigned int tx_min_activatetime;
1278c2ecf20Sopenharmony_ci	/* RX Attributes */
1288c2ecf20Sopenharmony_ci	unsigned int rx_filler_enable;
1298c2ecf20Sopenharmony_ci	unsigned int rx_dif_p_nsec;
1308c2ecf20Sopenharmony_ci	unsigned int rx_hibern8_wait_nsec;
1318c2ecf20Sopenharmony_ci	unsigned int rx_base_unit_nsec;
1328c2ecf20Sopenharmony_ci	unsigned int rx_gran_unit_nsec;
1338c2ecf20Sopenharmony_ci	unsigned int rx_sleep_cnt;
1348c2ecf20Sopenharmony_ci	unsigned int rx_stall_cnt;
1358c2ecf20Sopenharmony_ci	unsigned int rx_hs_g1_sync_len_cap;
1368c2ecf20Sopenharmony_ci	unsigned int rx_hs_g2_sync_len_cap;
1378c2ecf20Sopenharmony_ci	unsigned int rx_hs_g3_sync_len_cap;
1388c2ecf20Sopenharmony_ci	unsigned int rx_hs_g1_prep_sync_len_cap;
1398c2ecf20Sopenharmony_ci	unsigned int rx_hs_g2_prep_sync_len_cap;
1408c2ecf20Sopenharmony_ci	unsigned int rx_hs_g3_prep_sync_len_cap;
1418c2ecf20Sopenharmony_ci	/* Common Attributes */
1428c2ecf20Sopenharmony_ci	unsigned int cmn_pwm_clk_ctrl;
1438c2ecf20Sopenharmony_ci	/* Internal Attributes */
1448c2ecf20Sopenharmony_ci	unsigned int pa_dbg_option_suite;
1458c2ecf20Sopenharmony_ci	/* Changeable Attributes */
1468c2ecf20Sopenharmony_ci	unsigned int rx_adv_fine_gran_sup_en;
1478c2ecf20Sopenharmony_ci	unsigned int rx_adv_fine_gran_step;
1488c2ecf20Sopenharmony_ci	unsigned int rx_min_actv_time_cap;
1498c2ecf20Sopenharmony_ci	unsigned int rx_hibern8_time_cap;
1508c2ecf20Sopenharmony_ci	unsigned int rx_adv_min_actv_time_cap;
1518c2ecf20Sopenharmony_ci	unsigned int rx_adv_hibern8_time_cap;
1528c2ecf20Sopenharmony_ci	unsigned int pa_granularity;
1538c2ecf20Sopenharmony_ci	unsigned int pa_tactivate;
1548c2ecf20Sopenharmony_ci	unsigned int pa_hibern8time;
1558c2ecf20Sopenharmony_ci};
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_cistruct exynos_ufs_drv_data {
1588c2ecf20Sopenharmony_ci	char *compatible;
1598c2ecf20Sopenharmony_ci	struct exynos_ufs_uic_attr *uic_attr;
1608c2ecf20Sopenharmony_ci	unsigned int quirks;
1618c2ecf20Sopenharmony_ci	unsigned int opts;
1628c2ecf20Sopenharmony_ci	/* SoC's specific operations */
1638c2ecf20Sopenharmony_ci	int (*drv_init)(struct device *dev, struct exynos_ufs *ufs);
1648c2ecf20Sopenharmony_ci	int (*pre_link)(struct exynos_ufs *ufs);
1658c2ecf20Sopenharmony_ci	int (*post_link)(struct exynos_ufs *ufs);
1668c2ecf20Sopenharmony_ci	int (*pre_pwr_change)(struct exynos_ufs *ufs,
1678c2ecf20Sopenharmony_ci				struct ufs_pa_layer_attr *pwr);
1688c2ecf20Sopenharmony_ci	int (*post_pwr_change)(struct exynos_ufs *ufs,
1698c2ecf20Sopenharmony_ci				struct ufs_pa_layer_attr *pwr);
1708c2ecf20Sopenharmony_ci};
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_cistruct ufs_phy_time_cfg {
1738c2ecf20Sopenharmony_ci	u32 tx_linereset_p;
1748c2ecf20Sopenharmony_ci	u32 tx_linereset_n;
1758c2ecf20Sopenharmony_ci	u32 tx_high_z_cnt;
1768c2ecf20Sopenharmony_ci	u32 tx_base_n_val;
1778c2ecf20Sopenharmony_ci	u32 tx_gran_n_val;
1788c2ecf20Sopenharmony_ci	u32 tx_sleep_cnt;
1798c2ecf20Sopenharmony_ci	u32 rx_linereset;
1808c2ecf20Sopenharmony_ci	u32 rx_hibern8_wait;
1818c2ecf20Sopenharmony_ci	u32 rx_base_n_val;
1828c2ecf20Sopenharmony_ci	u32 rx_gran_n_val;
1838c2ecf20Sopenharmony_ci	u32 rx_sleep_cnt;
1848c2ecf20Sopenharmony_ci	u32 rx_stall_cnt;
1858c2ecf20Sopenharmony_ci};
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_cistruct exynos_ufs {
1888c2ecf20Sopenharmony_ci	struct ufs_hba *hba;
1898c2ecf20Sopenharmony_ci	struct phy *phy;
1908c2ecf20Sopenharmony_ci	void __iomem *reg_hci;
1918c2ecf20Sopenharmony_ci	void __iomem *reg_unipro;
1928c2ecf20Sopenharmony_ci	void __iomem *reg_ufsp;
1938c2ecf20Sopenharmony_ci	struct clk *clk_hci_core;
1948c2ecf20Sopenharmony_ci	struct clk *clk_unipro_main;
1958c2ecf20Sopenharmony_ci	struct clk *clk_apb;
1968c2ecf20Sopenharmony_ci	u32 pclk_rate;
1978c2ecf20Sopenharmony_ci	u32 pclk_div;
1988c2ecf20Sopenharmony_ci	u32 pclk_avail_min;
1998c2ecf20Sopenharmony_ci	u32 pclk_avail_max;
2008c2ecf20Sopenharmony_ci	unsigned long mclk_rate;
2018c2ecf20Sopenharmony_ci	int avail_ln_rx;
2028c2ecf20Sopenharmony_ci	int avail_ln_tx;
2038c2ecf20Sopenharmony_ci	int rx_sel_idx;
2048c2ecf20Sopenharmony_ci	struct ufs_pa_layer_attr dev_req_params;
2058c2ecf20Sopenharmony_ci	struct ufs_phy_time_cfg t_cfg;
2068c2ecf20Sopenharmony_ci	ktime_t entry_hibern8_t;
2078c2ecf20Sopenharmony_ci	struct exynos_ufs_drv_data *drv_data;
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_ci	u32 opts;
2108c2ecf20Sopenharmony_ci#define EXYNOS_UFS_OPT_HAS_APB_CLK_CTRL		BIT(0)
2118c2ecf20Sopenharmony_ci#define EXYNOS_UFS_OPT_SKIP_CONNECTION_ESTAB	BIT(1)
2128c2ecf20Sopenharmony_ci#define EXYNOS_UFS_OPT_BROKEN_AUTO_CLK_CTRL	BIT(2)
2138c2ecf20Sopenharmony_ci#define EXYNOS_UFS_OPT_BROKEN_RX_SEL_IDX	BIT(3)
2148c2ecf20Sopenharmony_ci#define EXYNOS_UFS_OPT_USE_SW_HIBERN8_TIMER	BIT(4)
2158c2ecf20Sopenharmony_ci};
2168c2ecf20Sopenharmony_ci
2178c2ecf20Sopenharmony_ci#define for_each_ufs_rx_lane(ufs, i) \
2188c2ecf20Sopenharmony_ci	for (i = (ufs)->rx_sel_idx; \
2198c2ecf20Sopenharmony_ci		i < (ufs)->rx_sel_idx + (ufs)->avail_ln_rx; i++)
2208c2ecf20Sopenharmony_ci#define for_each_ufs_tx_lane(ufs, i) \
2218c2ecf20Sopenharmony_ci	for (i = 0; i < (ufs)->avail_ln_tx; i++)
2228c2ecf20Sopenharmony_ci
2238c2ecf20Sopenharmony_ci#define EXYNOS_UFS_MMIO_FUNC(name)					  \
2248c2ecf20Sopenharmony_cistatic inline void name##_writel(struct exynos_ufs *ufs, u32 val, u32 reg)\
2258c2ecf20Sopenharmony_ci{									  \
2268c2ecf20Sopenharmony_ci	writel(val, ufs->reg_##name + reg);				  \
2278c2ecf20Sopenharmony_ci}									  \
2288c2ecf20Sopenharmony_ci									  \
2298c2ecf20Sopenharmony_cistatic inline u32 name##_readl(struct exynos_ufs *ufs, u32 reg)		  \
2308c2ecf20Sopenharmony_ci{									  \
2318c2ecf20Sopenharmony_ci	return readl(ufs->reg_##name + reg);				  \
2328c2ecf20Sopenharmony_ci}
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ciEXYNOS_UFS_MMIO_FUNC(hci);
2358c2ecf20Sopenharmony_ciEXYNOS_UFS_MMIO_FUNC(unipro);
2368c2ecf20Sopenharmony_ciEXYNOS_UFS_MMIO_FUNC(ufsp);
2378c2ecf20Sopenharmony_ci#undef EXYNOS_UFS_MMIO_FUNC
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_cilong exynos_ufs_calc_time_cntr(struct exynos_ufs *, long);
2408c2ecf20Sopenharmony_ci
2418c2ecf20Sopenharmony_cistatic inline void exynos_ufs_enable_ov_tm(struct ufs_hba *hba)
2428c2ecf20Sopenharmony_ci{
2438c2ecf20Sopenharmony_ci	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OV_TM), TRUE);
2448c2ecf20Sopenharmony_ci}
2458c2ecf20Sopenharmony_ci
2468c2ecf20Sopenharmony_cistatic inline void exynos_ufs_disable_ov_tm(struct ufs_hba *hba)
2478c2ecf20Sopenharmony_ci{
2488c2ecf20Sopenharmony_ci	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_OV_TM), FALSE);
2498c2ecf20Sopenharmony_ci}
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_cistatic inline void exynos_ufs_enable_dbg_mode(struct ufs_hba *hba)
2528c2ecf20Sopenharmony_ci{
2538c2ecf20Sopenharmony_ci	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_MODE), TRUE);
2548c2ecf20Sopenharmony_ci}
2558c2ecf20Sopenharmony_ci
2568c2ecf20Sopenharmony_cistatic inline void exynos_ufs_disable_dbg_mode(struct ufs_hba *hba)
2578c2ecf20Sopenharmony_ci{
2588c2ecf20Sopenharmony_ci	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_DBG_MODE), FALSE);
2598c2ecf20Sopenharmony_ci}
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_cistruct exynos_ufs_drv_data exynos_ufs_drvs;
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_cistruct exynos_ufs_uic_attr exynos7_uic_attr = {
2648c2ecf20Sopenharmony_ci	.tx_trailingclks		= 0x10,
2658c2ecf20Sopenharmony_ci	.tx_dif_p_nsec			= 3000000,	/* unit: ns */
2668c2ecf20Sopenharmony_ci	.tx_dif_n_nsec			= 1000000,	/* unit: ns */
2678c2ecf20Sopenharmony_ci	.tx_high_z_cnt_nsec		= 20000,	/* unit: ns */
2688c2ecf20Sopenharmony_ci	.tx_base_unit_nsec		= 100000,	/* unit: ns */
2698c2ecf20Sopenharmony_ci	.tx_gran_unit_nsec		= 4000,		/* unit: ns */
2708c2ecf20Sopenharmony_ci	.tx_sleep_cnt			= 1000,		/* unit: ns */
2718c2ecf20Sopenharmony_ci	.tx_min_activatetime		= 0xa,
2728c2ecf20Sopenharmony_ci	.rx_filler_enable		= 0x2,
2738c2ecf20Sopenharmony_ci	.rx_dif_p_nsec			= 1000000,	/* unit: ns */
2748c2ecf20Sopenharmony_ci	.rx_hibern8_wait_nsec		= 4000000,	/* unit: ns */
2758c2ecf20Sopenharmony_ci	.rx_base_unit_nsec		= 100000,	/* unit: ns */
2768c2ecf20Sopenharmony_ci	.rx_gran_unit_nsec		= 4000,		/* unit: ns */
2778c2ecf20Sopenharmony_ci	.rx_sleep_cnt			= 1280,		/* unit: ns */
2788c2ecf20Sopenharmony_ci	.rx_stall_cnt			= 320,		/* unit: ns */
2798c2ecf20Sopenharmony_ci	.rx_hs_g1_sync_len_cap		= SYNC_LEN_COARSE(0xf),
2808c2ecf20Sopenharmony_ci	.rx_hs_g2_sync_len_cap		= SYNC_LEN_COARSE(0xf),
2818c2ecf20Sopenharmony_ci	.rx_hs_g3_sync_len_cap		= SYNC_LEN_COARSE(0xf),
2828c2ecf20Sopenharmony_ci	.rx_hs_g1_prep_sync_len_cap	= PREP_LEN(0xf),
2838c2ecf20Sopenharmony_ci	.rx_hs_g2_prep_sync_len_cap	= PREP_LEN(0xf),
2848c2ecf20Sopenharmony_ci	.rx_hs_g3_prep_sync_len_cap	= PREP_LEN(0xf),
2858c2ecf20Sopenharmony_ci	.pa_dbg_option_suite		= 0x30103,
2868c2ecf20Sopenharmony_ci};
2878c2ecf20Sopenharmony_ci#endif /* _UFS_EXYNOS_H_ */
288