mc_cgm_regs.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * (C) Copyright 2015, Freescale Semiconductor, Inc.
  4. */
  5. #ifndef __ARCH_ARM_MACH_S32V234_MCCGM_REGS_H__
  6. #define __ARCH_ARM_MACH_S32V234_MCCGM_REGS_H__
  7. #ifndef __ASSEMBLY__
  8. /* MC_CGM registers definitions */
  9. /* MC_CGM_SC_SS */
  10. #define CGM_SC_SS(cgm_addr) ( ((cgm_addr) + 0x000007E4) )
  11. #define MC_CGM_SC_SEL_FIRC (0x0)
  12. #define MC_CGM_SC_SEL_XOSC (0x1)
  13. #define MC_CGM_SC_SEL_ARMPLL (0x2)
  14. #define MC_CGM_SC_SEL_CLKDISABLE (0xF)
  15. /* MC_CGM_SC_DCn */
  16. #define CGM_SC_DCn(cgm_addr,dc) ( ((cgm_addr) + 0x000007E8) + ((dc) * 0x4) )
  17. #define MC_CGM_SC_DCn_PREDIV(val) (MC_CGM_SC_DCn_PREDIV_MASK & ((val) << MC_CGM_SC_DCn_PREDIV_OFFSET))
  18. #define MC_CGM_SC_DCn_PREDIV_MASK (0x00070000)
  19. #define MC_CGM_SC_DCn_PREDIV_OFFSET (16)
  20. #define MC_CGM_SC_DCn_DE (1 << 31)
  21. #define MC_CGM_SC_SEL_MASK (0x0F000000)
  22. #define MC_CGM_SC_SEL_OFFSET (24)
  23. /* MC_CGM_ACn_DCm */
  24. #define CGM_ACn_DCm(cgm_addr,ac,dc) ( ((cgm_addr) + 0x00000808) + ((ac) * 0x20) + ((dc) * 0x4) )
  25. #define MC_CGM_ACn_DCm_PREDIV(val) (MC_CGM_ACn_DCm_PREDIV_MASK & ((val) << MC_CGM_ACn_DCm_PREDIV_OFFSET))
  26. /*
  27. * MC_CGM_ACn_DCm_PREDIV_MASK is on 5 bits because practical test has shown
  28. * that the 5th bit is always ignored during writes if the current
  29. * MC_CGM_ACn_DCm_PREDIV field has only 4 bits
  30. *
  31. * The manual states only selectors 1, 5 and 15 have DC0_PREDIV on 5 bits
  32. *
  33. * This should be changed if any problems occur.
  34. */
  35. #define MC_CGM_ACn_DCm_PREDIV_MASK (0x001F0000)
  36. #define MC_CGM_ACn_DCm_PREDIV_OFFSET (16)
  37. #define MC_CGM_ACn_DCm_DE (1 << 31)
  38. /*
  39. * MC_CGM_ACn_SC/MC_CGM_ACn_SS
  40. */
  41. #define CGM_ACn_SC(cgm_addr,ac) ((cgm_addr + 0x00000800) + ((ac) * 0x20))
  42. #define CGM_ACn_SS(cgm_addr,ac) ((cgm_addr + 0x00000804) + ((ac) * 0x20))
  43. #define MC_CGM_ACn_SEL_MASK (0x07000000)
  44. #define MC_CGM_ACn_SEL_SET(source) (MC_CGM_ACn_SEL_MASK & (((source) & 0x7) << MC_CGM_ACn_SEL_OFFSET))
  45. #define MC_CGM_ACn_SEL_OFFSET (24)
  46. #define MC_CGM_ACn_SEL_FIRC (0x0)
  47. #define MC_CGM_ACn_SEL_XOSC (0x1)
  48. #define MC_CGM_ACn_SEL_ARMPLL (0x2)
  49. /*
  50. * According to the manual some PLL can be divided by X (X={1,3,5}):
  51. * PERPLLDIVX, VIDEOPLLDIVX.
  52. */
  53. #define MC_CGM_ACn_SEL_PERPLLDIVX (0x3)
  54. #define MC_CGM_ACn_SEL_ENETPLL (0x4)
  55. #define MC_CGM_ACn_SEL_DDRPLL (0x5)
  56. #define MC_CGM_ACn_SEL_EXTSRCPAD (0x7)
  57. #define MC_CGM_ACn_SEL_SYSCLK (0x8)
  58. #define MC_CGM_ACn_SEL_VIDEOPLLDIVX (0x9)
  59. #define MC_CGM_ACn_SEL_PERCLK (0xA)
  60. /* PLLDIG PLL Divider Register (PLLDIG_PLLDV) */
  61. #define PLLDIG_PLLDV(pll) ((MC_CGM0_BASE_ADDR + 0x00000028) + ((pll) * 0x80))
  62. #define PLLDIG_PLLDV_MFD(div) (PLLDIG_PLLDV_MFD_MASK & (div))
  63. #define PLLDIG_PLLDV_MFD_MASK (0x000000FF)
  64. /*
  65. * PLLDIG_PLLDV_RFDPHIB has a different format for /32 according to
  66. * the reference manual. This other value respect the formula 2^[RFDPHIBY+1]
  67. */
  68. #define PLLDIG_PLLDV_RFDPHI_SET(val) (PLLDIG_PLLDV_RFDPHI_MASK & (((val) & PLLDIG_PLLDV_RFDPHI_MAXVALUE) << PLLDIG_PLLDV_RFDPHI_OFFSET))
  69. #define PLLDIG_PLLDV_RFDPHI_MASK (0x003F0000)
  70. #define PLLDIG_PLLDV_RFDPHI_MAXVALUE (0x3F)
  71. #define PLLDIG_PLLDV_RFDPHI_OFFSET (16)
  72. #define PLLDIG_PLLDV_RFDPHI1_SET(val) (PLLDIG_PLLDV_RFDPHI1_MASK & (((val) & PLLDIG_PLLDV_RFDPHI1_MAXVALUE) << PLLDIG_PLLDV_RFDPHI1_OFFSET))
  73. #define PLLDIG_PLLDV_RFDPHI1_MASK (0x7E000000)
  74. #define PLLDIG_PLLDV_RFDPHI1_MAXVALUE (0x3F)
  75. #define PLLDIG_PLLDV_RFDPHI1_OFFSET (25)
  76. #define PLLDIG_PLLDV_PREDIV_SET(val) (PLLDIG_PLLDV_PREDIV_MASK & (((val) & PLLDIG_PLLDV_PREDIV_MAXVALUE) << PLLDIG_PLLDV_PREDIV_OFFSET))
  77. #define PLLDIG_PLLDV_PREDIV_MASK (0x00007000)
  78. #define PLLDIG_PLLDV_PREDIV_MAXVALUE (0x7)
  79. #define PLLDIG_PLLDV_PREDIV_OFFSET (12)
  80. /* PLLDIG PLL Fractional Divide Register (PLLDIG_PLLFD) */
  81. #define PLLDIG_PLLFD(pll) ((MC_CGM0_BASE_ADDR + 0x00000030) + ((pll) * 0x80))
  82. #define PLLDIG_PLLFD_MFN_SET(val) (PLLDIG_PLLFD_MFN_MASK & (val))
  83. #define PLLDIG_PLLFD_MFN_MASK (0x00007FFF)
  84. #define PLLDIG_PLLFD_SMDEN (1 << 30)
  85. /* PLL Calibration Register 1 (PLLDIG_PLLCAL1) */
  86. #define PLLDIG_PLLCAL1(pll) ((MC_CGM0_BASE_ADDR + 0x00000038) + ((pll) * 0x80))
  87. #define PLLDIG_PLLCAL1_NDAC1_SET(val) (PLLDIG_PLLCAL1_NDAC1_MASK & ((val) << PLLDIG_PLLCAL1_NDAC1_OFFSET))
  88. #define PLLDIG_PLLCAL1_NDAC1_OFFSET (24)
  89. #define PLLDIG_PLLCAL1_NDAC1_MASK (0x7F000000)
  90. /* Digital Frequency Synthesizer (DFS) */
  91. /* According to the manual there are 3 DFS modules only for ARM_PLL, DDR_PLL, ENET_PLL */
  92. #define DFS0_BASE_ADDR (MC_CGM0_BASE_ADDR + 0x00000040)
  93. /* DFS DLL Program Register 1 */
  94. #define DFS_DLLPRG1(pll) (DFS0_BASE_ADDR + 0x00000000 + ((pll) * 0x80))
  95. #define DFS_DLLPRG1_V2IGC_SET(val) (DFS_DLLPRG1_V2IGC_MASK & ((val) << DFS_DLLPRG1_V2IGC_OFFSET))
  96. #define DFS_DLLPRG1_V2IGC_OFFSET (0)
  97. #define DFS_DLLPRG1_V2IGC_MASK (0x00000007)
  98. #define DFS_DLLPRG1_LCKWT_SET(val) (DFS_DLLPRG1_LCKWT_MASK & ((val) << DFS_DLLPRG1_LCKWT_OFFSET))
  99. #define DFS_DLLPRG1_LCKWT_OFFSET (4)
  100. #define DFS_DLLPRG1_LCKWT_MASK (0x00000030)
  101. #define DFS_DLLPRG1_DACIN_SET(val) (DFS_DLLPRG1_DACIN_MASK & ((val) << DFS_DLLPRG1_DACIN_OFFSET))
  102. #define DFS_DLLPRG1_DACIN_OFFSET (6)
  103. #define DFS_DLLPRG1_DACIN_MASK (0x000001C0)
  104. #define DFS_DLLPRG1_CALBYPEN_SET(val) (DFS_DLLPRG1_CALBYPEN_MASK & ((val) << DFS_DLLPRG1_CALBYPEN_OFFSET))
  105. #define DFS_DLLPRG1_CALBYPEN_OFFSET (9)
  106. #define DFS_DLLPRG1_CALBYPEN_MASK (0x00000200)
  107. #define DFS_DLLPRG1_VSETTLCTRL_SET(val) (DFS_DLLPRG1_VSETTLCTRL_MASK & ((val) << DFS_DLLPRG1_VSETTLCTRL_OFFSET))
  108. #define DFS_DLLPRG1_VSETTLCTRL_OFFSET (10)
  109. #define DFS_DLLPRG1_VSETTLCTRL_MASK (0x00000C00)
  110. #define DFS_DLLPRG1_CPICTRL_SET(val) (DFS_DLLPRG1_CPICTRL_MASK & ((val) << DFS_DLLPRG1_CPICTRL_OFFSET))
  111. #define DFS_DLLPRG1_CPICTRL_OFFSET (12)
  112. #define DFS_DLLPRG1_CPICTRL_MASK (0x00007000)
  113. /* DFS Control Register (DFS_CTRL) */
  114. #define DFS_CTRL(pll) (DFS0_BASE_ADDR + 0x00000018 + ((pll) * 0x80))
  115. #define DFS_CTRL_DLL_LOLIE (1 << 0)
  116. #define DFS_CTRL_DLL_RESET (1 << 1)
  117. /* DFS Port Status Register (DFS_PORTSR) */
  118. #define DFS_PORTSR(pll) (DFS0_BASE_ADDR + 0x0000000C +((pll) * 0x80))
  119. /* DFS Port Reset Register (DFS_PORTRESET) */
  120. #define DFS_PORTRESET(pll) (DFS0_BASE_ADDR + 0x00000014 + ((pll) * 0x80))
  121. #define DFS_PORTRESET_PORTRESET_SET(val) (DFS_PORTRESET_PORTRESET_MASK | (((val) & DFS_PORTRESET_PORTRESET_MAXVAL) << DFS_PORTRESET_PORTRESET_OFFSET))
  122. #define DFS_PORTRESET_PORTRESET_MAXVAL (0xF)
  123. #define DFS_PORTRESET_PORTRESET_MASK (0x0000000F)
  124. #define DFS_PORTRESET_PORTRESET_OFFSET (0)
  125. /* DFS Divide Register Portn (DFS_DVPORTn) */
  126. #define DFS_DVPORTn(pll,n) (DFS0_BASE_ADDR + ((pll) * 0x80) + (0x0000001C + ((n) * 0x4)))
  127. /*
  128. * The mathematical formula for fdfs_clockout is the following:
  129. * fdfs_clckout = fdfs_clkin / ( DFS_DVPORTn[MFI] + (DFS_DVPORTn[MFN]/256) )
  130. */
  131. #define DFS_DVPORTn_MFI_SET(val) (DFS_DVPORTn_MFI_MASK & (((val) & DFS_DVPORTn_MFI_MAXVAL) << DFS_DVPORTn_MFI_OFFSET) )
  132. #define DFS_DVPORTn_MFN_SET(val) (DFS_DVPORTn_MFN_MASK & (((val) & DFS_DVPORTn_MFN_MAXVAL) << DFS_DVPORTn_MFN_OFFSET) )
  133. #define DFS_DVPORTn_MFI_MASK (0x0000FF00)
  134. #define DFS_DVPORTn_MFN_MASK (0x000000FF)
  135. #define DFS_DVPORTn_MFI_MAXVAL (0xFF)
  136. #define DFS_DVPORTn_MFN_MAXVAL (0xFF)
  137. #define DFS_DVPORTn_MFI_OFFSET (8)
  138. #define DFS_DVPORTn_MFN_OFFSET (0)
  139. #define DFS_MAXNUMBER (4)
  140. #define DFS_PARAMS_Nr (3)
  141. /* Frequencies are in Hz */
  142. #define FIRC_CLK_FREQ (48000000)
  143. #define XOSC_CLK_FREQ (40000000)
  144. #define PLL_MIN_FREQ (650000000)
  145. #define PLL_MAX_FREQ (1300000000)
  146. #define ARM_PLL_PHI0_FREQ (1000000000)
  147. #define ARM_PLL_PHI1_FREQ (1000000000)
  148. /* ARM_PLL_PHI1_DFS1_FREQ - 266 Mhz */
  149. #define ARM_PLL_PHI1_DFS1_EN (1)
  150. #define ARM_PLL_PHI1_DFS1_MFI (3)
  151. #define ARM_PLL_PHI1_DFS1_MFN (194)
  152. /* ARM_PLL_PHI1_DFS2_REQ - 600 Mhz */
  153. #define ARM_PLL_PHI1_DFS2_EN (1)
  154. #define ARM_PLL_PHI1_DFS2_MFI (1)
  155. #define ARM_PLL_PHI1_DFS2_MFN (170)
  156. /* ARM_PLL_PHI1_DFS3_FREQ - 600 Mhz */
  157. #define ARM_PLL_PHI1_DFS3_EN (1)
  158. #define ARM_PLL_PHI1_DFS3_MFI (1)
  159. #define ARM_PLL_PHI1_DFS3_MFN (170)
  160. #define ARM_PLL_PHI1_DFS_Nr (3)
  161. #define ARM_PLL_PLLDV_PREDIV (2)
  162. #define ARM_PLL_PLLDV_MFD (50)
  163. #define ARM_PLL_PLLDV_MFN (0)
  164. #define PERIPH_PLL_PHI0_FREQ (400000000)
  165. #define PERIPH_PLL_PHI1_FREQ (100000000)
  166. #define PERIPH_PLL_PHI1_DFS_Nr (0)
  167. #define PERIPH_PLL_PLLDV_PREDIV (1)
  168. #define PERIPH_PLL_PLLDV_MFD (30)
  169. #define PERIPH_PLL_PLLDV_MFN (0)
  170. #define ENET_PLL_PHI0_FREQ (500000000)
  171. #define ENET_PLL_PHI1_FREQ (1000000000)
  172. /* ENET_PLL_PHI1_DFS1_FREQ - 350 Mhz*/
  173. #define ENET_PLL_PHI1_DFS1_EN (1)
  174. #define ENET_PLL_PHI1_DFS1_MFI (2)
  175. #define ENET_PLL_PHI1_DFS1_MFN (219)
  176. /* ENET_PLL_PHI1_DFS2_FREQ - 350 Mhz*/
  177. #define ENET_PLL_PHI1_DFS2_EN (1)
  178. #define ENET_PLL_PHI1_DFS2_MFI (2)
  179. #define ENET_PLL_PHI1_DFS2_MFN (219)
  180. /* ENET_PLL_PHI1_DFS3_FREQ - 320 Mhz*/
  181. #define ENET_PLL_PHI1_DFS3_EN (1)
  182. #define ENET_PLL_PHI1_DFS3_MFI (3)
  183. #define ENET_PLL_PHI1_DFS3_MFN (32)
  184. /* ENET_PLL_PHI1_DFS1_FREQ - 50 Mhz*/
  185. #define ENET_PLL_PHI1_DFS4_EN (1)
  186. #define ENET_PLL_PHI1_DFS4_MFI (2)
  187. #define ENET_PLL_PHI1_DFS4_MFN (0)
  188. #define ENET_PLL_PHI1_DFS_Nr (4)
  189. #define ENET_PLL_PLLDV_PREDIV (2)
  190. #define ENET_PLL_PLLDV_MFD (50)
  191. #define ENET_PLL_PLLDV_MFN (0)
  192. #define DDR_PLL_PHI0_FREQ (533000000)
  193. #define DDR_PLL_PHI1_FREQ (1066000000)
  194. /* DDR_PLL_PHI1_DFS1_FREQ - 500 Mhz */
  195. #define DDR_PLL_PHI1_DFS1_EN (1)
  196. #define DDR_PLL_PHI1_DFS1_MFI (2)
  197. #define DDR_PLL_PHI1_DFS1_MFN (33)
  198. /* DDR_PLL_PHI1_DFS2_REQ - 500 Mhz */
  199. #define DDR_PLL_PHI1_DFS2_EN (1)
  200. #define DDR_PLL_PHI1_DFS2_MFI (2)
  201. #define DDR_PLL_PHI1_DFS2_MFN (33)
  202. /* DDR_PLL_PHI1_DFS3_FREQ - 350 Mhz */
  203. #define DDR_PLL_PHI1_DFS3_EN (1)
  204. #define DDR_PLL_PHI1_DFS3_MFI (3)
  205. #define DDR_PLL_PHI1_DFS3_MFN (11)
  206. #define DDR_PLL_PHI1_DFS_Nr (3)
  207. #define DDR_PLL_PLLDV_PREDIV (2)
  208. #define DDR_PLL_PLLDV_MFD (53)
  209. #define DDR_PLL_PLLDV_MFN (6144)
  210. #define VIDEO_PLL_PHI0_FREQ (600000000)
  211. #define VIDEO_PLL_PHI1_FREQ (0)
  212. #define VIDEO_PLL_PHI1_DFS_Nr (0)
  213. #define VIDEO_PLL_PLLDV_PREDIV (1)
  214. #define VIDEO_PLL_PLLDV_MFD (30)
  215. #define VIDEO_PLL_PLLDV_MFN (0)
  216. #endif
  217. #endif /*__ARCH_ARM_MACH_S32V234_MCCGM_REGS_H__ */