// SPDX-License-Identifier: GPL-2.0
/*
 * dts file for KV260 revA Carrier Card
 *
 * (C) Copyright 2020 - 2022, Xilinx, Inc.
 * (C) Copyright 2022 - 2023, Advanced Micro Devices, Inc.
 *
 * Michal Simek <michal.simek@amd.com>
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/net/ti-dp83867.h>
#include <dt-bindings/phy/phy.h>
#include <dt-bindings/pinctrl/pinctrl-zynqmp.h>

/dts-v1/;
/plugin/;

&{/} {
	compatible = "xlnx,zynqmp-sk-kv260-rev2",
		     "xlnx,zynqmp-sk-kv260-rev1",
		     "xlnx,zynqmp-sk-kv260-revB",
		     "xlnx,zynqmp-sk-kv260", "xlnx,zynqmp";
	model = "ZynqMP KV260 revB";

	ina260-u14 {
		compatible = "iio-hwmon";
		io-channels = <&u14 0>, <&u14 1>, <&u14 2>;
	};

	si5332_0: si5332-0 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <125000000>;
	};

	si5332_1: si5332-1 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <25000000>;
	};

	si5332_2: si5332-2 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <48000000>;
	};

	si5332_3: si5332-3 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <24000000>;
	};

	si5332_4: si5332-4 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <26000000>;
	};

	si5332_5: si5332-5 { /* u17 */
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <27000000>;
	};

	dpcon {
		compatible = "dp-connector";
		label = "P11";
		type = "full-size";

		port {
			dpcon_in: endpoint {
				remote-endpoint = <&dpsub_dp_out>;
			};
		};
	};
};

&i2c1 { /* I2C_SCK C23/C24 - MIO from SOM */
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c1_default>;
	pinctrl-1 = <&pinctrl_i2c1_gpio>;
	scl-gpios = <&gpio 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
	sda-gpios = <&gpio 25 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;

	u14: ina260@40 { /* u14 */
		compatible = "ti,ina260";
		#io-channel-cells = <1>;
		label = "ina260-u14";
		reg = <0x40>;
	};
	/* u43 - 0x2d - USB hub */
	/* u27 - 0xe0 - STDP4320 DP/HDMI splitter */
};

/* DP/USB 3.0 */
&psgtr {
	status = "okay";
	/* pcie, usb3, sata */
	clocks = <&si5332_5>, <&si5332_4>, <&si5332_0>;
	clock-names = "ref0", "ref1", "ref2";
};

&zynqmp_dpsub {
	status = "okay";
	phy-names = "dp-phy0", "dp-phy1";
	phys = <&psgtr 1 PHY_TYPE_DP 0 0>, <&psgtr 0 PHY_TYPE_DP 1 0>;
	assigned-clock-rates = <27000000>, <25000000>, <300000000>;

	ports {
		port@5 {
			dpsub_dp_out: endpoint {
				remote-endpoint = <&dpcon_in>;
			};
		};
	};
};

&zynqmp_dpdma {
	status = "okay";
	assigned-clock-rates = <600000000>;
};

&usb0 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usb0_default>;
	phy-names = "usb3-phy";
	phys = <&psgtr 2 PHY_TYPE_USB3 0 1>;
	assigned-clock-rates = <250000000>, <20000000>;
#if 0
	usb5744: usb-hub { /* u43 */
		status = "okay";
		compatible = "microchip,usb5744";
		i2c-bus = <&i2c1>;
		reset-gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
	};
#endif
};

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

&sdhci1 { /* on CC with tuned parameters */
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_sdhci1_default>;
	/*
	 * SD 3.0 requires level shifter and this property
	 * should be removed if the board has level shifter and
	 * need to work in UHS mode
	 */
	no-1-8-v;
	disable-wp;
	xlnx,mio-bank = <1>;
	clk-phase-sd-hs = <126>, <60>;
	clk-phase-uhs-sdr25 = <120>, <60>;
	clk-phase-uhs-ddr50 = <126>, <48>;
	assigned-clock-rates = <187498123>;
	bus-width = <4>;
};

