// SPDX-License-Identifier: GPL-2.0+
/*
 * dts file for Xilinx ZynqMP zc1751-xm017-dc3
 *
 * (C) Copyright 2016 - 2021, Xilinx, Inc.
 *
 * Michal Simek <michal.simek@amd.com>
 */

/dts-v1/;

#include "zynqmp.dtsi"
#include "zynqmp-clk-ccf.dtsi"
#include <dt-bindings/phy/phy.h>

/ {
	model = "ZynqMP zc1751-xm017-dc3 RevA";
	compatible = "xlnx,zynqmp-zc1751", "xlnx,zynqmp";

	aliases {
		ethernet0 = &gem0;
		i2c0 = &i2c0;
		i2c1 = &i2c1;
		mmc0 = &sdhci1;
		rtc0 = &rtc;
		serial0 = &uart0;
		serial1 = &uart1;
		usb0 = &usb0;
		usb1 = &usb1;
	};

	chosen {
		bootargs = "earlycon";
		stdout-path = "serial0:115200n8";
	};

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x80000000>, <0x8 0x00000000 0x0 0x80000000>;
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		cma: linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			size = <0x0 0x8000000>;
			alignment = <0x0 0x8000000>;
			alloc-ranges = <0x0 0x0 0x0 0x80000000>;
			linux,cma-default;
		};
	};

	clock_si5338_2: clk26 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <26000000>;
	};

	clock_si5338_3: clk125 {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <125000000>;
	};
};

&fpd_dma_chan1 {
	status = "okay";
};

&fpd_dma_chan2 {
	status = "okay";
};

&fpd_dma_chan3 {
	status = "okay";
};

&fpd_dma_chan4 {
	status = "okay";
};

&fpd_dma_chan5 {
	status = "okay";
};

&fpd_dma_chan6 {
	status = "okay";
};

&fpd_dma_chan7 {
	status = "okay";
};

&fpd_dma_chan8 {
	status = "okay";
};

&gem0 {
	status = "okay";
	phy-handle = <&phy0>;
	phy-mode = "rgmii-id";
	mdio: mdio {
		#address-cells = <1>;
		#size-cells = <0>;
		phy0: ethernet-phy@0 { /* VSC8211 */
			reg = <0>;
		};
	};
};

&gpio {
	status = "okay";
};

/* just eeprom here */
&i2c0 {
	status = "okay";
	clock-frequency = <400000>;

	tca6416_u26: gpio@20 {
		compatible = "ti,tca6416";
		reg = <0x20>;
		gpio-controller;
		#gpio-cells = <2>;
		/* IRQ not connected */
	};

	rtc@68 {
		compatible = "dallas,ds1339";
		reg = <0x68>;
	};
};

/* eeprom24c02 and SE98A temp chip pca9306 */
&i2c1 {
	status = "okay";
	clock-frequency = <400000>;
};

/* MT29F64G08AECDBJ4-6 */
&nand0 {
	status = "okay";
	num-cs = <2>;

	nand@0 {
		reg = <0x0>;
		nand-ecc-mode = "hw";
		nand-rb = <0>;
		label = "main-storage-0";
		nand-ecc-step-size = <1024>;
		nand-ecc-strength = <24>;
		nand-on-flash-bbt;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <2>;
			#size-cells = <1>;

			partition@0 {	/* for testing purpose */
				label = "nand-fsbl-uboot";
				reg = <0x0 0x0 0x400000>;
			};
			partition@1 {	/* for testing purpose */
				label = "nand-linux";
				reg = <0x0 0x400000 0x1400000>;
			};
			partition@2 {	/* for testing purpose */
				label = "nand-device-tree";
				reg = <0x0 0x1800000 0x400000>;
			};
			partition@3 {	/* for testing purpose */
				label = "nand-rootfs";
				reg = <0x0 0x1c00000 0x1400000>;
			};
			partition@4 {	/* for testing purpose */
				label = "nand-bitstream";
				reg = <0x0 0x3000000 0x400000>;
			};
			partition@5 {	/* for testing purpose */
				label = "nand-misc";
				reg = <0x0 0x3400000 0xfcc00000>;
			};
		};
	};
	nand@1 {
		reg = <0x1>;
		nand-ecc-mode = "hw";
		nand-rb = <0>;
		label = "main-storage-1";
		nand-ecc-step-size = <1024>;
		nand-ecc-strength = <24>;
		nand-on-flash-bbt;
		partitions {
			compatible = "fixed-partitions";
			#address-cells = <2>;
			#size-cells = <1>;

			partition@0 {	/* for testing purpose */
				label = "nand1-fsbl-uboot";
				reg = <0x0 0x0 0x400000>;
			};
			partition@1 {	/* for testing purpose */
				label = "nand1-linux";
				reg = <0x0 0x400000 0x1400000>;
			};
			partition@2 {	/* for testing purpose */
				label = "nand1-device-tree";
				reg = <0x0 0x1800000 0x400000>;
			};
			partition@3 {	/* for testing purpose */
				label = "nand1-rootfs";
				reg = <0x0 0x1c00000 0x1400000>;
			};
			partition@4 {	/* for testing purpose */
				label = "nand1-bitstream";
				reg = <0x0 0x3000000 0x400000>;
			};
			partition@5 {	/* for testing purpose */
				label = "nand1-misc";
				reg = <0x0 0x3400000 0xfcc00000>;
			};
		};
	};
};

&psgtr {
	status = "okay";
	/* usb3, sata */
	clocks = <&clock_si5338_2>, <&clock_si5338_3>;
	clock-names = "ref2", "ref3";
};

&rtc {
	status = "okay";
};

&sata {
	status = "okay";
	/* SATA phy OOB timing settings */
	ceva,p0-cominit-params = /bits/ 8 <0x1B 0x4D 0x18 0x28>;
	ceva,p0-comwake-params = /bits/ 8 <0x06 0x19 0x08 0x0E>;
	ceva,p0-burst-params = /bits/ 8 <0x13 0x08 0x4A 0x06>;
	ceva,p0-retry-params = /bits/ 16 <0x96A4 0x3FFC>;
	ceva,p1-cominit-params = /bits/ 8 <0x1B 0x4D 0x18 0x28>;
	ceva,p1-comwake-params = /bits/ 8 <0x06 0x19 0x08 0x0E>;
	ceva,p1-burst-params = /bits/ 8 <0x13 0x08 0x4A 0x06>;
	ceva,p1-retry-params = /bits/ 16 <0x96A4 0x3FFC>;
	phy-names = "sata-phy";
	phys = <&psgtr 2 PHY_TYPE_SATA 0 3>;
};

&sdhci1 { /* emmc with some settings */
	status = "okay";
};

/* main */
&uart0 {
	status = "okay";
};

/* DB9 */
&uart1 {
	status = "okay";
};

&usb0 {
	status = "okay";
	phy-names = "usb3-phy";
	phys = <&psgtr 0 PHY_TYPE_USB3 0 2>;
};

&dwc3_0 {
	status = "okay";
	dr_mode = "host";
	snps,usb3_lpm_capable;
	maximum-speed = "super-speed";
};

/* ULPI SMSC USB3320 */
&usb1 {
	status = "okay";
	phy-names = "usb3-phy";
	phys = <&psgtr 3 PHY_TYPE_USB3 1 2>;
};

&dwc3_1 {
	status = "okay";
	dr_mode = "host";
	snps,usb3_lpm_capable;
	maximum-speed = "super-speed";
};
