1config BCM2835
2	bool "Broadcom BCM2835 SoC support"
3	depends on ARCH_BCM283X
4	select CPU_ARM1176
5
6config BCM2836
7	bool "Broadcom BCM2836 SoC support"
8	depends on ARCH_BCM283X
9	select ARMV7_LPAE
10	select CPU_V7A
11
12config BCM2837
13	bool "Broadcom BCM2837 SoC support"
14	depends on ARCH_BCM283X
15
16config BCM2837_32B
17	bool "Broadcom BCM2837 SoC 32-bit support"
18	depends on ARCH_BCM283X
19	select BCM2837
20	select ARMV7_LPAE
21	select CPU_V7A
22
23config BCM2837_64B
24	bool "Broadcom BCM2837 SoC 64-bit support"
25	depends on ARCH_BCM283X
26	select BCM2837
27	select ARM64
28
29config BCM2711
30	bool "Broadcom BCM2711 SoC support"
31	depends on ARCH_BCM283X
32
33config BCM2711_32B
34	bool "Broadcom BCM2711 SoC 32-bit support"
35	depends on ARCH_BCM283X
36	select BCM2711
37	select ARMV7_LPAE
38	select CPU_V7A
39	select PHYS_64BIT
40
41config BCM2711_64B
42	bool "Broadcom BCM2711 SoC 64-bit support"
43	depends on ARCH_BCM283X
44	select BCM2711
45	select ARM64
46
47menu "Broadcom BCM283X family"
48	depends on ARCH_BCM283X
49
50choice
51	prompt "Broadcom BCM283X board select"
52	optional
53
54config TARGET_RPI
55	bool "Raspberry Pi (all BCM2835 variants)"
56	help
57	  Support for all ARM1176-/BCM2835-based Raspberry Pi variants, such as
58	  the A, A+, B, B+, Compute Module, and Zero. This option cannot
59	  support BCM2836/BCM2837-based Raspberry Pis such as the RPi 2 and
60	  RPi 3 due to different peripheral address maps.
61
62	  This option creates a build targeting the ARM1176 ISA.
63	select BCM2835
64
65config TARGET_RPI_0_W
66	bool "Raspberry Pi Zero W"
67	help
68	  Support for all ARM1176-/BCM2835-based Raspberry Pi variants, such as
69	  the RPi Zero model W.
70
71	  This option assumes the VideoCore firmware is configured to use the
72	  mini UART (rather than PL011) for the serial console. This is the
73	  default on the RPi Zero W. To enable the UART console, the following
74	  non-default option must be present in config.txt: enable_uart=1.
75	  This is required for U-Boot to operate correctly, even if you only
76	  care about the HDMI/usbkbd console.
77
78	  This option creates a build targeting the ARMv7/AArch32 ISA.
79	select BCM2835
80
81config TARGET_RPI_2
82	bool "Raspberry Pi 2"
83	help
84	  Support for all BCM2836-based Raspberry Pi variants, such as
85	  the RPi 2 model B.
86
87	  This option also supports BCM2837-based variants such as the RPi 3
88	  Model B, when run in 32-bit mode, provided you have configured the
89	  VideoCore firmware to select the PL011 UART for the console by:
90	  a) config.txt should contain dtoverlay=pi3-miniuart-bt.
91	  b) You should run the following to tell the VC FW to process DT when
92	  booting, and copy u-boot.bin.img (rather than u-boot.bin) to the SD
93	  card as the kernel image:
94
95	       path/to/kernel/scripts/mkknlimg --dtok u-boot.bin u-boot.bin.img
96
97	  This works as of firmware.git commit 046effa13ebc "firmware:
98	  arm_loader: emmc clock depends on core clock See:
99	  https://github.com/raspberrypi/firmware/issues/572".
100
101	  This option creates a build targeting the ARMv7/AArch32 ISA.
102	select BCM2836
103
104config TARGET_RPI_3_32B
105	bool "Raspberry Pi 3 32-bit build"
106	help
107	  Support for all BCM2837-based Raspberry Pi variants, such as
108	  the RPi 3 model B, in AArch32 (32-bit) mode.
109
110	  This option assumes the VideoCore firmware is configured to use the
111	  mini UART (rather than PL011) for the serial console. This is the
112	  default on the RPi 3. To enable the UART console, the following non-
113	  default option must be present in config.txt: enable_uart=1. This is
114	  required for U-Boot to operate correctly, even if you only care
115	  about the HDMI/usbkbd console.
116
117	  This option creates a build targeting the ARMv7/AArch32 ISA.
118	select BCM2837_32B
119
120config TARGET_RPI_3
121	bool "Raspberry Pi 3 64-bit build"
122	help
123	  Support for all BCM2837-based Raspberry Pi variants, such as
124	  the RPi 3 model B, in AArch64 (64-bit) mode.
125
126	  This option assumes the VideoCore firmware is configured to use the
127	  mini UART (rather than PL011) for the serial console. This is the
128	  default on the RPi 3. To enable the UART console, the following non-
129	  default option must be present in config.txt: enable_uart=1. This is
130	  required for U-Boot to operate correctly, even if you only care
131	  about the HDMI/usbkbd console.
132
133	  At the time of writing, the VC FW requires a non-default option in
134	  config.txt to request the ARM CPU boot in 64-bit mode:
135	  arm_control=0x200
136
137	  The VC FW typically provides ARM "stub" code to set up the CPU and
138	  quiesce secondary SMP CPUs. This is not currently true in 64-bit
139	  mode. In order to boot U-Boot before the VC FW is enhanced, please
140	  see the commit description for the commit which added RPi3 support
141	  for a workaround. Since the instructions are temporary, they are not
142	  duplicated here. The VC FW enhancement is tracked in
143	  https://github.com/raspberrypi/firmware/issues/579.
144
145	  This option creates a build targeting the ARMv8/AArch64 ISA.
146	select BCM2837_64B
147
148config TARGET_RPI_4_32B
149	bool "Raspberry Pi 4 32-bit build"
150	help
151	  Support for all BCM2711-based Raspberry Pi variants, such as
152	  the RPi 4 model B, in AArch32 (32-bit) mode.
153
154	  This option assumes the VideoCore firmware is configured to use the
155	  mini UART (rather than PL011) for the serial console. This is the
156	  default on the RPi 4. To enable the UART console, the following non-
157	  default option must be present in config.txt: enable_uart=1. This is
158	  required for U-Boot to operate correctly, even if you only care
159	  about the HDMI/usbkbd console.
160
161	  Due to hardware incompatibilities, this can't be used with
162	  BCM283/5/6/7.
163
164	  This option creates a build targeting the ARMv7/AArch32 ISA.
165	select BCM2711_32B
166
167config TARGET_RPI_4
168	bool "Raspberry Pi 4 64-bit build"
169	help
170	  Support for all BCM2711-based Raspberry Pi variants, such as
171	  the RPi 4 model B, in AArch64 (64-bit) mode.
172
173	  This option assumes the VideoCore firmware is configured to use the
174	  mini UART (rather than PL011) for the serial console. This is the
175	  default on the RPi 4. To enable the UART console, the following non-
176	  default option must be present in config.txt: enable_uart=1. This is
177	  required for U-Boot to operate correctly, even if you only care
178	  about the HDMI/usbkbd console.
179
180	  Due to hardware incompatibilities, this can't be used with
181	  BCM283/5/6/7.
182
183	  Also, due to a bug in firmware, switching to 64bit mode doesn't
184	  happen automatically based on the kernel's image filename. See
185	  https://github.com/raspberrypi/firmware/issues/1193 for more details.
186	  Until that is resolved, the configuration (config.txt) needs to
187	  explicitly set: arm_64bit=1.
188
189	  This option creates a build targeting the ARMv8/AArch64 ISA.
190	select BCM2711_64B
191
192config TARGET_RPI_ARM64
193	bool "Raspberry Pi one binary 64-bit build"
194	help
195	  Support for all armv8 based Raspberry Pi variants, such as
196	  the RPi 4 model B, in AArch64 (64-bit) mode.
197	select ARM64
198
199endchoice
200
201config SYS_BOARD
202	default "rpi"
203
204config SYS_VENDOR
205	default "raspberrypi"
206
207config SYS_SOC
208	default "bcm283x"
209
210config SYS_CONFIG_NAME
211	default "rpi"
212
213source "board/raspberrypi/rpi/Kconfig"
214
215endmenu
216