&gem3 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_gem3_default>;
	phy-handle = <&phy0>;
	phy-mode = "rgmii-id";
	assigned-clock-rates = <250000000>;

	mdio: mdio {
		#address-cells = <1>;
		#size-cells = <0>;

		phy0: ethernet-phy@1 {
			#phy-cells = <1>;
			reg = <1>;
			compatible = "ethernet-phy-id2000.a231";
			ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
			ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_75_NS>;
			ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
			ti,dp83867-rxctrl-strap-quirk;
			reset-assert-us = <100>;
			reset-deassert-us = <280>;
			reset-gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
		};
	};
};

&pinctrl0 {
	status = "okay";

	pinctrl_gpio0_default: gpio0-default {
		conf {
			groups = "gpio0_38_grp";
			bias-pull-up;
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		mux {
			groups = "gpio0_38_grp";
			function = "gpio0";
		};

		conf-tx {
			pins = "MIO38";
			bias-disable;
			output-enable;
		};
	};

	pinctrl_uart1_default: uart1-default {
		conf {
			groups = "uart1_9_grp";
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
			drive-strength = <12>;
		};

		conf-rx {
			pins = "MIO37";
			bias-high-impedance;
		};

		conf-tx {
			pins = "MIO36";
			bias-disable;
			output-enable;
		};

		mux {
			groups = "uart1_9_grp";
			function = "uart1";
		};
	};

	pinctrl_i2c1_default: i2c1-default {
		conf {
			groups = "i2c1_6_grp";
			bias-pull-up;
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		mux {
			groups = "i2c1_6_grp";
			function = "i2c1";
		};
	};

	pinctrl_i2c1_gpio: i2c1-gpio-grp {
		conf {
			groups = "gpio0_24_grp", "gpio0_25_grp";
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		mux {
			groups = "gpio0_24_grp", "gpio0_25_grp";
			function = "gpio0";
		};
	};

	pinctrl_gem3_default: gem3-default {
		conf {
			groups = "ethernet3_0_grp";
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		conf-rx {
			pins = "MIO70", "MIO72", "MIO74";
			bias-high-impedance;
			low-power-disable;
		};

		conf-bootstrap {
			pins = "MIO71", "MIO73", "MIO75";
			bias-disable;
			output-enable;
			low-power-disable;
		};

		conf-tx {
			pins = "MIO64", "MIO65", "MIO66",
				"MIO67", "MIO68", "MIO69";
			bias-disable;
			output-enable;
			low-power-enable;
		};

		conf-mdio {
			groups = "mdio3_0_grp";
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
			bias-disable;
			output-enable;
		};

		mux-mdio {
			function = "mdio3";
			groups = "mdio3_0_grp";
		};

		mux {
			function = "ethernet3";
			groups = "ethernet3_0_grp";
		};
	};

	pinctrl_usb0_default: usb0-default {
		conf {
			groups = "usb0_0_grp";
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		conf-rx {
			pins = "MIO52", "MIO53", "MIO55";
			bias-high-impedance;
			drive-strength = <12>;
			slew-rate = <SLEW_RATE_FAST>;
		};

		conf-tx {
			pins = "MIO54", "MIO56", "MIO57", "MIO58", "MIO59",
			"MIO60", "MIO61", "MIO62", "MIO63";
			bias-disable;
			output-enable;
			drive-strength = <4>;
			slew-rate = <SLEW_RATE_SLOW>;
		};

		mux {
			groups = "usb0_0_grp";
			function = "usb0";
		};
	};

	pinctrl_sdhci1_default: sdhci1-default {
		conf {
			groups = "sdio1_0_grp";
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
			bias-disable;
			output-enable;
		};

		conf-cd {
			groups = "sdio1_cd_0_grp";
			bias-high-impedance;
			bias-pull-up;
			slew-rate = <SLEW_RATE_SLOW>;
			power-source = <IO_STANDARD_LVCMOS18>;
		};

		mux-cd {
			groups = "sdio1_cd_0_grp";
			function = "sdio1_cd";
		};

		mux {
			groups = "sdio1_0_grp";
			function = "sdio1";
		};
	};
};

&gpio {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_gpio0_default>;
};

&uart1 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1_default>;
};
