diff --git a/common/image.c b/common/image.c
index 2cdc728..1325e07 100644
--- a/common/image.c
+++ b/common/image.c
@@ -157,6 +157,7 @@
 	{	IH_TYPE_LPC32XXIMAGE, "lpc32xximage",  "LPC32XX Boot Image", },
 	{	IH_TYPE_RKIMAGE,    "rkimage",    "Rockchip Boot Image" },
 	{	IH_TYPE_RKSD,       "rksd",       "Rockchip SD Boot Image" },
+	{	IH_TYPE_RKSPI,      "rkspi",      "Rockchip SPI Boot Image" },
 	{	-1,		    "",		  "",			},
 };
 
diff --git a/include/image.h b/include/image.h
index ea16205..8a864ae 100644
--- a/include/image.h
+++ b/include/image.h
@@ -247,8 +247,9 @@
 #define IH_TYPE_LOADABLE	22	/* A list of typeless images	*/
 #define IH_TYPE_RKIMAGE		23	/* Rockchip Boot Image		*/
 #define IH_TYPE_RKSD		24	/* Rockchip SD card		*/
+#define IH_TYPE_RKSPI		25	/* Rockchip SPI image		*/
 
-#define IH_TYPE_COUNT		25	/* Number of image types */
+#define IH_TYPE_COUNT		26	/* Number of image types */
 
 /*
  * Compression Types
diff --git a/tools/rkspi.c b/tools/rkspi.c
new file mode 100644
index 0000000..a3c4c73
--- /dev/null
+++ b/tools/rkspi.c
@@ -0,0 +1,119 @@
+/*
+ * (C) Copyright 2015 Google,  Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ *
+ * See README.rockchip for details of the rkspi format
+ */
+
+#include "imagetool.h"
+#include <image.h>
+#include <rc4.h>
+#include "mkimage.h"
+#include "rkcommon.h"
+
+enum {
+	RKSPI_SPL_HDR_START	= RK_CODE1_OFFSET * RK_BLK_SIZE,
+	RKSPI_SPL_START		= RKSPI_SPL_HDR_START + 4,
+	RKSPI_HEADER_LEN	= RKSPI_SPL_START,
+	RKSPI_SECT_LEN		= RK_BLK_SIZE * 4,
+};
+
+static char dummy_hdr[RKSPI_HEADER_LEN];
+
+static int rkspi_check_params(struct image_tool_params *params)
+{
+	return 0;
+}
+
+static int rkspi_verify_header(unsigned char *buf, int size,
+			       struct image_tool_params *params)
+{
+	return 0;
+}
+
+static void rkspi_print_header(const void *buf)
+{
+}
+
+static void rkspi_set_header(void *buf, struct stat *sbuf, int ifd,
+			     struct image_tool_params *params)
+{
+	int sector;
+	unsigned int size;
+	int ret;
+
+	size = params->orig_file_size;
+	ret = rkcommon_set_header(buf, size);
+	debug("size %x\n", size);
+	if (ret) {
+		/* TODO(sjg@chromium.org): This method should return an error */
+		printf("Warning: SPL image is too large (size %#x) and will not boot\n",
+		       size);
+	}
+
+	memcpy(buf + RKSPI_SPL_HDR_START, "RK32", 4);
+
+	/*
+	 * Spread the image out so we only use the first 2KB of each 4KB
+	 * region. This is a feature of the SPI format required by the Rockchip
+	 * boot ROM. Its rationale is unknown.
+	 */
+	for (sector = size / RKSPI_SECT_LEN - 1; sector >= 0; sector--) {
+		printf("sector %u\n", sector);
+		memmove(buf + sector * RKSPI_SECT_LEN * 2,
+			buf + sector * RKSPI_SECT_LEN,
+			RKSPI_SECT_LEN);
+		memset(buf + sector * RKSPI_SECT_LEN * 2 + RKSPI_SECT_LEN,
+		       '\0', RKSPI_SECT_LEN);
+	}
+}
+
+static int rkspi_extract_subimage(void *buf, struct image_tool_params *params)
+{
+	return 0;
+}
+
+static int rkspi_check_image_type(uint8_t type)
+{
+	if (type == IH_TYPE_RKSPI)
+		return EXIT_SUCCESS;
+	else
+		return EXIT_FAILURE;
+}
+
+/* We pad the file out to a fixed size - this method returns that size */
+static int rkspi_vrec_header(struct image_tool_params *params,
+			     struct image_type_params *tparams)
+{
+	int pad_size;
+
+	pad_size = (RK_MAX_CODE1_SIZE + 0x7ff) / 0x800 * 0x800;
+	params->orig_file_size = pad_size;
+
+	/* We will double the image size due to the SPI format */
+	pad_size *= 2;
+	pad_size += RKSPI_SPL_HDR_START;
+	debug("pad_size %x\n", pad_size);
+
+	return pad_size - params->file_size;
+}
+
+/*
+ * rk_spi parameters
+ */
+U_BOOT_IMAGE_TYPE(
+	rkspi,
+	"Rockchip SPI Boot Image support",
+	RKSPI_HEADER_LEN,
+	dummy_hdr,
+	rkspi_check_params,
+	rkspi_verify_header,
+	rkspi_print_header,
+	rkspi_set_header,
+	rkspi_extract_subimage,
+	rkspi_check_image_type,
+	NULL,
+	rkspi_vrec_header
+);
