diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c
index 1e532d5963e0e0ef84bbf3a90809c9b0aafc982d..56be94388149856ebd40f7daf0ad1eb95d238a1e 100644
--- a/common/spl/spl_fat.c
+++ b/common/spl/spl_fat.c
@@ -74,11 +74,38 @@ end:
 int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition)
 {
 	int err;
+	__maybe_unused char *file;
 
 	err = spl_register_fat_device(block_dev, partition);
 	if (err)
 		return err;
 
+#if defined(CONFIG_SPL_ENV_SUPPORT) && defined(CONFIG_SPL_OS_BOOT)
+	file = getenv("falcon_args_file");
+	if (file) {
+		err = file_fat_read(file, (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);
+		if (err <= 0) {
+			printf("spl: error reading image %s, err - %d, falling back to default\n",
+			       file, err);
+			goto defaults;
+		}
+		file = getenv("falcon_image_file");
+		if (file) {
+			err = spl_load_image_fat(block_dev, partition, file);
+			if (err != 0) {
+				puts("spl: falling back to default\n");
+				goto defaults;
+			}
+
+			return 0;
+		} else
+			puts("spl: falcon_image_file not set in environment, falling back to default\n");
+	} else
+		puts("spl: falcon_args_file not set in environment, falling back to default\n");
+
+defaults:
+#endif
+
 	err = file_fat_read(CONFIG_SPL_FAT_LOAD_ARGS_NAME,
 			    (void *)CONFIG_SYS_SPL_ARGS_ADDR, 0);
 	if (err <= 0) {
diff --git a/doc/README.falcon b/doc/README.falcon
index bccf6c95c869388ae6824a50ccb25e378d925104..82a254b2e2565357a97a3479246023bbc02e3dbb 100644
--- a/doc/README.falcon
+++ b/doc/README.falcon
@@ -89,6 +89,10 @@ mode.  In this case the following variables may be supported:
 boot_os : 		Set to yes/Yes/true/True/1 to enable booting to OS,
 			any other value to fall back to U-Boot (including
 			unset)
+falcon_args_file :	Filename to load as the 'args' portion of falcon mode
+			rather than the hard-coded value.
+falcon_image_file :	Filename to load as the OS image portion of falcon
+			mode rather than the hard-coded value.
 
 Using spl command
 -----------------