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