diff --git a/arch/arm/mach-mvebu/cpu.c b/arch/arm/mach-mvebu/cpu.c
index 04681fc5a0177db94220805653ff4d5b1e7920dc..0121db8bb5d838069981158028b2ce506ab6377f 100644
--- a/arch/arm/mach-mvebu/cpu.c
+++ b/arch/arm/mach-mvebu/cpu.c
@@ -7,6 +7,7 @@
 #include <common.h>
 #include <netdev.h>
 #include <asm/io.h>
+#include <asm/pl310.h>
 #include <asm/arch/cpu.h>
 #include <asm/arch/soc.h>
 
@@ -160,10 +161,17 @@ static void update_sdram_window_sizes(void)
 }
 
 #ifdef CONFIG_ARCH_CPU_INIT
+static void set_cbar(u32 addr)
+{
+	asm("mcr p15, 4, %0, c15, c0" : : "r" (addr));
+}
+
+
 int arch_cpu_init(void)
 {
 	/* Linux expects the internal registers to be at 0xf1000000 */
 	writel(SOC_REGS_PHY_BASE, INTREG_BASE_ADDR_REG);
+	set_cbar(SOC_REGS_PHY_BASE + 0xC000);
 
 	/*
 	 * We need to call mvebu_mbus_probe() before calling
@@ -240,6 +248,13 @@ int cpu_eth_init(bd_t *bis)
 #ifndef CONFIG_SYS_DCACHE_OFF
 void enable_caches(void)
 {
+	struct pl310_regs *const pl310 =
+		(struct pl310_regs *)CONFIG_SYS_PL310_BASE;
+
+	/* First disable L2 cache - may still be enable from BootROM */
+	if (mvebu_soc_family() == MVEBU_SOC_A38X)
+		clrbits_le32(&pl310->pl310_ctrl, L2X0_CTRL_EN);
+
 	/* Avoid problem with e.g. neta ethernet driver */
 	invalidate_dcache_all();
 
diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index 9540e7eb84fc40b67b2827869b081e3462ca0577..1ff17cab269f961dd7796f93b9c7b6b0dac3cbb2 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -420,6 +420,18 @@ static size_t image_headersz_v1(struct image_tool_params *params,
 			*hasext = 1;
 	}
 
+#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS)
+	if (headersz > CONFIG_SYS_SPI_U_BOOT_OFFS) {
+		fprintf(stderr, "Error: Image header (incl. SPL image) too big!\n");
+		fprintf(stderr, "header=0x%x CONFIG_SYS_SPI_U_BOOT_OFFS=0x%x!\n",
+			(int)headersz, CONFIG_SYS_SPI_U_BOOT_OFFS);
+		fprintf(stderr, "Increase CONFIG_SYS_SPI_U_BOOT_OFFS!\n");
+		return 0;
+	} else {
+		headersz = CONFIG_SYS_SPI_U_BOOT_OFFS;
+	}
+#endif
+
 	/*
 	 * The payload should be aligned on some reasonable
 	 * boundary
@@ -869,16 +881,6 @@ static int kwbimage_generate(struct image_tool_params *params,
 			sizeof(struct ext_hdr_v0);
 	} else {
 		alloc_len = image_headersz_v1(params, NULL);
-#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS)
-		if (alloc_len > CONFIG_SYS_SPI_U_BOOT_OFFS) {
-			fprintf(stderr, "Error: Image header (incl. SPL image) too big!\n");
-			fprintf(stderr, "header=0x%x CONFIG_SYS_SPI_U_BOOT_OFFS=0x%x!\n",
-				alloc_len, CONFIG_SYS_SPI_U_BOOT_OFFS);
-			fprintf(stderr, "Increase CONFIG_SYS_SPI_U_BOOT_OFFS!\n");
-		} else {
-			alloc_len = CONFIG_SYS_SPI_U_BOOT_OFFS;
-		}
-#endif
 	}
 
 	hdr = malloc(alloc_len);
diff --git a/tools/kwboot.c b/tools/kwboot.c
index 1368b4c948ae74e977683880fc8828ea86b95bb7..af7a6ee3f6a12c04ac3782cb8703617d63375b45 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -657,7 +657,7 @@ static void
 kwboot_usage(FILE *stream, char *progname)
 {
 	fprintf(stream,
-		"Usage: %s [-d | -a | -b <image> | -D <image> ] [ -t ] [-B <baud> ] <TTY>\n",
+		"Usage: %s [-d | -a | -q <req-delay> | -s <resp-timeo> | -b <image> | -D <image> ] [ -t ] [-B <baud> ] <TTY>\n",
 		progname);
 	fprintf(stream, "\n");
 	fprintf(stream,
@@ -667,6 +667,8 @@ kwboot_usage(FILE *stream, char *progname)
 		"  -D <image>: boot <image> without preamble (Dove)\n");
 	fprintf(stream, "  -d: enter debug mode\n");
 	fprintf(stream, "  -a: use timings for Armada XP\n");
+	fprintf(stream, "  -q <req-delay>:  use specific request-delay\n");
+	fprintf(stream, "  -s <resp-timeo>: use specific response-timeout\n");
 	fprintf(stream, "\n");
 	fprintf(stream, "  -t: mini terminal\n");
 	fprintf(stream, "\n");
@@ -699,7 +701,7 @@ main(int argc, char **argv)
 	kwboot_verbose = isatty(STDOUT_FILENO);
 
 	do {
-		int c = getopt(argc, argv, "hb:ptaB:dD:");
+		int c = getopt(argc, argv, "hb:ptaB:dD:q:s:");
 		if (c < 0)
 			break;
 
@@ -731,6 +733,14 @@ main(int argc, char **argv)
 			msg_rsp_timeo = KWBOOT_MSG_RSP_TIMEO_AXP;
 			break;
 
+		case 'q':
+			msg_req_delay = atoi(optarg);
+			break;
+
+		case 's':
+			msg_rsp_timeo = atoi(optarg);
+			break;
+
 		case 'B':
 			speed = kwboot_tty_speed(atoi(optarg));
 			if (speed == -1)