xref: /linux-6.15/include/linux/dw_apb_timer.h (revision 1d58f7f3)
1*d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
206c3df49SJamie Iles /*
306c3df49SJamie Iles  * (C) Copyright 2009 Intel Corporation
406c3df49SJamie Iles  * Author: Jacob Pan ([email protected])
506c3df49SJamie Iles  *
606c3df49SJamie Iles  * Shared with ARM platforms, Jamie Iles, Picochip 2011
706c3df49SJamie Iles  *
806c3df49SJamie Iles  * Support for the Synopsys DesignWare APB Timers.
906c3df49SJamie Iles  */
1006c3df49SJamie Iles #ifndef __DW_APB_TIMER_H__
1106c3df49SJamie Iles #define __DW_APB_TIMER_H__
1206c3df49SJamie Iles 
1306c3df49SJamie Iles #include <linux/clockchips.h>
1406c3df49SJamie Iles #include <linux/clocksource.h>
1506c3df49SJamie Iles #include <linux/interrupt.h>
1606c3df49SJamie Iles 
1706c3df49SJamie Iles #define APBTMRS_REG_SIZE       0x14
1806c3df49SJamie Iles 
1906c3df49SJamie Iles struct dw_apb_timer {
2006c3df49SJamie Iles 	void __iomem				*base;
2106c3df49SJamie Iles 	unsigned long				freq;
2206c3df49SJamie Iles 	int					irq;
2306c3df49SJamie Iles };
2406c3df49SJamie Iles 
2506c3df49SJamie Iles struct dw_apb_clock_event_device {
2606c3df49SJamie Iles 	struct clock_event_device		ced;
2706c3df49SJamie Iles 	struct dw_apb_timer			timer;
2806c3df49SJamie Iles 	void					(*eoi)(struct dw_apb_timer *);
2906c3df49SJamie Iles };
3006c3df49SJamie Iles 
3106c3df49SJamie Iles struct dw_apb_clocksource {
3206c3df49SJamie Iles 	struct dw_apb_timer			timer;
3306c3df49SJamie Iles 	struct clocksource			cs;
3406c3df49SJamie Iles };
3506c3df49SJamie Iles 
3606c3df49SJamie Iles void dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced);
3706c3df49SJamie Iles 
3806c3df49SJamie Iles struct dw_apb_clock_event_device *
3906c3df49SJamie Iles dw_apb_clockevent_init(int cpu, const char *name, unsigned rating,
4006c3df49SJamie Iles 		       void __iomem *base, int irq, unsigned long freq);
4106c3df49SJamie Iles struct dw_apb_clocksource *
42a1330228SJamie Iles dw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base,
4306c3df49SJamie Iles 			unsigned long freq);
4406c3df49SJamie Iles void dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs);
4506c3df49SJamie Iles void dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs);
46a5a1d1c2SThomas Gleixner u64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs);
4706c3df49SJamie Iles 
4806c3df49SJamie Iles #endif /* __DW_APB_TIMER_H__ */
49