init.S 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*
  2. * Copyright 2004 Freescale Semiconductor.
  3. * Copyright (C) 2002,2003, Motorola Inc.
  4. * Xianghua Xiao <X.Xiao@motorola.com>
  5. *
  6. * See file CREDITS for list of people who contributed to this
  7. * project.
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License as
  11. * published by the Free Software Foundation; either version 2 of
  12. * the License, or (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  22. * MA 02111-1307 USA
  23. */
  24. #include <ppc_asm.tmpl>
  25. #include <ppc_defs.h>
  26. #include <asm/cache.h>
  27. #include <asm/mmu.h>
  28. #include <config.h>
  29. #include <mpc85xx.h>
  30. #define entry_start \
  31. mflr r1 ; \
  32. bl 0f ;
  33. #define entry_end \
  34. 0: mflr r0 ; \
  35. mtlr r1 ; \
  36. blr ;
  37. /* TLB1 entries configuration: */
  38. .section .bootpg, "ax"
  39. .globl tlb1_entry
  40. tlb1_entry:
  41. entry_start
  42. /* Number of entries in the following table */
  43. .long 0x0c
  44. .long TLB1_MAS0(1,1,0)
  45. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
  46. .long TLB1_MAS2(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  47. .long TLB1_MAS3(((CFG_CCSRBAR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  48. #if defined(CFG_FLASH_PORT_WIDTH_16)
  49. .long TLB1_MAS0(1,2,0)
  50. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
  51. .long TLB1_MAS2(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  52. .long TLB1_MAS3(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  53. .long TLB1_MAS0(1,3,0)
  54. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
  55. .long TLB1_MAS2((((CFG_FLASH_BASE+0x400000)>>12)&0xfffff),0,0,0,0,1,0,1,0)
  56. .long TLB1_MAS3((((CFG_FLASH_BASE+0x400000)>>12)&0xfffff),0,0,0,0,0,1,0,1,0,1)
  57. #else
  58. .long TLB1_MAS0(1,2,0)
  59. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16M)
  60. .long TLB1_MAS2(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  61. .long TLB1_MAS3(((CFG_FLASH_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  62. .long TLB1_MAS0(1,3,0)
  63. .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
  64. .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
  65. .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
  66. #endif
  67. #if !defined(CONFIG_SPD_EEPROM)
  68. .long TLB1_MAS0(1,4,0)
  69. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
  70. .long TLB1_MAS2(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,0,0,0)
  71. .long TLB1_MAS3(((CFG_DDR_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  72. .long TLB1_MAS0(1,5,0)
  73. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
  74. .long TLB1_MAS2((((CFG_DDR_SDRAM_BASE+0x4000000)>>12) & 0xfffff),0,0,0,0,0,0,0,0)
  75. .long TLB1_MAS3((((CFG_DDR_SDRAM_BASE+0x4000000)>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  76. #else
  77. .long TLB1_MAS0(1,4,0)
  78. .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
  79. .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
  80. .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
  81. .long TLB1_MAS0(1,5,0)
  82. .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
  83. .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
  84. .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
  85. #endif
  86. .long TLB1_MAS0(1,6,0)
  87. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
  88. #if defined(CONFIG_RAM_AS_FLASH)
  89. .long TLB1_MAS2(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  90. #else
  91. .long TLB1_MAS2(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,0,0,0)
  92. #endif
  93. .long TLB1_MAS3(((CFG_LBC_SDRAM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  94. .long TLB1_MAS0(1,7,0)
  95. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
  96. #ifdef CONFIG_L2_INIT_RAM
  97. .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,1,0,0,0,0)
  98. #else
  99. .long TLB1_MAS2(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,0,0,0)
  100. #endif
  101. .long TLB1_MAS3(((CFG_INIT_RAM_ADDR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  102. .long TLB1_MAS0(1,8,0)
  103. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
  104. .long TLB1_MAS2(((CFG_PCI1_MEM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  105. .long TLB1_MAS3(((CFG_PCI1_MEM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  106. .long TLB1_MAS0(1,9,0)
  107. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
  108. .long TLB1_MAS2(((CFG_BCSR>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  109. .long TLB1_MAS3(((CFG_BCSR>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  110. /*
  111. * RapidIO MMU for 512M
  112. * Two entries, 10 and 11
  113. */
  114. .long TLB1_MAS0(1,10,0)
  115. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
  116. .long TLB1_MAS2(((CFG_RIO_MEM_BASE>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  117. .long TLB1_MAS3(((CFG_RIO_MEM_BASE>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  118. .long TLB1_MAS0(1,11,0)
  119. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
  120. .long TLB1_MAS2(((CFG_RIO_MEM_BASE+0x10000000>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  121. .long TLB1_MAS3(((CFG_RIO_MEM_BASE+0x10000000>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  122. #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
  123. .long TLB1_MAS0(1,15,0)
  124. .long TLB1_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
  125. .long TLB1_MAS2(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,1,0,1,0)
  126. .long TLB1_MAS3(((CFG_CCSRBAR_DEFAULT>>12) & 0xfffff),0,0,0,0,0,1,0,1,0,1)
  127. #else
  128. .long TLB1_MAS0(1,15,0)
  129. .long TLB1_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
  130. .long TLB1_MAS2(0,0,0,0,0,0,0,0,0)
  131. .long TLB1_MAS3(0,0,0,0,0,0,1,0,1,0,1)
  132. #endif
  133. entry_end
  134. /*
  135. * LAW(Local Access Window) configuration:
  136. *
  137. * 0x0000_0000 0x7fff_ffff DDR 2G
  138. * 0x8000_0000 0x9fff_ffff PCI1 MEM 512M
  139. * 0xc000_0000 0xdfff_ffff RapidIO 512M
  140. * 0xe000_0000 0xe000_ffff CCSR 1M
  141. * 0xe200_0000 0xe2ff_ffff PCI1 IO 16M
  142. * 0xf000_0000 0xf7ff_ffff SDRAM 128M
  143. * 0xf800_0000 0xf80f_ffff BCSR 1M
  144. * 0xff00_0000 0xffff_ffff FLASH (boot bank) 16M
  145. *
  146. * Notes:
  147. * CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
  148. * If flash is 8M at default position (last 8M), no LAW needed.
  149. */
  150. #if !defined(CONFIG_SPD_EEPROM)
  151. #define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
  152. #define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
  153. #else
  154. #define LAWBAR0 0
  155. #define LAWAR0 ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
  156. #endif
  157. #define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
  158. #define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
  159. /*
  160. * This is not so much the SDRAM map as it is the whole localbus map.
  161. */
  162. #if !defined(CONFIG_RAM_AS_FLASH)
  163. #define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
  164. #define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
  165. #else
  166. #define LAWBAR2 0
  167. #define LAWAR2 ((LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
  168. #endif
  169. #define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
  170. #define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
  171. /*
  172. * Rapid IO at 0xc000_0000 for 512 M
  173. */
  174. #define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
  175. #define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
  176. .section .bootpg, "ax"
  177. .globl law_entry
  178. law_entry:
  179. entry_start
  180. .long 0x05
  181. .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
  182. .long LAWBAR4,LAWAR4
  183. entry_end