[PATCH 1/2] ARM: omap: support for WAGO PFC200v3 750-821x

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Based on the downstream patch series in the WAGO PFC firmware SDK [1].
Downstream has support for other boards too, which we leave out for now
because no devices are available for testing. The upstream device trees
have been used as-is except that uart0 was set to "okay" so barebox can
enable the console on startup.

[1]: https://github.com/WAGO/pfc-firmware-sdk/tree/V03.02.02-FW14/configs/wago-pfcXXX/patches/barebox-2018.10.0

Signed-off-by: Roland Hieber <rhi@xxxxxxxxxxxxxx>
---
 Documentation/boards/am335x.rst               |   2 +
 Documentation/boards/am335x/wago-pfc.rst      |  90 +++++++
 arch/arm/boards/Makefile                      |   1 +
 arch/arm/boards/wago-pfc-am335x/Makefile      |   3 +
 arch/arm/boards/wago-pfc-am335x/board.c       |  86 +++++++
 .../defaultenv-pfc-am335x/boot/emmc           |   4 +
 .../defaultenv-pfc-am335x/boot/mmc            |   4 +
 .../defaultenv-pfc-am335x/init/bootsource     |  12 +
 arch/arm/boards/wago-pfc-am335x/lowlevel.c    |  98 ++++++++
 arch/arm/boards/wago-pfc-am335x/ram-timings.h |  94 ++++++++
 arch/arm/configs/am335x_mlo_defconfig         |   1 +
 arch/arm/configs/omap_defconfig               |   1 +
 arch/arm/dts/Makefile                         |   2 +
 arch/arm/dts/am335x-pfc-750_821x-mlo.dts      |  31 +++
 arch/arm/dts/am335x-pfc-750_821x.dts          |  66 +++++
 arch/arm/dts/am335x-pfc-emmc.dtsi             |  29 +++
 arch/arm/dts/am335x-pfc-leds.dtsi             | 203 ++++++++++++++++
 arch/arm/dts/am335x-pfc-nand.dtsi             |  89 +++++++
 arch/arm/dts/am335x-pfc-rmii12.dtsi           |  62 +++++
 arch/arm/dts/am335x-pfc-rmii2.dtsi            |  40 +++
 arch/arm/dts/am335x-pfc-strip.dtsi            |  48 ++++
 arch/arm/dts/am335x-pfc.dtsi                  | 228 ++++++++++++++++++
 arch/arm/mach-omap/Kconfig                    |   7 +
 images/Makefile.am33xx                        |   8 +
 24 files changed, 1209 insertions(+)
 create mode 100644 Documentation/boards/am335x/wago-pfc.rst
 create mode 100644 arch/arm/boards/wago-pfc-am335x/Makefile
 create mode 100644 arch/arm/boards/wago-pfc-am335x/board.c
 create mode 100644 arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/emmc
 create mode 100644 arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/mmc
 create mode 100644 arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/init/bootsource
 create mode 100644 arch/arm/boards/wago-pfc-am335x/lowlevel.c
 create mode 100644 arch/arm/boards/wago-pfc-am335x/ram-timings.h
 create mode 100644 arch/arm/dts/am335x-pfc-750_821x-mlo.dts
 create mode 100644 arch/arm/dts/am335x-pfc-750_821x.dts
 create mode 100644 arch/arm/dts/am335x-pfc-emmc.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc-leds.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc-nand.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc-rmii12.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc-rmii2.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc-strip.dtsi
 create mode 100644 arch/arm/dts/am335x-pfc.dtsi

diff --git a/Documentation/boards/am335x.rst b/Documentation/boards/am335x.rst
index f54611428bb3..0da479a1c3f0 100644
--- a/Documentation/boards/am335x.rst
+++ b/Documentation/boards/am335x.rst
@@ -30,6 +30,8 @@ resulting images will be placed under ``images/``:
 
 Some boards come in different variants, make sure to pick the correct one.
 
+.. _am335x_starting_barebox:
+
 Starting and updating barebox
 -----------------------------
 
