Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * ARM timer implementation, found in Integrator, Versatile and Realview
0004  * platforms.  Not all platforms support all registers and bits in these
0005  * registers, so we mark them with A for Integrator AP, C for Integrator
0006  * CP, V for Versatile and R for Realview.
0007  *
0008  * Integrator AP has 16-bit timers, Integrator CP, Versatile and Realview
0009  * can have 16-bit or 32-bit selectable via a bit in the control register.
0010  *
0011  * Every SP804 contains two identical timers.
0012  */
0013 #define NR_TIMERS   2
0014 #define TIMER_1_BASE    0x00
0015 #define TIMER_2_BASE    0x20
0016 
0017 #define TIMER_LOAD  0x00            /* ACVR rw */
0018 #define TIMER_VALUE 0x04            /* ACVR ro */
0019 #define TIMER_CTRL  0x08            /* ACVR rw */
0020 #define TIMER_CTRL_ONESHOT  (1 << 0)    /*  CVR */
0021 #define TIMER_CTRL_32BIT    (1 << 1)    /*  CVR */
0022 #define TIMER_CTRL_DIV1     (0 << 2)    /* ACVR */
0023 #define TIMER_CTRL_DIV16    (1 << 2)    /* ACVR */
0024 #define TIMER_CTRL_DIV256   (2 << 2)    /* ACVR */
0025 #define TIMER_CTRL_IE       (1 << 5)    /*   VR */
0026 #define TIMER_CTRL_PERIODIC (1 << 6)    /* ACVR */
0027 #define TIMER_CTRL_ENABLE   (1 << 7)    /* ACVR */
0028 
0029 #define TIMER_INTCLR    0x0c            /* ACVR wo */
0030 #define TIMER_RIS   0x10            /*  CVR ro */
0031 #define TIMER_MIS   0x14            /*  CVR ro */
0032 #define TIMER_BGLOAD    0x18            /*  CVR rw */
0033 
0034 struct sp804_timer {
0035     int load;
0036     int load_h;
0037     int value;
0038     int value_h;
0039     int ctrl;
0040     int intclr;
0041     int ris;
0042     int mis;
0043     int bgload;
0044     int bgload_h;
0045     int timer_base[NR_TIMERS];
0046     int width;
0047 };
0048 
0049 struct sp804_clkevt {
0050     void __iomem *base;
0051     void __iomem *load;
0052     void __iomem *load_h;
0053     void __iomem *value;
0054     void __iomem *value_h;
0055     void __iomem *ctrl;
0056     void __iomem *intclr;
0057     void __iomem *ris;
0058     void __iomem *mis;
0059     void __iomem *bgload;
0060     void __iomem *bgload_h;
0061     unsigned long reload;
0062     int width;
0063 };