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 13 #include <linux/clockchips.h> 14 #include <linux/clocksource.h> 15 #include <linux/interrupt.h> 16 17 #define APBTMRS_REG_SIZE 0x14 18 19 struct dw_apb_timer { 20 void __iomem *base; 21 unsigned long freq; 22 int irq; 23 }; 24 25 struct dw_apb_clock_event_device { 26 struct clock_event_device ced; 27 struct dw_apb_timer timer; 28 struct irqaction irqaction; 29 void (*eoi)(struct dw_apb_timer *); 30 }; 31 32 struct dw_apb_clocksource { 33 struct dw_apb_timer timer; 34 struct clocksource cs; 35 }; 36 37 void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced); 38 void dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced); 39 void dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced); 40 void dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced); 41 42 struct dw_apb_clock_event_device * 43 dw_apb_clockevent_init(int cpu, const char *name, unsigned rating, 44 void __iomem *base, int irq, unsigned long freq); 45 struct dw_apb_clocksource * 46 dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base, 47 unsigned long freq); 48 void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs); 49 void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs); 50 u64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs); 51 52 #endif /* __DW_APB_TIMER_H__ */ 53