bat_rw.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. /*
  2. * (C) Copyright 2002
  3. * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
  4. *
  5. * See file CREDITS for list of people who contributed to this
  6. * project.
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation; either version 2 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21. * MA 02111-1307 USA
  22. *
  23. */
  24. #include <common.h>
  25. #include <asm/processor.h>
  26. #include <asm/mmu.h>
  27. #include <asm/io.h>
  28. int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)
  29. {
  30. sync();
  31. switch (bat) {
  32. case DBAT0:
  33. mtspr (DBAT0L, lower);
  34. mtspr (DBAT0U, upper);
  35. break;
  36. case IBAT0:
  37. mtspr (IBAT0L, lower);
  38. mtspr (IBAT0U, upper);
  39. break;
  40. case DBAT1:
  41. mtspr (DBAT1L, lower);
  42. mtspr (DBAT1U, upper);
  43. break;
  44. case IBAT1:
  45. mtspr (IBAT1L, lower);
  46. mtspr (IBAT1U, upper);
  47. break;
  48. case DBAT2:
  49. mtspr (DBAT2L, lower);
  50. mtspr (DBAT2U, upper);
  51. break;
  52. case IBAT2:
  53. mtspr (IBAT2L, lower);
  54. mtspr (IBAT2U, upper);
  55. break;
  56. case DBAT3:
  57. mtspr (DBAT3L, lower);
  58. mtspr (DBAT3U, upper);
  59. break;
  60. case IBAT3:
  61. mtspr (IBAT3L, lower);
  62. mtspr (IBAT3U, upper);
  63. break;
  64. #ifdef CONFIG_HIGH_BATS
  65. case DBAT4:
  66. mtspr (DBAT4L, lower);
  67. mtspr (DBAT4U, upper);
  68. break;
  69. case IBAT4:
  70. mtspr (IBAT4L, lower);
  71. mtspr (IBAT4U, upper);
  72. break;
  73. case DBAT5:
  74. mtspr (DBAT5L, lower);
  75. mtspr (DBAT5U, upper);
  76. break;
  77. case IBAT5:
  78. mtspr (IBAT5L, lower);
  79. mtspr (IBAT5U, upper);
  80. break;
  81. case DBAT6:
  82. mtspr (DBAT6L, lower);
  83. mtspr (DBAT6U, upper);
  84. break;
  85. case IBAT6:
  86. mtspr (IBAT6L, lower);
  87. mtspr (IBAT6U, upper);
  88. break;
  89. case DBAT7:
  90. mtspr (DBAT7L, lower);
  91. mtspr (DBAT7U, upper);
  92. break;
  93. case IBAT7:
  94. mtspr (IBAT7L, lower);
  95. mtspr (IBAT7U, upper);
  96. break;
  97. #endif
  98. default:
  99. return (-1);
  100. }
  101. sync();
  102. isync();
  103. return (0);
  104. }
  105. int read_bat (ppc_bat_t bat, unsigned long *upper, unsigned long *lower)
  106. {
  107. unsigned long register u;
  108. unsigned long register l;
  109. switch (bat) {
  110. case DBAT0:
  111. l = mfspr (DBAT0L);
  112. u = mfspr (DBAT0U);
  113. break;
  114. case IBAT0:
  115. l = mfspr (IBAT0L);
  116. u = mfspr (IBAT0U);
  117. break;
  118. case DBAT1:
  119. l = mfspr (DBAT1L);
  120. u = mfspr (DBAT1U);
  121. break;
  122. case IBAT1:
  123. l = mfspr (IBAT1L);
  124. u = mfspr (IBAT1U);
  125. break;
  126. case DBAT2:
  127. l = mfspr (DBAT2L);
  128. u = mfspr (DBAT2U);
  129. break;
  130. case IBAT2:
  131. l = mfspr (IBAT2L);
  132. u = mfspr (IBAT2U);
  133. break;
  134. case DBAT3:
  135. l = mfspr (DBAT3L);
  136. u = mfspr (DBAT3U);
  137. break;
  138. case IBAT3:
  139. l = mfspr (IBAT3L);
  140. u = mfspr (IBAT3U);
  141. break;
  142. #ifdef CONFIG_HIGH_BATS
  143. case DBAT4:
  144. l = mfspr (DBAT4L);
  145. u = mfspr (DBAT4U);
  146. break;
  147. case IBAT4:
  148. l = mfspr (IBAT4L);
  149. u = mfspr (IBAT4U);
  150. break;
  151. case DBAT5:
  152. l = mfspr (DBAT5L);
  153. u = mfspr (DBAT5U);
  154. break;
  155. case IBAT5:
  156. l = mfspr (IBAT5L);
  157. u = mfspr (IBAT5U);
  158. break;
  159. case DBAT6:
  160. l = mfspr (DBAT6L);
  161. u = mfspr (DBAT6U);
  162. break;
  163. case IBAT6:
  164. l = mfspr (IBAT6L);
  165. u = mfspr (IBAT6U);
  166. break;
  167. case DBAT7:
  168. l = mfspr (DBAT7L);
  169. u = mfspr (DBAT7U);
  170. break;
  171. case IBAT7:
  172. l = mfspr (IBAT7L);
  173. u = mfspr (IBAT7U);
  174. break;
  175. #endif
  176. default:
  177. return (-1);
  178. }
  179. *upper = u;
  180. *lower = l;
  181. return (0);
  182. }
  183. void print_bats(void)
  184. {
  185. printf("BAT registers:\n");
  186. printf ("\tIBAT0L = 0x%08X ", mfspr (IBAT0L));
  187. printf ("\tIBAT0U = 0x%08X\n", mfspr (IBAT0U));
  188. printf ("\tDBAT0L = 0x%08X ", mfspr (DBAT0L));
  189. printf ("\tDBAT0U = 0x%08X\n", mfspr (DBAT0U));
  190. printf ("\tIBAT1L = 0x%08X ", mfspr (IBAT1L));
  191. printf ("\tIBAT1U = 0x%08X\n", mfspr (IBAT1U));
  192. printf ("\tDBAT1L = 0x%08X ", mfspr (DBAT1L));
  193. printf ("\tDBAT1U = 0x%08X\n", mfspr (DBAT1U));
  194. printf ("\tIBAT2L = 0x%08X ", mfspr (IBAT2L));
  195. printf ("\tIBAT2U = 0x%08X\n", mfspr (IBAT2U));
  196. printf ("\tDBAT2L = 0x%08X ", mfspr (DBAT2L));
  197. printf ("\tDBAT2U = 0x%08X\n", mfspr (DBAT2U));
  198. printf ("\tIBAT3L = 0x%08X ", mfspr (IBAT3L));
  199. printf ("\tIBAT3U = 0x%08X\n", mfspr (IBAT3U));
  200. printf ("\tDBAT3L = 0x%08X ", mfspr (DBAT3L));
  201. printf ("\tDBAT3U = 0x%08X\n", mfspr (DBAT3U));
  202. #ifdef CONFIG_HIGH_BATS
  203. printf ("\tIBAT4L = 0x%08X ", mfspr (IBAT4L));
  204. printf ("\tIBAT4U = 0x%08X\n", mfspr (IBAT4U));
  205. printf ("\tDBAT4L = 0x%08X ", mfspr (DBAT4L));
  206. printf ("\tDBAT4U = 0x%08X\n", mfspr (DBAT4U));
  207. printf ("\tIBAT5L = 0x%08X ", mfspr (IBAT5L));
  208. printf ("\tIBAT5U = 0x%08X\n", mfspr (IBAT5U));
  209. printf ("\tDBAT5L = 0x%08X ", mfspr (DBAT5L));
  210. printf ("\tDBAT5U = 0x%08X\n", mfspr (DBAT5U));
  211. printf ("\tIBAT6L = 0x%08X ", mfspr (IBAT6L));
  212. printf ("\tIBAT6U = 0x%08X\n", mfspr (IBAT6U));
  213. printf ("\tDBAT6L = 0x%08X ", mfspr (DBAT6L));
  214. printf ("\tDBAT6U = 0x%08X\n", mfspr (DBAT6U));
  215. printf ("\tIBAT7L = 0x%08X ", mfspr (IBAT7L));
  216. printf ("\tIBAT7U = 0x%08X\n", mfspr (IBAT7U));
  217. printf ("\tDBAT7L = 0x%08X ", mfspr (DBAT7L));
  218. printf ("\tDBAT7U = 0x%08X\n", mfspr (DBAT7U));
  219. #endif
  220. }