diff --git a/target/linux/archs38/Makefile b/target/linux/archs38/Makefile
index 166d3d554073c54ef2ae63fa603134c3c1f919aa..cbdbfba34a3462afb439a94a908c400740b623bc 100644
--- a/target/linux/archs38/Makefile
+++ b/target/linux/archs38/Makefile
@@ -11,7 +11,7 @@ CPU_TYPE:=archs
 BOARD:=archs38
 BOARDNAME:=Synopsys DesignWare ARC HS38
 MAINTAINER:=Alexey Brodkin <abrodkin@synopsys.com>
-SUBTARGETS:=generic
+SUBTARGETS:=sd ramdisk
 
 KERNEL_PATCHVER:=4.4
 
diff --git a/target/linux/archs38/generic/profiles/01-minimal.mk b/target/linux/archs38/generic/profiles/01-minimal.mk
deleted file mode 100644
index fe8d8c3a5968fbfee42c083697a9f2006a6035aa..0000000000000000000000000000000000000000
--- a/target/linux/archs38/generic/profiles/01-minimal.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright (C) 2016 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/archs38/generic/profiles/02-axs103.mk b/target/linux/archs38/generic/profiles/02-axs103.mk
deleted file mode 100644
index 7a89b2123284b2184876f0a28ef8d628a2f08208..0000000000000000000000000000000000000000
--- a/target/linux/archs38/generic/profiles/02-axs103.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Copyright (C) 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/axs103
-	NAME:=Synopsys DesignWare AXS103
-	PACKAGES:= kmod-usb-core kmod-usb-ohci kmod-ath9k-htc wpad-mini
-endef
-
-define Profile/axs103/Description
-	Package set compatible with hardware using Synopsys DesignWare AXS103 boards.
-endef
-$(eval $(call Profile,axs103))
diff --git a/target/linux/archs38/generic/profiles/03-nsim_hs.mk b/target/linux/archs38/generic/profiles/03-nsim_hs.mk
deleted file mode 100644
index cebb0a66f4a1f3de0869081a245061c64aa5aae9..0000000000000000000000000000000000000000
--- a/target/linux/archs38/generic/profiles/03-nsim_hs.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Copyright (C) 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-define Profile/nsim_hs
-	NAME:=Synopsys nSIM
-endef
-
-define Profile/nsim_hs/Description
-	Package set compatible with hardware using Synopsys nSIM HS boards.
-endef
-$(eval $(call Profile,nsim_hs))
diff --git a/target/linux/archs38/generic/target.mk b/target/linux/archs38/generic/target.mk
deleted file mode 100644
index 19b310e2c09921b27cccbce4eacf745bfadbf344..0000000000000000000000000000000000000000
--- a/target/linux/archs38/generic/target.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-BOARDNAME:=Generic
-FEATURES += ramdisk usb
-
-define Target/Description
-	Build firmware images for generic ARC HS38 based boards.
-endef
-
-
diff --git a/target/linux/archs38/image/Config.in b/target/linux/archs38/image/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..e51db8338bbd54eeecb4113c7f631b5a2800df2a
--- /dev/null
+++ b/target/linux/archs38/image/Config.in
@@ -0,0 +1,5 @@
+config AXS10X_SD_BOOT_PARTSIZE
+	int "Boot (SD Card) filesystem partition size (in MB)"
+	depends on TARGET_archs38
+	default 20
+
diff --git a/target/linux/archs38/image/Makefile b/target/linux/archs38/image/Makefile
index f5dce288bd68cc5105805729f770844ba79648d0..505ed0262540b7911936184b70ae63ba1e6f6929 100644
--- a/target/linux/archs38/image/Makefile
+++ b/target/linux/archs38/image/Makefile
@@ -14,43 +14,73 @@ define Build/calculate-ep
 	$(eval KERNEL_ENTRY=$(shell $(KERNEL_CROSS)readelf -h $(LINUX_DIR)/vmlinux | 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/axs103
-	$(call Device/uImage)
-	DEVICE_PROFILE := axs103
-	DEVICE_DTS := axs103_idu
-endef
-TARGET_DEVICES += axs103
-
 define Device/nsim_hs
 	$(call Device/vmlinux)
 	DEVICE_PROFILE := nsim_hs
 	DEVICE_DTS := nsim_hs_idu
 endef
 TARGET_DEVICES += nsim_hs
+else
+# Root FS on SD-card
+KERNEL_LOADADDR := 0x80000000
+DEVICE_DTS_LIST:= axs103_idu
+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)
+	$(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
+endif
 
 $(eval $(call BuildImage))
diff --git a/target/linux/archs38/image/gen_axs10x_sdcard_img.sh b/target/linux/archs38/image/gen_axs10x_sdcard_img.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9a6f93d0d9de41cf6b020be5b02bbf6ab43c9c4b
--- /dev/null
+++ b/target/linux/archs38/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/archs38/image/uEnv.txt b/target/linux/archs38/image/uEnv.txt
new file mode 100644
index 0000000000000000000000000000000000000000..35549cb1c4569c11e768ae9c6075404771bd506d
--- /dev/null
+++ b/target/linux/archs38/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
diff --git a/target/linux/archs38/ramdisk/profiles/00-default.mk b/target/linux/archs38/ramdisk/profiles/00-default.mk
new file mode 100644
index 0000000000000000000000000000000000000000..4d86da3382ef197a43aa03fe3d21cc689a5b9066
--- /dev/null
+++ b/target/linux/archs38/ramdisk/profiles/00-default.mk
@@ -0,0 +1,15 @@
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Default
+	NAME:=Default Profile (all drivers)
+endef
+
+define Profile/Default/Description
+	Default package set compatible with most boards.
+endef
+$(eval $(call Profile,Default))
diff --git a/target/linux/archs38/ramdisk/target.mk b/target/linux/archs38/ramdisk/target.mk
new file mode 100644
index 0000000000000000000000000000000000000000..8612d3273d4a92d708f58ef97f1ef79840c58773
--- /dev/null
+++ b/target/linux/archs38/ramdisk/target.mk
@@ -0,0 +1,8 @@
+BOARDNAME:=Ramdisk
+FEATURES += ramdisk
+
+define Target/Description
+	Build firmware images for generic ARC HS38 based boards that use built-in initramfs
+endef
+
+
diff --git a/target/linux/archs38/generic/profiles/00-default.mk b/target/linux/archs38/sd/profiles/00-default.mk
similarity index 100%
rename from target/linux/archs38/generic/profiles/00-default.mk
rename to target/linux/archs38/sd/profiles/00-default.mk
diff --git a/target/linux/archs38/sd/target.mk b/target/linux/archs38/sd/target.mk
new file mode 100644
index 0000000000000000000000000000000000000000..ca4f19137ec3c55078ea57dfd2bbc3dc1e8cd79f
--- /dev/null
+++ b/target/linux/archs38/sd/target.mk
@@ -0,0 +1,8 @@
+BOARDNAME:=SD
+FEATURES += ext4 usb
+
+define Target/Description
+	Build firmware images for ARC HS38 based boards that use SD-card for booting.
+endef
+
+