ufs-sprd.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 <[email protected]>
  7. */
  8. #ifndef _UFS_SPRD_H_
  9. #define _UFS_SPRD_H_
  10. /* Vendor specific attributes */
  11. #define RXSQCONTROL 0x8009
  12. #define CBRATESEL 0x8114
  13. #define CBCREGADDRLSB 0x8116
  14. #define CBCREGADDRMSB 0x8117
  15. #define CBCREGWRLSB 0x8118
  16. #define CBCREGWRMSB 0x8119
  17. #define CBCREGRDWRSEL 0x811C
  18. #define CBCRCTRL 0x811F
  19. #define CBREFCLKCTRL2 0x8132
  20. #define VS_MPHYDISABLE 0xD0C1
  21. #define APB_UFSDEV_REG 0xCE8
  22. #define APB_UFSDEV_REFCLK_EN 0x2
  23. #define APB_USB31PLL_CTRL 0xCFC
  24. #define APB_USB31PLLV_REF2MPHY 0x1
  25. #define SPRD_SIP_SVC_STORAGE_UFS_CRYPTO_ENABLE \
  26. ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \
  27. ARM_SMCCC_SMC_32, \
  28. ARM_SMCCC_OWNER_SIP, \
  29. 0x0301)
  30. enum SPRD_UFS_RST_INDEX {
  31. SPRD_UFSHCI_SOFT_RST,
  32. SPRD_UFS_DEV_RST,
  33. SPRD_UFS_RST_MAX
  34. };
  35. enum SPRD_UFS_SYSCON_INDEX {
  36. SPRD_UFS_ANLG,
  37. SPRD_UFS_AON_APB,
  38. SPRD_UFS_SYSCON_MAX
  39. };
  40. enum SPRD_UFS_VREG_INDEX {
  41. SPRD_UFS_VDD_MPHY,
  42. SPRD_UFS_VREG_MAX
  43. };
  44. struct ufs_sprd_rst {
  45. const char *name;
  46. struct reset_control *rc;
  47. };
  48. struct ufs_sprd_syscon {
  49. const char *name;
  50. struct regmap *regmap;
  51. };
  52. struct ufs_sprd_vreg {
  53. const char *name;
  54. struct regulator *vreg;
  55. };
  56. struct ufs_sprd_priv {
  57. struct ufs_sprd_rst rci[SPRD_UFS_RST_MAX];
  58. struct ufs_sprd_syscon sysci[SPRD_UFS_SYSCON_MAX];
  59. struct ufs_sprd_vreg vregi[SPRD_UFS_VREG_MAX];
  60. const struct ufs_hba_variant_ops ufs_hba_sprd_vops;
  61. };
  62. struct ufs_sprd_host {
  63. struct ufs_hba *hba;
  64. struct ufs_sprd_priv *priv;
  65. void __iomem *ufs_dbg_mmio;
  66. enum ufs_unipro_ver unipro_ver;
  67. };
  68. #endif /* _UFS_SPRD_H_ */