diff -uNr a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c
--- a/arch/arm/boot/compressed/misc.c	2016-10-31 11:26:46.000000000 +0000
+++ b/arch/arm/boot/compressed/misc.c	2016-12-30 11:08:27.146726223 +0000
@@ -25,6 +25,14 @@
 static void putstr(const char *ptr);
 extern void error(char *x);
 
+
+#define MEMIO32_WRITE(addr, data)    \
+        ((*((volatile unsigned int *)(addr))) = ((unsigned int)(data)))
+
+#define MEMIO32_READ(addr)           \
+        ((*((volatile unsigned int *)(addr))))
+
+
 #include CONFIG_UNCOMPRESS_INCLUDE
 
 #ifdef CONFIG_DEBUG_ICEDCC
@@ -141,6 +149,21 @@
 
 extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
 
+void sleep1(int sec)
+{
+	unsigned int init_time = MEMIO32_READ(0xf10a380c);
+	unsigned int cur_time = 0;
+	unsigned long i = 0;
+	for (i = 0; i < 12000000; i++)	// 5000000: nearly 3 seconds, 9000000: almost 5 seconds
+	{
+		cur_time = MEMIO32_READ(0xf10a380c);
+		if ((cur_time - init_time) > sec)
+			break;
+	}
+
+	if (i == 12000000)
+		putstr("over 12000000 loops\n");
+}
 
 void
 decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
