lowlevel_init.S 1000 B

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