diff --git a/cmd/qfw.c b/cmd/qfw.c
index c6730bf2d3ef722eba8e538103b7e3ba47aafc7e..12436ec9b4efcba1884a01c27894a65bc716c40d 100644
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -126,12 +126,20 @@ static int qemu_fwcfg_do_load(cmd_tbl_t *cmdtp, int flag,
 	env = getenv("loadaddr");
 	load_addr = env ?
 		(void *)simple_strtoul(env, NULL, 16) :
+#ifdef CONFIG_LOADADDR
 		(void *)CONFIG_LOADADDR;
+#else
+		NULL;
+#endif
 
 	env = getenv("ramdiskaddr");
 	initrd_addr = env ?
 		(void *)simple_strtoul(env, NULL, 16) :
+#ifdef CONFIG_RAMDISK_ADDR
 		(void *)CONFIG_RAMDISK_ADDR;
+#else
+		NULL;
+#endif
 
 	if (argc == 2) {
 		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
@@ -140,6 +148,11 @@ static int qemu_fwcfg_do_load(cmd_tbl_t *cmdtp, int flag,
 		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
 	}
 
+	if (!load_addr || !initrd_addr) {
+		printf("missing load or initrd address\n");
+		return CMD_RET_FAILURE;
+	}
+
 	return qemu_fwcfg_setup_kernel(load_addr, initrd_addr);
 }