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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
/* $NetBSD: bcm2835reg.h,v 1.32 2021/03/08 14:27:45 mlelstv Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Nick Hudson
*
* 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
/*
* Reference: BCM2835 ARM Periperhals
*
* http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
*/
#ifndef _BCM2835REG_H_
#define _BCM2835REG_H_
#include "opt_bcm283x.h"
#if defined(SOC_BCM2835) + defined(SOC_BCM2836) != 1
#error Must define SOC_BCM2835 or SOC_BCM2836, and not both
#endif
#define BCM2711_PERIPHERALS_BASE 0xfe000000
#define BCM2836_PERIPHERALS_BASE 0x3f000000
#define BCM2835_PERIPHERALS_BASE 0x20000000
#define BCM283X_PERIPHERALS_SIZE 0x01000000 /* 16MBytes */
#define BCM283X_PERIPHERALS_BASE_BUS 0x7e000000
#define BCM2711_PERIPHERALS_PHYS_TO_BUS(a) \
((a) - BCM2711_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS)
#define BCM2711_PERIPHERALS_BUS_TO_PHYS(a) \
((a) - BCM283X_PERIPHERALS_BASE_BUS + BCM2711_PERIPHERALS_BASE)
#define BCM2836_PERIPHERALS_PHYS_TO_BUS(a) \
((a) - BCM2836_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS)
#define BCM2836_PERIPHERALS_BUS_TO_PHYS(a) \
((a) - BCM283X_PERIPHERALS_BASE_BUS + BCM2836_PERIPHERALS_BASE)
#define BCM2835_PERIPHERALS_PHYS_TO_BUS(a) \
((a) - BCM2835_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS)
#define BCM2835_PERIPHERALS_BUS_TO_PHYS(a) \
((a) - BCM283X_PERIPHERALS_BASE_BUS + BCM2835_PERIPHERALS_BASE)
#define BCM2835_STIMER_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00003000)
#define BCM2835_DMA0_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00007000)
#define BCM2835_ARM_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x0000B000)
#define BCM2835_PM_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00100000)
#define BCM2835_CM_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00101000)
#define BCM2835_RNG_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00104000)
#define BCM2835_GPIO_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00200000)
#define BCM2835_UART0_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00201000)
#define BCM2835_SDHOST_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00202000)
#define BCM2835_PCM_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00203000)
#define BCM2835_SPI0_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00204000)
#define BCM2835_BSC0_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00205000)
#define BCM2835_PWM_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x0020C000)
#define BCM2835_BSCSPISLV_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00214000)
#define BCM2835_AUX_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00215000)
#define BCM2835_AUX_UART_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00215040)
#define BCM2835_EMMC_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00300000)
#define BCM2835_BSC1_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00804000)
#define BCM2835_BSC2_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00805000)
#define BCM2835_USB_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00980000)
#define BCM2835_DMA15_BASE (BCM283X_PERIPHERALS_BASE_BUS + 0x00E05000)
#define BCM2835_STIMER_SIZE 0x1c
#define BCM2835_DMA0_SIZE 0x1000
#define BCM2835_ARM_SIZE 0x1000
#define BCM2835_PM_SIZE 0x1000
#define BCM2835_CM_SIZE 0xa8
#define BCM2835_RNG_SIZE 0x1000
#define BCM2835_GPIO_SIZE 0x1000
#define BCM2835_UART0_SIZE 0x90
#define BCM2835_PCM_SIZE 0x1000
#define BCM2835_SPI0_SIZE 0x1000
#define BCM2835_BSC_SIZE 0x1000
#define BCM2835_PWM_SIZE 0x28
#define BCM2835_AUX_SIZE 0x8
#define BCM2835_AUX_UART_SIZE 0x40
#define BCM2835_SDHOST_SIZE 0x1000
#define BCM2835_EMMC_SIZE 0x1000
#define BCM2835_USB_SIZE 0x20000
#define BCM2835_DMA15_SIZE 0x100
#define BCM2835_BUSADDR_CACHE_MASK 0xc0000000
#define BCM2835_BUSADDR_CACHE_COHERENT 0x40000000
#define BCM2835_BUSADDR_CACHE_L1L2 0x00000000
#define BCM2835_BUSADDR_CACHE_L2ONLY 0x80000000
#define BCM2835_BUSADDR_CACHE_DIRECT 0xc0000000
#define BCM2835_ARMICU_BASE (BCM2835_ARM_BASE + 0x0200)
#define BCM2835_ARMICU_SIZE 0x200
#define BCM2835_VCHIQ_BASE (BCM2835_ARM_BASE + 0x0800)
#define BCM2835_VCHIQ_SIZE 0x50
#define BCM2835_ARMMBOX_BASE (BCM2835_ARM_BASE + 0x0880)
#define BCM2835_ARMMBOX_SIZE 0x40
#define BCM2835_INTC_BASE (0x0) /* Relative to BCM2835_ARMICU_BASE */
#define BCM2711_SCB_BASE 0xfc000000
#define BCM2711_SCB_SIZE 0x03800000
#define BCM2711_SCB_BASE_BUS 0x7c000000
#define BCM2711_SCB_PHYS_TO_BUS(a) \
((a) - BCM2711_SCB_BASE + BCM2711_SCB_BASE_BUS)
#define BCM2711_SCB_BUS_TO_PHYS(a) \
((a) - BCM2711_SCB_BASE_BUS + BCM2711_SCB_BASE)
/* Interrupt controller */
#define BCM2835_INTC_IRQBPENDING (BCM2835_INTC_BASE + 0x00) /* IRQ Basic pending */
#define BCM2835_INTC_IRQ1PENDING (BCM2835_INTC_BASE + 0x04) /* IRQ pending 1 */
#define BCM2835_INTC_IRQ2PENDING (BCM2835_INTC_BASE + 0x08) /* IRQ pending 2 */
#define BCM2835_INTC_FIQCTL (BCM2835_INTC_BASE + 0x0c) /* FIQ control */
#define BCM2835_INTC_IRQ1ENABLE (BCM2835_INTC_BASE + 0x10) /* Enable IRQs 1 */
#define BCM2835_INTC_IRQ2ENABLE (BCM2835_INTC_BASE + 0x14) /* Enable IRQs 2 */
#define BCM2835_INTC_IRQBENABLE (BCM2835_INTC_BASE + 0x18) /* Enable Basic IRQs */
#define BCM2835_INTC_IRQ1DISABLE (BCM2835_INTC_BASE + 0x1c) /* Disable IRQ 1 */
#define BCM2835_INTC_IRQ2DISABLE (BCM2835_INTC_BASE + 0x20) /* Disable IRQ 2 */
#define BCM2835_INTC_IRQBDISABLE (BCM2835_INTC_BASE + 0x24) /* Disable Basic IRQs */
#define BCM2835_INTC_ENABLEBASE (BCM2835_INTC_BASE + 0x10)
#define BCM2835_INTC_DISABLEBASE (BCM2835_INTC_BASE + 0x1c)
#define BCM2836_NCPUS 4
#define BCM2836_NIRQPERCPU 32
#define BCM2836_INT_CNTPSIRQ 0
#define BCM2836_INT_CNTPNSIRQ 1
#define BCM2836_INT_CNTHPIRQ 2
#define BCM2836_INT_CNTVIRQ 3
#define BCM2836_INT_MAILBOX0 4
#define BCM2836_INT_MAILBOX1 5
#define BCM2836_INT_MAILBOX2 6
#define BCM2836_INT_MAILBOX3 7
#define BCM2836_INT_GPU_FAST 8
#define BCM2836_INT_PMU_FAST 9
#define BCM2836_INT_ZERO 10
#define BCM2836_INT_TIMER 11
#define BCM2836_INT_NLOCAL 12
#define BCM2835_UART0_CLK 3000000
#define BCM2711_ARM_LOCAL_BASE_BUS 0x40000000
#define BCM2711_ARM_LOCAL_BASE 0xff800000
#define BCM2711_ARM_LOCAL_SIZE 0x00100000 /* 1MBytes */
#define BCM2711_ARM_LOCAL_PHYS_TO_BUS(a) \
((a) - BCM2711_ARM_LOCAL_BASE + BCM2711_ARM_LOCAL_BASE_BUS)
#define BCM2711_ARM_LOCAL_BUS_TO_PHYS(a) \
((a) - BCM2711_ARM_LOCAL_BASE_BUS + BCM2711_ARM_LOCAL_BASE)
#define BCM2836_ARM_LOCAL_BASE 0x40000000
#define BCM2836_ARM_LOCAL_SIZE 0x00001000 /* 4KBytes */
#define BCM2836_LOCAL_CONTROL 0x000 /* ARM_CONTROL */
#define BCM2836_LOCAL_PRESCALER 0x008
#define BCM2836_LOCAL_GPU_INT_ROUTING 0x00c /* CORE_IRQ_CONTROL */
#define BCM2836_LOCAL_PM_ROUTING_SET 0x010 /* PMU_CONTROL_SET */
#define BCM2836_LOCAL_PM_ROUTING_CLR 0x014 /* PMU_CONTROL_CLR */
#define BCM2836_LOCAL_TIMER_LS 0x01c
#define BCM2836_LOCAL_TIMER_MS 0x020
#define BCM2836_LOCAL_INT_ROUTING 0x024 /* PERI_IRQ_ROUTE0 */
#define BCM2836_LOCAL_AXI_COUNT 0x02c
#define BCM2836_LOCAL_AXI_IRQ 0x030 /* AXI_QUIET_TIME */
#define BCM2836_LOCAL_TIMER_CONTROL 0x034
#define BCM2836_LOCAL_TIMER_WRITE 0x038 /* LOCAL_TIMER_IRQ */
#define BCM2836_LOCAL_TIMER_IRQ_CONTROL_BASE 0x40
#define BCM2836_LOCAL_MAILBOX_IRQ_CONTROL_BASE 0x50
#define BCM2836_LOCAL_INTC_IRQPENDING_BASE 0x60
#define BCM2836_LOCAL_INTC_FIQPENDING_BASE 0x70
#define BCM2836_LOCAL_TIMER_IRQ_CONTROL_SIZE 0x10
#define BCM2836_LOCAL_MAILBOX_IRQ_CONTROL_SIZE 0x10
#define BCM2836_LOCAL_TIMER_IRQ_CONTROLN(n) (BCM2836_LOCAL_TIMER_IRQ_CONTROL_BASE + 4*(n))
#define BCM2836_LOCAL_MAILBOX_IRQ_CONTROLN(n) (BCM2836_LOCAL_MAILBOX_IRQ_CONTROL_BASE + 4*(n))
#define BCM2836_LOCAL_INTC_IRQPENDINGN(n) (BCM2836_LOCAL_INTC_IRQPENDING_BASE + 4*(n))
#define BCM2836_LOCAL_INTC_FIQPENDINGN(n) (BCM2836_LOCAL_INTC_FIQPENDING_BASE + 4*(n))
#define BCM2836_LOCAL_MAILBOX0_SETN(n) (0x80 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX1_SETN(n) (0x84 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX2_SETN(n) (0x88 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX3_SETN(n) (0x8c + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX0_CLRN(n) (0xc0 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX1_CLRN(n) (0xc4 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX2_CLRN(n) (0xc8 + 0x10 * (n))
#define BCM2836_LOCAL_MAILBOX3_CLRN(n) (0xcc + 0x10 * (n))
#define BCM2836_ARM_SMP_BASE 0x00000000
#define BCM2836_ARM_SMP_SIZE 0x00001000 /* 4KBytes */
#endif /* _BCM2835REG_H_ */
|