1c73d5e4aSYifeng Zhao // SPDX-License-Identifier: GPL-2.0-only 2c73d5e4aSYifeng Zhao /* 3c73d5e4aSYifeng Zhao * Rockchip UFS Host Controller driver 4c73d5e4aSYifeng Zhao * 5c73d5e4aSYifeng Zhao * Copyright (C) 2024 Rockchip Electronics Co.Ltd. 6c73d5e4aSYifeng Zhao */ 7c73d5e4aSYifeng Zhao 8c73d5e4aSYifeng Zhao #ifndef _UFS_ROCKCHIP_H_ 9c73d5e4aSYifeng Zhao #define _UFS_ROCKCHIP_H_ 10c73d5e4aSYifeng Zhao 11c73d5e4aSYifeng Zhao #define UFS_MAX_CLKS 3 12c73d5e4aSYifeng Zhao 13c73d5e4aSYifeng Zhao #define SEL_TX_LANE0 0x0 14c73d5e4aSYifeng Zhao #define SEL_TX_LANE1 0x1 15c73d5e4aSYifeng Zhao #define SEL_TX_LANE2 0x2 16c73d5e4aSYifeng Zhao #define SEL_TX_LANE3 0x3 17c73d5e4aSYifeng Zhao #define SEL_RX_LANE0 0x4 18c73d5e4aSYifeng Zhao #define SEL_RX_LANE1 0x5 19c73d5e4aSYifeng Zhao #define SEL_RX_LANE2 0x6 20c73d5e4aSYifeng Zhao #define SEL_RX_LANE3 0x7 21c73d5e4aSYifeng Zhao 22c73d5e4aSYifeng Zhao #define MIB_T_DBG_CPORT_TX_ENDIAN 0xc022 23c73d5e4aSYifeng Zhao #define MIB_T_DBG_CPORT_RX_ENDIAN 0xc023 24c73d5e4aSYifeng Zhao 25c73d5e4aSYifeng Zhao /* Vendor specific attributes */ 26c73d5e4aSYifeng Zhao enum dwc_specific_registers { 27c73d5e4aSYifeng Zhao DWC_UFS_REG_HCLKDIV = 0xFC, 28c73d5e4aSYifeng Zhao }; 29c73d5e4aSYifeng Zhao 30c73d5e4aSYifeng Zhao /* Clock Divider Values: Hex equivalent of frequency in MHz */ 31c73d5e4aSYifeng Zhao enum clk_div_values { 32c73d5e4aSYifeng Zhao DWC_UFS_REG_HCLKDIV_DIV_62_5 = 0x3e, 33c73d5e4aSYifeng Zhao DWC_UFS_REG_HCLKDIV_DIV_125 = 0x7d, 34c73d5e4aSYifeng Zhao DWC_UFS_REG_HCLKDIV_DIV_200 = 0xc8, 35c73d5e4aSYifeng Zhao }; 36c73d5e4aSYifeng Zhao 37c73d5e4aSYifeng Zhao /* Selector Index */ 38c73d5e4aSYifeng Zhao enum selector_index { 39c73d5e4aSYifeng Zhao SELIND_LN0_TX = 0x00, 40c73d5e4aSYifeng Zhao SELIND_LN1_TX = 0x01, 41c73d5e4aSYifeng Zhao SELIND_LN0_RX = 0x04, 42c73d5e4aSYifeng Zhao SELIND_LN1_RX = 0x05, 43c73d5e4aSYifeng Zhao }; 44c73d5e4aSYifeng Zhao 45c73d5e4aSYifeng Zhao struct ufshcd_dme_attr_val { 46c73d5e4aSYifeng Zhao u32 attr_sel; 47c73d5e4aSYifeng Zhao u32 mib_val; 48c73d5e4aSYifeng Zhao u8 peer; 49c73d5e4aSYifeng Zhao }; 50c73d5e4aSYifeng Zhao 51c73d5e4aSYifeng Zhao struct ufs_rockchip_host { 52c73d5e4aSYifeng Zhao struct ufs_hba *hba; 53c73d5e4aSYifeng Zhao void __iomem *ufs_phy_ctrl; 54c73d5e4aSYifeng Zhao void __iomem *ufs_sys_ctrl; 55c73d5e4aSYifeng Zhao void __iomem *mphy_base; 56*5460f593SYifeng Zhao struct reset_ctl_bulk rsts; 57c73d5e4aSYifeng Zhao struct clk ref_out_clk; 58c73d5e4aSYifeng Zhao uint64_t caps; 59c73d5e4aSYifeng Zhao uint32_t phy_config_mode; 60c73d5e4aSYifeng Zhao bool in_suspend; 61c73d5e4aSYifeng Zhao }; 62c73d5e4aSYifeng Zhao 63c73d5e4aSYifeng Zhao #define ufs_sys_writel(base, val, reg) \ 64c73d5e4aSYifeng Zhao writel((val), (base) + (reg)) 65c73d5e4aSYifeng Zhao #define ufs_sys_readl(base, reg) readl((base) + (reg)) 66c73d5e4aSYifeng Zhao #define ufs_sys_set_bits(base, mask, reg) \ 67c73d5e4aSYifeng Zhao ufs_sys_writel((base), ((mask) | (ufs_sys_readl((base), (reg)))), (reg)) 68c73d5e4aSYifeng Zhao #define ufs_sys_ctrl_clr_bits(base, mask, reg) \ 69c73d5e4aSYifeng Zhao ufs_sys_writel((base), ((~(mask)) & (ufs_sys_readl((base), (reg)))), (reg)) 70c73d5e4aSYifeng Zhao 71c73d5e4aSYifeng Zhao #endif /* _UFS_ROCKCHIP_H_ */ 72