diff --git a/common/bl_common.c b/common/bl_common.c
index b2d22c1..84ff99c 100644
--- a/common/bl_common.c
+++ b/common/bl_common.c
@@ -58,92 +58,6 @@
 	return value;
 }
 
-/******************************************************************************
- * Determine whether the memory region delimited by 'addr' and 'size' is free,
- * given the extents of free memory.
- * Return 1 if it is free, 0 if it is not free or if the input values are
- * invalid.
- *****************************************************************************/
-int is_mem_free(uintptr_t free_base, size_t free_size,
-		uintptr_t addr, size_t size)
-{
-	uintptr_t free_end, requested_end;
-
-	/*
-	 * Handle corner cases first.
-	 *
-	 * The order of the 2 tests is important, because if there's no space
-	 * left (i.e. free_size == 0) but we don't ask for any memory
-	 * (i.e. size == 0) then we should report that the memory is free.
-	 */
-	if (size == 0)
-		return 1;	/* A zero-byte region is always free */
-	if (free_size == 0)
-		return 0;
-
-	/*
-	 * Check that the end addresses don't overflow.
-	 * If they do, consider that this memory region is not free, as this
-	 * is an invalid scenario.
-	 */
-	if (check_uptr_overflow(free_base, free_size - 1))
-		return 0;
-	free_end = free_base + (free_size - 1);
-
-	if (check_uptr_overflow(addr, size - 1))
-		return 0;
-	requested_end = addr + (size - 1);
-
-	/*
-	 * Finally, check that the requested memory region lies within the free
-	 * region.
-	 */
-	return (addr >= free_base) && (requested_end <= free_end);
-}
-
-/* Generic function to return the size of an image */
-size_t get_image_size(unsigned int image_id)
-{
-	uintptr_t dev_handle;
-	uintptr_t image_handle;
-	uintptr_t image_spec;
-	size_t image_size = 0U;
-	int io_result;
-
-	/* Obtain a reference to the image by querying the platform layer */
-	io_result = plat_get_image_source(image_id, &dev_handle, &image_spec);
-	if (io_result != 0) {
-		WARN("Failed to obtain reference to image id=%u (%i)\n",
-			image_id, io_result);
-		return 0;
-	}
-
-	/* Attempt to access the image */
-	io_result = io_open(dev_handle, image_spec, &image_handle);
-	if (io_result != 0) {
-		WARN("Failed to access image id=%u (%i)\n",
-			image_id, io_result);
-		return 0;
-	}
-
-	/* Find the size of the image */
-	io_result = io_size(image_handle, &image_size);
-	if ((io_result != 0) || (image_size == 0U)) {
-		WARN("Failed to determine the size of the image id=%u (%i)\n",
-			image_id, io_result);
-	}
-	io_result = io_close(image_handle);
-	/* Ignore improbable/unrecoverable error in 'close' */
-
-	/* TODO: Consider maintaining open device connection from this
-	 * bootloader stage
-	 */
-	io_result = io_dev_close(dev_handle);
-	/* Ignore improbable/unrecoverable error in 'dev_close' */
-
-	return image_size;
-}
-
 /*******************************************************************************
  * Internal function to load an image at a specific address given
  * an image ID and extents of free memory.
diff --git a/docs/porting-guide.rst b/docs/porting-guide.rst
index 7fc5297..716d446 100644
--- a/docs/porting-guide.rst
+++ b/docs/porting-guide.rst
@@ -1198,9 +1198,6 @@
 
     meminfo.total_base = Base address of secure RAM visible to BL1
     meminfo.total_size = Size of secure RAM visible to BL1
-    meminfo.free_base  = Base address of secure RAM available for allocation
-                         to BL1
-    meminfo.free_size  = Size of secure RAM available for allocation to BL1
 
 This information is used by BL1 to load the BL2 image in secure RAM. BL1 also
 populates a similar structure to tell BL2 the extents of memory available for
diff --git a/include/common/bl_common.h b/include/common/bl_common.h
index f7b3b9c..57c1174 100644
--- a/include/common/bl_common.h
+++ b/include/common/bl_common.h
@@ -189,11 +189,6 @@
 /*******************************************************************************
  * Function & variable prototypes
  ******************************************************************************/
-size_t get_image_size(unsigned int image_id);
-
-int is_mem_free(uintptr_t free_base, size_t free_size,
-		uintptr_t addr, size_t size);
-
 int load_auth_image(unsigned int image_id, image_info_t *image_data);
 
 #if TRUSTED_BOARD_BOOT && defined(DYN_DISABLE_AUTH)
