18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Support for peripherals on the AXS10x mainboard
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com)
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci/ {
98c2ecf20Sopenharmony_ci	aliases {
108c2ecf20Sopenharmony_ci		ethernet = &gmac;
118c2ecf20Sopenharmony_ci	};
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci	axs10x_mb {
148c2ecf20Sopenharmony_ci		compatible = "simple-bus";
158c2ecf20Sopenharmony_ci		#address-cells = <1>;
168c2ecf20Sopenharmony_ci		#size-cells = <1>;
178c2ecf20Sopenharmony_ci		ranges = <0x00000000 0x0 0xe0000000 0x10000000>;
188c2ecf20Sopenharmony_ci		interrupt-parent = <&mb_intc>;
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci		creg_rst: reset-controller@11220 {
218c2ecf20Sopenharmony_ci			compatible = "snps,axs10x-reset";
228c2ecf20Sopenharmony_ci			#reset-cells = <1>;
238c2ecf20Sopenharmony_ci			reg = <0x11220 0x4>;
248c2ecf20Sopenharmony_ci		};
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci		i2sclk: i2sclk@100a0 {
278c2ecf20Sopenharmony_ci			compatible = "snps,axs10x-i2s-pll-clock";
288c2ecf20Sopenharmony_ci			reg = <0x100a0 0x10>;
298c2ecf20Sopenharmony_ci			clocks = <&i2spll_clk>;
308c2ecf20Sopenharmony_ci			#clock-cells = <0>;
318c2ecf20Sopenharmony_ci		};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci		clocks {
348c2ecf20Sopenharmony_ci			i2spll_clk: i2spll_clk {
358c2ecf20Sopenharmony_ci				compatible = "fixed-clock";
368c2ecf20Sopenharmony_ci				clock-frequency = <27000000>;
378c2ecf20Sopenharmony_ci				#clock-cells = <0>;
388c2ecf20Sopenharmony_ci			};
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci			i2cclk: i2cclk {
418c2ecf20Sopenharmony_ci				compatible = "fixed-clock";
428c2ecf20Sopenharmony_ci				clock-frequency = <50000000>;
438c2ecf20Sopenharmony_ci				#clock-cells = <0>;
448c2ecf20Sopenharmony_ci			};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci			apbclk: apbclk {
478c2ecf20Sopenharmony_ci				compatible = "fixed-clock";
488c2ecf20Sopenharmony_ci				clock-frequency = <50000000>;
498c2ecf20Sopenharmony_ci				#clock-cells = <0>;
508c2ecf20Sopenharmony_ci			};
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci			mmcclk: mmcclk {
538c2ecf20Sopenharmony_ci				compatible = "fixed-clock";
548c2ecf20Sopenharmony_ci				/*
558c2ecf20Sopenharmony_ci				 * DW sdio controller has external ciu clock divider
568c2ecf20Sopenharmony_ci				 * controlled via register in SDIO IP. It divides
578c2ecf20Sopenharmony_ci				 * sdio_ref_clk (which comes from CGU) by 16 for
588c2ecf20Sopenharmony_ci				 * default. So default mmcclk clock (which comes
598c2ecf20Sopenharmony_ci				 * to sdk_in) is 25000000 Hz.
608c2ecf20Sopenharmony_ci				 */
618c2ecf20Sopenharmony_ci				clock-frequency = <25000000>;
628c2ecf20Sopenharmony_ci				#clock-cells = <0>;
638c2ecf20Sopenharmony_ci			};
648c2ecf20Sopenharmony_ci		};
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci		pguclk: pguclk@10080 {
678c2ecf20Sopenharmony_ci			compatible = "snps,axs10x-pgu-pll-clock";
688c2ecf20Sopenharmony_ci			reg = <0x10080 0x10>, <0x110 0x10>;
698c2ecf20Sopenharmony_ci			#clock-cells = <0>;
708c2ecf20Sopenharmony_ci			clocks = <&input_clk>;
718c2ecf20Sopenharmony_ci		};
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci		gmac: ethernet@18000 {
748c2ecf20Sopenharmony_ci			#interrupt-cells = <1>;
758c2ecf20Sopenharmony_ci			compatible = "snps,dwmac";
768c2ecf20Sopenharmony_ci			reg = < 0x18000 0x2000 >;
778c2ecf20Sopenharmony_ci			interrupts = < 4 >;
788c2ecf20Sopenharmony_ci			interrupt-names = "macirq";
798c2ecf20Sopenharmony_ci			phy-mode = "rgmii";
808c2ecf20Sopenharmony_ci			snps,pbl = < 32 >;
818c2ecf20Sopenharmony_ci			snps,multicast-filter-bins = <256>;
828c2ecf20Sopenharmony_ci			clocks = <&apbclk>;
838c2ecf20Sopenharmony_ci			clock-names = "stmmaceth";
848c2ecf20Sopenharmony_ci			max-speed = <100>;
858c2ecf20Sopenharmony_ci			resets = <&creg_rst 5>;
868c2ecf20Sopenharmony_ci			reset-names = "stmmaceth";
878c2ecf20Sopenharmony_ci			mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
888c2ecf20Sopenharmony_ci		};
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci		ehci@40000 {
918c2ecf20Sopenharmony_ci			compatible = "generic-ehci";
928c2ecf20Sopenharmony_ci			reg = < 0x40000 0x100 >;
938c2ecf20Sopenharmony_ci			interrupts = < 8 >;
948c2ecf20Sopenharmony_ci		};
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci		ohci@60000 {
978c2ecf20Sopenharmony_ci			compatible = "generic-ohci";
988c2ecf20Sopenharmony_ci			reg = < 0x60000 0x100 >;
998c2ecf20Sopenharmony_ci			interrupts = < 8 >;
1008c2ecf20Sopenharmony_ci		};
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci		/*
1038c2ecf20Sopenharmony_ci		 * According to DW Mobile Storage databook it is required
1048c2ecf20Sopenharmony_ci		 * to use  "Hold Register" if card is enumerated in SDR12 or
1058c2ecf20Sopenharmony_ci		 * SDR25 modes.
1068c2ecf20Sopenharmony_ci		 *
1078c2ecf20Sopenharmony_ci		 * Utilization of "Hold Register" is already implemented via
1088c2ecf20Sopenharmony_ci		 * dw_mci_pltfm_prepare_command() which in its turn gets
1098c2ecf20Sopenharmony_ci		 * used through dw_mci_drv_data->prepare_command call-back.
1108c2ecf20Sopenharmony_ci		 * This call-back is used in Altera Socfpga platform and so
1118c2ecf20Sopenharmony_ci		 * we may reuse it saying that we're compatible with their
1128c2ecf20Sopenharmony_ci		 * "altr,socfpga-dw-mshc".
1138c2ecf20Sopenharmony_ci		 *
1148c2ecf20Sopenharmony_ci		 * Most probably "Hold Register" utilization is platform-
1158c2ecf20Sopenharmony_ci		 * independent requirement which means that single unified
1168c2ecf20Sopenharmony_ci		 * "snps,dw-mshc" should be enough for all users of DW MMC once
1178c2ecf20Sopenharmony_ci		 * dw_mci_pltfm_prepare_command() is used in generic platform
1188c2ecf20Sopenharmony_ci		 * code.
1198c2ecf20Sopenharmony_ci		 */
1208c2ecf20Sopenharmony_ci		mmc@15000 {
1218c2ecf20Sopenharmony_ci			compatible = "altr,socfpga-dw-mshc";
1228c2ecf20Sopenharmony_ci			reg = < 0x15000 0x400 >;
1238c2ecf20Sopenharmony_ci			fifo-depth = < 16 >;
1248c2ecf20Sopenharmony_ci			card-detect-delay = < 200 >;
1258c2ecf20Sopenharmony_ci			clocks = <&apbclk>, <&mmcclk>;
1268c2ecf20Sopenharmony_ci			clock-names = "biu", "ciu";
1278c2ecf20Sopenharmony_ci			interrupts = < 7 >;
1288c2ecf20Sopenharmony_ci			bus-width = < 4 >;
1298c2ecf20Sopenharmony_ci		};
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_ci		uart@20000 {
1328c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-uart";
1338c2ecf20Sopenharmony_ci			reg = <0x20000 0x100>;
1348c2ecf20Sopenharmony_ci			clock-frequency = <33333333>;
1358c2ecf20Sopenharmony_ci			interrupts = <17>;
1368c2ecf20Sopenharmony_ci			baud = <115200>;
1378c2ecf20Sopenharmony_ci			reg-shift = <2>;
1388c2ecf20Sopenharmony_ci			reg-io-width = <4>;
1398c2ecf20Sopenharmony_ci		};
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci		uart@21000 {
1428c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-uart";
1438c2ecf20Sopenharmony_ci			reg = <0x21000 0x100>;
1448c2ecf20Sopenharmony_ci			clock-frequency = <33333333>;
1458c2ecf20Sopenharmony_ci			interrupts = <18>;
1468c2ecf20Sopenharmony_ci			baud = <115200>;
1478c2ecf20Sopenharmony_ci			reg-shift = <2>;
1488c2ecf20Sopenharmony_ci			reg-io-width = <4>;
1498c2ecf20Sopenharmony_ci		};
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci		/* UART muxed with USB data port (ttyS3) */
1528c2ecf20Sopenharmony_ci		uart@22000 {
1538c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-uart";
1548c2ecf20Sopenharmony_ci			reg = <0x22000 0x100>;
1558c2ecf20Sopenharmony_ci			clock-frequency = <33333333>;
1568c2ecf20Sopenharmony_ci			interrupts = <19>;
1578c2ecf20Sopenharmony_ci			baud = <115200>;
1588c2ecf20Sopenharmony_ci			reg-shift = <2>;
1598c2ecf20Sopenharmony_ci			reg-io-width = <4>;
1608c2ecf20Sopenharmony_ci		};
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci		i2c@1d000 {
1638c2ecf20Sopenharmony_ci			compatible = "snps,designware-i2c";
1648c2ecf20Sopenharmony_ci			reg = <0x1d000 0x100>;
1658c2ecf20Sopenharmony_ci			clock-frequency = <400000>;
1668c2ecf20Sopenharmony_ci			clocks = <&i2cclk>;
1678c2ecf20Sopenharmony_ci			interrupts = <14>;
1688c2ecf20Sopenharmony_ci		};
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_ci		i2s: i2s@1e000 {
1718c2ecf20Sopenharmony_ci			compatible = "snps,designware-i2s";
1728c2ecf20Sopenharmony_ci			reg = <0x1e000 0x100>;
1738c2ecf20Sopenharmony_ci			clocks = <&i2sclk 0>;
1748c2ecf20Sopenharmony_ci			clock-names = "i2sclk";
1758c2ecf20Sopenharmony_ci			interrupts = <15>;
1768c2ecf20Sopenharmony_ci			#sound-dai-cells = <0>;
1778c2ecf20Sopenharmony_ci		};
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci		i2c@1f000 {
1808c2ecf20Sopenharmony_ci			compatible = "snps,designware-i2c";
1818c2ecf20Sopenharmony_ci			#address-cells = <1>;
1828c2ecf20Sopenharmony_ci			#size-cells = <0>;
1838c2ecf20Sopenharmony_ci			reg = <0x1f000 0x100>;
1848c2ecf20Sopenharmony_ci			clock-frequency = <400000>;
1858c2ecf20Sopenharmony_ci			clocks = <&i2cclk>;
1868c2ecf20Sopenharmony_ci			interrupts = <16>;
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci			adv7511:adv7511@39{
1898c2ecf20Sopenharmony_ci				compatible="adi,adv7511";
1908c2ecf20Sopenharmony_ci				reg = <0x39>;
1918c2ecf20Sopenharmony_ci				interrupts = <23>;
1928c2ecf20Sopenharmony_ci				adi,input-depth = <8>;
1938c2ecf20Sopenharmony_ci				adi,input-colorspace = "rgb";
1948c2ecf20Sopenharmony_ci				adi,input-clock = "1x";
1958c2ecf20Sopenharmony_ci				adi,clock-delay = <0x03>;
1968c2ecf20Sopenharmony_ci				#sound-dai-cells = <0>;
1978c2ecf20Sopenharmony_ci
1988c2ecf20Sopenharmony_ci				ports {
1998c2ecf20Sopenharmony_ci					#address-cells = <1>;
2008c2ecf20Sopenharmony_ci					#size-cells = <0>;
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci					/* RGB/YUV input */
2038c2ecf20Sopenharmony_ci					port@0 {
2048c2ecf20Sopenharmony_ci						reg = <0>;
2058c2ecf20Sopenharmony_ci						adv7511_input:endpoint {
2068c2ecf20Sopenharmony_ci						remote-endpoint = <&pgu_output>;
2078c2ecf20Sopenharmony_ci						};
2088c2ecf20Sopenharmony_ci					};
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci					/* HDMI output */
2118c2ecf20Sopenharmony_ci					port@1 {
2128c2ecf20Sopenharmony_ci						reg = <1>;
2138c2ecf20Sopenharmony_ci						adv7511_output: endpoint {
2148c2ecf20Sopenharmony_ci							remote-endpoint = <&hdmi_connector_in>;
2158c2ecf20Sopenharmony_ci						};
2168c2ecf20Sopenharmony_ci					};
2178c2ecf20Sopenharmony_ci				};
2188c2ecf20Sopenharmony_ci			};
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci			eeprom@54{
2218c2ecf20Sopenharmony_ci				compatible = "atmel,24c01";
2228c2ecf20Sopenharmony_ci				reg = <0x54>;
2238c2ecf20Sopenharmony_ci				pagesize = <0x8>;
2248c2ecf20Sopenharmony_ci			};
2258c2ecf20Sopenharmony_ci
2268c2ecf20Sopenharmony_ci			eeprom@57{
2278c2ecf20Sopenharmony_ci				compatible = "atmel,24c04";
2288c2ecf20Sopenharmony_ci				reg = <0x57>;
2298c2ecf20Sopenharmony_ci				pagesize = <0x8>;
2308c2ecf20Sopenharmony_ci			};
2318c2ecf20Sopenharmony_ci		};
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_ci		hdmi0: connector {
2348c2ecf20Sopenharmony_ci			compatible = "hdmi-connector";
2358c2ecf20Sopenharmony_ci			type = "a";
2368c2ecf20Sopenharmony_ci			port {
2378c2ecf20Sopenharmony_ci				hdmi_connector_in: endpoint {
2388c2ecf20Sopenharmony_ci					remote-endpoint = <&adv7511_output>;
2398c2ecf20Sopenharmony_ci				};
2408c2ecf20Sopenharmony_ci			};
2418c2ecf20Sopenharmony_ci		};
2428c2ecf20Sopenharmony_ci
2438c2ecf20Sopenharmony_ci		gpio0:gpio@13000 {
2448c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-gpio";
2458c2ecf20Sopenharmony_ci			reg = <0x13000 0x1000>;
2468c2ecf20Sopenharmony_ci			#address-cells = <1>;
2478c2ecf20Sopenharmony_ci			#size-cells = <0>;
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ci			gpio0_banka: gpio-controller@0 {
2508c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2518c2ecf20Sopenharmony_ci				gpio-controller;
2528c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
2538c2ecf20Sopenharmony_ci				snps,nr-gpios = <32>;
2548c2ecf20Sopenharmony_ci				reg = <0>;
2558c2ecf20Sopenharmony_ci			};
2568c2ecf20Sopenharmony_ci
2578c2ecf20Sopenharmony_ci			gpio0_bankb: gpio-controller@1 {
2588c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2598c2ecf20Sopenharmony_ci				gpio-controller;
2608c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
2618c2ecf20Sopenharmony_ci				snps,nr-gpios = <8>;
2628c2ecf20Sopenharmony_ci				reg = <1>;
2638c2ecf20Sopenharmony_ci			};
2648c2ecf20Sopenharmony_ci
2658c2ecf20Sopenharmony_ci			gpio0_bankc: gpio-controller@2 {
2668c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2678c2ecf20Sopenharmony_ci				gpio-controller;
2688c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
2698c2ecf20Sopenharmony_ci				snps,nr-gpios = <8>;
2708c2ecf20Sopenharmony_ci				reg = <2>;
2718c2ecf20Sopenharmony_ci			};
2728c2ecf20Sopenharmony_ci		};
2738c2ecf20Sopenharmony_ci
2748c2ecf20Sopenharmony_ci		gpio1:gpio@14000 {
2758c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-gpio";
2768c2ecf20Sopenharmony_ci			reg = <0x14000 0x1000>;
2778c2ecf20Sopenharmony_ci			#address-cells = <1>;
2788c2ecf20Sopenharmony_ci			#size-cells = <0>;
2798c2ecf20Sopenharmony_ci
2808c2ecf20Sopenharmony_ci			gpio1_banka: gpio-controller@0 {
2818c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2828c2ecf20Sopenharmony_ci				gpio-controller;
2838c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
2848c2ecf20Sopenharmony_ci				snps,nr-gpios = <30>;
2858c2ecf20Sopenharmony_ci				reg = <0>;
2868c2ecf20Sopenharmony_ci			};
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci			gpio1_bankb: gpio-controller@1 {
2898c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2908c2ecf20Sopenharmony_ci				gpio-controller;
2918c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
2928c2ecf20Sopenharmony_ci				snps,nr-gpios = <10>;
2938c2ecf20Sopenharmony_ci				reg = <1>;
2948c2ecf20Sopenharmony_ci			};
2958c2ecf20Sopenharmony_ci
2968c2ecf20Sopenharmony_ci			gpio1_bankc: gpio-controller@2 {
2978c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
2988c2ecf20Sopenharmony_ci				gpio-controller;
2998c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
3008c2ecf20Sopenharmony_ci				snps,nr-gpios = <8>;
3018c2ecf20Sopenharmony_ci				reg = <2>;
3028c2ecf20Sopenharmony_ci			};
3038c2ecf20Sopenharmony_ci		};
3048c2ecf20Sopenharmony_ci
3058c2ecf20Sopenharmony_ci		pgu@17000 {
3068c2ecf20Sopenharmony_ci			compatible = "snps,arcpgu";
3078c2ecf20Sopenharmony_ci			reg = <0x17000 0x400>;
3088c2ecf20Sopenharmony_ci			clocks = <&pguclk>;
3098c2ecf20Sopenharmony_ci			clock-names = "pxlclk";
3108c2ecf20Sopenharmony_ci			memory-region = <&frame_buffer>;
3118c2ecf20Sopenharmony_ci			port {
3128c2ecf20Sopenharmony_ci				pgu_output: endpoint {
3138c2ecf20Sopenharmony_ci					remote-endpoint = <&adv7511_input>;
3148c2ecf20Sopenharmony_ci				};
3158c2ecf20Sopenharmony_ci			};
3168c2ecf20Sopenharmony_ci		};
3178c2ecf20Sopenharmony_ci
3188c2ecf20Sopenharmony_ci		sound_playback {
3198c2ecf20Sopenharmony_ci			compatible = "simple-audio-card";
3208c2ecf20Sopenharmony_ci			simple-audio-card,name = "AXS10x HDMI Audio";
3218c2ecf20Sopenharmony_ci			simple-audio-card,format = "i2s";
3228c2ecf20Sopenharmony_ci			simple-audio-card,cpu {
3238c2ecf20Sopenharmony_ci				sound-dai = <&i2s>;
3248c2ecf20Sopenharmony_ci			};
3258c2ecf20Sopenharmony_ci			simple-audio-card,codec {
3268c2ecf20Sopenharmony_ci				sound-dai = <&adv7511>;
3278c2ecf20Sopenharmony_ci			};
3288c2ecf20Sopenharmony_ci		};
3298c2ecf20Sopenharmony_ci	};
3308c2ecf20Sopenharmony_ci};
331