/*
 * 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/DB-MP03.1";
	compatible = "qca,ipq5018", "qca,ipq5018-db-mp03.1";
	machid = <0x1040004>;
	config_name = "config@db-mp03.1";

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

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

	nand: nand-controller@79B0000 {
		status = "okay";
		nand_gpio {
			qspi_dat3 {
				gpio = <4>;
				func = <2>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat2 {
				gpio = <5>;
				func = <2>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat1 {
				gpio = <6>;
				func = <2>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			qspi_dat0 {
				gpio = <7>;
				func = <2>;
				pull = <GPIO_NO_PULL>;
				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@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>;
			};
		};
	};

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

	usb0: xhci@8a00000 {
		ssphy = <1>;
		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>;
		};

		gmac2_cfg {
			unit = <1>;
			base = <0x39D00000>;
			mac_pwr = <0xaa545>;
			s17c_switch_enable = <1>;
			switch_port_count = <4>;
			switch_phy_address = <0 1 2 3>;
			switch_gpio = <39>;
		};
	};

};