diff --git a/Documentation/boards/am335x/wago-pfc.rst b/Documentation/boards/am335x/wago-pfc.rst
new file mode 100644
index 000000000000..bec2a7c1f05a
--- /dev/null
+++ b/Documentation/boards/am335x/wago-pfc.rst
@@ -0,0 +1,90 @@
+.. SPDX-License-Identifier: GPL-2.0-only
+
+WAGO PFC200 Fieldbus Controllers (AM335x based)
+================================================
+
+These devices already run a version of Barebox out of the box,
+although the debug console is disabled in the factory settings.
+
+Currently supported devices:
+
+* WAGO PFC200v3 750-8214
+
+Initial Device Preparation
+--------------------------
+
+The factory firmware looks for an MLO on the eMMC first.
+If nothing bootable is found there, the ROM code searches for a loader on the
+SD card instead.
+This means we have to erase the internal MLO in order to boot from the SD card.
+
+#. If you haven't set up your device yet,
+   grab a current `firmware <https://github.com/WAGO/pfc-firmware/releases>`_,
+   write it to an SD card, and boot the device with it.
+   You also need a DHCP server to connect to the device over ethernet.
+
+#. Connect to the web interface and log in with admin privileges.
+   (The default user is ``admin``, password ``wago``).
+
+#. Make sure that SSH is enabled and root login is allowed in
+   *Ports and Services* → *SSH*.
+
+#. Connect to the device over SSH, using user ``root`` and password ``wago``.
+
+#. The eMMC boot partition is */dev/mmcblk1p1*, which contains boot loaders
+   for several PFC variants (probably as a backup?),
+   but only the file named ``mlo`` is loaded by the AM335x ROM loader.
+
+   .. code-block:: console
+
+      root@PFC200V3-433502:~ mount /dev/mmcblk1p1 /mnt
+
+      root@PFC200V3-433502:~ ls -l /mnt
+      -rwxr-xr-x    1 root     root        485406 Sep 19 03:53 barebox.bin.pfc100
+      -rwxr-xr-x    1 root     root        460218 Sep 19 03:53 barebox.bin.pfc200
+      -rwxr-xr-x    1 root     root        485534 Sep 19 03:53 barebox.bin.pfc200v2
+      -rwxr-xr-x    1 root     root        485150 Sep 19 03:53 barebox.bin.pfc200v3
+      -rwxr-xr-x    1 root     root         91200 Sep 19 03:53 mlo
+      -rwxr-xr-x    1 root     root         91648 Sep 19 03:53 mlo.pfc100
+      -rwxr-xr-x    1 root     root         61393 Sep 19 03:53 mlo.pfc200
+      -rwxr-xr-x    1 root     root         91648 Sep 19 03:53 mlo.pfc200v2
+      -rwxr-xr-x    1 root     root         91200 Sep 19 03:53 mlo.pfc200v3
+
+   .. note::
+
+      The following step makes your device unbootable without an SD card.
+      If something goes wrong, and the device can no longer boot,
+      write one of the firmware images referenced above to the SD card,
+      and go through the setup process again.
+      If you want to make the recovery process easier, make a copy of the
+      partition (e.g. using sftp or writing it onto a spare SD card.)
+
+   Remove the file ``mlo`` so the ROM loader tries to boot from the SD card.
+   You can always replace it later with one of the backup copies.
+
+Now Barebox can be booted from the SD card.
+
+Building Barebox
+----------------
+
+All necessary settings are part of *omap_defconfig* and *am335x_mlo_defconfig*.
+Build both configs to get an MLO in ``images/barebox-am33xx-pfc-750-821x-mlo.img``
+and a second-stage Barebox image in ``images/barebox-am33xx-pfc-750-821x.img``.
+
+Booting from the SD card
+------------------------
+
+With these two images, prepare an SD card according to :ref:`am335x_starting_barebox`,
+and boot the device with it.
+
+A serial console is available on the debug port on the front of the machine
+(behind the cover next to the "RUN/STOP/RESET" switch and the SD card port).
+Use a WAGO serial cable (750-920 or 750-923) to connect to the serial console
+with 115200 Baud, 8N1.
+
+Writing Barebox to the Internal eMMC
+------------------------------------
+
+The SD card is available in Barebox as */dev/mmc0*, and the eMMC is */dev/mmc1*.
+You can copy ``mlo`` and ``barebox.bin`` from */mnt/mmc0.0/* to */mnt/mmc1.0/*,
+and then boot from the eMMC without the SD card.
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index 6cb40d084b3d..6b3a63f80b49 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -166,6 +166,7 @@ obj-$(CONFIG_MACH_ZII_RDU2)			+= zii-imx6q-rdu2/
 obj-$(CONFIG_MACH_ZII_IMX8MQ_DEV)		+= zii-imx8mq-dev/
 obj-$(CONFIG_MACH_ZII_VF610_DEV)		+= zii-vf610-dev/
 obj-$(CONFIG_MACH_ZII_IMX7D_DEV)		+= zii-imx7d-dev/
+obj-$(CONFIG_MACH_WAGO_PFC_AM335X)		+= wago-pfc-am335x/
 obj-$(CONFIG_MACH_WAGO_PFC_AM35XX)		+= wago-pfc-am35xx/
 obj-$(CONFIG_MACH_LS1046ARDB)			+= ls1046ardb/
 obj-$(CONFIG_MACH_TQMLS1046A)			+= tqmls1046a/
diff --git a/arch/arm/boards/wago-pfc-am335x/Makefile b/arch/arm/boards/wago-pfc-am335x/Makefile
new file mode 100644
index 000000000000..1355b5faaddf
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/Makefile
@@ -0,0 +1,3 @@
+lwl-y += lowlevel.o
+obj-y += board.o
+bbenv-y += defaultenv-pfc-am335x
diff --git a/arch/arm/boards/wago-pfc-am335x/board.c b/arch/arm/boards/wago-pfc-am335x/board.c
new file mode 100644
index 000000000000..41219ebe51e1
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/board.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+#include <bootsource.h>
+#include <common.h>
+#include <nand.h>
+#include <net.h>
+#include <init.h>
+#include <io.h>
+#include <linux/sizes.h>
+#include <envfs.h>
+#include <asm/armlinux.h>
+#include <mach/am33xx-generic.h>
+#include <mach/am33xx-silicon.h>
+#include <mach/bbu.h>
+
+static int pfc_coredevice_init(void)
+{
+	if (!of_machine_is_compatible("wago,am335x-pfc"))
+		return 0;
+
+	am33xx_register_ethaddr(0, 0);
+
+	return 0;
+}
+coredevice_initcall(pfc_coredevice_init);
+
+#define ETH_DEVICE		0
+#define ETHADDR_EEPROM_OFFSET	512
+#define ETHADDR_EEPROM_LENGTH	6
+static int pfc_set_ethaddr(void)
+{
+	struct cdev *cdev;
+	u8 mac[6];
+	int ret;
+
+	cdev = cdev_by_name("eeprom0");
+	if (!cdev)
+		return -ENODEV;
+
+	ret = cdev_read(cdev, mac, ETHADDR_EEPROM_LENGTH, ETHADDR_EEPROM_OFFSET, 0);
+	if (ret < 0)
+		return ret;
+
+	eth_register_ethaddr(ETH_DEVICE, mac);
+
+	return 0;
+}
+
+static int pfc_devices_init(void)
+{
+	int ret;
+
+	if (!of_machine_is_compatible("wago,am335x-pfc"))
+		return 0;
+
+	if (bootsource_get() == BOOTSOURCE_MMC) {
+		if (bootsource_get_instance() == 0) {
+			omap_set_bootmmc_devname("mmc0");
+		} else {
+			omap_set_bootmmc_devname("mmc1");
+			am33xx_bbu_emmc_mlo_register_handler("mlo.emmc",
+								"/dev/mmc1");
+		}
+	}
+
+	of_device_enable_path("/chosen/environment-sd");
+	defaultenv_append_directory(defaultenv_pfc_am335x);
+
+	ret = pfc_set_ethaddr();
+	if (ret < 0) {
+		pr_info("no valid ethaddr in eeprom found. Using randomized "
+			"MAC address\n");
+	}
+
+	if (IS_ENABLED(CONFIG_SHELL_NONE))
+		return am33xx_of_register_bootdevice();
+
+	return 0;
+}
+device_initcall(pfc_devices_init);
diff --git a/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/emmc b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/emmc
new file mode 100644
index 000000000000..9affcbe2ec18
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/emmc
@@ -0,0 +1,4 @@
+#!/bin/sh
+global.bootm.image=/mnt/mmc1.0/linuximage
+global.bootm.oftree=/mnt/mmc1.0/oftree
+global.linux.bootargs.dyn.root="root=/dev/mmcblk1p2 rw rootwait"
diff --git a/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/mmc b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/mmc
new file mode 100644
index 000000000000..1430a0f76614
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/boot/mmc
@@ -0,0 +1,4 @@
+#!/bin/sh
+global.bootm.image=/mnt/mmc0.0/linuximage
+global.bootm.oftree=/mnt/mmc0.0/oftree
+global.linux.bootargs.dyn.root="root=/dev/mmcblk0p2 rw rootwait"
diff --git a/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/init/bootsource b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/init/bootsource
new file mode 100644
index 000000000000..f35c7df46e03
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/defaultenv-pfc-am335x/init/bootsource
@@ -0,0 +1,12 @@
+#!/bin/sh
+if [ -n "$nv.boot.default" ]; then
+	exit
+fi
+
+if [ $bootsource = mmc -a $bootsource_instance = 1 ]; then
+	global.boot.default="emmc mmc net"
+elif [ $bootsource = mmc -a $bootsource_instance = 0 ]; then
+	global.boot.default="mmc emmc net"
+elif [ $bootsource = net ]; then
+	global.boot.default="net emmc mmc"
+fi
diff --git a/arch/arm/boards/wago-pfc-am335x/lowlevel.c b/arch/arm/boards/wago-pfc-am335x/lowlevel.c
new file mode 100644
index 000000000000..78112cb03cd6
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/lowlevel.c
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+#include <common.h>
+#include <linux/sizes.h>
+#include <io.h>
+#include <init.h>
+#include <asm/barebox-arm-head.h>
+#include <asm/barebox-arm.h>
+#include <mach/am33xx-silicon.h>
+#include <mach/am33xx-clock.h>
+#include <mach/generic.h>
+#include <mach/sdrc.h>
+#include <mach/sys_info.h>
+#include <mach/syslib.h>
+#include <mach/am33xx-mux.h>
+#include <mach/am33xx-generic.h>
+#include <mach/wdt.h>
+#include <debug_ll.h>
+
+#include "ram-timings.h"
+
+/**
+ * @brief The basic entry point for board initialization.
+ *
+ * This is called as part of machine init (after arch init).
+ * This is again called with stack in SRAM, so not too many
+ * constructs possible here.
+ *
+ * @return void
+ */
+static noinline void am33xx_pfc_sram_init(void *fdt, int sdram)
+{
+	/*
+	 * WDT1 is already running when the bootloader gets control
+	 * Disable it to avoid "random" resets
+	 */
+	writel(WDT_DISABLE_CODE1, AM33XX_WDT_REG(WSPR));
+	while (readl(AM33XX_WDT_REG(WWPS)) != 0x0);
+
+	writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR));
+	while (readl(AM33XX_WDT_REG(WWPS)) != 0x0);
+
+	am33xx_pll_init(MPUPLL_M_600, DDRPLL_M_400);
+
+	am335x_sdram_init(DDR_IOCTRL, &pfc_timings[sdram].cmd_ctrl,
+			&pfc_timings[sdram].regs,
+			&pfc_timings[sdram].data);
+
+	am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE);
+	am33xx_enable_uart0_pin_mux();
+	omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
+	putc_ll('>');
+
+	am335x_barebox_entry(fdt);
+}
+
+static noinline void am33xx_pfc_board_entry(unsigned long bootinfo, int sdram,
+					void *fdt)
+{
+	am33xx_save_bootinfo((void *)bootinfo);
+
+	arm_cpu_lowlevel_init();
+
+	/*
+	 * Setup C environment, the board init code uses global variables.
+	 * Stackpointer has already been initialized by the ROM code.
+	 */
+	relocate_to_current_adr();
+	setup_c();
+	am33xx_pfc_sram_init(fdt, sdram);
+}
+
+#define PFC_ENTRY_MLO(name, fdt_name, mem_size)				\
+	ENTRY_FUNCTION(name, bootinfo, r1, r2)				\
+	{								\
+		extern char __dtb_z_##fdt_name##_start[];		\
+		void *fdt = __dtb_z_##fdt_name##_start +		\
+			get_runtime_offset();				\
+		am33xx_pfc_board_entry(bootinfo, mem_size, fdt);	\
+	}
+
+#define PFC_ENTRY(name, fdt_name, mem_size)				\
+	ENTRY_FUNCTION(name, r0, r1, r2)				\
+	{								\
+		extern char __dtb_z_##fdt_name##_start[];		\
+		void *fdt = __dtb_z_##fdt_name##_start +		\
+			get_runtime_offset();				\
+		barebox_arm_entry(0x80000000, mem_size, fdt);		\
+	}
+
+PFC_ENTRY_MLO(start_am33xx_pfc_750_821x_sram_512mb, am335x_pfc_750_821x_mlo, PFC_DDR3_512MB);
+PFC_ENTRY(start_am33xx_pfc_750_821x_sdram, am335x_pfc_750_821x, SZ_512M);
diff --git a/arch/arm/boards/wago-pfc-am335x/ram-timings.h b/arch/arm/boards/wago-pfc-am335x/ram-timings.h
new file mode 100644
index 000000000000..cc3d518f0c27
--- /dev/null
+++ b/arch/arm/boards/wago-pfc-am335x/ram-timings.h
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2015 Wadim Egorov, PHYTEC Messtechnik GmbH
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+#ifndef __RAM_TIMINGS_H
+#define __RAM_TIMINGS_H
+
+#define DDR_IOCTRL	0x18B
+
+struct am335x_sdram_timings {
+	struct am33xx_emif_regs regs;
+	struct am33xx_ddr_data data;
+	struct am33xx_cmd_control cmd_ctrl;
+};
+
+enum {
+	PFC_DDR3_256MB,
+	PFC_DDR3_512MB,
+};
+
+struct am335x_sdram_timings pfc_timings[] = {
+	[PFC_DDR3_256MB] = {
+		.regs = {
+			.emif_read_latency	= 0x100007,
+			.emif_tim1		= 0x888A39A,
+			.emif_tim2		= 0x223F7FDA,
+			.emif_tim3		= 0x501F843F,
+			.sdram_config		= 0x61C04AB2,
+			.sdram_ref_ctrl		= 0x93B,
+			.ocp_config		= 0x00141414,
+			.zq_config		= 0x50074BE4,
+			.sdram_config2		= 0x0,
+		},
+		.data = {
+			.rd_slave_ratio0        = 0x38,
+			.wr_dqs_slave_ratio0    = 0x44,
+			.fifo_we_slave_ratio0	= 0x94,
+			.wr_slave_ratio0        = 0x7D,
+			.use_rank0_delay	= 0x01,
+			.dll_lock_diff0		= 0x0,
+		},
+		.cmd_ctrl = {
+			.slave_ratio0	= 0x80,
+			.dll_lock_diff0	= 0x1,
+			.invert_clkout0	= 0x0,
+			.slave_ratio1	= 0x80,
+			.dll_lock_diff1	= 0x1,
+			.invert_clkout1	= 0x0,
+			.slave_ratio2	= 0x80,
+			.dll_lock_diff2	= 0x1,
+			.invert_clkout2	= 0x0,
+		},
+	},
+
+	[PFC_DDR3_512MB] = {
+		.regs = {
+			.emif_read_latency	= 0x100007,
+			.emif_tim1		= 0x0AAAD4DB,
+			.emif_tim2		= 0x226B7FDA,
+			.emif_tim3		= 0x501F867F,
+			.sdram_config		= 0x61C04B32,
+			.sdram_ref_ctrl		= 0x20000064,
+			.ocp_config		= 0x00141414,
+			.zq_config		= 0x50074BE4,
+			.sdram_config2		= 0x0,
+		},
+		.data = {
+			.rd_slave_ratio0        = 0x38,
+			.wr_dqs_slave_ratio0    = 0x44,
+			.fifo_we_slave_ratio0	= 0x94,
+			.wr_slave_ratio0        = 0x7D,
+			.use_rank0_delay	= 0x01,
+			.dll_lock_diff0		= 0x0,
+		},
+		.cmd_ctrl = {
+			.slave_ratio0	= 0x80,
+			.dll_lock_diff0	= 0x1,
+			.invert_clkout0	= 0x0,
+			.slave_ratio1	= 0x80,
+			.dll_lock_diff1	= 0x1,
+			.invert_clkout1	= 0x0,
+			.slave_ratio2	= 0x80,
+			.dll_lock_diff2	= 0x1,
+			.invert_clkout2	= 0x0,
+		},
+
+	},
+};
+
+#endif
diff --git a/arch/arm/configs/am335x_mlo_defconfig b/arch/arm/configs/am335x_mlo_defconfig
index efe991105085..6870c7ea0310 100644
--- a/arch/arm/configs/am335x_mlo_defconfig
+++ b/arch/arm/configs/am335x_mlo_defconfig
@@ -6,6 +6,7 @@ CONFIG_OMAP_MULTI_BOARDS=y
 CONFIG_MACH_AFI_GF=y
 CONFIG_MACH_BEAGLEBONE=y
 CONFIG_MACH_PHYTEC_SOM_AM335X=y
