Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * ARM timer implementation, found in Integrator, Versatile and Realview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  * platforms.  Not all platforms support all registers and bits in these
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * registers, so we mark them with A for Integrator AP, C for Integrator
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * CP, V for Versatile and R for Realview.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  * Integrator AP has 16-bit timers, Integrator CP, Versatile and Realview
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  * can have 16-bit or 32-bit selectable via a bit in the control register.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  * Every SP804 contains two identical timers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define NR_TIMERS	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define TIMER_1_BASE	0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define TIMER_2_BASE	0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define TIMER_LOAD	0x00			/* ACVR rw */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define TIMER_VALUE	0x04			/* ACVR ro */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define TIMER_CTRL	0x08			/* ACVR rw */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define TIMER_CTRL_ONESHOT	(1 << 0)	/*  CVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define TIMER_CTRL_32BIT	(1 << 1)	/*  CVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define TIMER_CTRL_DIV1		(0 << 2)	/* ACVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define TIMER_CTRL_DIV16	(1 << 2)	/* ACVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define TIMER_CTRL_DIV256	(2 << 2)	/* ACVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define TIMER_CTRL_IE		(1 << 5)	/*   VR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define TIMER_CTRL_PERIODIC	(1 << 6)	/* ACVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define TIMER_CTRL_ENABLE	(1 << 7)	/* ACVR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define TIMER_INTCLR	0x0c			/* ACVR wo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define TIMER_RIS	0x10			/*  CVR ro */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define TIMER_MIS	0x14			/*  CVR ro */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define TIMER_BGLOAD	0x18			/*  CVR rw */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) struct sp804_timer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	int load;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	int load_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	int value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	int value_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	int ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	int intclr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	int ris;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	int mis;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	int bgload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	int bgload_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	int timer_base[NR_TIMERS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	int width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct sp804_clkevt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	void __iomem *base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	void __iomem *load;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	void __iomem *load_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	void __iomem *value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	void __iomem *value_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	void __iomem *ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	void __iomem *intclr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	void __iomem *ris;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	void __iomem *mis;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	void __iomem *bgload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	void __iomem *bgload_h;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	unsigned long reload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	int width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) };