162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * UNISOC UFS Host Controller driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2022 Unisoc, Inc.
662306a36Sopenharmony_ci * Author: Zhe Wang <zhe.wang1@unisoc.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _UFS_SPRD_H_
1062306a36Sopenharmony_ci#define _UFS_SPRD_H_
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* Vendor specific attributes */
1362306a36Sopenharmony_ci#define RXSQCONTROL	0x8009
1462306a36Sopenharmony_ci#define CBRATESEL	0x8114
1562306a36Sopenharmony_ci#define CBCREGADDRLSB	0x8116
1662306a36Sopenharmony_ci#define CBCREGADDRMSB	0x8117
1762306a36Sopenharmony_ci#define CBCREGWRLSB	0x8118
1862306a36Sopenharmony_ci#define CBCREGWRMSB	0x8119
1962306a36Sopenharmony_ci#define CBCREGRDWRSEL	0x811C
2062306a36Sopenharmony_ci#define CBCRCTRL	0x811F
2162306a36Sopenharmony_ci#define CBREFCLKCTRL2	0x8132
2262306a36Sopenharmony_ci#define VS_MPHYDISABLE	0xD0C1
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define APB_UFSDEV_REG		0xCE8
2562306a36Sopenharmony_ci#define APB_UFSDEV_REFCLK_EN	0x2
2662306a36Sopenharmony_ci#define APB_USB31PLL_CTRL	0xCFC
2762306a36Sopenharmony_ci#define APB_USB31PLLV_REF2MPHY	0x1
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define SPRD_SIP_SVC_STORAGE_UFS_CRYPTO_ENABLE				\
3062306a36Sopenharmony_ci	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\
3162306a36Sopenharmony_ci			   ARM_SMCCC_SMC_32,				\
3262306a36Sopenharmony_ci			   ARM_SMCCC_OWNER_SIP,				\
3362306a36Sopenharmony_ci			   0x0301)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cienum SPRD_UFS_RST_INDEX {
3662306a36Sopenharmony_ci	SPRD_UFSHCI_SOFT_RST,
3762306a36Sopenharmony_ci	SPRD_UFS_DEV_RST,
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	SPRD_UFS_RST_MAX
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cienum SPRD_UFS_SYSCON_INDEX {
4362306a36Sopenharmony_ci	SPRD_UFS_ANLG,
4462306a36Sopenharmony_ci	SPRD_UFS_AON_APB,
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	SPRD_UFS_SYSCON_MAX
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cienum SPRD_UFS_VREG_INDEX {
5062306a36Sopenharmony_ci	SPRD_UFS_VDD_MPHY,
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	SPRD_UFS_VREG_MAX
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistruct ufs_sprd_rst {
5662306a36Sopenharmony_ci	const char *name;
5762306a36Sopenharmony_ci	struct reset_control *rc;
5862306a36Sopenharmony_ci};
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct ufs_sprd_syscon {
6162306a36Sopenharmony_ci	const char *name;
6262306a36Sopenharmony_ci	struct regmap *regmap;
6362306a36Sopenharmony_ci};
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistruct ufs_sprd_vreg {
6662306a36Sopenharmony_ci	const char *name;
6762306a36Sopenharmony_ci	struct regulator *vreg;
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cistruct ufs_sprd_priv {
7162306a36Sopenharmony_ci	struct ufs_sprd_rst rci[SPRD_UFS_RST_MAX];
7262306a36Sopenharmony_ci	struct ufs_sprd_syscon sysci[SPRD_UFS_SYSCON_MAX];
7362306a36Sopenharmony_ci	struct ufs_sprd_vreg vregi[SPRD_UFS_VREG_MAX];
7462306a36Sopenharmony_ci	const struct ufs_hba_variant_ops ufs_hba_sprd_vops;
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_cistruct ufs_sprd_host {
7862306a36Sopenharmony_ci	struct ufs_hba *hba;
7962306a36Sopenharmony_ci	struct ufs_sprd_priv *priv;
8062306a36Sopenharmony_ci	void __iomem *ufs_dbg_mmio;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	enum ufs_unipro_ver unipro_ver;
8362306a36Sopenharmony_ci};
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci#endif /* _UFS_SPRD_H_ */
86