diff -ruPN a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
--- a/arch/arm/boards/Makefile	2014-10-02 08:02:13.000000000 +0200
+++ b/arch/arm/boards/Makefile	2014-10-17 10:16:09.000000000 +0200
@@ -118,3 +118,4 @@
 obj-$(CONFIG_MACH_VIRT2REAL)			+= virt2real/
 obj-$(CONFIG_MACH_ZEDBOARD)			+= avnet-zedboard/
 obj-$(CONFIG_MACH_VARISCITE_MX6)		+= variscite-mx6/
+obj-$(CONFIG_MACH_PTFMIU)			+= ptfmiu/
diff -ruPN a/arch/arm/boards/ptfmiu/board.c b/arch/arm/boards/ptfmiu/board.c
--- a/arch/arm/boards/ptfmiu/board.c	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/boards/ptfmiu/board.c	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,116 @@
+/*
+ * PTF-MIU board support
+ * Copyright (C) 2016 M. Feser
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <init.h>
+#include <driver.h>
+#include <envfs.h>
+#include <environment.h>
+#include <globalvar.h>
+#include <linux/sizes.h>
+#include <net.h>
+#include <envfs.h>
+#include <bootsource.h>
+#include <gpio.h>
+#include <asm/armlinux.h>
+#include <generated/mach-types.h>
+#include <mach/am33xx-silicon.h>
+#include <mach/am33xx-generic.h>
+#include <mach/sys_info.h>
+#include <mach/syslib.h>
+#include <mach/gpmc.h>
+#include <mach/generic.h>
+#include <linux/err.h>
+
+#define SPI0_CLK      GPIO_NR(0, 2)
+#define SPI0_MOSI     GPIO_NR(0, 4)
+#define SEG_STROBE    GPIO_NR(2, 8)
+
+#define GPIO_NR(bank,pin)   (bank*32 + pin)
+
+static int ptfmiu_coredevice_init(void)
+{
+	if (!of_machine_is_compatible("kbs,ptfmiu"))
+		return 0;
+
+	am33xx_register_ethaddr(0, 0);
+	return 0;
+}
+coredevice_initcall(ptfmiu_coredevice_init);
+
+static int ptfmiu_mem_init(void)
+{
+	if (!of_machine_is_compatible("kbs,ptfmiu"))
+		return 0;
+  
+	arm_add_mem_device("ram0", 0x80000000, SZ_512M);
+	return 0;
+}
+mem_initcall(ptfmiu_mem_init);
+
+static int ptfmiu_devices_init(void)
+{
+  int i, seg;
+  
+  if (!of_machine_is_compatible("kbs,ptfmiu"))
+    return 0;
+
+  // Initialize all chipselect outputs to high state
+  gpio_direction_output(GPIO_NR(1, 18), 1);
+  gpio_direction_output(GPIO_NR(1, 19), 1);
+  for (i=6; i<14; i++)
+    gpio_direction_output(GPIO_NR(2, i), 1);
+  
+  // Initialize reset outputs to high state
+  gpio_direction_output(GPIO_NR(0, 10), 1);
+  gpio_direction_output(GPIO_NR(0, 11), 1);
+  
+  // 7seg = "--"
+  gpio_direction_output(SPI0_CLK, 0);
+  gpio_direction_output(SPI0_MOSI, 0);
+  gpio_direction_output(SEG_STROBE, 0);
+  seg = 0x0202;
+  for (i=0; i<16; i++)
+  {
+    gpio_set_value(SPI0_MOSI, (seg & 0x0001));
+    gpio_set_value(SPI0_CLK, 1);
+    gpio_set_value(SPI0_CLK, 0);
+    seg >>= 1;
+  }
+  gpio_set_value(SEG_STROBE, 1);
+  
+  // Release SYSBOOT
+  gpio_direction_output(GPIO_NR(0, 18), 1); 
+
+	if (bootsource_get() == BOOTSOURCE_MMC) {
+		if (bootsource_get_instance() == 0)
+			omap_set_bootmmc_devname("mmc0");
+		else
+			omap_set_bootmmc_devname("mmc1");
+	}
+  
+	defaultenv_append_directory(defaultenv_ptfmiu);
+	armlinux_set_architecture(MACH_TYPE_TAM335X);
+
+	if (IS_ENABLED(CONFIG_SHELL_NONE))
+		return am33xx_of_register_bootdevice();
+
+	return 0;
+}
+coredevice_initcall(ptfmiu_devices_init);
diff -ruPN a/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/boot/mmc b/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/boot/mmc
--- a/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/boot/mmc	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/boot/mmc	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+global.bootm.image=/boot/zImage
+global.bootm.oftree=/boot/oftree
+if [ -f "/boot/initramfs.igz" ]; then
+  global.bootm.initrd=/boot/initramfs.igz
+fi
+global.linux.bootargs.dyn.root="root=/dev/mmcblk${bootsource_instance}p2 rootfstype=ext4 rootwait rstsrc=${global.system.reset}"
diff -ruPN a/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/config b/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/config
--- a/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/config	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/boards/ptfmiu/defaultenv-ptfmiu/config	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# change network settings in /env/network/eth0
+# change mtd partition settings and automountpoints in /env/init/*
+
+# set to false if you do not want to have colors
+global.allow_color=true
+
+# user (used for network filenames)
+global.user=none
+
+# timeout in seconds before the default boot entry is started
+global.autoboot_timeout=1
+
+# default boot entry (one of /env/boot/*)
+global.boot.default=$bootsource
+
+# base bootargs
+#global.linux.bootargs.base="console=ttyS0,115200n8"
diff -ruPN a/arch/arm/boards/ptfmiu/lowlevel.c b/arch/arm/boards/ptfmiu/lowlevel.c
--- a/arch/arm/boards/ptfmiu/lowlevel.c	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/boards/ptfmiu/lowlevel.c	2014-10-17 10:17:24.682585394 +0200
@@ -0,0 +1,207 @@
+/*
+ * PTF-MIU low-level board support
+ * Copyright (C) 2016 M. Feser
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <init.h>
+#include <linux/sizes.h>
+#include <io.h>
+#include <stdio.h>
+#include <linux/string.h>
+#include <debug_ll.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>
+
+#define AM33XX_PRM_RSTTIME	(AM33XX_PRM_BASE + 0x0F04)
+
+#define RAM_BASE_ADDR		0x80000000
+#define RAM_SIZE		0x20000000
+
+#define INIT_LEDS() { \
+	*((uint32_t*)0x44E00408) = 0x00040002;		\
+	*((uint32_t*)0x44E07134) &= ~((1<<8) + (1<<9));	\
+}
+
+#define LED_Y_ON()		*((uint32_t*)0x44E07194) = (1<<8)
+#define LED_Y_OFF()		*((uint32_t*)0x44E07190) = (1<<8)
+#define LED_R_ON()		*((uint32_t*)0x44E07194) = (1<<9)
+#define LED_R_OFF()		*((uint32_t*)0x44E07190) = (1<<9)
+
+static const struct am33xx_ddr_data ddr3_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,
+};
+
+static const struct am33xx_cmd_control ddr3_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,
+};
+
+static const struct am33xx_emif_regs ddr3_regs = {
+	.emif_read_latency	= 0x100007,
+	.emif_tim1		= 0x0AAAD4DB,
+	.emif_tim2		= 0x266B7FDA,
+	.emif_tim3		= 0x501F867F,
+	.zq_config		= 0x50074BE4,
+	.sdram_config		= 0x61C05332,
+	.sdram_config2		= 0x0,
+	.sdram_ref_ctrl		= 0xC30,
+};
+
+extern char __dtb_ptfmiu_start[];
+
+#ifdef MLO_RAMTEST
+static void ram_test_error(void)
+{
+	LED_Y_OFF();
+	LED_R_ON();
+	while (1) {};
+}
+
+static void ram_test_data_pattern(const uint16_t pattern)
+{
+	volatile uint16_t data;
+
+	// Write pattern, clear bus and read back data
+	*((uint16_t*)RAM_BASE_ADDR) = pattern;
+	*((uint16_t*)(RAM_BASE_ADDR+2)) = ~pattern;
+	data = *((uint16_t*)RAM_BASE_ADDR);
+	if (data != pattern)
+	{
+		printf("ERROR (pattern: 0x%04X, read: 0x%04X)\r\n", pattern, data);
+		ram_test_error();
+	}
+}
+
+static void ram_test(void)
+{
+	uint16_t pattern;
+	uint32_t data;
+	volatile uint32_t* addr;
+
+	INIT_LEDS();
+	LED_Y_ON();
+
+	printf("\r\n\r\nPerforming RAM test\r\n");
+	printf("Data lines (walking one)\r\n");
+	for (pattern=0x0001; pattern>0; )
+	{
+		ram_test_data_pattern(pattern);
+		pattern <<= 1;
+	}
+	
+	printf("Data lines (walking zero)\r\n");
+	for (pattern=0xFFFE; pattern<0xFFFF; )
+	{
+		ram_test_data_pattern(pattern);
+		pattern <<= 1;
+		pattern |= 0x0001;
+	}
+
+	printf("Address lines\r\n");
+	for (addr=(uint32_t*)RAM_BASE_ADDR; addr<(uint32_t*)(RAM_BASE_ADDR+RAM_SIZE); addr++)
+		*addr = (uint32_t)addr;
+	
+	for (addr=(uint32_t*)RAM_BASE_ADDR; addr<(uint32_t*)(RAM_BASE_ADDR+RAM_SIZE); addr++)
+	{
+		data = *addr;
+		if (data != (uint32_t)addr)
+		{
+			printf("ERROR (addr: 0x%04X, read: 0x%04X)\r\n", addr, data);
+			ram_test_error();
+		}
+	}
+
+	LED_Y_OFF();
+}
+#endif
+
+static noinline void ptfmiu_sram_init(void)
+{
+	void *fdt;
+
+	fdt = __dtb_ptfmiu_start;
+  
+	/* WDT1 is already running when the bootloader gets control
+	 * Disable it to avoid "random" resets
+	 */
+	__raw_writel(WDT_DISABLE_CODE1, AM33XX_WDT_REG(WSPR));
+	while(__raw_readl(AM33XX_WDT_REG(WWPS)) != 0x0);
+	__raw_writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR));
+	while(__raw_readl(AM33XX_WDT_REG(WWPS)) != 0x0);
+
+	// Setup the PLLs and the clocks for the peripherals
+	am33xx_pll_init(MPUPLL_M_500, 24, DDRPLL_M_400);
+	
+	am335x_sdram_init(0x18B, &ddr3_cmd_ctrl, &ddr3_regs, &ddr3_data);
+
+	// Configure RSTTIME1 to maximum (~10us with 24MHz crystal)
+	__raw_writel(0x000010FF, AM33XX_PRM_RSTTIME);
+
+	am33xx_uart_soft_reset((void *)AM33XX_UART0_BASE);
+	am33xx_enable_uart0_pin_mux();
+	omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
+	putc_ll('>');
+
+#ifdef MLO_RAMTEST
+	ram_test();
+#endif
+
+	am335x_barebox_entry(fdt);
+}
+
+ENTRY_FUNCTION(start_ptfmiu_sram, bootinfo, r1, r2)
+{
+	am33xx_save_bootinfo((void *)bootinfo);
+
+	/*
+	 * 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();
+
+	ptfmiu_sram_init();
+}
+
+ENTRY_FUNCTION(start_ptfmiu_sdram, r0, r1, r2)
+{
+	void *fdt;
+
+	fdt = __dtb_ptfmiu_start - get_runtime_offset();
+	am335x_barebox_entry(fdt);
+}
diff -ruPN a/arch/arm/boards/ptfmiu/Makefile b/arch/arm/boards/ptfmiu/Makefile
--- a/arch/arm/boards/ptfmiu/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/boards/ptfmiu/Makefile	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,22 @@
+#
+# PTF-MIU board support makefile
+# Copyright (C) 2016 M. Feser
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# 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.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+lwl-y += lowlevel.o
+obj-y += board.o
+bbenv-y += defaultenv-ptfmiu
diff -ruPN a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
--- a/arch/arm/dts/Makefile	2014-10-02 08:02:13.000000000 +0200
+++ b/arch/arm/dts/Makefile	2014-10-17 10:16:09.000000000 +0200
@@ -6,6 +6,7 @@
 obj-y += empty.o
 
 pbl-dtb-$(CONFIG_MACH_BEAGLEBONE) += am335x-bone.dtb.o am335x-boneblack.dtb.o am335x-bone-common.dtb.o
+pbl-dtb-$(CONFIG_MACH_PTFMIU) += ptfmiu.dtb.o
 pbl-dtb-$(CONFIG_MACH_DFI_FS700_M60) += imx6q-dfi-fs700-m60-6q.dtb.o imx6dl-dfi-fs700-m60-6s.dtb.o
 pbl-dtb-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o
 pbl-dtb-$(CONFIG_MACH_EMBEST_RIOTBOARD) += imx6s-riotboard.dtb.o
diff -ruPN a/arch/arm/dts/ptfmiu.dts b/arch/arm/dts/ptfmiu.dts
--- a/arch/arm/dts/ptfmiu.dts	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/dts/ptfmiu.dts	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,338 @@
+/*
+ * PTF-MIU device tree
+ * Copyright (C) 2016 M. Feser
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/dts-v1/;
+
+#include "am33xx.dtsi"
+
+/ {
+  model = "PTF-MIU";
+  compatible = "kbs,ptfmiu", "ti,am33xx";
+
+  chosen {
+    linux,stdout-path = &uart0;
+  };
+
+  cpus {
+    cpu@0 {
+      cpu0-supply = <&vdd1_reg>;
+      operating-points = <
+         // kHZ    uV
+         1000000   1325000 // 1.325 nom
+         800000    1260000 // 1.260 nom
+         720000    1200000 // 1.200 nom
+         500000    1100000 // 1.100 nom
+         300000    950000  // 0.950 nom
+      >;
+    };
+  };
+
+  memory {
+    device_type = "memory";
+    reg = <0x80000000 0x20000000>; // 512 MB
+  };
+    
+  vbat: fixedregulator@0 {
+    compatible = "regulator-fixed";
+    regulator-name = "vbat";
+    regulator-min-microvolt = <5000000>;
+    regulator-max-microvolt = <5000000>;
+    regulator-always-on;
+  };
+
+  ldo33: fixedregulator@1 {
+    compatible = "regulator-fixed";
+    regulator-name = "ldo33";
+    regulator-min-microvolt = <3300000>;
+    regulator-max-microvolt = <3300000>;
+    regulator-always-on;
+  };
+
+  leds {
+    compatible = "gpio-leds";
+    pinctrl-names = "default";
+    pinctrl-0 = <&led_pins>;
+
+    led-yellow {
+      label = "yellow";
+      gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
+      linux,default-trigger = "heartbeat";
+      default-state = "off";
+    };
+
+    led-red {
+      label = "red";
+      gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
+      default-state = "off";
+    };
+  };
+};
+
+&am33xx_pinmux {
+  pinctrl-names = "default";
+  pinctrl-0 = <&sysboot_pins &slot_pins &spi0_bb_pins>;
+
+  sysboot_pins: pinmux_sysboot_pins {
+    pinctrl-single,pins = <
+      0x0A0 (PIN_OUTPUT | MUX_MODE7)   // lcd_data0.gpio2_6 -> GPO_20
+      0x0A4 (PIN_OUTPUT | MUX_MODE7)   // lcd_data1.gpio2_7 -> GPO_30
+      0x0A8 (PIN_OUTPUT | MUX_MODE7)   // lcd_data2.gpio2_8 -> 7SEG_STROBE
+      0x0AC (PIN_OUTPUT | MUX_MODE7)   // lcd_data3.gpio2_9 -> SPI0_CS1
+      0x0B0 (PIN_OUTPUT | MUX_MODE7)   // lcd_data4.gpio2_10 -> SPI1_CS0
+      0x0B4 (PIN_OUTPUT | MUX_MODE7)   // lcd_data5.gpio2_11 -> SPI1_CS1
+      0x0B8 (PIN_OUTPUT | MUX_MODE7)   // lcd_data6.gpio2_12 -> SPI1_CS2
+      0x0BC (PIN_OUTPUT | MUX_MODE7)   // lcd_data7.gpio2_13 -> SPI1_CS3
+      0x0D8 (PIN_OUTPUT | MUX_MODE7)   // lcd_data14.gpio0_10 -> EMMC_NRST
+      0x0DC (PIN_OUTPUT | MUX_MODE7)   // lcd_data15.gpio0_11 -> EXP_NRST
+      0x21C (PIN_OUTPUT | MUX_MODE7)   // usb0_drvvbus.gpio0_18 -> SYSBOOT_DIS
+    >;
+  };
+  
+  slot_pins: pinmux_slot_pins {
+    pinctrl-single,pins = <
+      0x048 (PIN_OUTPUT | MUX_MODE7)   // gpmc_a2.gpio1_18 -> GPO_00
+      0x04C (PIN_OUTPUT | MUX_MODE7)   // gpmc_a3.gpio1_19 -> GPO_10
+      0x164 (PIN_INPUT_PULLUP | MUX_MODE7) // ecap0_in_pwm0_out.gpio0_7 -> GPIO_02
+      0x19C (PIN_INPUT_PULLUP | MUX_MODE7) // mcasp0_ahclkr.gpio3_17 -> GPIO_12
+      0x044 (PIN_INPUT_PULLUP | MUX_MODE7) // gpmc_a1.gpio1_17 -> GPIO_22
+      0x0E8 (PIN_INPUT_PULLUP | MUX_MODE7) // lcd_pclk.gpio2_24 -> GPIO_32
+    >;
+  };
+
+  led_pins: pinmux_led_pins {
+    pinctrl-single,pins = <
+      0x0D0 (PIN_OUTPUT | MUX_MODE7) // lcd_data12.gpio0_8
+      0x0D4 (PIN_OUTPUT | MUX_MODE7) // lcd_data13.gpio0_9
+    >;
+  };
+
+  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
+    >;
+  };
+  
+  spi0_bb_pins: pinmux_spi0_bb_pins {
+    pinctrl-single,pins = <
+      0x150 (PIN_OUTPUT | MUX_MODE7)  // spi0_sclk.gpio0_2 -> CLK
+      0x158 (PIN_OUTPUT | MUX_MODE7)  // spi0_d1.gpio0_4 -> MOSI
+    >;
+  };
+
+  uart0_pins: pinmux_uart0_pins {
+    pinctrl-single,pins = <
+      0x170 (PIN_INPUT_PULLUP | MUX_MODE0)  // uart0_rxd.uart0_rxd
+      0x174 (PIN_OUTPUT | MUX_MODE0)        // uart0_txd.uart0_txd
+    >;
+  };
+
+  cpsw_default: cpsw_default {
+   pinctrl-single,pins = <
+     // ETH 1
+     0x10C (PIN_INPUT | MUX_MODE1)    // mii1_crs.rmii1_crs_dv
+     0x110 (PIN_INPUT | MUX_MODE1)    // mii1_rxer.rmii1_rxer
+     0x114 (PIN_OUTPUT | MUX_MODE1)   // mii1_txen.rmii1_txen
+     0x124 (PIN_OUTPUT | MUX_MODE1)   // mii1_txd1.rmii1_txd1
+     0x128 (PIN_OUTPUT | MUX_MODE1)   // mii1_txd0.rmii1_txd0
+     0x13C (PIN_INPUT | MUX_MODE1)    // mii1_rxd1.rmii1_rxd1
+     0x140 (PIN_INPUT | MUX_MODE1)    // mii1_rxd0.rmii1_rxd0
+     0x144 (PIN_INPUT_PULLDOWN | MUX_MODE0) // rmii1_refclk.rmii1_refclk
+      
+     // ETH 2
+     0x070 (PIN_INPUT | MUX_MODE3)    // gpmc_wait0.rmii2_crs_dv
+     0x074 (PIN_INPUT | MUX_MODE3)    // gpmc_wpn.rmii2_rxer
+     0x040 (PIN_OUTPUT | MUX_MODE3)   // gpmc_a0.rmii2_txen
+     0x050 (PIN_OUTPUT | MUX_MODE3)   // gpmc_a4.rmii2_txd1
+     0x054 (PIN_OUTPUT | 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_PULLDOWN | MUX_MODE1) // mii1_col.rmii2_refclk
+   >;
+  };
+
+  davinci_mdio_default: davinci_mdio_default {
+  pinctrl-single,pins = <
+      // MDIO
+      0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)  // mdio_data.mdio_data
+      0x14C (PIN_OUTPUT_PULLUP | MUX_MODE0)                 // mdio_clk.mdio_clk
+    >;
+  };
+
+  mmc1_pins: pinmux_mmc1_pins {
+    pinctrl-single,pins = <
+      0x160 (PIN_INPUT | MUX_MODE7) // spi0_cs1.gpio0_6
+    >;
+  };
+
+  emmc_pins: pinmux_emmc_pins {
+    pinctrl-single,pins = <
+      0x80 (PIN_INPUT_PULLUP | MUX_MODE2) // gpmc_csn1.mmc1_clk
+      0x84 (PIN_INPUT_PULLUP | MUX_MODE2) // gpmc_csn2.mmc1_cmd
+      0x00 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad0.mmc1_dat0
+      0x04 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad1.mmc1_dat1
+      0x08 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad2.mmc1_dat2
+      0x0c (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad3.mmc1_dat3
+      0x10 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad4.mmc1_dat4
+      0x14 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad5.mmc1_dat5
+      0x18 (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad6.mmc1_dat6
+      0x1c (PIN_INPUT_PULLUP | MUX_MODE1) // gpmc_ad7.mmc1_dat7
+    >;
+  };
+};
+
+&uart0 {
+  pinctrl-names = "default";
+  pinctrl-0 = <&uart0_pins>;
+  status = "okay";
+};
+
+&i2c0 {
+  pinctrl-names = "default";
+  pinctrl-0 = <&i2c0_pins>;
+
+  status = "okay";
+  clock-frequency = <400000>;
+
+  tps: tps@2D {
+    reg = <0x2D>;
+  };
+};
+
+&cpsw_emac0 {
+  phy_id = <&davinci_mdio>, <1>;
+  phy-mode = "rmii";
+};
+
+&cpsw_emac1 {
+  phy_id = <&davinci_mdio>, <2>;
+  phy-mode = "rmii";
+};
+
+&phy_sel {
+  rmii-clock-ext;
+};
+
+&mac {
+  pinctrl-names = "default";
+  pinctrl-0 = <&cpsw_default>;
+};
+
+&davinci_mdio {
+  pinctrl-names = "default";
+  pinctrl-0 = <&davinci_mdio_default>;
+};
+
+&mmc1 {
+  vmmc-supply = <&vmmc_reg>;
+  pinctrl-names = "default";
+  pinctrl-0 = <&mmc1_pins>;
+  bus-width = <4>;
+  cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+  cd-inverted;
+  status = "okay";
+};
+
+&mmc2 {
+  vmmc-supply = <&ldo33>;
+  pinctrl-names = "default";
+  pinctrl-0 = <&emmc_pins>;
+  bus-width = <8>;
+  ti,non-removable;
+  status = "okay";
+};
+
+#include "tps65910.dtsi"
+
+&tps {
+  vcc1-supply = <&vbat>;
+  vcc2-supply = <&vbat>;
+  vcc3-supply = <&vbat>;
+  vcc4-supply = <&vbat>;
+  vcc5-supply = <&vbat>;
+  vcc6-supply = <&vbat>;
+  vcc7-supply = <&vbat>;
+  vccio-supply = <&vbat>;
+
+  regulators {
+    vrtc_reg: regulator@0 {
+      regulator-always-on;
+    };
+
+    vio_reg: regulator@1 {
+      regulator-always-on;
+    };
+
+    vdd1_reg: regulator@2 {
+      // VDD_MPU voltage limits 0.950V - 1.325V with +/-4% tolerance
+      regulator-name = "vdd_mpu";
+      regulator-min-microvolt = <912500>;
+      regulator-max-microvolt = <1375000>;
+      regulator-boot-on;
+      regulator-always-on;
+    };
+
+    vdd2_reg: regulator@3 {
+      // VDD_CORE voltage limits 0.950V - 1.100V with +/-4% tolerance
+      regulator-name = "vdd_core";
+      regulator-min-microvolt = <912500>;
+      regulator-max-microvolt = <1137500>;
+      regulator-boot-on;
+      regulator-always-on;
+    };
+
+    vdd3_reg: regulator@4 {
+      regulator-always-on;
+    };
+
+    vdig1_reg: regulator@5 {
+      regulator-always-on;
+    };
+
+    vdig2_reg: regulator@6 {
+      regulator-always-on;
+    };
+
+    vpll_reg: regulator@7 {
+      regulator-always-on;
+    };
+
+    vdac_reg: regulator@8 {
+      regulator-always-on;
+    };
+
+    vaux1_reg: regulator@9 {
+      regulator-always-on;
+    };
+
+    vaux2_reg: regulator@10 {
+      regulator-always-on;
+    };
+
+    vaux33_reg: regulator@11 {
+      regulator-always-on;
+    };
+
+    vmmc_reg: regulator@12 {
+      regulator-min-microvolt = <1800000>;
+      regulator-max-microvolt = <3300000>;
+      regulator-always-on;
+    };
+  };
+};
diff -ruPN a/arch/arm/dts/tps65910.dtsi b/arch/arm/dts/tps65910.dtsi
--- a/arch/arm/dts/tps65910.dtsi	1970-01-01 01:00:00.000000000 +0100
+++ b/arch/arm/dts/tps65910.dtsi	2014-10-17 10:16:09.000000000 +0200
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/*
+ * Integrated Power Management Chip
+ * http://www.ti.com/lit/ds/symlink/tps65910.pdf
+ */
+
+&tps {
+	compatible = "ti,tps65910";
+
+	regulators {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		vrtc_reg: regulator@0 {
+			reg = <0>;
+			regulator-compatible = "vrtc";
+		};
+
+		vio_reg: regulator@1 {
+			reg = <1>;
+			regulator-compatible = "vio";
+		};
+
+		vdd1_reg: regulator@2 {
+			reg = <2>;
+			regulator-compatible = "vdd1";
+		};
+
+		vdd2_reg: regulator@3 {
+			reg = <3>;
+			regulator-compatible = "vdd2";
+		};
+
+		vdd3_reg: regulator@4 {
+			reg = <4>;
+			regulator-compatible = "vdd3";
+		};
+
+		vdig1_reg: regulator@5 {
+			reg = <5>;
+			regulator-compatible = "vdig1";
+		};
+
+		vdig2_reg: regulator@6 {
+			reg = <6>;
+			regulator-compatible = "vdig2";
+		};
+
+		vpll_reg: regulator@7 {
+			reg = <7>;
+			regulator-compatible = "vpll";
+		};
+
+		vdac_reg: regulator@8 {
+			reg = <8>;
+			regulator-compatible = "vdac";
+		};
+
+		vaux1_reg: regulator@9 {
+			reg = <9>;
+			regulator-compatible = "vaux1";
+		};
+
+		vaux2_reg: regulator@10 {
+			reg = <10>;
+			regulator-compatible = "vaux2";
+		};
+
+		vaux33_reg: regulator@11 {
+			reg = <11>;
+			regulator-compatible = "vaux33";
+		};
+
+		vmmc_reg: regulator@12 {
+			reg = <12>;
+			regulator-compatible = "vmmc";
+		};
+	};
+};
diff -ruPN a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
--- a/arch/arm/mach-omap/Kconfig	2014-10-02 08:02:13.000000000 +0200
+++ b/arch/arm/mach-omap/Kconfig	2014-10-17 10:16:09.000000000 +0200
@@ -152,6 +152,12 @@
 	select ARCH_AM33XX
 	help
	  Say Y here if you are using a am335x based Phytecs SOM
+
+config MACH_PTFMIU
+	bool "KBS Industrieelektronik GmbH PTF-MIU"
+	select ARCH_AM33XX
+	help
+	  Say Y here if you are using KBS Industrieelektronik GmbH PTF-MIU device
 endif
 
 choice
diff -ruPN a/images/Makefile.am33xx b/images/Makefile.am33xx
--- a/images/Makefile.am33xx	2014-10-02 08:02:13.000000000 +0200
+++ b/images/Makefile.am33xx	2014-10-15 15:03:56.000000000 +0200
@@ -67,6 +67,14 @@
 FILE_barebox-am33xx-beaglebone-mlo.img = start_am33xx_beaglebone_sram.pblx.mlo
 am33xx-mlo-$(CONFIG_MACH_BEAGLEBONE) += barebox-am33xx-beaglebone-mlo.img
 
+pblx-$(CONFIG_MACH_PTFMIU) += start_ptfmiu_sdram
+FILE_barebox-ptfmiu.img = start_ptfmiu_sdram.pblx
+am33xx-barebox-$(CONFIG_MACH_PTFMIU) += barebox-ptfmiu.img
+
+pblx-$(CONFIG_MACH_PTFMIU) += start_ptfmiu_sram
+FILE_barebox-ptfmiu-mlo.img = start_ptfmiu_sram.pblx.mlo
+am33xx-mlo-$(CONFIG_MACH_PTFMIU) += barebox-ptfmiu-mlo.img
+
 ifdef CONFIG_OMAP_BUILD_IFT
 image-y += $(am33xx-mlo-y)
 else
