mpc85xx.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /*-
  2. * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
  3. *
  4. * Copyright (C) 2008 Semihalf, Rafal Jaworowski
  5. * Copyright 2006 by Juniper Networks.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. *
  17. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  18. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20. * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
  21. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27. * SUCH DAMAGE.
  28. *
  29. * $FreeBSD$
  30. */
  31. #ifndef _MPC85XX_H_
  32. #define _MPC85XX_H_
  33. #include <machine/platformvar.h>
  34. /*
  35. * Configuration control and status registers
  36. */
  37. extern vm_offset_t ccsrbar_va;
  38. extern vm_paddr_t ccsrbar_pa;
  39. extern vm_size_t ccsrbar_size;
  40. #define CCSRBAR_VA ccsrbar_va
  41. #define OCP85XX_CCSRBAR (CCSRBAR_VA + 0x0)
  42. #define OCP85XX_BPTR (CCSRBAR_VA + 0x20)
  43. #define OCP85XX_BSTRH (CCSRBAR_VA + 0x20)
  44. #define OCP85XX_BSTRL (CCSRBAR_VA + 0x24)
  45. #define OCP85XX_BSTAR (CCSRBAR_VA + 0x28)
  46. #define OCP85XX_COREDISR (CCSRBAR_VA + 0xE0094)
  47. #define OCP85XX_BRR (CCSRBAR_VA + 0xE00E4)
  48. /*
  49. * Run Control and Power Management registers
  50. */
  51. #define CCSR_CTBENR (CCSRBAR_VA + 0xE2084)
  52. #define CCSR_CTBCKSELR (CCSRBAR_VA + 0xE208C)
  53. #define CCSR_CTBCHLTCR (CCSRBAR_VA + 0xE2094)
  54. /*
  55. * DDR Memory controller.
  56. */
  57. #define OCP85XX_DDR1_CS0_CONFIG (CCSRBAR_VA + 0x8080)
  58. /*
  59. * E500 Coherency Module registers
  60. */
  61. #define OCP85XX_EEBPCR (CCSRBAR_VA + 0x1010)
  62. /*
  63. * Local access registers
  64. */
  65. /* Write order: OCP_LAWBARH -> OCP_LAWBARL -> OCP_LAWSR */
  66. #define OCP85XX_LAWBARH(n) (CCSRBAR_VA + 0xc00 + 0x10 * (n))
  67. #define OCP85XX_LAWBARL(n) (CCSRBAR_VA + 0xc04 + 0x10 * (n))
  68. #define OCP85XX_LAWSR_QORIQ(n) (CCSRBAR_VA + 0xc08 + 0x10 * (n))
  69. #define OCP85XX_LAWBAR(n) (CCSRBAR_VA + 0xc08 + 0x10 * (n))
  70. #define OCP85XX_LAWSR_85XX(n) (CCSRBAR_VA + 0xc10 + 0x10 * (n))
  71. #define OCP85XX_LAWSR(n) (mpc85xx_is_qoriq() ? OCP85XX_LAWSR_QORIQ(n) : \
  72. OCP85XX_LAWSR_85XX(n))
  73. /* Attribute register */
  74. #define OCP85XX_ENA_MASK 0x80000000
  75. #define OCP85XX_DIS_MASK 0x7fffffff
  76. #define OCP85XX_TGTIF_LBC_QORIQ 0x1f
  77. #define OCP85XX_TGTIF_RAM_INTL_QORIQ 0x14
  78. #define OCP85XX_TGTIF_RAM1_QORIQ 0x10
  79. #define OCP85XX_TGTIF_RAM2_QORIQ 0x11
  80. #define OCP85XX_TGTIF_BMAN 0x18
  81. #define OCP85XX_TGTIF_DCSR 0x1D
  82. #define OCP85XX_TGTIF_QMAN 0x3C
  83. #define OCP85XX_TRGT_SHIFT_QORIQ 20
  84. #define OCP85XX_TGTIF_LBC_85XX 0x04
  85. #define OCP85XX_TGTIF_RAM_INTL_85XX 0x0b
  86. #define OCP85XX_TGTIF_RIO_85XX 0x0c
  87. #define OCP85XX_TGTIF_RAM1_85XX 0x0f
  88. #define OCP85XX_TGTIF_RAM2_85XX 0x16
  89. #define OCP85XX_TGTIF_LBC \
  90. (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_LBC_QORIQ : OCP85XX_TGTIF_LBC_85XX)
  91. #define OCP85XX_TGTIF_RAM_INTL \
  92. (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM_INTL_QORIQ : OCP85XX_TGTIF_RAM_INTL_85XX)
  93. #define OCP85XX_TGTIF_RIO \
  94. (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RIO_QORIQ : OCP85XX_TGTIF_RIO_85XX)
  95. #define OCP85XX_TGTIF_RAM1 \
  96. (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM1_QORIQ : OCP85XX_TGTIF_RAM1_85XX)
  97. #define OCP85XX_TGTIF_RAM2 \
  98. (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM2_QORIQ : OCP85XX_TGTIF_RAM2_85XX)
  99. /*
  100. * L2 cache registers
  101. */
  102. #define OCP85XX_L2CTL (CCSRBAR_VA + 0x20000)
  103. /*
  104. * L3 CoreNet platform cache (CPC) registers
  105. */
  106. #define OCP85XX_CPC_CSR0 (CCSRBAR_VA + 0x10000)
  107. #define OCP85XX_CPC_CSR0_CE 0x80000000
  108. #define OCP85XX_CPC_CSR0_PE 0x40000000
  109. #define OCP85XX_CPC_CSR0_FI 0x00200000
  110. #define OCP85XX_CPC_CSR0_WT 0x00080000
  111. #define OCP85XX_CPC_CSR0_FL 0x00000800
  112. #define OCP85XX_CPC_CSR0_LFC 0x00000400
  113. #define OCP85XX_CPC_CFG0 (CCSRBAR_VA + 0x10008)
  114. #define OCP85XX_CPC_CFG_SZ_MASK 0x00003fff
  115. #define OCP85XX_CPC_CFG0_SZ_K(x) (((x) & OCP85XX_CPC_CFG_SZ_MASK) << 6)
  116. /*
  117. * Power-On Reset configuration
  118. */
  119. #define OCP85XX_PORDEVSR (CCSRBAR_VA + 0xe000c)
  120. #define OCP85XX_PORDEVSR_IO_SEL 0x00780000
  121. #define OCP85XX_PORDEVSR_IO_SEL_SHIFT 19
  122. #define OCP85XX_PORDEVSR2 (CCSRBAR_VA + 0xe0014)
  123. /*
  124. * Status Registers.
  125. */
  126. #define OCP85XX_RSTCR (CCSRBAR_VA + 0xe00b0)
  127. #define OCP85XX_CLKDVDR (CCSRBAR_VA + 0xe0800)
  128. #define OCP85XX_CLKDVDR_PXCKEN 0x80000000
  129. #define OCP85XX_CLKDVDR_SSICKEN 0x20000000
  130. #define OCP85XX_CLKDVDR_PXCKINV 0x10000000
  131. #define OCP85XX_CLKDVDR_PXCLK_MASK 0x00FF0000
  132. #define OCP85XX_CLKDVDR_SSICLK_MASK 0x000000FF
  133. /*
  134. * Run Control/Power Management Registers.
  135. */
  136. #define OCP85XX_RCPM_CDOZSR (CCSRBAR_VA + 0xe2004)
  137. #define OCP85XX_RCPM_CDOZCR (CCSRBAR_VA + 0xe200c)
  138. /*
  139. * Prototypes.
  140. */
  141. uint32_t ccsr_read4(uintptr_t addr);
  142. void ccsr_write4(uintptr_t addr, uint32_t val);
  143. int law_enable(int trgt, uint64_t bar, uint32_t size);
  144. int law_disable(int trgt, uint64_t bar, uint32_t size);
  145. int law_getmax(void);
  146. int law_pci_target(struct resource *, int *, int *);
  147. DECLARE_CLASS(mpc85xx_platform);
  148. int mpc85xx_attach(platform_t);
  149. void mpc85xx_enable_l3_cache(void);
  150. int mpc85xx_is_qoriq(void);
  151. uint32_t mpc85xx_get_platform_clock(void);
  152. uint32_t mpc85xx_get_system_clock(void);
  153. #endif /* _MPC85XX_H_ */