lowlevel_init.S 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * (C) Copyright 2008
  3. * Mark Jonas <mark.jonas@de.bosch.com>
  4. *
  5. * (C) Copyright 2007
  6. * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
  7. *
  8. * board/mpr2/lowlevel_init.S
  9. *
  10. * SPDX-License-Identifier: GPL-2.0+
  11. */
  12. #include <asm/macro.h>
  13. .global lowlevel_init
  14. .text
  15. .align 2
  16. lowlevel_init:
  17. /*
  18. * Set frequency multipliers and dividers in FRQCR.
  19. */
  20. write16 WTCSR_A, WTCSR_D
  21. write16 WTCNT_A, WTCNT_D
  22. write16 FRQCR_A, FRQCR_D
  23. /*
  24. * Setup CS0 (Flash).
  25. */
  26. write32 CS0BCR_A, CS0BCR_D
  27. write32 CS0WCR_A, CS0WCR_D
  28. /*
  29. * Setup CS3 (SDRAM).
  30. */
  31. write32 CS3BCR_A, CS3BCR_D
  32. write32 CS3WCR_A, CS3WCR_D
  33. write32 SDCR_A, SDCR_D1
  34. write32 RTCSR_A, RTCSR_D
  35. write32 RTCNT_A, RTCNT_D
  36. write32 RTCOR_A, RTCOR_D
  37. write32 SDCR_A, SDCR_D2
  38. mov.l SDMR3_A, r1
  39. mov.l SDMR3_D, r0
  40. add r0, r1
  41. mov #0, r0
  42. mov.w r0, @r1
  43. rts
  44. nop
  45. .align 4
  46. /*
  47. * Configuration for MPR2 A.3 through A.7
  48. */
  49. /*
  50. * PLL Settings
  51. */
  52. FRQCR_D: .word 0x1103 /* I:B:P=8:4:2 */
  53. WTCNT_D: .word 0x5A00 /* start counting at zero */
  54. WTCSR_D: .word 0xA507 /* divide by 4096 */
  55. .align 2
  56. /*
  57. * Spansion S29GL256N11 @ 48 MHz
  58. */
  59. /* 1 idle cycle inserted, normal space, 16 bit */
  60. CS0BCR_D: .long 0x12490400
  61. /* tSW=0.5ck, 6 wait cycles, NO external wait, tHW=0.5ck */
  62. CS0WCR_D: .long 0x00000340
  63. /*
  64. * Samsung K4S511632B-UL75 @ 48 MHz
  65. * Micron MT48LC32M16A2-75 @ 48 MHz
  66. */
  67. /* CS3BCR = 0x10004400, minimum idle cycles, SDRAM, 16 bit */
  68. CS3BCR_D: .long 0x10004400
  69. /* tRP=1ck, tRCD=1ck, CL=2, tRWL=2ck, tRC=4ck */
  70. CS3WCR_D: .long 0x00000091
  71. /* no refresh, 13 rows, 10 cols, NO bank active mode */
  72. SDCR_D1: .long 0x00000012
  73. SDCR_D2: .long 0x00000812 /* refresh */
  74. RTCSR_D: .long 0xA55A0008 /* 1/4, once */
  75. RTCNT_D: .long 0xA55A005D /* count 93 */
  76. RTCOR_D: .long 0xa55a005d /* count 93 */
  77. /* mode register CL2, burst read and SINGLE WRITE */
  78. SDMR3_D: .long 0x440
  79. /*
  80. * Registers
  81. */
  82. FRQCR_A: .long 0xA415FF80
  83. WTCNT_A: .long 0xA415FF84
  84. WTCSR_A: .long 0xA415FF86
  85. #define BSC_BASE 0xA4FD0000
  86. CS0BCR_A: .long BSC_BASE + 0x04
  87. CS3BCR_A: .long BSC_BASE + 0x0C
  88. CS0WCR_A: .long BSC_BASE + 0x24
  89. CS3WCR_A: .long BSC_BASE + 0x2C
  90. SDCR_A: .long BSC_BASE + 0x44
  91. RTCSR_A: .long BSC_BASE + 0x48
  92. RTCNT_A: .long BSC_BASE + 0x4C
  93. RTCOR_A: .long BSC_BASE + 0x50
  94. SDMR3_A: .long BSC_BASE + 0x5000