xref: /linux/drivers/ufs/host/ufs-sprd.h (revision 9e56ff53b4115875667760445b028357848b4748)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * UNISOC UFS Host Controller driver
4  *
5  * Copyright (C) 2022 Unisoc, Inc.
6  * Author: Zhe Wang <zhe.wang1@unisoc.com>
7  */
8 
9 #ifndef _UFS_SPRD_H_
10 #define _UFS_SPRD_H_
11 
12 /* Vendor specific attributes */
13 #define RXSQCONTROL	0x8009
14 #define CBRATESEL	0x8114
15 #define CBCREGADDRLSB	0x8116
16 #define CBCREGADDRMSB	0x8117
17 #define CBCREGWRLSB	0x8118
18 #define CBCREGWRMSB	0x8119
19 #define CBCREGRDWRSEL	0x811C
20 #define CBCRCTRL	0x811F
21 #define CBREFCLKCTRL2	0x8132
22 #define VS_MPHYDISABLE	0xD0C1
23 
24 #define APB_UFSDEV_REG		0xCE8
25 #define APB_UFSDEV_REFCLK_EN	0x2
26 #define APB_USB31PLL_CTRL	0xCFC
27 #define APB_USB31PLLV_REF2MPHY	0x1
28 
29 #define SPRD_SIP_SVC_STORAGE_UFS_CRYPTO_ENABLE				\
30 	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\
31 			   ARM_SMCCC_SMC_32,				\
32 			   ARM_SMCCC_OWNER_SIP,				\
33 			   0x0301)
34 
35 enum SPRD_UFS_RST_INDEX {
36 	SPRD_UFSHCI_SOFT_RST,
37 	SPRD_UFS_DEV_RST,
38 
39 	SPRD_UFS_RST_MAX
40 };
41 
42 enum SPRD_UFS_SYSCON_INDEX {
43 	SPRD_UFS_ANLG,
44 	SPRD_UFS_AON_APB,
45 
46 	SPRD_UFS_SYSCON_MAX
47 };
48 
49 enum SPRD_UFS_VREG_INDEX {
50 	SPRD_UFS_VDD_MPHY,
51 
52 	SPRD_UFS_VREG_MAX
53 };
54 
55 struct ufs_sprd_rst {
56 	const char *name;
57 	struct reset_control *rc;
58 };
59 
60 struct ufs_sprd_syscon {
61 	const char *name;
62 	struct regmap *regmap;
63 };
64 
65 struct ufs_sprd_vreg {
66 	const char *name;
67 	struct regulator *vreg;
68 };
69 
70 struct ufs_sprd_priv {
71 	struct ufs_sprd_rst rci[SPRD_UFS_RST_MAX];
72 	struct ufs_sprd_syscon sysci[SPRD_UFS_SYSCON_MAX];
73 	struct ufs_sprd_vreg vregi[SPRD_UFS_VREG_MAX];
74 	const struct ufs_hba_variant_ops ufs_hba_sprd_vops;
75 };
76 
77 struct ufs_sprd_host {
78 	struct ufs_hba *hba;
79 	struct ufs_sprd_priv *priv;
80 	void __iomem *ufs_dbg_mmio;
81 
82 	enum ufs_unipro_ver unipro_ver;
83 };
84 
85 #endif /* _UFS_SPRD_H_ */
86