summaryrefslogtreecommitdiff
path: root/sys/arch/arm/broadcom/bcm2835_cm.h
blob: faf8321df2152c3406e4becfb11e8dcd48d97f63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/*	$NetBSD: bcm2835_cm.h,v 1.2 2017/10/19 05:45:37 skrll Exp $	*/

/*-
 * Copyright (c) 2015 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef BCM2835_CMREG_H
#define BCM2835_CMREG_H

#define CM_GP0CTL		0x70
#define  CM_CTL_PASSWD		__BITS(24,31)
#define  CM_CTL_MASH		__BITS(9,10)
#define  CM_CTL_FLIP		__BIT(8)
#define  CM_CTL_BUSY		__BIT(7)
#define  CM_CTL_KILL		__BIT(5)
#define  CM_CTL_ENAB		__BIT(4)
#define  CM_CTL_SRC		__BIT(0,3)
#define CM_GP0DIV		0x74
#define  CM_DIV_PASSWD		__BITS(24,31)
#define  CM_DIV_DIVI		__BITS(12,23)
#define  CM_DIV_DIVF		__BITS(0,11)
#define CM_GP1CTL		0x78
#define CM_GP1DIV		0x7c
#define CM_GP2CTL		0x80
#define CM_GP2DIV		0x84

#define CM_PCMCTL		0x98	/* PCM / I2S */
#define CM_PCMDIV		0x9c
#define CM_PWMCTL		0xa0
#define CM_PWMDIV		0xa4

#define CM_PASSWD		0x5a

/* clock sources (frequencies for RPI) */
#define CM_CTL_SRC_GND		0
#define CM_CTL_SRC_OSCILLATOR	1	/* 19.2MHz */
#define CM_CTL_SRC_TESTDEBUG0	2
#define CM_CTL_SRC_TESTDEBUG1	3
#define CM_CTL_SRC_PLLA		4
#define CM_CTL_SRC_PLLC		5	/* 1000MHz (changes with overclock) */
#define CM_CTL_SRC_PLLD		6	/* 500MHz core clock */
#define CM_CTL_SRC_HDMIAUX	7	/* 216MHz HDMI auxiliary */

#if 0
#define CM_GNRICCTL		0x00
#define CM_GNRICDIV		0x04
#define CM_VPUCTL		0x08
#define CM_VPUDIV		0x0c
#define CM_SYSCTL		0x10
#define CM_SYSDIV		0x14
#define CM_PERIACTL		0x18
#define CM_PERIADIV		0x1c
#define CM_PERIICTL		0x20
#define CM_PERIIDIV		0x24
#define CM_H264CTL		0x28
#define CM_H264DIV		0x2c
#define CM_ISPCTL		0x30
#define CM_ISPDIV		0x34
#define CM_V3DCTL		0x38
#define CM_V3DDIV		0x3c
#define CM_CAM0CTL		0x40
#define CM_CAM0DIV		0x44
#define CM_CAM1CTL		0x48
#define CM_CAM1DIV		0x4c
#define CM_CCP2CTL		0x50
#define CM_CCP2DIV		0x54
#define CM_DSIOECTL		0x58
#define CM_DSIOEDIV		0x5c
#define CM_DSIOPCTL		0x60
#define CM_DSIOPDIV		0x64
#define CM_DPICTL		0x68
#define CM_DPIDIV		0x6c

#define CM_HSMCTL		0x88
#define CM_HSMDIV		0x8c
#define CM_HSMCTL		0x90
#define CM_HSMDIV		0x94

#define CM_SLIMCTL		0xa8
#define CM_SLIMDIV		0xac
#define CM_SMICTL		0xb0
#define CM_SMIDIV		0xb4

#define CM_TCNTCTL		0xc0
#define CM_TCNTDIV		0xc4
#define CM_TECCTL		0xc8
#define CM_TECDIV		0xcc
#define CM_TD0CTL		0xd0
#define CM_TD0DIV		0xd4
#define CM_TD1CTL		0xd8
#define CM_TD1DIV		0xdc
#define CM_TSENSCTL		0xe0
#define CM_TSENSDIV		0xe4
#define CM_TIMERCTL		0xe8
#define CM_TIMERDIV		0xec
#define CM_UARTCTL		0xf0
#define CM_UARTDIV		0xf4
#define CM_VECCTL		0xf8
#define CM_VECDIV		0xfc

#define CM_DSI1ECTL		0x158
#define CM_DSI1EDIV		0x15c
#define CM_DSI1PCTL		0x160
#define CM_DSI1PDIV		0x164
#define CM_DFTCTL		0x168
#define CM_DFTDIV		0x16c

#define CM_PULSECTL		0x190
#define CM_PULSEDIV		0x194

#define CM_SDCCTL		0x1ab
#define CM_SDCDIV		0x1ac
#define CM_ARMCTL		0x1b0
#define CM_ARMDIV		0x1b4
#define CM_AVE0CTL		0x1b8
#define CM_AVE0DIV		0x1bc
#define CM_EMMCCTL		0x1c0
#define CM_EMMCDIV		0x1c4

#define CM_OSCCOUNT		0x100
#define CM_PLLA			0x104
#define CM_PLLB			0x170
#define CM_PLLC			0x108
#define CM_PLLD			0x10c
#define CM_PLLH			0x110
#define CM_LOCK			0x114
#define CM_EVENT		0x118
#define CM_INTEN		CM_EVENT
#define CM_DSIOHSCK		0x120
#define CM_CKSM			0x124
#define CM_OSCFREQI		0x128
#define CM_OSCFREQF		0x12c
#define CM_PLLTCTL		0x130
#define CM_PLLTCNT0		0x134
#define CM_PLLTCNT1		0x138
#define CM_PLLTCNT2		0x13c
#define CM_PLLTCNT3		0x140
#define CM_TDCLKEN		0x144
#define CM_BURSTCTL		0x148
#define CM_BURSTCNT		0x14C

#endif

enum bcm_cm_clock {
	BCM_CM_GP0,
	BCM_CM_GP1,
	BCM_CM_GP2,
	BCM_CM_PCM,
	BCM_CM_PWM
};

int bcm_cm_set(enum bcm_cm_clock, uint32_t, uint32_t);
int bcm_cm_get(enum bcm_cm_clock, uint32_t *, uint32_t *);

#endif /* !BCM2835_CMREG_H */