/*
 * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/dts-v1/;
#include "ipq5018-soc.dtsi"
/ {
	model ="QCA, IPQ5018-MP03.3";
	compatible = "qca,ipq5018", "qca,ipq5018-mp03.3";
	machid = <0x8040002>;
	config_name = "config@mp03.3";

	aliases {
		console = "/serial@78AF000";
		mmc = "/sdhci@7804000";
		i2c0 = "/i2c@78b7000";
		gmac_gpio = "/gmac_gpio";
		usb0 = "/xhci@8a00000";
		pci0 = "/pci@80000000";
		pci1 = "/pci@a0000000";
		nand = "/nand-controller@79B0000";
	};

	console: serial@78AF000 {
		status = "ok";
		serial_gpio {
			blsp0_uart_rx {
				gpio = <20>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				oe = <GPIO_OE_DISABLE>;
				drvstr = <GPIO_8MA>;
				od_en = <GPIO_OD_DISABLE>;
			};
			blsp0_uart_tx {
				gpio = <21>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				oe = <GPIO_OE_DISABLE>;
				drvstr = <GPIO_8MA>;
				od_en = <GPIO_OD_DISABLE>;
			};
		};
	};

	nand: nand-controller@79B0000 {
		status = "okay";
		nand_gpio {
			qspi_dat3 {
				gpio = <4>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat2 {
				gpio = <5>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat1 {
				gpio = <6>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat0 {
				gpio = <7>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_cs_n {
				gpio = <8>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_clk {
				gpio = <9>;
				func = <2>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
		};
	};

	pci0: pci@80000000 {
		status = "ok";
		perst_gpio = <18>;
		mode = "fixed";
		pci_gpio {
			pci_rst {
				gpio = <18>;
				func = <0>;
				pull = <GPIO_NO_PULL>;
				oe = <GPIO_OD_ENABLE>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
		};
	};

	pci1: pci@a0000000 {
		status = "ok";
		perst_gpio = <15>;
		mode = "fixed";
		pci_gpio {
			pci_rst {
				gpio = <15>;
				func = <0>;
				pull = <GPIO_NO_PULL>;
				oe = <GPIO_OD_ENABLE>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
		};
	};

	usb0: xhci@8a00000 {
		usb_pwr_gpio = <24>;
		usb_gpio {
			pwr_gpio {
				gpio = <24>;
				func = <0>;
				pull = <GPIO_PULL_UP>;
				oe = <GPIO_OE_ENABLE>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
		};
	};

	gmac_cfg {
		ext_mdio_gpio = <36 37>;
		gephy_led = <46>;

		gmac1_cfg {
			unit = <0>;
			base = <0x39C00000>;
			phy_address = <7>;
			phy_external_link = <0>;
			mac_pwr = <0xaa545>;
			s17c_switch_enable = <1>;
			switch_port_count = <4>;
			switch_phy_address = <0 1 2 3>;
		};
		gmac2_cfg {
			unit = <1>;
			base = <0x39D00000>;
			phy_address = <0x1c>;
			napa_gpio = <39>;
		};

	};

};
