diff --git a/fs/cbfs/cbfs.c b/fs/cbfs/cbfs.c
index d9a8562e5c885fc00094fa81f99e7300eb5cb8bd..35f919afee80cd2dc6e64db7c1dd0858d47eeb55 100644
--- a/fs/cbfs/cbfs.c
+++ b/fs/cbfs/cbfs.c
@@ -187,6 +187,23 @@ static int file_cbfs_load_header(uintptr_t end_of_rom,
 	return 0;
 }
 
+static int cbfs_load_header_ptr(struct cbfs_priv *priv, ulong base,
+				struct cbfs_header *header)
+{
+	struct cbfs_header *header_in_rom;
+
+	header_in_rom = (struct cbfs_header *)base;
+	swap_header(header, header_in_rom);
+
+	if (header->magic != good_magic || header->offset >
+			header->rom_size - header->boot_block_size) {
+		priv->result = CBFS_BAD_HEADER;
+		return -EFAULT;
+	}
+
+	return 0;
+}
+
 static void cbfs_init(struct cbfs_priv *priv, uintptr_t end_of_rom)
 {
 	u8 *start_of_rom;
@@ -209,6 +226,35 @@ void file_cbfs_init(uintptr_t end_of_rom)
 	cbfs_init(&cbfs_s, end_of_rom);
 }
 
+int cbfs_init_mem(ulong base, ulong size, struct cbfs_priv **privp)
+{
+	struct cbfs_priv priv_s, *priv = &priv_s;
+	int ret;
+
+	/*
+	 * Use a local variable to start with until we know that the CBFS is
+	 * valid. Assume that a master header appears at the start, at offset
+	 * 0x38.
+	 */
+	ret = cbfs_load_header_ptr(priv, base + 0x38, &priv->header);
+	if (ret)
+		return ret;
+
+	file_cbfs_fill_cache(priv, (u8 *)base, priv->header.rom_size,
+			     priv->header.align);
+	if (priv->result != CBFS_SUCCESS)
+		return -EINVAL;
+
+	priv->initialized = 1;
+	priv = malloc(sizeof(priv_s));
+	if (!priv)
+		return -ENOMEM;
+	memcpy(priv, &priv_s, sizeof(priv_s));
+	*privp = priv;
+
+	return 0;
+}
+
 const struct cbfs_header *file_cbfs_get_header(void)
 {
 	struct cbfs_priv *priv = &cbfs_s;
diff --git a/include/cbfs.h b/include/cbfs.h
index 742e34e24fbbe4a28ac61b2f73fb4aef4620062d..6d4c4d4b065a7b0295ae8fbd3cf0f1e8abea2ebf 100644
--- a/include/cbfs.h
+++ b/include/cbfs.h
@@ -135,6 +135,28 @@ void file_cbfs_get_next(const struct cbfs_cachenode **file);
  */
 const struct cbfs_cachenode *file_cbfs_find(const char *name);
 
+struct cbfs_priv *priv;
+
+/**
+ * cbfs_find_file() - Find a file in a given CBFS
+ *
+ * @cbfs: CBFS to look in (use cbfs_init_mem() to set it up)
+ * @name: Filename to look for
+ * @return pointer to CBFS node if found, else NULL
+ */
+const struct cbfs_cachenode *cbfs_find_file(struct cbfs_priv *cbfs,
+					    const char *name);
+
+/**
+ * cbfs_init_mem() - Set up a new CBFS
+ *
+ * @base: Base address of CBFS
+ * @size: Size of CBFS in bytes
+ * @cbfsp: Returns a pointer to CBFS on success
+ * @return 0 if OK, -ve on error
+ */
+int cbfs_init_mem(ulong base, ulong size, struct cbfs_priv **privp);
+
 
 /***************************************************************************/
 /* All of the functions below can be used without first initializing CBFS. */