@@ -149,6 +172,38 @@
 {
 	int ret;
 
+#define REG_GPIO_LOW_DATA_OUT				0xF1018100	// GPIO[31,0]
+#define REG_GPIO_HIGH_DATA_OUT				0xF1018140	// GPIO[59,32]
+
+#define REG_GPIO_DATA_OUT(gpio_bit)     	((gpio_bit > 31) ? REG_GPIO_HIGH_DATA_OUT : REG_GPIO_LOW_DATA_OUT)
+
+#define GPIO_POWER_ON_HDD1					45
+#define GPIO_POWER_ON_HDD2					29
+#define GPIO_POWER_ON_USB					43
+
+#define VALUE_POWER_ON_HDD1					0x00002000	// GPIO45 reg high
+#define VALUE_POWER_ON_HDD2					0x20000000	// GPIO29 reg low
+#define VALUE_POWER_ON_USB					0x00000800	// GPIO43 reg high
+
+	unsigned int regvalue = 0;
+
+	// power on HDD1
+	putstr("Power on HDD1 ...\n");
+	regvalue = MEMIO32_READ(REG_GPIO_DATA_OUT(GPIO_POWER_ON_HDD1));	// get original reg value
+	MEMIO32_WRITE(REG_GPIO_DATA_OUT(GPIO_POWER_ON_HDD1), regvalue|VALUE_POWER_ON_HDD1);
+	sleep1(6);
+
+	// power on HDD2
+	putstr("Power on HDD2 ...\n");
+	regvalue = MEMIO32_READ(REG_GPIO_DATA_OUT(GPIO_POWER_ON_HDD2));	// get original reg value
+	MEMIO32_WRITE(REG_GPIO_DATA_OUT(GPIO_POWER_ON_HDD2), regvalue|VALUE_POWER_ON_HDD2);
+	sleep1(6);
+
+	// power on USB
+	putstr("Power on USB ...\n\n");
+	regvalue = MEMIO32_READ(REG_GPIO_DATA_OUT(GPIO_POWER_ON_USB));		// get original reg value
+	MEMIO32_WRITE(REG_GPIO_DATA_OUT(GPIO_POWER_ON_USB), regvalue|VALUE_POWER_ON_USB);
+
 	__stack_chk_guard_setup();
 
 	output_data		= (unsigned char *)output_start;
diff -uNr a/arch/arm/boot/dts/armada-380-zyxel-nas326.dts b/arch/arm/boot/dts/armada-380-zyxel-nas326.dts
--- a/arch/arm/boot/dts/armada-380-zyxel-nas326.dts	1970-01-01 00:00:00.000000000 +0000
+++ b/arch/arm/boot/dts/armada-380-zyxel-nas326.dts	2016-12-30 11:08:54.114725548 +0000
@@ -0,0 +1,182 @@
+/*
+ * Device Tree file for Marvell Armada 380 - STG-328
+ *
+ *  Copyright (C) 2016 Henrik Andersson <henrik.4e@gmail.com>
+ *
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+#include "armada-380.dtsi"
+
+/ {
+	model = "Marvell Armada 380 STG-328";
+	compatible = "marvell,armada380", "marvell,armada38x";
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0x00000000 0x10000000>; /* 256 MB */
+	};
+
+	soc {
+		ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
+			  MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
+			  MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000	/* CESA0: PHYS=0xf1100000
+									   size 64K */
+			  MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000>;	/* CESA1: PHYS=0xf1110000
+									   size 64K */
+
+		internal-regs {
+			ethernet@70000 {
+				status = "okay";
+				phy-mode = "rgmii";
+				fixed-link {
+                                        speed = <1000>;
+                                        full-duplex;
+                                };
+			};
+
+			i2c0: i2c@11000 {
+				status = "okay";
+				clock-frequency = <100000>;
+			};
+
+			i2c1: i2c@11100 {
+				status = "okay";
+				clock-frequency = <100000>;
+			};
+
+			mdio {
+			        status = "okay";
+			};
+
+			sata@a8000 {
+				status = "okay";
+			};
+
+
+			sdhci@d8000 {
+				broken-cd;
+				wp-inverted;
+				bus-width = <8>;
+				status = "okay";
+			};
+
+			serial@12000 {
+				status = "okay";
+			};
+
+			spi0: spi@10600 {
+				status = "okay";
+
+				spi-flash@0 {
+					#address-cells = <1>;
+					#size-cells = <1>;
+					compatible = "w25q32";
+					reg = <0>; /* Chip select 0 */
+					spi-max-frequency = <108000000>;
+				};
+			};
+
+			usb@58000 {
+				  status = "okay";
+			};
+			
+			usb3@f0000 {
+				   status = "okay";
+			};
+
+			usb3@f8000 {
+				   status = "okay";
+			};
+
+			/*
+			 * 1GB Flash via NFC NAND controller
+			 * by defeault disabled, because NFC
+			 * shares same pins with SPI0 and
+			 * requires SLM-1358 jumper
+			 */
+			flash@d0000 {
+//				#address-cells = <1>;
+//				#size-cells = <1>;
+//				clock-frequency = <200000000>;
+//				status = "okay"; //BLUE_ADD... 
+//
+//				nfc,nfc-mode  = "normal";	/* normal or ganged */
+//				nfc,nfc-dma   = <0>;		/* 0 for no, 1 for dma */
+//				nfc,nfc-width = <8>;
+//				nfc,ecc-type  = <1>;		/* 4 bit */
+//				nfc,num-cs    = <1>;
+
+// armada370-nand fields
+                                status = "okay";
+                                num-cs = <1>;
+                                marvell,nand-keep-config;
+                                marvell,nand-enable-arbiter;
+                                nand-on-flash-bbt;
+
+				partition@00000000 {
+					label = "U-Boot";
+					reg = <0x00000000 0x00200000>;	/*   2 MB */
+				};
+
+				partition@00200000 {
+					label = "U-Boot env";
+					reg = <0x00200000 0x00200000>;	/*   2 MB */
+				};
+
+				partition@00400000 {
+					label = "Config";
+					reg = <0x00400000 0x00A00000>;	/*  10 MB */
+				};
+
+				partition@00600000 {
+					label = "Kernel-1";
+					reg = <0x00E00000 0x00F00000>;	/*  15 MB */
+				};
+
+				partition@01500000 {
+					label = "RootFS-1";
+					reg = <0x01D00000 0x06A00000>;	/* 106 MB */
+				};
+
+				partition@08300000 {
+					label = "Kernel-2";
+					reg = <0x08700000 0x00F00000>;	/*  15 MB */
+				};
+
+				partition@09200000 {
+					label = "RootFS-2";
+					reg = <0x09600000 0x06A00000>;	/* 106 MB */
+				};
+			};
+
+			crypto@9D000 {
+				status = "okay";
+			};
+		};
+
+		pcie-controller {
+			status = "okay";
+			/*
+			 * The two PCIe units are accessible through
+			 * standard PCIe slots on the board.
+			 */
+			pcie@1,0 {
+				/* Port 0, Lane 0 */
+				status = "okay";
+			};
+			pcie@2,0 {
+				/* Port 1, Lane 0 */
+				status = "okay";
+			};
+		};
+	};
+};
diff -uNr a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
--- a/arch/arm/boot/dts/Makefile	2016-10-31 11:26:46.000000000 +0000
+++ b/arch/arm/boot/dts/Makefile	2016-12-30 11:08:27.146726223 +0000
@@ -882,6 +882,7 @@
 dtb-$(CONFIG_MACH_ARMADA_375) += \
 	armada-375-db.dtb
 dtb-$(CONFIG_MACH_ARMADA_38X) += \
