dw_apb_timer.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * (C) Copyright 2009 Intel Corporation
  4. * Author: Jacob Pan (jacob.jun.pan@intel.com)
  5. *
  6. * Shared with ARM platforms, Jamie Iles, Picochip 2011
  7. *
  8. * Support for the Synopsys DesignWare APB Timers.
  9. */
  10. #ifndef __DW_APB_TIMER_H__
  11. #define __DW_APB_TIMER_H__
  12. #include <linux/clockchips.h>
  13. #include <linux/clocksource.h>
  14. #include <linux/interrupt.h>
  15. #define APBTMRS_REG_SIZE 0x14
  16. struct dw_apb_timer {
  17. void __iomem *base;
  18. unsigned long freq;
  19. int irq;
  20. };
  21. struct dw_apb_clock_event_device {
  22. struct clock_event_device ced;
  23. struct dw_apb_timer timer;
  24. void (*eoi)(struct dw_apb_timer *);
  25. };
  26. struct dw_apb_clocksource {
  27. struct dw_apb_timer timer;
  28. struct clocksource cs;
  29. };
  30. void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced);
  31. void dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced);
  32. void dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced);
  33. void dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced);
  34. struct dw_apb_clock_event_device *
  35. dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
  36. void __iomem *base, int irq, unsigned long freq);
  37. struct dw_apb_clocksource *
  38. dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
  39. unsigned long freq);
  40. void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
  41. void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
  42. u64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
  43. #endif /* __DW_APB_TIMER_H__ */