// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) Siemens AG, 2018-2023
 *
 * Authors:
 *   Chao Zeng <chao.zeng@siemens.com>
 *   Jan Kiszka <jan.kiszka@siemens.com>
 *
 * AM6548-based (quad-core) IOT2050 M.2 variant (based on Advanced Product
 * Generation 2), 2 GB RAM, 16 GB eMMC, USB-serial converter on connector X30
 *
 * Product homepage:
 * https://new.siemens.com/global/en/products/automation/pc-based/iot-gateways/simatic-iot2050.html
 */

#include "k3-am6548-iot2050-advanced-common.dtsi"
#include "k3-am65-iot2050-common-pg2.dtsi"

/ {
	compatible = "siemens,iot2050-advanced-m2", "ti,am654";
	model = "SIMATIC IOT2050 Advanced M2";
};

&mcu_r5fss0 {
	/* lock-step mode not supported on this board */
	ti,cluster-mode = <0>;
};

&main_pmx0 {
	main_bkey_pcie_reset: main-bkey-pcie-reset-default-pins {
		pinctrl-single,pins = <
			AM65X_IOPAD(0x01bc, PIN_OUTPUT_PULLUP, 7)  /* (AG13) GPIO1_15 */
		>;
	};

	main_pmx0_m2_config_pins_default: main-pmx0-m2-config-default-pins {
		pinctrl-single,pins = <
			AM65X_IOPAD(0x01c8, PIN_INPUT_PULLUP, 7)  /* (AE13) GPIO1_18 */
			AM65X_IOPAD(0x01cc, PIN_INPUT_PULLUP, 7)  /* (AD13) GPIO1_19 */
		>;
	};

	main_m2_pcie_mux_control: main-m2-pcie-mux-control-default-pins {
		pinctrl-single,pins = <
			AM65X_IOPAD(0x0148, PIN_INPUT_PULLUP, 7)  /* (AG22) GPIO0_82 */
			AM65X_IOPAD(0x0160, PIN_INPUT_PULLUP, 7)  /* (AE20) GPIO0_88 */
			AM65X_IOPAD(0x0164, PIN_INPUT_PULLUP, 7)  /* (AF19) GPIO0_89 */
		>;
	};
};

&main_pmx1 {
	main_pmx1_m2_config_pins_default: main-pmx1-m2-config-default-pins {
		pinctrl-single,pins = <
			AM65X_IOPAD(0x0018, PIN_INPUT_PULLUP, 7)  /* (B22) GPIO1_88 */
			AM65X_IOPAD(0x001c, PIN_INPUT_PULLUP, 7)  /* (C23) GPIO1_89 */
		>;
	};
};

&main_gpio0 {
	pinctrl-names = "default";
	pinctrl-0 = <&main_m2_pcie_mux_control>;
};

&main_gpio1 {
	pinctrl-names = "default";
	pinctrl-0 =
		<&main_pcie_enable_pins_default>,
		<&main_pmx0_m2_config_pins_default>,
		<&main_pmx1_m2_config_pins_default>,
		<&cp2102n_reset_pin_default>;
};

/*
 * Base configuration for B-key slot with PCIe x2, E-key with USB 2.0 only.
 * Firmware switches to other modes via device tree overlays.
 */

&serdes0 {
	assigned-clocks = <&k3_clks 153 4>, <&serdes0 AM654_SERDES_CMU_REFCLK>;
	assigned-clock-parents = <&k3_clks 153 8>, <&k3_clks 153 4>;
};

&pcie0_rc {
	pinctrl-names = "default";
	pinctrl-0 = <&main_bkey_pcie_reset>;

	num-lanes = <2>;
	phys = <&serdes0 PHY_TYPE_PCIE 1>, <&serdes1 PHY_TYPE_PCIE 1>;
	phy-names = "pcie-phy0","pcie-phy1";
	reset-gpios = <&main_gpio1 15 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&pcie1_rc {
	status = "disabled";
};

&dwc3_0 {
	assigned-clock-parents = <&k3_clks 151 4>,  /* set REF_CLK to 20MHz i.e. PER0_PLL/48 */
				 <&k3_clks 151 9>;  /* set PIPE3_TXB_CLK to CLK_12M_RC/256 (for HS only) */
	/delete-property/ phys;
	/delete-property/ phy-names;
};

&usb0 {
	maximum-speed = "high-speed";
	/delete-property/ snps,dis-u1-entry-quirk;
	/delete-property/ snps,dis-u2-entry-quirk;
};
