diff --git a/target/linux/arc770/generic/profiles/01-minimal.mk b/target/linux/arc770/generic/profiles/01-minimal.mk
deleted file mode 100644
index c8968daecd6c2c88693a527204f2f869fbf696be..0000000000000000000000000000000000000000
--- a/target/linux/arc770/generic/profiles/01-minimal.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/Minimal
-	NAME:=Minimal Profile (no drivers)
-endef
-
-define Profile/Minimal/Description
-	Minimal package set compatible with most boards.
-endef
-$(eval $(call Profile,Minimal))
diff --git a/target/linux/arc770/generic/profiles/02-axs101.mk b/target/linux/arc770/generic/profiles/02-axs101.mk
deleted file mode 100644
index 3fb652612aa53708fe9472c5bb25c6a7d870f416..0000000000000000000000000000000000000000
--- a/target/linux/arc770/generic/profiles/02-axs101.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/axs101
-	NAME:=Synopsys DesignWare AXS101
-	PACKAGES:= kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ath9k-htc wpad-mini
-endef
-
-define Profile/axs101/Description
-	Package set compatible with hardware using Synopsys DesignWare AXS101 boards.
-endef
-$(eval $(call Profile,axs101))
diff --git a/target/linux/arc770/generic/profiles/03-nsim_700.mk b/target/linux/arc770/generic/profiles/03-nsim_700.mk
deleted file mode 100644
index 843a3424b51911710c683e535e1d048ab77889be..0000000000000000000000000000000000000000
--- a/target/linux/arc770/generic/profiles/03-nsim_700.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/nsim_700
-	NAME:=Synopsys nSIM
-endef
-
-define Profile/nsim_700/Description
-	Package set compatible with hardware using Synopsys nSIM 700 boards.
-endef
-$(eval $(call Profile,nsim_700))
diff --git a/target/linux/arc770/generic/target.mk b/target/linux/arc770/generic/target.mk
index eba5c3c7e8413753cecf36e14c0cf199e7186819..15f598ee16cc966ecf77579050e67fe2960cae4a 100644
--- a/target/linux/arc770/generic/target.mk
+++ b/target/linux/arc770/generic/target.mk
@@ -1,5 +1,5 @@
 BOARDNAME:=Generic
-FEATURES += ramdisk usb
+FEATURES += ramdisk usb ext4
 
 define Target/Description
 	Build firmware images for generic ARC 770D based boards.
diff --git a/target/linux/arc770/image/Config.in b/target/linux/arc770/image/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..52f68ba24145d94cfac2806da20fdd7949e4a8da
--- /dev/null
+++ b/target/linux/arc770/image/Config.in
@@ -0,0 +1,5 @@
+config AXS10X_SD_BOOT_PARTSIZE
+	int "Boot (SD Card) filesystem partition size (in MB)"
+	depends on TARGET_arc770
+	default 20
+
diff --git a/target/linux/arc770/image/Makefile b/target/linux/arc770/image/Makefile
index 79ce71e726f02a9448af4edf3fe1ad3eba79fa84..f5e43f5bc949fdc683c2dce26ff26049d678e6b7 100644
--- a/target/linux/arc770/image/Makefile
+++ b/target/linux/arc770/image/Makefile
@@ -11,46 +11,76 @@ include $(INCLUDE_DIR)/image.mk
 # in memory from build to built. Thus we need to extract EP from vmlinux
 # every time before generation of uImage.
 define Build/calculate-ep
-	$(eval KERNEL_ENTRY=$(shell $(KERNEL_CROSS)readelf -h $(LINUX_DIR)/vmlinux | grep "Entry point address" | grep -o 0x.*))
+	$(eval KERNEL_ENTRY=$(shell $(KERNEL_CROSS)readelf -h $(1) | grep "Entry point address" | grep -o 0x.*))
 endef
 
-define Build/patch-dtb
-	$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$@.dtb)
-	$(STAGING_DIR_HOST)/bin/patch-dtb $@ $@.dtb
+define Build/build-dtb
+	$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$(DTS_DIR)/$(DEVICE_DTS).dtb)
 endef
 
-# Shared device definition: applies to every defined device
-define Device/Default
-  PROFILES = Default $$(DEVICE_PROFILE)
-  KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
-  DEVICE_PROFILE :=
+define Build/patch-dtb
+	$(STAGING_DIR_HOST)/bin/patch-dtb $@ $(DTS_DIR)/$(DEVICE_DTS).dtb
 endef
-DEVICE_VARS += DEVICE_PROFILE
 
+ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
+# Root FS built-in
 define Device/vmlinux
