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