diff --git a/common/image.c b/common/image.c
index 907a288..3dc883b 100644
--- a/common/image.c
+++ b/common/image.c
@@ -100,7 +100,8 @@
 	{	IH_ARCH_SPARC64,	"sparc64",	"SPARC 64 Bit",	},
 	{	IH_ARCH_BLACKFIN,	"blackfin",	"Blackfin",	},
 	{	IH_ARCH_AVR32,		"avr32",	"AVR32",	},
-	{	IH_ARCH_ARC,		"arc",		"arc",	},
+	{	IH_ARCH_ARC,		"arc",		"arc",		},
+	{	IH_ARCH_ARC_UPSTREAM,	"arc",		"arc",		},
 	{	-1,			"",		"",		},
 };
 
diff --git a/include/image.h b/include/image.h
index cbacd86..6d83711 100644
--- a/include/image.h
+++ b/include/image.h
@@ -108,8 +108,9 @@
 #define IH_ARCH_NIOS2		15	/* Nios-II	*/
 #define IH_ARCH_BLACKFIN	16	/* Blackfin	*/
 #define IH_ARCH_AVR32		17	/* AVR32	*/
-#define IH_ARCH_ST200	        18	/* STMicroelectronics ST200  */
-#define IH_ARCH_ARC         19  /* ARC */
+#define IH_ARCH_ST200		18	/* STMicroelectronics ST200  */
+#define IH_ARCH_ARC		19	/* ARC (Value from Quantenna) */
+#define IH_ARCH_ARC_UPSTREAM	23	/* ARC (Value from Uboot) */
 
 /*
  * Image Types
@@ -359,7 +360,7 @@
  */
 static inline ulong image_get_data (image_header_t *hdr)
 {
-	return ((ulong)hdr + image_get_header_size ());
+	return ((ulong)hdr + image_get_header_size (hdr));
 }
 
 static inline uint32_t *image_get_qtn_flags_addr (image_header_t *hdr)
@@ -369,8 +370,12 @@
 
 static inline uint32_t image_get_qtn_flags (image_header_t *hdr)
 {
-	uint32_t *flags_addr = image_get_qtn_flags_addr(hdr);
-	return *flags_addr;
+        /* Image only has qtn flags if it is in their format: ARCH_ID == 19 */
+        if (hdr->ih_arch == IH_ARCH_ARC) {
+          uint32_t *flags_addr = image_get_qtn_flags_addr(hdr);
+          return *flags_addr;
+        }
+        return 0;
 }
 
 static inline void image_set_qtn_flags (image_header_t *hdr, uint32_t val)
@@ -381,7 +386,7 @@
 
 static inline uint32_t image_get_image_size (image_header_t *hdr)
 {
-	return (image_get_size (hdr) + image_get_header_size ());
+	return (image_get_size (hdr) + image_get_header_size (hdr));
 }
 static inline ulong image_get_image_end (image_header_t *hdr)
 {
@@ -435,6 +440,11 @@
 }
 static inline int image_check_arch (image_header_t *hdr, uint8_t arch)
 {
+	if (arch == IH_ARCH_ARC) {
+		/* need to accept both quentenna and upstream format as ARC */
+		return (image_get_arch(hdr) == IH_ARCH_ARC) ||
+			(image_get_arch(hdr) == IH_ARCH_ARC_UPSTREAM);
+	}
 	return (image_get_arch (hdr) == arch);
 }
 static inline int image_check_os (image_header_t *hdr, uint8_t os)
@@ -476,7 +486,7 @@
 #elif defined(__sparc__)
 	if (!image_check_arch (hdr, IH_ARCH_SPARC))
 #elif defined(__arc__)
-    if (!image_check_arch (hdr, IH_ARCH_ARC))
+	if (!image_check_arch (hdr, IH_ARCH_ARC))
 #else
 # error Unknown CPU type
 #endif
diff --git a/quantenna/common/uboot_header.h b/quantenna/common/uboot_header.h
index 478cf06..391a908 100644
--- a/quantenna/common/uboot_header.h
+++ b/quantenna/common/uboot_header.h
@@ -44,11 +44,24 @@
 	uint8_t         ih_name[IH_NMLEN];      /* Image Name           */
 } image_header_t;
 