+	armada-380-zyxel-nas326.dtb \
 	armada-385-db-ap.dtb \
 	armada-385-linksys-caiman.dtb \
 	armada-385-linksys-cobra.dtb \
diff -uNr a/arch/arm/configs/nas326_defconfig b/arch/arm/configs/nas326_defconfig
--- a/arch/arm/configs/nas326_defconfig	1970-01-01 00:00:00.000000000 +0000
+++ b/arch/arm/configs/nas326_defconfig	2016-12-30 11:08:27.146726223 +0000
@@ -0,0 +1,196 @@
+CONFIG_AEABI=y
+CONFIG_AHCI_MVEBU=y
+CONFIG_ARCH_MVEBU=y
+CONFIG_ARMADA_THERMAL=y
+CONFIG_ARM_APPENDED_DTB=y
+CONFIG_ARM_ATAG_DTB_COMPAT=y
+CONFIG_ARM_MVEBU_V7_CPUIDLE=y
+CONFIG_ATA=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_BLK_CGROUP=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_CFG80211=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEBUG=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_WRITEBACK=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_IDLE=y
+CONFIG_CRYPTO_DEV_MARVELL_CESA=y
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_USER=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_MIRROR=y
+CONFIG_DM_UEVENT=y
+CONFIG_DMADEVICES=y
+CONFIG_EEPROM_AT24=y
+CONFIG_EXPERT=y
+CONFIG_EXT4_FS=y
+CONFIG_FHANDLE=y
+CONFIG_FIXED_PHY=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_HIGHMEM=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_MV64XXX=y
+CONFIG_INET=y
+CONFIG_INPUT_EVDEV=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IRQ_DOMAIN_DEBUG=y
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_MACH_ARMADA_370=y
+CONFIG_MACH_ARMADA_375=y
+CONFIG_MACH_ARMADA_38X=y
+CONFIG_MACH_ARMADA_39X=y
+CONFIG_MACH_ARMADA_XP=y
+CONFIG_MACH_DOVE=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MARVELL_PHY=y
+CONFIG_MD=y
+CONFIG_MD_AUTODETECT=y
+CONFIG_MD_LINEAR=y
+CONFIG_MD_RAID0=y
+CONFIG_MD_RAID1=y
+CONFIG_MD_RAID456=y
+CONFIG_MEMORY=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MSDOS_FS=y
+CONFIG_MTD=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_PXA3xx=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MV643XX_ETH=y
+CONFIG_MVNETA=y
+CONFIG_MVPP2=y
+CONFIG_MV_XOR=y
+CONFIG_MWIFIEX=y
+CONFIG_MWIFIEX_SDIO=y
+CONFIG_NEON=y
+CONFIG_NET=y
+CONFIG_NETDEVICES=y
+CONFIG_NET_DSA_MV88E6XXX=y
+CONFIG_NEW_LEDS=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_USE_KERNEL_DNS=y
+CONFIG_NFS_V2=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V4=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_UTF8=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_ORION_WATCHDOG=y
+CONFIG_PACKET=y
+CONFIG_PCI=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_MVEBU=y
+CONFIG_PERF_EVENTS=y
+CONFIG_PM=y
+CONFIG_PM_CLK=y
+CONFIG_PM_SLEEP=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_PRINTK_TIME=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_ROOT_NFS=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_ARMADA38X=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_MV=y
+CONFIG_RTC_DRV_PCF8563=y
+CONFIG_RTC_DRV_S35390A=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_SYSTOHC=y
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_MV=y
+CONFIG_SATA_PMP=y
+CONFIG_SENSORS_GPIO_FAN=y
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_SCSI_MOD=y
+CONFIG_SCSI_PROC_FS=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SLAB=y
+CONFIG_SMP=y
+CONFIG_SPI=y
+CONFIG_SPI_ORION=y
+CONFIG_SRAM=y
+CONFIG_SYSVIPC=y
+CONFIG_THERMAL=y
+CONFIG_TIMER_STATS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_XATTR=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+CONFIG_UDF_FS=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_UNIX=y
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_PRINTER=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_MVEBU=y
+CONFIG_VFAT_FS=y
+CONFIG_VFP=y
+CONFIG_VLAN_8021Q=y
+CONFIG_WATCHDOG=y
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_ZBOOT_ROM_TEXT=0x0