+CONFIG_MACH_WAGO_PFC_AM335X=y
 CONFIG_THUMB2_BAREBOX=y
 # CONFIG_MEMINFO is not set
 CONFIG_MMU=y
diff --git a/arch/arm/configs/omap_defconfig b/arch/arm/configs/omap_defconfig
index ba9015825264..58ffdec8853b 100644
--- a/arch/arm/configs/omap_defconfig
+++ b/arch/arm/configs/omap_defconfig
@@ -8,6 +8,7 @@ CONFIG_MACH_BEAGLE=y
 CONFIG_MACH_BEAGLEBONE=y
 CONFIG_MACH_PHYTEC_SOM_AM335X=y
 CONFIG_MACH_VSCOM_BALTOS=y
+CONFIG_MACH_WAGO_PFC_AM335X=y
 CONFIG_MACH_WAGO_PFC_AM35XX=y
 CONFIG_THUMB2_BAREBOX=y
 CONFIG_ARM_BOARD_APPEND_ATAG=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 294a0bfa5525..1788e698c1c6 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -140,6 +140,8 @@ lwl-dtb-$(CONFIG_MACH_AT91SAM9X5EK) += at91sam9x5ek.dtb.o
 lwl-dtb-$(CONFIG_MACH_XILINX_ZCU104) += zynqmp-zcu104-revA.dtb.o
 
 lwl-dtb-$(CONFIG_MACH_ZII_IMX7D_DEV) += imx7d-zii-rpu2.dtb.o imx7d-zii-rmu2.dtb.o