-static inline uint32_t image_get_header_size(void)
+static inline uint32_t image_get_header_size(image_header_t* hdr)
 {
+	/*
+	 * Header size depends on whether image is from Quantenna or Upstream
+	 * Quantenna pads header with 0 up until 8k boundary
+	 * We can distinguish between upstream and quantenna image based on
+	 * ih_arch value of the image.
+	 * Quantenna: IH_ARCH_ARC == 19
+	 * Upstream:  IH_ARCH_ARC == 23
+	 * Our uboot is from quantenna so IH_ARCH_ARC == 19
+	 */
+	if (hdr->ih_arch == IH_ARCH_ARC) {
 #define MAX_KNOWN_PAGE_SIZE 8192
 #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
-	return ROUND_UP(sizeof(image_header_t), MAX_KNOWN_PAGE_SIZE);
+		return ROUND_UP(sizeof(image_header_t), MAX_KNOWN_PAGE_SIZE);
+	} else {
+		return sizeof(image_header_t);
+	}
 }
 
 struct early_flash_config {
diff --git a/tools/chkimage.c b/tools/chkimage.c
index b68fb7f..6bc9596 100644
--- a/tools/chkimage.c
+++ b/tools/chkimage.c
@@ -161,7 +161,8 @@
 		exit (EXIT_FAILURE);
 	}
 
-	if ((unsigned)sbuf.st_size < image_get_header_size ()) {
+	/* This chkimage is not used: NULL passed just so it compiles */
+	if ((unsigned)sbuf.st_size < image_get_header_size (NULL)) {
 		fprintf (stderr,
 				"%s: Bad size: \"%s\" is no valid image\n",
 				cmdname, imagefile);
diff --git a/tools/mkimage.c b/tools/mkimage.c
index 1a0dd27..cf5e4e5 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -180,7 +180,8 @@
 		ep = addr;
 		/* If XIP, entry point must be after the U-Boot header */
 		if (xflag)
-			ep += image_get_header_size ();
+			/* This mkimage not used: null passed for compiler */
+			ep += image_get_header_size (NULL);
 	}
 
 	/*
@@ -188,11 +189,11 @@
 	 * the size of the U-Boot header.
 	 */
 	if (xflag) {
-		if (ep != addr + image_get_header_size ()) {
+		if (ep != addr + image_get_header_size (NULL)) {
 			fprintf (stderr,
 				"%s: For XIP, the entry point must be the load addr + %lu\n",
 				cmdname,
-				(unsigned long)image_get_header_size ());
+				(unsigned long)image_get_header_size (NULL));
 			exit (EXIT_FAILURE);
 		}
 	}
@@ -224,7 +225,7 @@
 			exit (EXIT_FAILURE);
 		}
 
-		if ((unsigned)sbuf.st_size < image_get_header_size ()) {
+		if ((unsigned)sbuf.st_size < image_get_header_size (NULL)) {
 			fprintf (stderr,
 				"%s: Bad size: \"%s\" is no valid image\n",
 				cmdname, imagefile);
@@ -269,7 +270,7 @@
 			cmdname, imagefile, strerror(errno));
 		exit (EXIT_FAILURE);
 	}
-	for (i = sizeof(*hdr); i < image_get_header_size(); ++i) {
+	for (i = sizeof(*hdr); i < image_get_header_size(NULL); ++i) {
 		char c = 0;
 		if (write(ifd, &c, 1) != 1) {
 			fprintf (stderr, "%s: Write error on %s: %s\n",
@@ -359,14 +360,14 @@
 	hdr = (image_header_t *)ptr;
 
 	checksum = crc32 (0,
-			  (const char *)(ptr + image_get_header_size ()),
-			  sbuf.st_size - image_get_header_size ()
+			  (const char *)(ptr + image_get_header_size (NULL)),
+			  sbuf.st_size - image_get_header_size (NULL)
 			 );
 
 	/* Build new header */
 	image_set_magic (hdr, IH_MAGIC);
 	image_set_time (hdr, sbuf.st_mtime);
-	image_set_size (hdr, sbuf.st_size - image_get_header_size ());
+	image_set_size (hdr, sbuf.st_size - image_get_header_size (NULL));
 	image_set_load (hdr, addr);
 	image_set_ep (hdr, ep);
 	image_set_dcrc (hdr, checksum);
@@ -446,14 +447,14 @@
 		 * reserved for it.
 		 */
 
-		if ((unsigned)sbuf.st_size < image_get_header_size ()) {
+		if ((unsigned)sbuf.st_size < image_get_header_size (NULL)) {
 			fprintf (stderr,
 				"%s: Bad size: \"%s\" is too small for XIP\n",
 				cmdname, datafile);
 			exit (EXIT_FAILURE);
 		}
 
-		for (p = ptr; p < ptr + image_get_header_size (); p++) {
+		for (p = ptr; p < ptr + image_get_header_size (NULL); p++) {
 			if ( *p != 0xff ) {
 				fprintf (stderr,
 					"%s: Bad file: \"%s\" has invalid buffer for XIP\n",
@@ -462,7 +463,7 @@
 			}
 		}
 
-		offset = image_get_header_size ();
+		offset = image_get_header_size (NULL);
 	}
 
 	size = sbuf.st_size - offset;
