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
35enum SPRD_UFS_RST_INDEX {
36 SPRD_UFSHCI_SOFT_RST,
37 SPRD_UFS_DEV_RST,
38
39 SPRD_UFS_RST_MAX
40};
41
42enum SPRD_UFS_SYSCON_INDEX {
43 SPRD_UFS_ANLG,
44 SPRD_UFS_AON_APB,
45
46 SPRD_UFS_SYSCON_MAX
47};
48
49enum SPRD_UFS_VREG_INDEX {
50 SPRD_UFS_VDD_MPHY,
51
52 SPRD_UFS_VREG_MAX
53};
54
55struct ufs_sprd_rst {
56 const char *name;
57 struct reset_control *rc;
58};
59
60struct ufs_sprd_syscon {
61 const char *name;
62 struct regmap *regmap;
63};
64
65struct ufs_sprd_vreg {
66 const char *name;
67 struct regulator *vreg;
68};
69
70struct 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
77struct 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

source code of linux/drivers/ufs/host/ufs-sprd.h