// SPDX-License-Identifier: ISC
/*
 * Device Tree file for the Arcom/Eurotech Vulcan board.
 * This board is a single board computer in the PC/104 form factor based on
 * IXP425, and was released around 2005. It previously had the name "Mercury".
 */

/dts-v1/;

#include "intel-ixp42x.dtsi"
#include <dt-bindings/input/input.h>

/ {
	model = "Arcom/Eurotech Vulcan";
	compatible = "arcom,vulcan", "intel,ixp42x";
	#address-cells = <1>;
	#size-cells = <1>;

	memory@0 {
		device_type = "memory";
		reg = <0x00000000 0x4000000>;
	};

	chosen {
		/* CHECKME: using a harddrive at /dev/sda1 as rootfs by default */
		bootargs = "console=ttyS0,115200n8 root=/dev/sda1 rw rootfstype=ext4 rootwait";
		stdout-path = "uart0:115200n8";
	};

	aliases {
		serial0 = &uart0;
	};

	onewire {
		compatible = "w1-gpio";
		gpios = <&gpio0 14 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
	};

	soc {
		bus@c4000000 {
			flash@0,0 {
				compatible = "intel,ixp4xx-flash", "cfi-flash";
				bank-width = <2>;
				/*
				 * 32 MB of Flash in 0x20000 byte blocks
				 * mapped in at CS0 and CS1.
				 *
				 * The documentation mentions the existence
				 * of a 16MB version, which we conveniently
				 * ignore. Shout if you own one!
				 */
				reg = <0 0x00000000 0x2000000>;

				/* Expansion bus settings */
				intel,ixp4xx-eb-t3 = <3>;
				intel,ixp4xx-eb-byte-access-on-halfword = <1>;
				intel,ixp4xx-eb-write-enable = <1>;

				partitions {
					compatible = "redboot-fis";
					fis-index-block = <0x1ff>;
				};
			};
			sram@2,0 {
				/* 256 KB SDRAM memory at CS2 */
				compatible = "shared-dma-pool";
				device_type = "memory";
				reg = <2 0x00000000 0x40000>;
				no-map;
				/* Expansion bus settings */
				intel,ixp4xx-eb-t3 = <1>;
				intel,ixp4xx-eb-t4 = <2>;
				intel,ixp4xx-eb-ahb-split-transfers = <1>;
				intel,ixp4xx-eb-write-enable = <1>;
				intel,ixp4xx-eb-byte-access = <1>;
			};
			serial@3,0 {
				/*
				 * 8250-compatible Exar XR16L2551 2 x UART
				 *
				 * CHECKME: if special tweaks are needed, then fix the
				 * operating system to handle it.
				 */
				compatible = "exar,xr16l2551", "ns8250";
				reg = <3 0x00000000 0x10>;
				interrupt-parent = <&gpio0>;
				interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
				clock-frequency = <1843200>;
				/* Expansion bus settings */
				intel,ixp4xx-eb-t3 = <3>;
				intel,ixp4xx-eb-cycle-type = <1>; /* Motorola cycles */
				intel,ixp4xx-eb-write-enable = <1>;
				intel,ixp4xx-eb-byte-access = <1>;
			};
			gpio1: gpio@4,0 {
				/*
				 * MMIO GPIO in one byte
				 */
				compatible = "arcom,vulcan-gpio";
				reg = <4 0x00000000 0x1>;
				/* Expansion bus settings */
				intel,ixp4xx-eb-write-enable = <1>;
				intel,ixp4xx-eb-byte-access = <1>;
			};
			watchdog@5,0 {
				compatible = "maxim,max6369";
				reg = <5 0x00000000 0x1>;
				/* Expansion bus settings */
				intel,ixp4xx-eb-write-enable = <1>;
				intel,ixp4xx-eb-byte-access = <1>;
			};
		};

		pci@c0000000 {
			status = "ok";

			/*
			 * Taken from Vulcan PCI boardfile.
			 *
			 * We have 2 slots (IDSEL) 1 and 2 with one dedicated interrupt
			 * per slot. This interrupt is shared (OR:ed) by all four pins.
			 */
			interrupt-map =
			/* IDSEL 1 */
			<0x0800 0 0 1 &gpio0 2 IRQ_TYPE_LEVEL_LOW>, /* INT A on slot 1 is irq 2 */
			<0x0800 0 0 2 &gpio0 2 IRQ_TYPE_LEVEL_LOW>, /* INT B on slot 1 is irq 2 */
			<0x0800 0 0 3 &gpio0 2 IRQ_TYPE_LEVEL_LOW>, /* INT C on slot 1 is irq 2 */
			<0x0800 0 0 4 &gpio0 2 IRQ_TYPE_LEVEL_LOW>, /* INT D on slot 1 is irq 2 */
			/* IDSEL 2 */
			<0x1000 0 0 1 &gpio0 3 IRQ_TYPE_LEVEL_LOW>, /* INT A on slot 2 is irq 3 */
			<0x1000 0 0 2 &gpio0 3 IRQ_TYPE_LEVEL_LOW>, /* INT B on slot 2 is irq 3 */
			<0x1000 0 0 3 &gpio0 3 IRQ_TYPE_LEVEL_LOW>, /* INT C on slot 2 is irq 3 */
			<0x1000 0 0 4 &gpio0 3 IRQ_TYPE_LEVEL_LOW>; /* INT D on slot 2 is irq 3 */
		};

		/* EthB */
		ethernet@c8009000 {
			status = "ok";
			queue-rx = <&qmgr 3>;
			queue-txready = <&qmgr 20>;
			phy-mode = "rgmii";
			phy-handle = <&phy0>;

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

				phy0: ethernet-phy@0 {
					reg = <0>;
				};

				phy1: ethernet-phy@1 {
					reg = <1>;
				};
			};
		};

		/* EthC */
		ethernet@c800a000 {
			status = "ok";
			queue-rx = <&qmgr 4>;
			queue-txready = <&qmgr 21>;
			phy-mode = "rgmii";
			phy-handle = <&phy1>;
		};
	};
};
