xref: /rk3399_rockchip-uboot/drivers/ufs/ufs-rockchip.h (revision 5460f593a5be37d6bb55811715457bb9de630d3b)
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