xref: /netbsd-src/sys/arch/arm/broadcom/bcm2835_cm.h (revision 2307aa9b6a7aee91eb58d94ec05b5bbb1a3f4228)
1 /*	$NetBSD: bcm2835_cm.h,v 1.2 2017/10/19 05:45:37 skrll Exp $	*/
2 
3 /*-
4  * Copyright (c) 2015 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 #ifndef BCM2835_CMREG_H
30 #define BCM2835_CMREG_H
31 
32 #define CM_GP0CTL		0x70
33 #define  CM_CTL_PASSWD		__BITS(24,31)
34 #define  CM_CTL_MASH		__BITS(9,10)
35 #define  CM_CTL_FLIP		__BIT(8)
36 #define  CM_CTL_BUSY		__BIT(7)
37 #define  CM_CTL_KILL		__BIT(5)
38 #define  CM_CTL_ENAB		__BIT(4)
39 #define  CM_CTL_SRC		__BIT(0,3)
40 #define CM_GP0DIV		0x74
41 #define  CM_DIV_PASSWD		__BITS(24,31)
42 #define  CM_DIV_DIVI		__BITS(12,23)
43 #define  CM_DIV_DIVF		__BITS(0,11)
44 #define CM_GP1CTL		0x78
45 #define CM_GP1DIV		0x7c
46 #define CM_GP2CTL		0x80
47 #define CM_GP2DIV		0x84
48 
49 #define CM_PCMCTL		0x98	/* PCM / I2S */
50 #define CM_PCMDIV		0x9c
51 #define CM_PWMCTL		0xa0
52 #define CM_PWMDIV		0xa4
53 
54 #define CM_PASSWD		0x5a
55 
56 /* clock sources (frequencies for RPI) */
57 #define CM_CTL_SRC_GND		0
58 #define CM_CTL_SRC_OSCILLATOR	1	/* 19.2MHz */
59 #define CM_CTL_SRC_TESTDEBUG0	2
60 #define CM_CTL_SRC_TESTDEBUG1	3
61 #define CM_CTL_SRC_PLLA		4
62 #define CM_CTL_SRC_PLLC		5	/* 1000MHz (changes with overclock) */
63 #define CM_CTL_SRC_PLLD		6	/* 500MHz core clock */
64 #define CM_CTL_SRC_HDMIAUX	7	/* 216MHz HDMI auxiliary */
65 
66 #if 0
67 #define CM_GNRICCTL		0x00
68 #define CM_GNRICDIV		0x04
69 #define CM_VPUCTL		0x08
70 #define CM_VPUDIV		0x0c
71 #define CM_SYSCTL		0x10
72 #define CM_SYSDIV		0x14
73 #define CM_PERIACTL		0x18
74 #define CM_PERIADIV		0x1c
75 #define CM_PERIICTL		0x20
76 #define CM_PERIIDIV		0x24
77 #define CM_H264CTL		0x28
78 #define CM_H264DIV		0x2c
79 #define CM_ISPCTL		0x30
80 #define CM_ISPDIV		0x34
81 #define CM_V3DCTL		0x38
82 #define CM_V3DDIV		0x3c
83 #define CM_CAM0CTL		0x40
84 #define CM_CAM0DIV		0x44
85 #define CM_CAM1CTL		0x48
86 #define CM_CAM1DIV		0x4c
87 #define CM_CCP2CTL		0x50
88 #define CM_CCP2DIV		0x54
89 #define CM_DSIOECTL		0x58
90 #define CM_DSIOEDIV		0x5c
91 #define CM_DSIOPCTL		0x60
92 #define CM_DSIOPDIV		0x64
93 #define CM_DPICTL		0x68
94 #define CM_DPIDIV		0x6c
95 
96 #define CM_HSMCTL		0x88
97 #define CM_HSMDIV		0x8c
98 #define CM_HSMCTL		0x90
99 #define CM_HSMDIV		0x94
100 
101 #define CM_SLIMCTL		0xa8
102 #define CM_SLIMDIV		0xac
103 #define CM_SMICTL		0xb0
104 #define CM_SMIDIV		0xb4
105 
106 #define CM_TCNTCTL		0xc0
107 #define CM_TCNTDIV		0xc4
108 #define CM_TECCTL		0xc8
109 #define CM_TECDIV		0xcc
110 #define CM_TD0CTL		0xd0
111 #define CM_TD0DIV		0xd4
112 #define CM_TD1CTL		0xd8
113 #define CM_TD1DIV		0xdc
114 #define CM_TSENSCTL		0xe0
115 #define CM_TSENSDIV		0xe4
116 #define CM_TIMERCTL		0xe8
117 #define CM_TIMERDIV		0xec
118 #define CM_UARTCTL		0xf0
119 #define CM_UARTDIV		0xf4
120 #define CM_VECCTL		0xf8
121 #define CM_VECDIV		0xfc
122 
123 #define CM_DSI1ECTL		0x158
124 #define CM_DSI1EDIV		0x15c
125 #define CM_DSI1PCTL		0x160
126 #define CM_DSI1PDIV		0x164
127 #define CM_DFTCTL		0x168
128 #define CM_DFTDIV		0x16c
129 
130 #define CM_PULSECTL		0x190
131 #define CM_PULSEDIV		0x194
132 
133 #define CM_SDCCTL		0x1ab
134 #define CM_SDCDIV		0x1ac
135 #define CM_ARMCTL		0x1b0
136 #define CM_ARMDIV		0x1b4
137 #define CM_AVE0CTL		0x1b8
138 #define CM_AVE0DIV		0x1bc
139 #define CM_EMMCCTL		0x1c0
140 #define CM_EMMCDIV		0x1c4
141 
142 #define CM_OSCCOUNT		0x100
143 #define CM_PLLA			0x104
144 #define CM_PLLB			0x170
145 #define CM_PLLC			0x108
146 #define CM_PLLD			0x10c
147 #define CM_PLLH			0x110
148 #define CM_LOCK			0x114
149 #define CM_EVENT		0x118
150 #define CM_INTEN		CM_EVENT
151 #define CM_DSIOHSCK		0x120
152 #define CM_CKSM			0x124
153 #define CM_OSCFREQI		0x128
154 #define CM_OSCFREQF		0x12c
155 #define CM_PLLTCTL		0x130
156 #define CM_PLLTCNT0		0x134
157 #define CM_PLLTCNT1		0x138
158 #define CM_PLLTCNT2		0x13c
159 #define CM_PLLTCNT3		0x140
160 #define CM_TDCLKEN		0x144
161 #define CM_BURSTCTL		0x148
162 #define CM_BURSTCNT		0x14C
163 
164 #endif
165 
166 enum bcm_cm_clock {
167 	BCM_CM_GP0,
168 	BCM_CM_GP1,
169 	BCM_CM_GP2,
170 	BCM_CM_PCM,
171 	BCM_CM_PWM
172 };
173 
174 int bcm_cm_set(enum bcm_cm_clock, uint32_t, uint32_t);
175 int bcm_cm_get(enum bcm_cm_clock, uint32_t *, uint32_t *);
176 
177 #endif /* !BCM2835_CMREG_H */
178