plat_delay_timer.c 783 B

12345678910111213141516171819202122232425262728293031323334
  1. /*
  2. * Copyright (C) 2018 Marvell International Ltd.
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. * https://spdx.org/licenses
  6. */
  7. #include <arch_helpers.h>
  8. #include <drivers/delay_timer.h>
  9. #include <mvebu_def.h>
  10. #define SYS_COUNTER_FREQ_IN_MHZ (COUNTER_FREQUENCY/1000000)
  11. static uint32_t plat_get_timer_value(void)
  12. {
  13. /*
  14. * Generic delay timer implementation expects the timer to be a down
  15. * counter. We apply bitwise NOT operator to the tick values returned
  16. * by read_cntpct_el0() to simulate the down counter.
  17. */
  18. return (uint32_t)(~read_cntpct_el0());
  19. }
  20. static const timer_ops_t plat_timer_ops = {
  21. .get_timer_value = plat_get_timer_value,
  22. .clk_mult = 1,
  23. .clk_div = SYS_COUNTER_FREQ_IN_MHZ
  24. };
  25. void plat_delay_timer_init(void)
  26. {
  27. timer_init(&plat_timer_ops);
  28. }