1// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
2/*
3 * Device Tree file for Globalscale MOCHAbin
4 * Copyright (C) 2019 Globalscale technologies, Inc.
5 * Copyright (C) 2021 Sartura Ltd.
6 *
7 */
8
9/dts-v1/;
10
11#include <dt-bindings/gpio/gpio.h>
12#include "armada-7040.dtsi"
13
14/ {
15	model = "Globalscale MOCHAbin";
16	compatible = "globalscale,mochabin", "marvell,armada7040",
17		     "marvell,armada-ap806-quad", "marvell,armada-ap806";
18
19	chosen {
20		stdout-path = "serial0:115200n8";
21	};
22
23	aliases {
24		ethernet0 = &cp0_eth0;
25		ethernet1 = &cp0_eth1;
26		ethernet2 = &cp0_eth2;
27		ethernet3 = &swport1;
28		ethernet4 = &swport2;
29		ethernet5 = &swport3;
30		ethernet6 = &swport4;
31	};
32
33	/* SFP+ 10G */
34	sfp_eth0: sfp-eth0 {
35		compatible = "sff,sfp";
36		i2c-bus = <&cp0_i2c1>;
37		los-gpios = <&sfp_gpio 3 GPIO_ACTIVE_HIGH>;
38		mod-def0-gpios = <&sfp_gpio 2 GPIO_ACTIVE_LOW>;
39		tx-disable-gpios = <&sfp_gpio 1 GPIO_ACTIVE_HIGH>;
40		tx-fault-gpios = <&sfp_gpio 0 GPIO_ACTIVE_HIGH>;
41	};
42
43	/* SFP 1G */
44	sfp_eth2: sfp-eth2 {
45		compatible = "sff,sfp";
46		i2c-bus = <&cp0_i2c0>;
47		los-gpios = <&sfp_gpio 7 GPIO_ACTIVE_HIGH>;
48		mod-def0-gpios = <&sfp_gpio 6 GPIO_ACTIVE_LOW>;
49		tx-disable-gpios = <&sfp_gpio 5 GPIO_ACTIVE_HIGH>;
50		tx-fault-gpios = <&sfp_gpio 4 GPIO_ACTIVE_HIGH>;
51	};
52};
53
54/* microUSB UART console */
55&uart0 {
56	status = "okay";
57
58	pinctrl-0 = <&uart0_pins>;
59	pinctrl-names = "default";
60};
61
62/* eMMC */
63&ap_sdhci0 {
64	status = "okay";
65
66	bus-width = <4>;
67	non-removable;
68	/delete-property/ marvell,xenon-phy-slow-mode;
69	no-1-8-v;
70};
71
72&cp0_pinctrl {
73	cp0_uart0_pins: cp0-uart0-pins {
74		marvell,pins = "mpp6", "mpp7";
75		marvell,function = "uart0";
76	};
77
78	cp0_spi0_pins: cp0-spi0-pins {
79		marvell,pins = "mpp56", "mpp57", "mpp58", "mpp59";
80		marvell,function = "spi0";
81	};
82
83	cp0_spi1_pins: cp0-spi1-pins {
84		marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16";
85		marvell,function = "spi1";
86	};
87
88	cp0_i2c0_pins: cp0-i2c0-pins {
89		marvell,pins = "mpp37", "mpp38";
90		marvell,function = "i2c0";
91	};
92
93	cp0_i2c1_pins: cp0-i2c1-pins {
94		marvell,pins = "mpp2", "mpp3";
95		marvell,function = "i2c1";
96	};
97
98	pca9554_int_pins: pca9554-int-pins {
99		marvell,pins = "mpp27";
100		marvell,function = "gpio";
101	};
102
103	cp0_rgmii1_pins: cp0-rgmii1-pins {
104		marvell,pins = "mpp44", "mpp45", "mpp46", "mpp47", "mpp48", "mpp49",
105			       "mpp50", "mpp51", "mpp52", "mpp53", "mpp54", "mpp55";
106		marvell,function = "ge1";
107	};
108
109	is31_sdb_pins: is31-sdb-pins {
110		marvell,pins = "mpp30";
111		marvell,function = "gpio";
112	};
113
114	cp0_pcie_reset_pins: cp0-pcie-reset-pins {
115		marvell,pins = "mpp9";
116		marvell,function = "gpio";
117	};
118
119	cp0_pcie_clkreq_pins: cp0-pcie-clkreq-pins {
120		marvell,pins = "mpp5";
121		marvell,function = "pcie1";
122	};
123
124	cp0_switch_pins: cp0-switch-pins {
125		marvell,pins = "mpp0", "mpp1";
126		marvell,function = "gpio";
127	};
128
129	cp0_phy_pins: cp0-phy-pins {
130		marvell,pins = "mpp12";
131		marvell,function = "gpio";
132	};
133};
134
135/* mikroBUS UART */
136&cp0_uart0 {
137	status = "okay";
138
139	pinctrl-names = "default";
140	pinctrl-0 = <&cp0_uart0_pins>;
141};
142
143/* mikroBUS SPI */
144&cp0_spi0 {
145	status = "okay";
146
147	pinctrl-names = "default";
148	pinctrl-0 = <&cp0_spi0_pins>;
149};
150
151/* SPI-NOR */
152&cp0_spi1{
153	status = "okay";
154
155	pinctrl-names = "default";
156	pinctrl-0 = <&cp0_spi1_pins>;
157
158	flash@0 {
159		#address-cells = <1>;
160		#size-cells = <1>;
161		compatible = "jedec,spi-nor";
162		reg = <0>;
163		spi-max-frequency = <20000000>;
164
165		partitions {
166			compatible = "fixed-partitions";
167			#address-cells = <1>;
168			#size-cells = <1>;
169
170			partition@0 {
171				label = "firmware";
172				reg = <0x0 0x3e0000>;
173				read-only;
174			};
175
176			partition@3e0000 {
177				label = "hw-info";
178				reg = <0x3e0000 0x10000>;
179				read-only;
180			};
181
182			partition@3f0000 {
183				label = "u-boot-env";
184				reg = <0x3f0000 0x10000>;
185			};
186		};
187	};
188};
189
190/* mikroBUS, 1G SFP and GPIO expander */
191&cp0_i2c0 {
192	status = "okay";
193
194	pinctrl-names = "default";
195	pinctrl-0 = <&cp0_i2c0_pins>;
196	clock-frequency = <100000>;
197
198	sfp_gpio: pca9554@39 {
199		compatible = "nxp,pca9554";
200		pinctrl-names = "default";
201		pinctrl-0 = <&pca9554_int_pins>;
202		reg = <0x39>;
203
204		interrupt-parent = <&cp0_gpio1>;
205		interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
206		interrupt-controller;
207		#interrupt-cells = <2>;
208
209		gpio-controller;
210		#gpio-cells = <2>;
211
212		/*
213		 * IO0_0: SFP+_TX_FAULT
214		 * IO0_1: SFP+_TX_DISABLE
215		 * IO0_2: SFP+_PRSNT
216		 * IO0_3: SFP+_LOSS
217		 * IO0_4: SFP_TX_FAULT
218		 * IO0_5: SFP_TX_DISABLE
219		 * IO0_6: SFP_PRSNT
220		 * IO0_7: SFP_LOSS
221		 */
222	};
223};
224
225/* IS31FL3199, mini-PCIe and 10G SFP+ */
226&cp0_i2c1 {
227	status = "okay";
228
229	pinctrl-names = "default";
230	pinctrl-0 = <&cp0_i2c1_pins>;
231	clock-frequency = <100000>;
232
233	leds@64 {
234		compatible = "issi,is31fl3199";
235		#address-cells = <1>;
236		#size-cells = <0>;
237		pinctrl-names = "default";
238		pinctrl-0 = <&is31_sdb_pins>;
239		shutdown-gpios = <&cp0_gpio1 30 GPIO_ACTIVE_HIGH>;
240		reg = <0x64>;
241
242		led1_red: led@1 {
243			label = "red:led1";
244			reg = <1>;
245			led-max-microamp = <20000>;
246		};
247
248		led1_green: led@2 {
249			label = "green:led1";
250			reg = <2>;
251		};
252
253		led1_blue: led@3 {
254			label = "blue:led1";
255			reg = <3>;
256		};
257
258		led2_red: led@4 {
259			label = "red:led2";
260			reg = <4>;
261		};
262
263		led2_green: led@5 {
264			label = "green:led2";
265			reg = <5>;
266		};
267
268		led2_blue: led@6 {
269			label = "blue:led2";
270			reg = <6>;
271		};
272
273		led3_red: led@7 {
274			label = "red:led3";
275			reg = <7>;
276		};
277
278		led3_green: led@8 {
279			label = "green:led3";
280			reg = <8>;
281		};
282
283		led3_blue: led@9 {
284			label = "blue:led3";
285			reg = <9>;
286		};
287	};
288};
289
290&cp0_mdio {
291	status = "okay";
292
293	/* 88E1512 PHY */
294	eth2phy: ethernet-phy@1 {
295		reg = <1>;
296		sfp = <&sfp_eth2>;
297
298		pinctrl-names = "default";
299		pinctrl-0 = <&cp0_phy_pins>;
300		reset-gpios = <&cp0_gpio1 12 GPIO_ACTIVE_LOW>;
301	};
302
303	/* 88E6141 Topaz switch */
304	switch: switch@3 {
305		compatible = "marvell,mv88e6085";
306		#address-cells = <1>;
307		#size-cells = <0>;
308		reg = <3>;
309
310		pinctrl-names = "default";
311		pinctrl-0 = <&cp0_switch_pins>;
312		reset-gpios = <&cp0_gpio1 0 GPIO_ACTIVE_LOW>;
313
314		interrupt-parent = <&cp0_gpio1>;
315		interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
316
317		ports {
318			#address-cells = <1>;
319			#size-cells = <0>;
320
321			swport1: port@1 {
322				reg = <1>;
323				label = "lan0";
324				phy-handle = <&swphy1>;
325			};
326
327			swport2: port@2 {
328				reg = <2>;
329				label = "lan1";
330				phy-handle = <&swphy2>;
331			};
332
333			swport3: port@3 {
334				reg = <3>;
335				label = "lan2";
336				phy-handle = <&swphy3>;
337			};
338
339			swport4: port@4 {
340				reg = <4>;
341				label = "lan3";
342				phy-handle = <&swphy4>;
343			};
344
345			port@5 {
346				reg = <5>;
347				label = "cpu";
348				ethernet = <&cp0_eth1>;
349				phy-mode = "2500base-x";
350				managed = "in-band-status";
351			};
352		};
353
354		mdio {
355			#address-cells = <1>;
356			#size-cells = <0>;
357
358			swphy1: swphy1@17 {
359				reg = <17>;
360			};
361
362			swphy2: swphy2@18 {
363				reg = <18>;
364			};
365
366			swphy3: swphy3@19 {
367				reg = <19>;
368			};
369
370			swphy4: swphy4@20 {
371				reg = <20>;
372			};
373		};
374	};
375};
376
377&cp0_ethernet {
378	status = "okay";
379};
380
381/* 10G SFP+ */
382&cp0_eth0 {
383	status = "okay";
384
385	phy-mode = "10gbase-r";
386	phys = <&cp0_comphy4 0>;
387	managed = "in-band-status";
388	sfp = <&sfp_eth0>;
389};
390
391/* Topaz switch uplink */
392&cp0_eth1 {
393	status = "okay";
394
395	phy-mode = "2500base-x";
396	phys = <&cp0_comphy0 1>;
397
398	fixed-link {
399		speed = <2500>;
400		full-duplex;
401	};
402};
403
404/* 1G SFP or 1G RJ45 */
405&cp0_eth2 {
406	status = "okay";
407
408	pinctrl-names = "default";
409	pinctrl-0 = <&cp0_rgmii1_pins>;
410
411	phy = <&eth2phy>;
412	phy-mode = "rgmii-id";
413};
414
415&cp0_utmi {
416	status = "okay";
417};
418
419/* SMSC USB5434B hub */
420&cp0_usb3_0 {
421	status = "okay";
422
423	phys = <&cp0_comphy1 0>, <&cp0_utmi0>;
424	phy-names = "cp0-usb3h0-comphy", "utmi";
425};
426
427/* miniPCI-E USB */
428&cp0_usb3_1 {
429	status = "okay";
430};
431
432&cp0_sata0 {
433	status = "okay";
434
435	/* 7 + 12 SATA connector (J24) */
436	sata-port@0 {
437		phys = <&cp0_comphy2 0>;
438		phy-names = "cp0-sata0-0-phy";
439	};
440
441	/* M.2-2250 B-key (J39) */
442	sata-port@1 {
443		phys = <&cp0_comphy3 1>;
444		phy-names = "cp0-sata0-1-phy";
445	};
446};
447
448/* miniPCI-E (J5) */
449&cp0_pcie2 {
450	status = "okay";
451
452	pinctrl-names = "default", "clkreq";
453	pinctrl-0 = <&cp0_pcie_reset_pins>;
454	pinctrl-1 = <&cp0_pcie_clkreq_pins>;
455	phys = <&cp0_comphy5 2>;
456	phy-names = "cp0-pcie2-x1-phy";
457	reset-gpios = <&cp0_gpio1 9 GPIO_ACTIVE_LOW>;
458	ranges = <0x82000000 0x0 0xc0000000 0x0 0xc0000000 0x0 0x8000000>;
459};
460