+lwl-dtb-$(CONFIG_MACH_WAGO_PFC_AM335X) += am335x-pfc-750_821x.dtb.o \
+	am335x-pfc-750_821x-mlo.dtb.o
 lwl-dtb-$(CONFIG_MACH_WAGO_PFC_AM35XX) += am35xx-pfc-750_820x.dtb.o
 lwl-dtb-$(CONFIG_MACH_LS1046ARDB) += fsl-ls1046a-rdb.dtb.o
 lwl-dtb-$(CONFIG_MACH_TQMLS1046A) += fsl-tqmls1046a-mbls10xxa.dtb.o
diff --git a/arch/arm/dts/am335x-pfc-750_821x-mlo.dts b/arch/arm/dts/am335x-pfc-750_821x-mlo.dts
new file mode 100644
index 000000000000..ae16ce1452de
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-750_821x-mlo.dts
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2017 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+/dts-v1/;
+
+#include "am335x-pfc.dtsi"
+#include "am335x-pfc-emmc.dtsi"
+#include "am335x-pfc-strip.dtsi"
+#include "am33xx-strip.dtsi"
+#include "am33xx-clocks-strip.dtsi"
+
+/ {
+	model = "PFC-750-821x MLO";
+	compatible = "wago,am335x-pfc-750_821x", "wago,am335x-pfc", "ti,am33xx";
+	board-variant = "pfc200v3";
+
+	memory {
+		device_type = "memory";
+		reg = <0x80000000 0x20000000>; /* 512 MB */
+	};
+};
+
+&mmc2 {
+	status = "okay";
+};
diff --git a/arch/arm/dts/am335x-pfc-750_821x.dts b/arch/arm/dts/am335x-pfc-750_821x.dts
new file mode 100644
index 000000000000..5ad53c878848
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-750_821x.dts
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2017 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+/dts-v1/;
+
+#include "am335x-pfc.dtsi"
+#include "am335x-pfc-emmc.dtsi"
+#include "am335x-pfc-leds.dtsi"
+#include "am335x-pfc-rmii12.dtsi"
+
+/ {
+	model = "PFC-750-821x";
+	compatible = "wago,am335x-pfc-750_821x", "wago,am335x-pfc", "ti,am33xx";
+	board-variant = "pfc200v3";
+
+	memory {
+		device_type = "memory";
+		reg = <0x80000000 0x20000000>; /* 512 MB */
+	};
+};
+
+&i2c0 {
+	pca953x: pca953x@70 {
+		compatible = "nxp,pca9538";
+		reg = <0x70>;
+		gpio-controller;
+		#gpio-cells = <2>;
+
+		switch_reset {
+			gpio-hog;
+			gpios = <4 GPIO_ACTIVE_HIGH>;
+			output-high;
+			line-name = "switch-reset";
+		};
+	};
+};
+
+&mmc1 {
+	cd-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+};
+
+&mmc2 {
+	status = "okay";
+};
+
+&pca9552_60 {
+	status = "okay";
+};
+
+&pca9552_61 {
+	status = "okay";
+};
+
+&mac {
+	status = "okay";
+};
+
+&uart0 {
+	status = "okay";
+};
diff --git a/arch/arm/dts/am335x-pfc-emmc.dtsi b/arch/arm/dts/am335x-pfc-emmc.dtsi
new file mode 100644
index 000000000000..67a54f8a0ad5
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-emmc.dtsi
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+&am33xx_pinmux {
+	emmc_pins: pinmux_emmc_pins {
+		pinctrl-single,pins = <
+			0x080 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
+			0x084 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
+			0x000 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE1) /* gpmc_ad0.gpmc_ad0  */
+			0x004 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE1) /* gpmc_ad0.gpmc_ad1  */
+			0x008 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE1) /* gpmc_ad0.gpmc_ad2  */
+			0x00c (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE1) /* gpmc_ad0.gpmc_ad3  */
+		>;
+	};
+};
+
+&mmc2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_pins>;
+	vmmc-supply = <&vmmcsd_fixed>;
+	bus-width = <4>;
+	non-removable;
+	status = "disabled";
+};
diff --git a/arch/arm/dts/am335x-pfc-leds.dtsi b/arch/arm/dts/am335x-pfc-leds.dtsi
new file mode 100644
index 000000000000..94ce7b7067e3
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-leds.dtsi
@@ -0,0 +1,203 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Copyright (C) 2015 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+&i2c0 {
+	/*
+	 * Note:
+	 * The predefined order here determines
+	 * the order how leds are enabled.
+	 *
+	 * Note: BUG in barebox-led trigger code.
+	 * triggers are assuming, that leds-max
+	 * value is 1. this is correct for gpio-leds but
+	 * not for brightness driven leds like the
+	 * pca 9552 chip.
+	 *
+	 * for pca-chips use custom brightness values for
+	 * triggering:
+	 *
+	 * 		1 Blink  1 HZ
+	 * 		2 Blink  4 HZ
+	 * 		3 Blink 10 HZ
+	 */
+
+	pca9552_61: pca9552@61 {
+		compatible = "pca9552";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		reg = <0x61>;
+
+		mask-off,color = <0x55>;
+
+		mask-on,red-all = <0x44>;
+		mask-on,green-all = <0x11>;
+
+		status = "disabled";
+
+		u1-green@11 {
+		      label = "u1-green";
+		      reg = <11>;
+		      linux,default-trigger = "none";
+		};
+
+		u1-red@10 {
+		      label = "u1-red";
+		      reg = <10>;
+		      linux,default-trigger = "none";
+		};
+
+		u2-green@9 {
+		      label = "u2-green";
+		      reg = <9>;
+		      linux,default-trigger = "none";
+		};
+
+		u2-red@8 {
+		      label = "u2-red";
+		      reg = <8>;
+		      linux,default-trigger = "none";
+		};
+
+		u3-green@7 {
+		      label = "u3-green";
+		      reg = <7>;
+		      linux,default-trigger = "none";
+		};
+
+		u3-red@6 {
+		      label = "u3-red";
+		      reg = <6>;
+		      linux,default-trigger = "none";
+		};
+
+		u4-green@5 {
+		      label = "u4-green";
+		      reg = <5>;
+		      linux,default-trigger = "none";
+		};
+
+		u4-red@4 {
+		      label = "u4-red";
+		      reg = <4>;
+		      linux,default-trigger = "none";
+		};
+
+		u5-green@3 {
+		      label = "u5-green";
+		      reg = <3>;
+		      linux,default-trigger = "none";
+		};
+
+		u5-red@2 {
+		      label = "u5-red";
+		      reg = <2>;
+		      linux,default-trigger = "none";
+		};
+
+		u6-green@1 {
+		      label = "u6-green";
+		      reg = <1>;
+		      linux,default-trigger = "none";
+		};
+
+		u6-red@0 {
+		      label = "u6-red";
+		      reg = <0>;
+		      linux,default-trigger = "none";
+		};
+        };
+
+	pca9552_60: pca9552@60 {
+		compatible = "pca9552";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		reg = <0x60>;
+
+		mask-off,color = <0x55>;
+
+		mask-on,red-all = <0x44>;
+		mask-on,green-all = <0x11>;
+
+		status = "disabled";
+
+		sys-red@0 {
+			label = "sys-red";
+			reg = <0>;
+			linux,default-trigger = "none";
+		};
+
+		sys-green@1 {
+			label = "sys-green";
+			reg = <1>;
+			linux,default-trigger = "none";
+		};
+
+		run-red@2 {
+			label = "run-red";
+			reg = <2>;
+			linux,default-trigger = "none";
+		};
+
+		run-green@3 {
+		      label = "run-green";
+		      reg = <3>;
+		      linux,default-trigger = "none";
+		};
+
+		io-red@4 {
+		      label = "io-red";
+		      reg = <4>;
+		      linux,default-trigger = "none";
+		};
+
+		io-green@5 {
+		      label = "io-green";
+		      reg = <5>;
+		      linux,default-trigger = "none";
+		};
+
+		ms-red@6 {
+		      label = "ms-red";
+		      reg = <6>;
+		      linux,default-trigger = "none";
+		};
+
+		ms-green@7 {
+		      label = "ms-green";
+		      reg = <7>;
+		      linux,default-trigger = "none";
+		};
+
+		ns-red@8 {
+		      label = "ns-red";
+		      reg = <8>;
+		      linux,default-trigger = "none";
+		};
+
+		ns-green@9 {
+		      label = "ns-green";
+		      reg = <9>;
+		      linux,default-trigger = "none";
+		};
+
+		u7-red@10 {
+		      label = "u7-red";
+		      reg = <10>;
+		      linux,default-trigger = "none";
+		};
+
+		u7-green@11 {
+		      label = "u7-green";
+		      reg = <11>;
+		      linux,default-trigger = "none";
+		};
+	};
+};
diff --git a/arch/arm/dts/am335x-pfc-nand.dtsi b/arch/arm/dts/am335x-pfc-nand.dtsi
new file mode 100644
index 000000000000..a9e7d8f723c4
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-nand.dtsi
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Copyright (C) 2014 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+&am33xx_pinmux {
+	gpmc_pins: pinmux_gpmc_pins {
+		pinctrl-single,pins = <
+			0x000 0x20	/* gpmc_ad0, INPUT_PULLDOWN | MODE0 */
+			0x004 0x20	/* gpmc_ad1, INPUT_PULLDOWN | MODE0 */
+			0x008 0x20	/* gpmc_ad2, INPUT_PULLDOWN | MODE0 */
+			0x00c 0x20	/* gpmc_ad3, INPUT_PULLDOWN | MODE0 */
+			0x010 0x20	/* gpmc_ad4, INPUT_PULLDOWN | MODE0 */
+			0x014 0x20	/* gpmc_ad5, INPUT_PULLDOWN | MODE0 */
+			0x018 0x20	/* gpmc_ad6, INPUT_PULLDOWN | MODE0 */
+			0x01c 0x20	/* gpmc_ad7, INPUT_PULLDOWN | MODE0 */
+			0x020 0x20	/* gpmc_ad8, INPUT_PULLDOWN | MODE0 */
+			0x024 0x20	/* gpmc_ad9, INPUT_PULLDOWN | MODE0 */
+			0x028 0x20	/* gpmc_ad10, INPUT_PULLDOWN | MODE0 */
+			0x02c 0x20	/* gpmc_ad11, INPUT_PULLDOWN | MODE0 */
+			0x030 0x20	/* gpmc_ad12, INPUT_PULLDOWN | MODE0 */
+			0x034 0x20	/* gpmc_ad13, INPUT_PULLDOWN | MODE0 */
+			0x038 0x20	/* gpmc_ad14, INPUT_PULLDOWN | MODE0 */
+			0x03c 0x20	/* gpmc_ad15, INPUT_PULLDOWN | MODE0 */
+			0x070 0x30	/* gpmc_wait0, INPUT_PULLUP | MODE0 */
+			0x07c 0x10	/* gpmc_csn0, OUTPUT_PULLUP | MODE0 */
+			0x080 0x10	/* gpmc_csn1, OUTPUT_PULLUP | MODE0 */
+			0x084 0x11	/* gpmc_csn2, OUTPUT_PULLUP | MODE1 (gpmc_be1n_mux1) */
+			0x090 0x08	/* gpmc_advn_ale, MODE0 */
+			0x094 0x08	/* gpmc_oen_ren,  MODE0 */
+			0x098 0x08	/* gpmc_wen, OUTPUT_PULLUP | MODE0 */
+			0x09c 0x08	/* gpmc_ben0_cle.gpmc_be0n_cle, OUTPUT_PULLUP | MODE0 */
+		>;
+	};
+};
+
+
+&gpmc {
+	status = "disabled";
+	pinctrl-names = "default";
+	pinctrl-0 = <&gpmc_pins>;
+	num-cs = <3>;
+	num-waitpins = <1>;
+	ranges = <
+		0 0 0x08000000 0x01000000 /* CS0: NAND */
+	>;
+
+ 	nand: nand@0,0 {
+		reg = <0 0 0>; /* CS0, offset 0 */
+		nand-bus-width = <8>;
+		ti,nand-ecc-opt = "bch8";
+		gpmc,device-nand = "true";
+		gpmc,device-width = <1>;
+		gpmc,sync-clk-ps = <0>;
+		gpmc,cs-on-ns = <0>;
+		gpmc,cs-rd-off-ns = <44>;
+		gpmc,cs-wr-off-ns = <44>;
+		gpmc,adv-on-ns = <6>;
+		gpmc,adv-rd-off-ns = <34>;
+		gpmc,adv-wr-off-ns = <44>;
+		gpmc,we-on-ns = <0>;
+		gpmc,we-off-ns = <40>;
+		gpmc,oe-on-ns = <0>;
+		gpmc,oe-off-ns = <54>;
+		gpmc,access-ns = <64>;
+		gpmc,rd-cycle-ns = <82>;
+		gpmc,wr-cycle-ns = <82>;
+		gpmc,wait-on-read = "true";
+		gpmc,wait-on-write = "true";
+		gpmc,bus-turnaround-ns = <0>;
+		gpmc,cycle2cycle-delay-ns = <0>;
+		gpmc,clk-activation-ns = <0>;
+		gpmc,wait-monitoring-ns = <0>;
+		gpmc,wr-access-ns = <40>;
+		gpmc,wr-data-mux-bus-ns = <0>;
+
+		#address-cells = <1>;
+		#size-cells = <1>;
+		elm_id = <&elm>;
+	};
+};
+
+/include/ "am3xxx-pfc-nandparts.dtsi"
diff --git a/arch/arm/dts/am335x-pfc-rmii12.dtsi b/arch/arm/dts/am335x-pfc-rmii12.dtsi
new file mode 100644
index 000000000000..6c15f248a90d
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-rmii12.dtsi
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+&am33xx_pinmux {
+	cpsw_rmmi12_default: cpsw_rmmi12_default {
+		pinctrl-single,pins = <
+			/* RMMI2 */
+			0x040 (PIN_OUTPUT | SLEWCTRL_FAST | MUX_MODE3) /* gpmc_a0.rmii2_txen     */
+			0x050 (PIN_OUTPUT | SLEWCTRL_FAST | MUX_MODE3) /* gpmc_a4.rmii2_txd1     */
+			0x054 (PIN_OUTPUT | SLEWCTRL_FAST | MUX_MODE3) /* gpmc_a5.rmii2_txd0     */
+			0x068 (PIN_INPUT                  | MUX_MODE3) /* gpmc_a10.rmii2_rxd1    */
+			0x06C (PIN_INPUT                  | MUX_MODE3) /* gpmc_a11.rmii2_rxd0    */
+			0x108 (PIN_INPUT                  | MUX_MODE1) /* mii1_col.rmii2_refclk  */
+			0x088 (PIN_INPUT                  | MUX_MODE2) /* gpmc_csn3.rmii2_crs_dv */
+			0x074 (PIN_INPUT 		  | MUX_MODE7) /* gpmc_wpn.gpio0_31      */
+
+			/* RMMI1 only used on Marvell based devices; default off */
+			0x144 (PIN_INPUT                  | MUX_MODE7) /* rmii1_ref_clk.rmii1_refclk */
+			0x114 (PIN_INPUT                  | MUX_MODE7) /* mii1_txen.rmii1_txen       */
+			0x128 (PIN_INPUT                  | MUX_MODE7) /* mii1_txd0.rmii1_txd0       */
+			0x124 (PIN_INPUT                  | MUX_MODE7) /* mii1_txd1.rmii1_txd1       */
+			0x140 (PIN_INPUT                  | MUX_MODE7) /* mii1_rxd0.rmii1_rxd0       */
+			0x13c (PIN_INPUT                  | MUX_MODE7) /* mii1_rxd1.rmii1_rxd1       */
+			0x10c (PIN_INPUT                  | MUX_MODE7) /* mii1_crs.rmii1_crs_dv      */
+		>;
+	};
+
+	cpsw_rmmi12_sleep: cpsw_rmmi12_sleep {
+		pinctrl-single,pins = <
+			/* RMMI2 */
+			0x040 (PIN_INPUT | MUX_MODE7) /* gpmc_a0.rmii2_txen     */
+			0x050 (PIN_INPUT | MUX_MODE7) /* gpmc_a4.rmii2_txd1     */
+			0x054 (PIN_INPUT | MUX_MODE7) /* gpmc_a5.rmii2_txd0     */
+			0x068 (PIN_INPUT | MUX_MODE7) /* gpmc_a10.rmii2_rxd1    */
+			0x06C (PIN_INPUT | MUX_MODE7) /* gpmc_a11.rmii2_rxd0    */
+			0x108 (PIN_INPUT | MUX_MODE7) /* mii1_col.rmii2_refclk  */
+			0x088 (PIN_INPUT | MUX_MODE7) /* gpmc_csn3.rmii2_crs_dv */
+			0x074 (PIN_INPUT | MUX_MODE7) /* gpmc_wpn.gpio0_31      */
+
+			/* RMMI1 only used on Marvell based devices; default off to not brick
+			 * the bootstrap option of marvell based devices
+			 */
+			0x144 (PIN_INPUT | MUX_MODE7) /* rmii1_ref_clk.rmii1_refclk      */
+			0x114 (PIN_INPUT | MUX_MODE7) /* mii1_txen.rmii1_txen (gpio3_3)  */
+			0x128 (PIN_INPUT | MUX_MODE7) /* mii1_txd0.rmii1_txd0 (gpio0_28) */
+			0x124 (PIN_INPUT | MUX_MODE7) /* mii1_txd1.rmii1_txd1 (gpio0_21) */
+			0x140 (PIN_INPUT | MUX_MODE7) /* mii1_rxd0.rmii1_rxd0 (gpio2_21) */
+			0x13c (PIN_INPUT | MUX_MODE7) /* mii1_rxd1.rmii1_rxd1 (gpio2_20) */
+			0x10c (PIN_INPUT | MUX_MODE7) /* mii1_crs.rmii1_crs_dv (gpio3_1) */
+	       >;
+	};
+};
+
+&mac {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&cpsw_rmmi12_default>;
+	pinctrl-1 = <&cpsw_rmmi12_sleep>;
+	status = "disabled";
+};
diff --git a/arch/arm/dts/am335x-pfc-rmii2.dtsi b/arch/arm/dts/am335x-pfc-rmii2.dtsi
new file mode 100644
index 000000000000..1cee99302a34
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-rmii2.dtsi
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+&am33xx_pinmux {
+	cpsw_rmmi2_default: cpsw_rmmi2_default {
+		pinctrl-single,pins = <
+                        0x040 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* gpmc_a0.rmii2_txen */
+                        0x050 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* gpmc_a4.rmii2_txd1 */
+                        0x054 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* gpmc_a5.rmii2_txd0 */
+                        0x068 (PIN_INPUT_PULLDOWN | MUX_MODE3)  /* gpmc_a10.rmii2_rxd1 */
+                        0x06C (PIN_INPUT_PULLDOWN | MUX_MODE3)  /* gpmc_a11.rmii2_rxd0 */
+                        0x074 (PIN_INPUT_PULLDOWN | MUX_MODE3)  /* gpmc_wpn.rmii2_rxer */
+                        0x108 (PIN_INPUT_PULLDOWN | MUX_MODE1)  /* mii1_col.rmii2_refclk */
+                        0x088 (PIN_INPUT          | MUX_MODE2)  /* gpmc_csn3.rmii2_crs_dv */
+		>;
+	};
+
+	cpsw_rmmi2_sleep: cpsw_rmmi2_sleep {
+		pinctrl-single,pins = <
+                        0x040 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x050 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x054 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x068 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x06C (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x074 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x108 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+                        0x088 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+		>;
+	};
+};
+
+&mac {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&cpsw_rmmi2_default>;
+	pinctrl-1 = <&cpsw_rmmi2_sleep>;
+	status = "disabled";
+};
diff --git a/arch/arm/dts/am335x-pfc-strip.dtsi b/arch/arm/dts/am335x-pfc-strip.dtsi
new file mode 100644
index 000000000000..e3af0ae3ec81
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc-strip.dtsi
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2014 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+/ {
+	aliases {
+		/delete-property/ serial1;
+		/delete-property/ serial2;
+		/delete-property/ serial3;
+		/delete-property/ serial4;
+		/delete-property/ serial5;
+		/delete-property/ usb0;
+		/delete-property/ usb1;
+		/delete-property/ phy0;
+		/delete-property/ phy1;
+		/delete-property/ i2c0;
+		/delete-property/ ethernet0;
+		/delete-property/ ethernet1;
+		/delete-property/ spi0;
+		/delete-property/ bootstate;
+	};
+};
+
+/delete-node/ &environment_sd;
+/delete-node/ &uart1_pins;
+/delete-node/ &uart1;
+/delete-node/ &uart2;
+/delete-node/ &uart3;
+/delete-node/ &uart4;
+/delete-node/ &uart5;
+/delete-node/ &i2c0_pins;
+/delete-node/ &davinci_mdio_default;
+/delete-node/ &davinci_mdio_sleep;
+/delete-node/ &bas_pins;
+/delete-node/ &usb;
+/delete-node/ &i2c0;
+/delete-node/ &davinci_mdio;
+/delete-node/ &cpsw_emac0;
+/delete-node/ &cpsw_emac1;
+/delete-node/ &phy_gmii_sel;
+/delete-node/ &mac;
+/delete-node/ &spi0;
+/delete-node/ &bootstate;
diff --git a/arch/arm/dts/am335x-pfc.dtsi b/arch/arm/dts/am335x-pfc.dtsi
new file mode 100644
index 000000000000..d064bda542bb
--- /dev/null
+++ b/arch/arm/dts/am335x-pfc.dtsi
@@ -0,0 +1,228 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2015 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Heinrich Toews <heinrich.toews@xxxxxxxx>
+ *
+ * Copyright (C) 2018 WAGO Kontakttechnik GmbH & Co. KG <http://global.wago.com>
+ * Author: Oleg Karfich <oleg.karfich@xxxxxxxx>
+ */
+
+#include "am33xx.dtsi"
+
+/ {
+	aliases {
+		ethernet0 = &cpsw_emac1;
+		ethernet1 = &cpsw_emac0;
+		bootstate = &bootstate;
+	};
+
+	chosen {
+		stdout-path = &uart0;
+
+		environment_sd: environment-sd {
+			compatible = "barebox,environment";
+			device-path = &mmc1, "partname:0";
+			file-path = "barebox.env";
+			status = "disabled";
+		};
+	};
+
+	bootstate: bootstate {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		magic = <0x3f45620e>;
+		compatible = "barebox,state";
+		backend-type = "raw";
+		backend = <&backend_state_eeprom>;
+		backend-storage-type = "direct";
+		backend-stridesize = <0x40>;
+
+		last_chosen@0 {
+			reg = <0x0 0x4>;
+			type = "uint32";
+		};
+
+		system0 {
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			remaining_attempts@4 {
+				reg = <0x4 0x4>;
+				type = "uint32";
+				default = <3>;
+			};
+
+			priority@8 {
+				reg = <0x8 0x4>;
+				type = "uint32";
+				default = <20>;
+			};
+		};
+
+		system1 {
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			remaining_attempts@C {
+				reg = <0xC 0x4>;
+				type = "uint32";
+				default = <3>;
+			};
+
+			priority@10 {
+				reg = <0x10 0x4>;
+				type = "uint32";
+				default = <20>;
+			};
+		};
+	};
+
+	vmmcsd_fixed: fixedregulator@0 {
+		compatible = "regulator-fixed";
+		regulator-name = "vmmcsd_fixed";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+	};
+};
+
+&am33xx_pinmux {
+	uart0_pins: pinmux_uart0_pins {
+		pinctrl-single,pins = <
+			0x170 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart0_rxd.uart0_rxd */
+			0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart0_txd.uart0_txd */
+		>;
+	};
+
+	uart1_pins: pinmux_uart1_pins {
+		pinctrl-single,pins = <
+			0x178 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart1_cts.uart1_cts */
+			0x17C (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart1_rts.uart1_rts */
+			0x180 (PIN_INPUT_PULLUP | MUX_MODE0)	/* uart1_rxd.uart1_rxd */
+			0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)	/* uart1_txd.uart1_txd */
+			0x1A4 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* mcasp0_fsr.gpio3_19 */
+		>;
+	};
+
+	i2c0_pins: pinmux_i2c0_pins {
+		pinctrl-single,pins = <
+			0x188 (PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c0_sda.i2c0_sda */
+			0x18c (PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c0_scl.i2c0_scl */
+		>;
+	};
+
+	davinci_mdio_default: davinci_mdio_default {
+		pinctrl-single,pins = <
+			0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
+			0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)		     /* mdio_clk.mdio_clk */
+		>;
+	};
+
+	davinci_mdio_sleep: davinci_mdio_sleep {
+		pinctrl-single,pins = <
+			0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+			0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+		>;
+	};
+
+	mmc1_pins: pinmux_mmc1_pins {
+		pinctrl-single,pins = <
+                        0x0F0 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat3.mmc0_dat3 */
+                        0x0F4 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat2.mmc0_dat2 */
+                        0x0F8 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat1.mmc0_dat1 */
+                        0x0FC (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_dat0.mmc0_dat0 */
+                        0x100 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_clk.mmc0_clk   */
+                        0x104 (PIN_INPUT_PULLUP | MUX_MODE0)	/* mmc0_cmd.mmc0_cmd   */
+			0x190 (PIN_INPUT_PULLDOWN | MUX_MODE7)  /* mcasp0_aclkx.gpio3_14 */
+		>;
+	};
+
+	bas_pins: pinmux_bas_pins {
+		pinctrl-single,pins = <
+			0x194 (PIN_INPUT | MUX_MODE7)    /* mcasp0_fsx.gpio3_15    */    //b13   RESET-ALL-BUT
+			0x198 (PIN_INPUT | MUX_MODE7)    /* mcasp0_axr0.gpio3_16   */    //d12   nRST-BAS
+			0x19c (PIN_INPUT | MUX_MODE7)    /* mcasp0_ahclkr.gpio3_17 */    //c12   nSTOP-BAS
+			0x1A0 (PIN_INPUT | MUX_MODE7)    /* mcasp0_aclkr.gpio3_18  */    //b12   nRUN-BAS
+		>;
+	};
+};
+
+&cppi41dma  {
+	status = "okay";
+};
+
+&mmc1 {
+	status = "okay";
+	vmmc-supply = <&vmmcsd_fixed>;
+	bus-width = <0x4>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&mmc1_pins>;
+	cd-gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>;
+	cd-inverted;
+};
+
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_pins>;
+	status = "disabled";
+};
+
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pins>;
+	status = "disabled";
+};
+
+&cpsw_emac0 {
+	phy-mode = "rmii";
+	fixed-link {
+		speed = <100>;
+		full-duplex;
+	};
+};
+
+&cpsw_emac1 {
+	phy-mode = "rmii";
+	fixed-link {
+		speed = <100>;
+		full-duplex;
+	};
+};
+
+&phy_gmii_sel {
+	rmii-clock-ext;
+	status = "okay";
+};
+
+&davinci_mdio {
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&davinci_mdio_default>;
+	pinctrl-1 = <&davinci_mdio_sleep>;
+	status = "okay";
+};
+
+&i2c0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c0_pins>;
+
+	clock-frequency = <400000>;
+	status = "okay";
+
+	eeprom: eeprom@54 {
+		status = "okay";
+		compatible = "atmel,24c512";
+		pagesize = <128>;
+		reg = <0x54>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#size-cells = <1>;
+			#address-cells = <1>;
+
+			backend_state_eeprom: state@8000 {
+				reg = <0x8000 0x120>;
+				label = "state-eeprom";
+			};
+		};
+	};
+};
diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
index e9228809f067..6f8f4473a36f 100644
--- a/arch/arm/mach-omap/Kconfig
+++ b/arch/arm/mach-omap/Kconfig
@@ -183,6 +183,13 @@ config MACH_VSCOM_BALTOS
 	help
 	  Say Y here if you are using a am335x based VScom Baltos devices
 
