162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * (C) Copyright 2009 Intel Corporation 462306a36Sopenharmony_ci * Author: Jacob Pan (jacob.jun.pan@intel.com) 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Shared with ARM platforms, Jamie Iles, Picochip 2011 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Support for the Synopsys DesignWare APB Timers. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#ifndef __DW_APB_TIMER_H__ 1162306a36Sopenharmony_ci#define __DW_APB_TIMER_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/clockchips.h> 1462306a36Sopenharmony_ci#include <linux/clocksource.h> 1562306a36Sopenharmony_ci#include <linux/interrupt.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define APBTMRS_REG_SIZE 0x14 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistruct dw_apb_timer { 2062306a36Sopenharmony_ci void __iomem *base; 2162306a36Sopenharmony_ci unsigned long freq; 2262306a36Sopenharmony_ci int irq; 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistruct dw_apb_clock_event_device { 2662306a36Sopenharmony_ci struct clock_event_device ced; 2762306a36Sopenharmony_ci struct dw_apb_timer timer; 2862306a36Sopenharmony_ci void (*eoi)(struct dw_apb_timer *); 2962306a36Sopenharmony_ci}; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct dw_apb_clocksource { 3262306a36Sopenharmony_ci struct dw_apb_timer timer; 3362306a36Sopenharmony_ci struct clocksource cs; 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_civoid dw_apb_clockevent_register(struct dw_apb_clock_event_device *dw_ced); 3762306a36Sopenharmony_civoid dw_apb_clockevent_pause(struct dw_apb_clock_event_device *dw_ced); 3862306a36Sopenharmony_civoid dw_apb_clockevent_resume(struct dw_apb_clock_event_device *dw_ced); 3962306a36Sopenharmony_civoid dw_apb_clockevent_stop(struct dw_apb_clock_event_device *dw_ced); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct dw_apb_clock_event_device * 4262306a36Sopenharmony_cidw_apb_clockevent_init(int cpu, const char *name, unsigned rating, 4362306a36Sopenharmony_ci void __iomem *base, int irq, unsigned long freq); 4462306a36Sopenharmony_cistruct dw_apb_clocksource * 4562306a36Sopenharmony_cidw_apb_clocksource_init(unsigned rating, const char *name, void __iomem *base, 4662306a36Sopenharmony_ci unsigned long freq); 4762306a36Sopenharmony_civoid dw_apb_clocksource_register(struct dw_apb_clocksource *dw_cs); 4862306a36Sopenharmony_civoid dw_apb_clocksource_start(struct dw_apb_clocksource *dw_cs); 4962306a36Sopenharmony_ciu64 dw_apb_clocksource_read(struct dw_apb_clocksource *dw_cs); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci#endif /* __DW_APB_TIMER_H__ */ 52