start.S 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * armboot - Startup Code for ARM926EJS CPU-core
  4. *
  5. * Copyright (c) 2003 Texas Instruments
  6. *
  7. * ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------
  8. *
  9. * Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
  10. * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
  11. * Copyright (c) 2002 Gary Jennejohn <garyj@denx.de>
  12. * Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com>
  13. * Copyright (c) 2003 Kshitij <kshitij@ti.com>
  14. */
  15. #include <config.h>
  16. /*
  17. *************************************************************************
  18. *
  19. * Startup Code (reset vector)
  20. *
  21. * Below are the critical initializations already taken place in BootROM.
  22. * So, these are not taken care in Xloader
  23. * 1. Relocation to RAM
  24. * 2. Initializing stacks
  25. *
  26. *************************************************************************
  27. */
  28. .globl reset
  29. reset:
  30. /*
  31. * Xloader has to return back to BootROM in a few cases.
  32. * eg. Ethernet boot, UART boot, USB boot
  33. * Saving registers for returning back
  34. */
  35. stmdb sp!, {r0-r12,r14}
  36. bl cpu_init_crit
  37. /*
  38. * Clearing bss area is not done in Xloader.
  39. * BSS area lies in the DDR location which is not yet initialized
  40. * bss is assumed to be uninitialized.
  41. */
  42. ldmia sp!, {r0-r12,pc}
  43. /*
  44. *************************************************************************
  45. *
  46. * CPU_init_critical registers
  47. *
  48. * setup important registers
  49. * setup memory timing
  50. *
  51. *************************************************************************
  52. */
  53. cpu_init_crit:
  54. /*
  55. * flush v4 I/D caches
  56. */
  57. mov r0, #0
  58. mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
  59. mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
  60. /*
  61. * enable instruction cache
  62. */
  63. mrc p15, 0, r0, c1, c0, 0
  64. orr r0, r0, #0x00001000 /* set bit 12 (I) I-Cache */
  65. mcr p15, 0, r0, c1, c0, 0
  66. /*
  67. * Go setup Memory and board specific bits prior to relocation.
  68. */
  69. stmdb sp!, {lr}
  70. bl _main /* _main will call board_init_f */
  71. ldmia sp!, {pc}