versatile.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License version 2 as
  4. * published by the Free Software Foundation.
  5. *
  6. * This program is distributed in the hope that it will be useful,
  7. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  9. * GNU General Public License for more details.
  10. *
  11. * Copyright (C) 2014 ARM Limited
  12. */
  13. #include <linux/clocksource.h>
  14. #include <linux/io.h>
  15. #include <linux/of_address.h>
  16. #include <linux/sched_clock.h>
  17. #define SYS_24MHZ 0x05c
  18. static void __iomem *versatile_sys_24mhz;
  19. static u64 notrace versatile_sys_24mhz_read(void)
  20. {
  21. return readl(versatile_sys_24mhz);
  22. }
  23. static void __init versatile_sched_clock_init(struct device_node *node)
  24. {
  25. void __iomem *base = of_iomap(node, 0);
  26. if (!base)
  27. return;
  28. versatile_sys_24mhz = base + SYS_24MHZ;
  29. sched_clock_register(versatile_sys_24mhz_read, 32, 24000000);
  30. }
  31. CLOCKSOURCE_OF_DECLARE(vexpress, "arm,vexpress-sysreg",
  32. versatile_sched_clock_init);
  33. CLOCKSOURCE_OF_DECLARE(versatile, "arm,versatile-sysreg",
  34. versatile_sched_clock_init);