-  KERNEL_SUFFIX := .elf
-  KERNEL_INITRAMFS := kernel-bin | patch-dtb
-  KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf
-endef
-
-define Device/uImage
-  KERNEL_SUFFIX := -uImage
-  KERNEL_INITRAMFS := kernel-bin | patch-dtb | calculate-ep | uImage none
-  KERNEL_LOADADDR := 0x80000000
+	KERNEL_SUFFIX := .elf
+	KERNEL := kernel-bin | build-dtb | patch-dtb
+	KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf
 endef
 
-define Device/axs101
-	$(call Device/uImage)
-	DEVICE_PROFILE := axs101
-	DEVICE_DTS := axs101
-endef
-TARGET_DEVICES += axs101
-
 define Device/nsim
 	$(call Device/vmlinux)
 	DEVICE_PROFILE := nsim
 	DEVICE_DTS := nsim_700
 endef
 TARGET_DEVICES += nsim
+endif
+
+# Root FS on SD-card
+KERNEL_LOADADDR := 0x80000000
+DEVICE_DTS_LIST:= axs101
+FAT32_BLOCK_SIZE=1024
+FAT32_BLOCKS=$(shell echo $$(($(CONFIG_AXS10X_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
+
+define Image/Build/SDCard
+	rm -f $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img
+	mkdosfs $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img -C $(FAT32_BLOCKS)
+	mkimage -C none -A arc -T script -d uEnv.txt $(BIN_DIR)/uEnv.scr
+	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/uEnv.scr ::boot.scr
+	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(DTS_DIR)/*.dtb ::
+	mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/$(IMG_PREFIX)-uImage ::uImage
+
+	./gen_axs10x_sdcard_img.sh \
+		$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img \
+		$(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img \
+		$(KDIR)/root.$(1) \
+		$(CONFIG_AXS10X_SD_BOOT_PARTSIZE) \
+		$(CONFIG_TARGET_ROOTFS_PARTSIZE)
+
+ifneq ($(CONFIG_TARGET_IMAGES_GZIP),)
+	gzip -f9n $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img
+endif
+endef
+
+define Image/BuildKernel
+	# Build unified uImage
+	$(call Build/calculate-ep, $(KDIR)/vmlinux.elf)
+	$(call Image/BuildKernel/MkuImage, \
+		none, $(KERNEL_LOADADDR), $(KERNEL_ENTRY), \
+		$(KDIR)/vmlinux, \
+		$(BIN_DIR)/$(IMG_PREFIX)-uImage \
+	)
+
+	# Build .dtb for all boards we may run on
+	$(foreach DEVICE_DTS,$(shell echo $(DEVICE_DTS_LIST)), $(call Build/build-dtb))
+endef
+
+define Image/Build
+	$(call Image/Build/$(1),$(1))
+	$(call Image/Build/SDCard,$(1))
+	dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k conv=sync
+endef
 
 $(eval $(call BuildImage))
diff --git a/target/linux/arc770/image/gen_axs10x_sdcard_img.sh b/target/linux/arc770/image/gen_axs10x_sdcard_img.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9a6f93d0d9de41cf6b020be5b02bbf6ab43c9c4b
--- /dev/null
+++ b/target/linux/arc770/image/gen_axs10x_sdcard_img.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+set -x
+[ $# -eq 5 ] || {
+    echo "SYNTAX: $0 <file> <bootfs image> <rootfs image> <bootfs size> <rootfs size>"
+    exit 1
+}
+
+OUTPUT="$1"
+BOOTFS="$2"
+ROOTFS="$3"
+BOOTFSSIZE="$4"
+ROOTFSSIZE="$5"
+
+head=4
+sect=63
+
+set `ptgen -o $OUTPUT -h $head -s $sect -l 1024 -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M`
+
+BOOTOFFSET="$(($1 / 512))"
+BOOTSIZE="$(($2 / 512))"
+ROOTFSOFFSET="$(($3 / 512))"
+ROOTFSSIZE="$(($4 / 512))"
+
+dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc
+dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc
diff --git a/target/linux/arc770/image/uEnv.txt b/target/linux/arc770/image/uEnv.txt
new file mode 100644
index 0000000000000000000000000000000000000000..35549cb1c4569c11e768ae9c6075404771bd506d
--- /dev/null
+++ b/target/linux/arc770/image/uEnv.txt
@@ -0,0 +1,7 @@
+setenv kernel_addr_r 0x82000000
+setenv fdt_addr_r 0x83000000
+setenv loadkernel fatload mmc 0 \$(kernel_addr_r) uImage
+setenv loaddtb fatload mmc 0 \$(fdt_addr_r) \$(dts)
+setenv bootargs earlycon=uart8250,mmio32,0xe0022000,115200n8 console=ttyS3,115200n8 root=/dev/mmcblk0p2 rootwait print-fatal-signals=1
+setenv uenvcmd run loadkernel\; run loaddtb\; bootm \$(kernel_addr_r) - \$(fdt_addr_r)
+run uenvcmd