1/*
2 * Copyright (c) 2020 TriaGnoSys GmbH
3 * Copyright (c) 2021 Safran Passenger Innovations Germany GmbH
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#include <arm/armv8-m.dtsi>
9#include <zephyr/dt-bindings/gpio/gpio.h>
10#include <zephyr/dt-bindings/i2c/i2c.h>
11#include "gpio_gecko.h"
12
13/ {
14	chosen {
15		zephyr,entropy = &se;
16		zephyr,flash-controller = &msc;
17	};
18
19	cpus {
20		#address-cells = <1>;
21		#size-cells = <0>;
22
23		cpu0: cpu@0 {
24			device_type = "cpu";
25			compatible = "arm,cortex-m33f";
26			reg = <0>;
27			#address-cells = <1>;
28			#size-cells = <1>;
29
30			mpu: mpu@e000ed90 {
31				compatible = "arm,armv8m-mpu";
32				reg = <0xe000ed90 0x40>;
33				arm,num-mpu-regions = <16>;
34			};
35		};
36	};
37
38	sram0: memory@20000000 {
39		device_type = "memory";
40		compatible = "mmio-sram";
41	};
42
43	soc {
44		msc: flash-controller@50030000 {
45			compatible = "silabs,gecko-flash-controller";
46			reg = <0x50030000 0x31a4>;
47			interrupts = <51 0>;
48
49			#address-cells = <1>;
50			#size-cells = <1>;
51
52			flash0: flash@0 {
53				compatible = "soc-nv-flash";
54				write-block-size = <4>;
55				erase-block-size = <8192>;
56			};
57		};
58
59		usart0: usart@50058000 { /* USART0 */
60			compatible = "silabs,gecko-usart";
61			reg = <0x50058000 0x400>;
62			interrupts = <11 0>, <12 0>;
63			interrupt-names = "rx", "tx";
64			peripheral-id = <0>;
65			status = "disabled";
66		};
67
68		usart1: usart@5005c000 { /* USART1 */
69			compatible = "silabs,gecko-usart";
70			reg = <0x5005c000 0x400>;
71			interrupts = <13 0>, <14 0>;
72			interrupt-names = "rx", "tx";
73			peripheral-id = <1>;
74			status = "disabled";
75		};
76
77		usart2: usart@50060000 { /* USART2 */
78			compatible = "silabs,gecko-usart";
79			reg = <0x50060000 0x400>;
80			interrupts = <15 0>, <16 0>;
81			interrupt-names = "rx", "tx";
82			peripheral-id = <2>;
83			status = "disabled";
84		};
85
86		i2c0: i2c@5a010000 {
87			compatible = "silabs,gecko-i2c";
88			clock-frequency = <I2C_BITRATE_STANDARD>;
89			#address-cells = <1>;
90			#size-cells = <0>;
91			reg = <0x5a010000 0x400>;
92			interrupts = <27 0>;
93			status = "disabled";
94		};
95
96		i2c1: i2c@50068000 {
97			compatible = "silabs,gecko-i2c";
98			clock-frequency = <I2C_BITRATE_STANDARD>;
99			#address-cells = <1>;
100			#size-cells = <0>;
101			reg = <0x50068000 0x400>;
102			interrupts = <28 0>;
103			status = "disabled";
104		};
105
106		rtcc0: rtcc@58000000 {
107			compatible = "silabs,gecko-rtcc";
108			reg = <0x58000000 0x400>;
109			interrupts = <10 0>;
110			clock-frequency = <32768>;
111			prescaler = <1>;
112			status = "disabled";
113		};
114
115		gpio: gpio@5003c300 {
116			compatible = "silabs,gecko-gpio";
117			reg = <0x5003c300 0x3c00>;
118			interrupts = <26 2>, <25 2>;
119			interrupt-names = "GPIO_EVEN", "GPIO_ODD";
120
121			ranges;
122			#address-cells = <1>;
123			#size-cells = <1>;
124
125			gpioa: gpio@5003c000 {
126				compatible = "silabs,gecko-gpio-port";
127				reg = <0x5003c000 0x30>;
128				peripheral-id = <0>;
129				gpio-controller;
130				#gpio-cells = <2>;
131				status = "disabled";
132			};
133
134			gpiob: gpio@5003c030 {
135				compatible = "silabs,gecko-gpio-port";
136				reg = <0x5003c030 0x30>;
137				peripheral-id = <1>;
138				gpio-controller;
139				#gpio-cells = <2>;
140				status = "disabled";
141			};
142
143			gpioc: gpio@5003c060 {
144				compatible = "silabs,gecko-gpio-port";
145				reg = <0x5003c060 0x30>;
146				peripheral-id = <2>;
147				gpio-controller;
148				#gpio-cells = <2>;
149				status = "disabled";
150			};
151
152			gpiod: gpio@5003c090 {
153				compatible = "silabs,gecko-gpio-port";
154				reg = <0x5003c090 0x30>;
155				peripheral-id = <3>;
156				gpio-controller;
157				#gpio-cells = <2>;
158				status = "disabled";
159			};
160		};
161
162		se: semailbox@5c000000 {
163			compatible = "silabs,gecko-semailbox";
164			reg = <0x5c000000 0x80>;
165			interrupts = <0 3>, <1 3>, <2 3>;
166			interrupt-names = "SETAMPERHOST", "SEMBRX", "SEMBTX";
167			status = "okay";
168		};
169
170		wdog0: wdog@5a018000 {
171			compatible = "silabs,gecko-wdog";
172			reg = <0x5a018000 0x2C>;
173			peripheral-id = <0>;
174			interrupts = <43 0>;
175			status = "disabled";
176		};
177
178		wdog1: wdog@5a01c000 {
179			compatible = "silabs,gecko-wdog";
180			reg = <0x5a01c000 0x2C>;
181			peripheral-id = <1>;
182			interrupts = <44 0>;
183			status = "disabled";
184		};
185
186		pinctrl: pin-controller {
187			/* Pin controller is a "virtual" device since SiLabs SoCs do pin
188			 * control in a distributed way (GPIO registers and PSEL
189			 * registers on each peripheral).
190			 */
191			compatible = "silabs,gecko-pinctrl";
192		};
193	};
194};
195
196&nvic {
197	arm,num-irq-priority-bits = <4>;
198};
199