xref: /freebsd/sys/arm/ti/ti_prcm.h (revision 09127a36371d5f5ac109ad1063e7fe53ee9bf356)
1 /*
2  * Copyright (c) 2010
3  *	Ben Gray <ben.r.gray@gmail.com>.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *	This product includes software developed by Ben Gray.
17  * 4. The name of the company nor the name of the author may be used to
18  *    endorse or promote products derived from this software without specific
19  *    prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY BEN GRAY ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL BEN GRAY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * $FreeBSD$
33  */
34 
35 
36 /*
37  * Texas Instruments - OMAP3xxx series processors
38  *
39  * Reference:
40  *  OMAP35x Applications Processor
41  *   Technical Reference Manual
42  *  (omap35xx_techref.pdf)
43  */
44 #ifndef _TI_PRCM_H_
45 #define _TI_PRCM_H_
46 
47 typedef enum {
48 
49 	/* System clocks, typically you can only call ti_prcm_clk_get_source_freq()
50 	 * on these clocks as they are enabled by default.
51 	 */
52 	SYS_CLK = 1,
53 
54 	/* The MPU (ARM) core clock */
55 	MPU_CLK = 20,
56 
57 	/* MMC modules */
58 	MMC0_CLK = 100,
59 	MMC1_CLK,
60 	MMC2_CLK,
61 	MMC3_CLK,
62 	MMC4_CLK,
63 	MMC5_CLK,
64 
65 	/* I2C modules */
66 	I2C0_CLK = 200,
67 	I2C1_CLK,
68 	I2C2_CLK,
69 	I2C3_CLK,
70 	I2C4_CLK,
71 
72 	/* USB module(s) */
73 	USBTLL_CLK = 300,
74 	USBHSHOST_CLK,
75 	USBFSHOST_CLK,
76 	USBP1_PHY_CLK,
77 	USBP2_PHY_CLK,
78 	USBP1_UTMI_CLK,
79 	USBP2_UTMI_CLK,
80 	USBP1_HSIC_CLK,
81 	USBP2_HSIC_CLK,
82 
83 	/* UART modules */
84 	UART0_CLK = 400,
85 	UART1_CLK,
86 	UART2_CLK,
87 	UART3_CLK,
88 	UART4_CLK,
89 	UART5_CLK,
90 	UART6_CLK,
91 	UART7_CLK,
92 	UART8_CLK,
93 
94 	/* General purpose timer modules */
95 	GPTIMER1_CLK = 500,
96 	GPTIMER2_CLK,
97 	GPTIMER3_CLK,
98 	GPTIMER4_CLK,
99 	GPTIMER5_CLK,
100 	GPTIMER6_CLK,
101 	GPTIMER7_CLK,
102 	GPTIMER8_CLK,
103 	GPTIMER9_CLK,
104 	GPTIMER10_CLK,
105 	GPTIMER11_CLK,
106 	GPTIMER12_CLK,
107 
108 	/* McBSP module(s) */
109 	MCBSP1_CLK = 600,
110 	MCBSP2_CLK,
111 	MCBSP3_CLK,
112 	MCBSP4_CLK,
113 	MCBSP5_CLK,
114 
115 	/* General purpose I/O modules */
116 	GPIO0_CLK = 700,
117 	GPIO1_CLK,
118 	GPIO2_CLK,
119 	GPIO3_CLK,
120 	GPIO4_CLK,
121 	GPIO5_CLK,
122 	GPIO6_CLK,
123 
124 	/* sDMA module */
125 	SDMA_CLK = 800,
126 
127 	/* DMTimer modules */
128 	DMTIMER0_CLK = 900,
129 	DMTIMER1_CLK,
130 	DMTIMER2_CLK,
131 	DMTIMER3_CLK,
132 	DMTIMER4_CLK,
133 	DMTIMER5_CLK,
134 	DMTIMER6_CLK,
135 	DMTIMER7_CLK,
136 
137 	/* CPSW modules */
138 	CPSW_CLK = 1000,
139 
140 	/* Mentor USB modules */
141 	MUSB0_CLK = 1100,
142 
143 	/* EDMA module */
144 	EDMA_TPCC_CLK = 1200,
145 	EDMA_TPTC0_CLK,
146 	EDMA_TPTC1_CLK,
147 	EDMA_TPTC2_CLK,
148 
149 	/* LCD controller module */
150 	LCDC_CLK = 1300,
151 
152 	/* PWM modules */
153 	PWMSS0_CLK = 1400,
154 	PWMSS1_CLK,
155 	PWMSS2_CLK,
156 
157 	/* Mailbox modules */
158 	MAILBOX0_CLK = 1500,
159 
160 	/* Spinlock modules */
161 	SPINLOCK0_CLK = 1600,
162 
163 	PRUSS_CLK = 1700,
164 
165 	INVALID_CLK_IDENT
166 
167 } clk_ident_t;
168 
169 /*
170  *
171  */
172 typedef enum {
173 	SYSCLK_CLK,   /* System clock */
174 	EXT_CLK,
175 
176 	F32KHZ_CLK,   /* 32KHz clock */
177 	F48MHZ_CLK,   /* 48MHz clock */
178 	F64MHZ_CLK,   /* 64MHz clock */
179 	F96MHZ_CLK,   /* 96MHz clock */
180 
181 } clk_src_t;
182 
183 struct ti_clock_dev {
184 	/* The profile of the timer */
185 	clk_ident_t  id;
186 
187 	/* A bunch of callbacks associated with the clock device */
188 	int (*clk_activate)(struct ti_clock_dev *clkdev);
189 	int (*clk_deactivate)(struct ti_clock_dev *clkdev);
190 	int (*clk_set_source)(struct ti_clock_dev *clkdev,
191 	    clk_src_t clksrc);
192 	int (*clk_accessible)(struct ti_clock_dev *clkdev);
193 	int (*clk_get_source_freq)(struct ti_clock_dev *clkdev,
194 	    unsigned int *freq);
195 };
196 
197 int ti_prcm_clk_valid(clk_ident_t clk);
198 int ti_prcm_clk_enable(clk_ident_t clk);
199 int ti_prcm_clk_disable(clk_ident_t clk);
200 int ti_prcm_clk_accessible(clk_ident_t clk);
201 int ti_prcm_clk_disable_autoidle(clk_ident_t clk);
202 int ti_prcm_clk_set_source(clk_ident_t clk, clk_src_t clksrc);
203 int ti_prcm_clk_get_source_freq(clk_ident_t clk, unsigned int *freq);
204 void ti_prcm_reset(void);
205 
206 #endif   /* _TI_PRCM_H_ */
207