init.S 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*------------------------------------------------------------------------+ */
  2. /* */
  3. /* This source code is dual-licensed. You may use it under the terms */
  4. /* of the GNU General Public License version 2, or under the license */
  5. /* below. */
  6. /* */
  7. /* This source code has been made available to you by IBM on an AS-IS */
  8. /* basis. Anyone receiving this source is licensed under IBM */
  9. /* copyrights to use it in any way he or she deems fit, including */
  10. /* copying it, modifying it, compiling it, and redistributing it either */
  11. /* with or without modifications. No license under IBM patents or */
  12. /* patent applications is to be implied by the copyright license. */
  13. /* */
  14. /* Any user of this software should understand that IBM cannot provide */
  15. /* technical support for this software and will not be responsible for */
  16. /* any consequences resulting from the use of this software. */
  17. /* */
  18. /* Any person who transfers this source code or any derivative work */
  19. /* must include the IBM copyright notice, this paragraph, and the */
  20. /* preceding two paragraphs in the transferred software. */
  21. /* */
  22. /* COPYRIGHT I B M CORPORATION 1995 */
  23. /* LICENSED MATERIAL - PROGRAM PROPERTY OF I B M */
  24. /*------------------------------------------------------------------------- */
  25. /*------------------------------------------------------------------------- */
  26. /* Function: ext_bus_cntlr_init */
  27. /* Description: Initializes the External Bus Controller for the external */
  28. /* peripherals. IMPORTANT: For pass1 this code must run from */
  29. /* cache since you can not reliably change a peripheral banks */
  30. /* timing register (pbxap) while running code from that bank. */
  31. /* For ex., since we are running from ROM on bank 0, we can NOT */
  32. /* execute the code that modifies bank 0 timings from ROM, so */
  33. /* we run it from cache. */
  34. /* */
  35. /* */
  36. /* The layout for the PEI JSE board: */
  37. /* Bank 0 - Flash and SRAM */
  38. /* Bank 1 - SystemACE */
  39. /* Bank 2 - not used */
  40. /* Bank 3 - not used */
  41. /* Bank 4 - not used */
  42. /* Bank 5 - not used */
  43. /* Bank 6 - not used */
  44. /* Bank 7 - not used */
  45. /*------------------------------------------------------------------------- */
  46. #include <asm/ppc4xx.h>
  47. #include <ppc_asm.tmpl>
  48. #include <ppc_defs.h>
  49. #include <asm/cache.h>
  50. #include <asm/mmu.h>
  51. .globl ext_bus_cntlr_init
  52. ext_bus_cntlr_init:
  53. mflr r4 /* save link register */
  54. bl ..getAddr
  55. ..getAddr:
  56. mflr r3 /* get address of ..getAddr */
  57. mtlr r4 /* restore link register */
  58. addi r4,0,14 /* set ctr to 10; used to prefetch */
  59. mtctr r4 /* 10 cache lines to fit this function */
  60. /* in cache (gives us 8x10=80 instrctns) */
  61. ..ebcloop:
  62. icbt r0,r3 /* prefetch cache line for addr in r3 */
  63. addi r3,r3,32 /* move to next cache line */
  64. bdnz ..ebcloop /* continue for 10 cache lines */
  65. /*----------------------------------------------------------------- */
  66. /* Delay to ensure all accesses to ROM are complete before changing */
  67. /* bank 0 timings. 200usec should be enough. */
  68. /* 200,000,000 (cycles/sec) X .000200 (sec) = 0x9C40 cycles */
  69. /*----------------------------------------------------------------- */
  70. addis r3,0,0x0
  71. ori r3,r3,0xA000 /* ensure 200usec have passed since reset */
  72. mtctr r3
  73. ..spinlp:
  74. bdnz ..spinlp /* spin loop */
  75. /*----------------------------------------------------------------- */
  76. /* Memory Bank 0 (Flash) initialization */
  77. /*----------------------------------------------------------------- */
  78. addi r4,0,PB1AP
  79. mtdcr EBC0_CFGADDR,r4
  80. addis r4,0,0x9B01
  81. ori r4,r4,0x5480
  82. mtdcr EBC0_CFGDATA,r4
  83. addi r4,0,PB0CR
  84. mtdcr EBC0_CFGADDR,r4
  85. addis r4,0,0xFFF1 /* BAS=0xFFF,BS=0x0(1MB),BU=0x3(R/W), */
  86. ori r4,r4,0x8000 /* BW=0x0( 8 bits) */
  87. mtdcr EBC0_CFGDATA,r4
  88. blr