clk-ark.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #define ARK_PLLREF_REG 0x14C
  2. #define ARK_PLL_DIV_MASK 0xFF
  3. #define ARK_PLL_DIV_OFFSET 0
  4. #define ARK_PLL_NO_MASK 0x3
  5. #define ARK_PLL_NO_OFFSET 12
  6. #define ARK_PLL_ENA (1 << 14)
  7. #define ARK_DDS_DIV_MASK 0x7
  8. #define ARK_DDS_DIV_OFFSET 10
  9. #define ARK_DDS_DTOINC_MASK 0x3FFFFF
  10. #define ARK_DDS_DTOINC_OFFSET 0
  11. #define ARK_DDS_MUL_MASK 1
  12. #define ARK_DDS_MUL_OFFSET 2
  13. #define ARK_DDS_ENA (1 << 18)
  14. #define ARK_DDS_MIN_FREQ 200000000
  15. #define ARK_DDS_MAX_FREQ 300000000
  16. #define ARKE_SSCG_OD_MASK 0x7
  17. #define ARKE_SSCG_OD_OFFSET 24
  18. #define ARKE_SSCG_NR_MASK 0x7f
  19. #define ARKE_SSCG_NR_OFFSET 15
  20. #define ARKE_SSCG_NFF_MASK 0x7fff
  21. #define ARKE_SSCG_NFF_OFFSET 0
  22. #define ARKE_SSCG_NFX_MASK 0x1ff
  23. #define ARKE_SSCG_NFX_OFFSET 15
  24. #define ARKE_SSCG_ENA (1 << 27)
  25. #define ARKE_PLL_PS_MASK 0x1f
  26. #define ARKE_PLL_PS_OFFSET 12
  27. #define ARKE_PLL_NS_MASK 0x1ff
  28. #define ARKE_PLL_NS_OFFSET 3
  29. #define ARKE_PLL_MS_MASK 0x7
  30. #define ARKE_PLL_MS_OFFSET 0
  31. #define ARKE_PLL_ENA (1 << 17)
  32. #define ARK_CLK_MAX_ENABLE_NUM 4u
  33. enum ARK_CLK_TYPE {
  34. ARK_CLK_TYPE_PLL = 0,
  35. ARK_CLK_TYPE_DDS,
  36. ARK_CLK_TYPE_DDR,
  37. ARK_CLK_TYPE_SYS,
  38. ARK_CLK_TYPE_APB,
  39. ARKE_CLK_TYPE_SSCG,
  40. ARKE_CLK_TYPE_PLL,
  41. };
  42. enum ARK_PLAT_TYPE {
  43. PLAT_ARK1668,
  44. PLAT_ARKN141,
  45. };
  46. struct ark_clk {
  47. struct clk_hw hw;
  48. void __iomem *reg;
  49. void __iomem *reg2;
  50. bool can_change;
  51. int div;
  52. int divmode;
  53. int divmask;
  54. int divoffset;
  55. int enable_num;
  56. void __iomem *enable_reg[ARK_CLK_MAX_ENABLE_NUM];
  57. int enable_offset[ARK_CLK_MAX_ENABLE_NUM];
  58. char *parent_name;
  59. };
  60. #define to_ark_clk(p) container_of(p, struct ark_clk, hw)