xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-sunxi/timer.h (revision 4f66e09bb9fbc47b73f67c3cc08ee2663e8fcdb1)
1643cf0eaSIan Campbell /*
2643cf0eaSIan Campbell  * (C) Copyright 2007-2011
3643cf0eaSIan Campbell  * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
4643cf0eaSIan Campbell  * Tom Cubie <tangliang@allwinnertech.com>
5643cf0eaSIan Campbell  *
6643cf0eaSIan Campbell  * Configuration settings for the Allwinner A10-evb board.
7643cf0eaSIan Campbell  *
8643cf0eaSIan Campbell  * SPDX-License-Identifier:	GPL-2.0+
9643cf0eaSIan Campbell  */
10643cf0eaSIan Campbell 
11643cf0eaSIan Campbell #ifndef _SUNXI_TIMER_H_
12643cf0eaSIan Campbell #define _SUNXI_TIMER_H_
13643cf0eaSIan Campbell 
14643cf0eaSIan Campbell #ifndef __ASSEMBLY__
15643cf0eaSIan Campbell 
16643cf0eaSIan Campbell #include <linux/types.h>
172b679f9fSChen-Yu Tsai #include <asm/arch/watchdog.h>
18643cf0eaSIan Campbell 
19643cf0eaSIan Campbell /* General purpose timer */
20643cf0eaSIan Campbell struct sunxi_timer {
21643cf0eaSIan Campbell 	u32 ctl;
22643cf0eaSIan Campbell 	u32 inter;
23643cf0eaSIan Campbell 	u32 val;
24643cf0eaSIan Campbell 	u8 res[4];
25643cf0eaSIan Campbell };
26643cf0eaSIan Campbell 
27643cf0eaSIan Campbell /* Audio video sync*/
28643cf0eaSIan Campbell struct sunxi_avs {
29643cf0eaSIan Campbell 	u32 ctl;		/* 0x80 */
30643cf0eaSIan Campbell 	u32 cnt0;		/* 0x84 */
31643cf0eaSIan Campbell 	u32 cnt1;		/* 0x88 */
32643cf0eaSIan Campbell 	u32 div;		/* 0x8c */
33643cf0eaSIan Campbell };
34643cf0eaSIan Campbell 
35643cf0eaSIan Campbell /* 64 bit counter */
36643cf0eaSIan Campbell struct sunxi_64cnt {
37643cf0eaSIan Campbell 	u32 ctl;		/* 0xa0 */
38643cf0eaSIan Campbell 	u32 lo;			/* 0xa4 */
39643cf0eaSIan Campbell 	u32 hi;			/* 0xa8 */
40643cf0eaSIan Campbell };
41643cf0eaSIan Campbell 
42643cf0eaSIan Campbell /* Rtc */
43643cf0eaSIan Campbell struct sunxi_rtc {
44643cf0eaSIan Campbell 	u32 ctl;		/* 0x100 */
45643cf0eaSIan Campbell 	u32 yymmdd;		/* 0x104 */
46643cf0eaSIan Campbell 	u32 hhmmss;		/* 0x108 */
47643cf0eaSIan Campbell };
48643cf0eaSIan Campbell 
49643cf0eaSIan Campbell /* Alarm */
50643cf0eaSIan Campbell struct sunxi_alarm {
51643cf0eaSIan Campbell 	u32 ddhhmmss;		/* 0x10c */
52643cf0eaSIan Campbell 	u32 hhmmss;		/* 0x110 */
53643cf0eaSIan Campbell 	u32 en;			/* 0x114 */
54643cf0eaSIan Campbell 	u32 irqen;		/* 0x118 */
55643cf0eaSIan Campbell 	u32 irqsta;		/* 0x11c */
56643cf0eaSIan Campbell };
57643cf0eaSIan Campbell 
58643cf0eaSIan Campbell /* Timer general purpose register */
59643cf0eaSIan Campbell struct sunxi_tgp {
60643cf0eaSIan Campbell 	u32 tgpd;
61643cf0eaSIan Campbell };
62643cf0eaSIan Campbell 
63643cf0eaSIan Campbell struct sunxi_timer_reg {
64643cf0eaSIan Campbell 	u32 tirqen;		/* 0x00 */
65643cf0eaSIan Campbell 	u32 tirqsta;		/* 0x04 */
66643cf0eaSIan Campbell 	u8 res1[8];
67643cf0eaSIan Campbell 	struct sunxi_timer timer[6];	/* We have 6 timers */
68643cf0eaSIan Campbell 	u8 res2[16];
69643cf0eaSIan Campbell 	struct sunxi_avs avs;
70*6c7ae2bfSChen-Yu Tsai #if defined(CONFIG_SUNXI_GEN_SUN4I) || defined(CONFIG_MACH_SUN8I_R40)
712b679f9fSChen-Yu Tsai 	struct sunxi_wdog wdog;	/* 0x90 */
724cdefba8SChen-Yu Tsai 	/* XXX the following is not accurate for sun5i/sun7i */
732b679f9fSChen-Yu Tsai 	struct sunxi_64cnt cnt64;	/* 0xa0 */
74643cf0eaSIan Campbell 	u8 res4[0x58];
75643cf0eaSIan Campbell 	struct sunxi_rtc rtc;
76643cf0eaSIan Campbell 	struct sunxi_alarm alarm;
77643cf0eaSIan Campbell 	struct sunxi_tgp tgp[4];
78643cf0eaSIan Campbell 	u8 res5[8];
79643cf0eaSIan Campbell 	u32 cpu_cfg;
80*6c7ae2bfSChen-Yu Tsai #elif defined(CONFIG_SUNXI_GEN_SUN6I)
814cdefba8SChen-Yu Tsai 	u8 res3[16];
824cdefba8SChen-Yu Tsai 	struct sunxi_wdog wdog[5];	/* We have 5 watchdogs */
834cdefba8SChen-Yu Tsai #endif
84643cf0eaSIan Campbell };
85643cf0eaSIan Campbell 
86643cf0eaSIan Campbell #endif /* __ASSEMBLY__ */
87643cf0eaSIan Campbell 
88643cf0eaSIan Campbell #endif
89