timer.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2007
  4. * Sascha Hauer, Pengutronix
  5. */
  6. #include <common.h>
  7. #include <init.h>
  8. #include <asm/arch/imx-regs.h>
  9. #include <asm/io.h>
  10. #define TIMER_BASE 0x53f90000 /* General purpose timer 1 */
  11. /* General purpose timers registers */
  12. #define GPTCR __REG(TIMER_BASE) /* Control register */
  13. #define GPTPR __REG(TIMER_BASE + 0x4) /* Prescaler register */
  14. #define GPTSR __REG(TIMER_BASE + 0x8) /* Status register */
  15. #define GPTCNT __REG(TIMER_BASE + 0x24) /* Counter register */
  16. /* General purpose timers bitfields */
  17. #define GPTCR_SWR (1 << 15) /* Software reset */
  18. #define GPTCR_FRR (1 << 9) /* Freerun / restart */
  19. #define GPTCR_CLKSOURCE_32 (4 << 6) /* Clock source */
  20. #define GPTCR_TEN 1 /* Timer enable */
  21. /* The 32768Hz 32-bit timer overruns in 131072 seconds */
  22. int timer_init(void)
  23. {
  24. int i;
  25. /* setup GP Timer 1 */
  26. GPTCR = GPTCR_SWR;
  27. for (i = 0; i < 100; i++)
  28. GPTCR = 0; /* We have no udelay by now */
  29. GPTPR = 0; /* 32Khz */
  30. /* Freerun Mode, PERCLK1 input */
  31. GPTCR |= GPTCR_CLKSOURCE_32 | GPTCR_TEN;
  32. return 0;
  33. }
  34. unsigned long timer_read_counter(void)
  35. {
  36. return GPTCNT;
  37. }