lowlevel_init.S 1000 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * WORK Microwave work_92105 board low level init
  3. *
  4. * (C) Copyright 2014 DENX Software Engineering GmbH
  5. * Written-by: Albert ARIBAUD <albert.aribaud@3adev.fr>
  6. *
  7. * Low level init is called from SPL to set up the clocks.
  8. * On entry, the LPC3250 is in Direct Run mode with all clocks
  9. * running at 13 MHz; on exit, ARM clock is 208 MHz, HCLK is
  10. * 104 MHz and PCLK is 13 MHz.
  11. *
  12. * This code must run from SRAM so that the clock changes do
  13. * not prevent it from executing.
  14. *
  15. * SPDX-License-Identifier: GPL-2.0+
  16. */
  17. .globl lowlevel_init
  18. lowlevel_init:
  19. /* Set ARM, HCLK, PCLK dividers for normal mode */
  20. ldr r0, =0x0000003D
  21. ldr r1, =0x40004040
  22. str r0, [r1]
  23. /* Start HCLK PLL for 208 MHz */
  24. ldr r0, =0x0001401E
  25. ldr r1, =0x40004058
  26. str r0, [r1]
  27. /* wait for HCLK PLL to lock */
  28. 1:
  29. ldr r0, [r1]
  30. ands r0, r0, #1
  31. beq 1b
  32. /* switch to normal mode */
  33. ldr r1, =0x40004044
  34. ldr r0, [r1]
  35. orr r0, #0x00000004
  36. str r0, [r1]
  37. /* Return to U-Boot via saved link register */
  38. mov pc, lr