+config MACH_WAGO_PFC_AM335X
+	bool "Wago PFC200 Fieldbus Controllers (AM335X based)"
+	select ARCH_AM33XX
+	help
+	  Say Y here if you are using a AM335x based Wago PFC controller, like
+	  PFC200 750-821x
+
 config MACH_WAGO_PFC_AM35XX
         bool "Wago PFC200 Fieldbus Controller"
         select ARCH_AM35XX
diff --git a/images/Makefile.am33xx b/images/Makefile.am33xx
index 1de2474df5c9..e61dc36e9fb4 100644
--- a/images/Makefile.am33xx
+++ b/images/Makefile.am33xx
@@ -135,6 +135,14 @@ pblb-$(CONFIG_MACH_VSCOM_BALTOS) += start_am33xx_baltos_sram
 FILE_barebox-am33xx-baltos-mlo.img = start_am33xx_baltos_sram.pblb.mlo
 am33xx-mlo-$(CONFIG_MACH_VSCOM_BALTOS) += barebox-am33xx-baltos-mlo.img
 
+pblb-$(CONFIG_MACH_WAGO_PFC_AM335X) += start_am33xx_pfc_750_821x_sdram
+FILE_barebox-am33xx-pfc-750-821x.img = start_am33xx_pfc_750_821x_sdram.pblb
+am33xx-barebox-$(CONFIG_MACH_WAGO_PFC_AM335X) += barebox-am33xx-pfc-750-821x.img
+
+pblb-$(CONFIG_MACH_WAGO_PFC_AM335X) += start_am33xx_pfc_750_821x_sram_512mb
+FILE_barebox-am33xx-pfc-750-821x-mlo.img = start_am33xx_pfc_750_821x_sram_512mb.pblb.mlo
+am33xx-mlo-$(CONFIG_MACH_WAGO_PFC_AM335X) += barebox-am33xx-pfc-750-821x-mlo.img
+
 ifdef CONFIG_OMAP_BUILD_IFT
 image-y += $(am33xx-mlo-y)
 else
-- 
2.24.0


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox





[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux