162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Support for peripherals on the AXS10x mainboard
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com)
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/ {
962306a36Sopenharmony_ci	aliases {
1062306a36Sopenharmony_ci		ethernet = &gmac;
1162306a36Sopenharmony_ci	};
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	axs10x_mb {
1462306a36Sopenharmony_ci		compatible = "simple-bus";
1562306a36Sopenharmony_ci		#address-cells = <1>;
1662306a36Sopenharmony_ci		#size-cells = <1>;
1762306a36Sopenharmony_ci		ranges = <0x00000000 0x0 0xe0000000 0x10000000>;
1862306a36Sopenharmony_ci		interrupt-parent = <&mb_intc>;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci		creg_rst: reset-controller@11220 {
2162306a36Sopenharmony_ci			compatible = "snps,axs10x-reset";
2262306a36Sopenharmony_ci			#reset-cells = <1>;
2362306a36Sopenharmony_ci			reg = <0x11220 0x4>;
2462306a36Sopenharmony_ci		};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci		i2sclk: i2sclk@100a0 {
2762306a36Sopenharmony_ci			compatible = "snps,axs10x-i2s-pll-clock";
2862306a36Sopenharmony_ci			reg = <0x100a0 0x10>;
2962306a36Sopenharmony_ci			clocks = <&i2spll_clk>;
3062306a36Sopenharmony_ci			#clock-cells = <0>;
3162306a36Sopenharmony_ci		};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci		clocks {
3462306a36Sopenharmony_ci			i2spll_clk: i2spll_clk {
3562306a36Sopenharmony_ci				compatible = "fixed-clock";
3662306a36Sopenharmony_ci				clock-frequency = <27000000>;
3762306a36Sopenharmony_ci				#clock-cells = <0>;
3862306a36Sopenharmony_ci			};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci			i2cclk: i2cclk {
4162306a36Sopenharmony_ci				compatible = "fixed-clock";
4262306a36Sopenharmony_ci				clock-frequency = <50000000>;
4362306a36Sopenharmony_ci				#clock-cells = <0>;
4462306a36Sopenharmony_ci			};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci			apbclk: apbclk {
4762306a36Sopenharmony_ci				compatible = "fixed-clock";
4862306a36Sopenharmony_ci				clock-frequency = <50000000>;
4962306a36Sopenharmony_ci				#clock-cells = <0>;
5062306a36Sopenharmony_ci			};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci			mmcclk: mmcclk {
5362306a36Sopenharmony_ci				compatible = "fixed-clock";
5462306a36Sopenharmony_ci				/*
5562306a36Sopenharmony_ci				 * DW sdio controller has external ciu clock divider
5662306a36Sopenharmony_ci				 * controlled via register in SDIO IP. It divides
5762306a36Sopenharmony_ci				 * sdio_ref_clk (which comes from CGU) by 16 for
5862306a36Sopenharmony_ci				 * default. So default mmcclk clock (which comes
5962306a36Sopenharmony_ci				 * to sdk_in) is 25000000 Hz.
6062306a36Sopenharmony_ci				 */
6162306a36Sopenharmony_ci				clock-frequency = <25000000>;
6262306a36Sopenharmony_ci				#clock-cells = <0>;
6362306a36Sopenharmony_ci			};
6462306a36Sopenharmony_ci		};
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci		pguclk: pguclk@10080 {
6762306a36Sopenharmony_ci			compatible = "snps,axs10x-pgu-pll-clock";
6862306a36Sopenharmony_ci			reg = <0x10080 0x10>, <0x110 0x10>;
6962306a36Sopenharmony_ci			#clock-cells = <0>;
7062306a36Sopenharmony_ci			clocks = <&input_clk>;
7162306a36Sopenharmony_ci		};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci		gmac: ethernet@18000 {
7462306a36Sopenharmony_ci			#interrupt-cells = <1>;
7562306a36Sopenharmony_ci			compatible = "snps,dwmac";
7662306a36Sopenharmony_ci			reg = < 0x18000 0x2000 >;
7762306a36Sopenharmony_ci			interrupts = < 4 >;
7862306a36Sopenharmony_ci			interrupt-names = "macirq";
7962306a36Sopenharmony_ci			phy-mode = "rgmii";
8062306a36Sopenharmony_ci			snps,pbl = < 32 >;
8162306a36Sopenharmony_ci			snps,multicast-filter-bins = <256>;
8262306a36Sopenharmony_ci			clocks = <&apbclk>;
8362306a36Sopenharmony_ci			clock-names = "stmmaceth";
8462306a36Sopenharmony_ci			max-speed = <100>;
8562306a36Sopenharmony_ci			resets = <&creg_rst 5>;
8662306a36Sopenharmony_ci			reset-names = "stmmaceth";
8762306a36Sopenharmony_ci			mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
8862306a36Sopenharmony_ci		};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci		usb@40000 {
9162306a36Sopenharmony_ci			compatible = "generic-ehci";
9262306a36Sopenharmony_ci			reg = < 0x40000 0x100 >;
9362306a36Sopenharmony_ci			interrupts = < 8 >;
9462306a36Sopenharmony_ci		};
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci		usb@60000 {
9762306a36Sopenharmony_ci			compatible = "generic-ohci";
9862306a36Sopenharmony_ci			reg = < 0x60000 0x100 >;
9962306a36Sopenharmony_ci			interrupts = < 8 >;
10062306a36Sopenharmony_ci		};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci		/*
10362306a36Sopenharmony_ci		 * According to DW Mobile Storage databook it is required
10462306a36Sopenharmony_ci		 * to use  "Hold Register" if card is enumerated in SDR12 or
10562306a36Sopenharmony_ci		 * SDR25 modes.
10662306a36Sopenharmony_ci		 *
10762306a36Sopenharmony_ci		 * Utilization of "Hold Register" is already implemented via
10862306a36Sopenharmony_ci		 * dw_mci_pltfm_prepare_command() which in its turn gets
10962306a36Sopenharmony_ci		 * used through dw_mci_drv_data->prepare_command call-back.
11062306a36Sopenharmony_ci		 * This call-back is used in Altera Socfpga platform and so
11162306a36Sopenharmony_ci		 * we may reuse it saying that we're compatible with their
11262306a36Sopenharmony_ci		 * "altr,socfpga-dw-mshc".
11362306a36Sopenharmony_ci		 *
11462306a36Sopenharmony_ci		 * Most probably "Hold Register" utilization is platform-
11562306a36Sopenharmony_ci		 * independent requirement which means that single unified
11662306a36Sopenharmony_ci		 * "snps,dw-mshc" should be enough for all users of DW MMC once
11762306a36Sopenharmony_ci		 * dw_mci_pltfm_prepare_command() is used in generic platform
11862306a36Sopenharmony_ci		 * code.
11962306a36Sopenharmony_ci		 */
12062306a36Sopenharmony_ci		mmc@15000 {
12162306a36Sopenharmony_ci			compatible = "altr,socfpga-dw-mshc";
12262306a36Sopenharmony_ci			reg = < 0x15000 0x400 >;
12362306a36Sopenharmony_ci			fifo-depth = < 16 >;
12462306a36Sopenharmony_ci			card-detect-delay = < 200 >;
12562306a36Sopenharmony_ci			clocks = <&apbclk>, <&mmcclk>;
12662306a36Sopenharmony_ci			clock-names = "biu", "ciu";
12762306a36Sopenharmony_ci			interrupts = < 7 >;
12862306a36Sopenharmony_ci			bus-width = < 4 >;
12962306a36Sopenharmony_ci		};
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci		uart@20000 {
13262306a36Sopenharmony_ci			compatible = "snps,dw-apb-uart";
13362306a36Sopenharmony_ci			reg = <0x20000 0x100>;
13462306a36Sopenharmony_ci			clock-frequency = <33333333>;
13562306a36Sopenharmony_ci			interrupts = <17>;
13662306a36Sopenharmony_ci			baud = <115200>;
13762306a36Sopenharmony_ci			reg-shift = <2>;
13862306a36Sopenharmony_ci			reg-io-width = <4>;
13962306a36Sopenharmony_ci		};
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ci		uart@21000 {
14262306a36Sopenharmony_ci			compatible = "snps,dw-apb-uart";
14362306a36Sopenharmony_ci			reg = <0x21000 0x100>;
14462306a36Sopenharmony_ci			clock-frequency = <33333333>;
14562306a36Sopenharmony_ci			interrupts = <18>;
14662306a36Sopenharmony_ci			baud = <115200>;
14762306a36Sopenharmony_ci			reg-shift = <2>;
14862306a36Sopenharmony_ci			reg-io-width = <4>;
14962306a36Sopenharmony_ci		};
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci		/* UART muxed with USB data port (ttyS3) */
15262306a36Sopenharmony_ci		uart@22000 {
15362306a36Sopenharmony_ci			compatible = "snps,dw-apb-uart";
15462306a36Sopenharmony_ci			reg = <0x22000 0x100>;
15562306a36Sopenharmony_ci			clock-frequency = <33333333>;
15662306a36Sopenharmony_ci			interrupts = <19>;
15762306a36Sopenharmony_ci			baud = <115200>;
15862306a36Sopenharmony_ci			reg-shift = <2>;
15962306a36Sopenharmony_ci			reg-io-width = <4>;
16062306a36Sopenharmony_ci		};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci		i2c@1d000 {
16362306a36Sopenharmony_ci			compatible = "snps,designware-i2c";
16462306a36Sopenharmony_ci			reg = <0x1d000 0x100>;
16562306a36Sopenharmony_ci			clock-frequency = <400000>;
16662306a36Sopenharmony_ci			clocks = <&i2cclk>;
16762306a36Sopenharmony_ci			interrupts = <14>;
16862306a36Sopenharmony_ci		};
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci		i2s: i2s@1e000 {
17162306a36Sopenharmony_ci			compatible = "snps,designware-i2s";
17262306a36Sopenharmony_ci			reg = <0x1e000 0x100>;
17362306a36Sopenharmony_ci			clocks = <&i2sclk 0>;
17462306a36Sopenharmony_ci			clock-names = "i2sclk";
17562306a36Sopenharmony_ci			interrupts = <15>;
17662306a36Sopenharmony_ci			#sound-dai-cells = <0>;
17762306a36Sopenharmony_ci		};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci		i2c@1f000 {
18062306a36Sopenharmony_ci			compatible = "snps,designware-i2c";
18162306a36Sopenharmony_ci			#address-cells = <1>;
18262306a36Sopenharmony_ci			#size-cells = <0>;
18362306a36Sopenharmony_ci			reg = <0x1f000 0x100>;
18462306a36Sopenharmony_ci			clock-frequency = <400000>;
18562306a36Sopenharmony_ci			clocks = <&i2cclk>;
18662306a36Sopenharmony_ci			interrupts = <16>;
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci			adv7511:adv7511@39{
18962306a36Sopenharmony_ci				compatible="adi,adv7511";
19062306a36Sopenharmony_ci				reg = <0x39>;
19162306a36Sopenharmony_ci				interrupts = <23>;
19262306a36Sopenharmony_ci				adi,input-depth = <8>;
19362306a36Sopenharmony_ci				adi,input-colorspace = "rgb";
19462306a36Sopenharmony_ci				adi,input-clock = "1x";
19562306a36Sopenharmony_ci				adi,clock-delay = <0x03>;
19662306a36Sopenharmony_ci				#sound-dai-cells = <0>;
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci				ports {
19962306a36Sopenharmony_ci					#address-cells = <1>;
20062306a36Sopenharmony_ci					#size-cells = <0>;
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci					/* RGB/YUV input */
20362306a36Sopenharmony_ci					port@0 {
20462306a36Sopenharmony_ci						reg = <0>;
20562306a36Sopenharmony_ci						adv7511_input:endpoint {
20662306a36Sopenharmony_ci						remote-endpoint = <&pgu_output>;
20762306a36Sopenharmony_ci						};
20862306a36Sopenharmony_ci					};
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci					/* HDMI output */
21162306a36Sopenharmony_ci					port@1 {
21262306a36Sopenharmony_ci						reg = <1>;
21362306a36Sopenharmony_ci						adv7511_output: endpoint {
21462306a36Sopenharmony_ci							remote-endpoint = <&hdmi_connector_in>;
21562306a36Sopenharmony_ci						};
21662306a36Sopenharmony_ci					};
21762306a36Sopenharmony_ci				};
21862306a36Sopenharmony_ci			};
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci			eeprom@54{
22162306a36Sopenharmony_ci				compatible = "atmel,24c01";
22262306a36Sopenharmony_ci				reg = <0x54>;
22362306a36Sopenharmony_ci				pagesize = <0x8>;
22462306a36Sopenharmony_ci			};
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci			eeprom@57{
22762306a36Sopenharmony_ci				compatible = "atmel,24c04";
22862306a36Sopenharmony_ci				reg = <0x57>;
22962306a36Sopenharmony_ci				pagesize = <0x8>;
23062306a36Sopenharmony_ci			};
23162306a36Sopenharmony_ci		};
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci		hdmi0: connector {
23462306a36Sopenharmony_ci			compatible = "hdmi-connector";
23562306a36Sopenharmony_ci			type = "a";
23662306a36Sopenharmony_ci			port {
23762306a36Sopenharmony_ci				hdmi_connector_in: endpoint {
23862306a36Sopenharmony_ci					remote-endpoint = <&adv7511_output>;
23962306a36Sopenharmony_ci				};
24062306a36Sopenharmony_ci			};
24162306a36Sopenharmony_ci		};
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci		gpio0:gpio@13000 {
24462306a36Sopenharmony_ci			compatible = "snps,dw-apb-gpio";
24562306a36Sopenharmony_ci			reg = <0x13000 0x1000>;
24662306a36Sopenharmony_ci			#address-cells = <1>;
24762306a36Sopenharmony_ci			#size-cells = <0>;
24862306a36Sopenharmony_ci
24962306a36Sopenharmony_ci			gpio0_banka: gpio-controller@0 {
25062306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
25162306a36Sopenharmony_ci				gpio-controller;
25262306a36Sopenharmony_ci				#gpio-cells = <2>;
25362306a36Sopenharmony_ci				snps,nr-gpios = <32>;
25462306a36Sopenharmony_ci				reg = <0>;
25562306a36Sopenharmony_ci			};
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci			gpio0_bankb: gpio-controller@1 {
25862306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
25962306a36Sopenharmony_ci				gpio-controller;
26062306a36Sopenharmony_ci				#gpio-cells = <2>;
26162306a36Sopenharmony_ci				snps,nr-gpios = <8>;
26262306a36Sopenharmony_ci				reg = <1>;
26362306a36Sopenharmony_ci			};
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci			gpio0_bankc: gpio-controller@2 {
26662306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
26762306a36Sopenharmony_ci				gpio-controller;
26862306a36Sopenharmony_ci				#gpio-cells = <2>;
26962306a36Sopenharmony_ci				snps,nr-gpios = <8>;
27062306a36Sopenharmony_ci				reg = <2>;
27162306a36Sopenharmony_ci			};
27262306a36Sopenharmony_ci		};
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci		gpio1:gpio@14000 {
27562306a36Sopenharmony_ci			compatible = "snps,dw-apb-gpio";
27662306a36Sopenharmony_ci			reg = <0x14000 0x1000>;
27762306a36Sopenharmony_ci			#address-cells = <1>;
27862306a36Sopenharmony_ci			#size-cells = <0>;
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci			gpio1_banka: gpio-controller@0 {
28162306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
28262306a36Sopenharmony_ci				gpio-controller;
28362306a36Sopenharmony_ci				#gpio-cells = <2>;
28462306a36Sopenharmony_ci				snps,nr-gpios = <30>;
28562306a36Sopenharmony_ci				reg = <0>;
28662306a36Sopenharmony_ci			};
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci			gpio1_bankb: gpio-controller@1 {
28962306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
29062306a36Sopenharmony_ci				gpio-controller;
29162306a36Sopenharmony_ci				#gpio-cells = <2>;
29262306a36Sopenharmony_ci				snps,nr-gpios = <10>;
29362306a36Sopenharmony_ci				reg = <1>;
29462306a36Sopenharmony_ci			};
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci			gpio1_bankc: gpio-controller@2 {
29762306a36Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
29862306a36Sopenharmony_ci				gpio-controller;
29962306a36Sopenharmony_ci				#gpio-cells = <2>;
30062306a36Sopenharmony_ci				snps,nr-gpios = <8>;
30162306a36Sopenharmony_ci				reg = <2>;
30262306a36Sopenharmony_ci			};
30362306a36Sopenharmony_ci		};
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci		pgu@17000 {
30662306a36Sopenharmony_ci			compatible = "snps,arcpgu";
30762306a36Sopenharmony_ci			reg = <0x17000 0x400>;
30862306a36Sopenharmony_ci			clocks = <&pguclk>;
30962306a36Sopenharmony_ci			clock-names = "pxlclk";
31062306a36Sopenharmony_ci			memory-region = <&frame_buffer>;
31162306a36Sopenharmony_ci			port {
31262306a36Sopenharmony_ci				pgu_output: endpoint {
31362306a36Sopenharmony_ci					remote-endpoint = <&adv7511_input>;
31462306a36Sopenharmony_ci				};
31562306a36Sopenharmony_ci			};
31662306a36Sopenharmony_ci		};
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci		sound_playback {
31962306a36Sopenharmony_ci			compatible = "simple-audio-card";
32062306a36Sopenharmony_ci			simple-audio-card,name = "AXS10x HDMI Audio";
32162306a36Sopenharmony_ci			simple-audio-card,format = "i2s";
32262306a36Sopenharmony_ci			simple-audio-card,cpu {
32362306a36Sopenharmony_ci				sound-dai = <&i2s>;
32462306a36Sopenharmony_ci			};
32562306a36Sopenharmony_ci			simple-audio-card,codec {
32662306a36Sopenharmony_ci				sound-dai = <&adv7511>;
32762306a36Sopenharmony_ci			};
32862306a36Sopenharmony_ci		};
32962306a36Sopenharmony_ci	};
33062306a36Sopenharmony_ci};
331