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