From: Roy Franz <roy.fr...@linaro.org>

Add the get_dram_base() function, shared by arm/arm64.

Signed-off-by: Roy Franz <roy.fr...@linaro.org>
Signed-off-by: Leif Lindholm <leif.lindh...@linaro.org>
---
 drivers/firmware/efi/efi-stub-helper.c |   30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/drivers/firmware/efi/efi-stub-helper.c 
b/drivers/firmware/efi/efi-stub-helper.c
index 4c8ab86..4a9986b 100644
--- a/drivers/firmware/efi/efi-stub-helper.c
+++ b/drivers/firmware/efi/efi-stub-helper.c
@@ -11,6 +11,10 @@
  */
 #define EFI_READ_CHUNK_SIZE    (1024 * 1024)
 
+/* error code which can't be mistaken for valid address */
+#define EFI_ERROR      (~0UL)
+
+
 struct file_info {
        efi_file_handle_t *handle;
        u64 size;
@@ -92,6 +96,32 @@ fail:
        return status;
 }
 
+
+static unsigned long __init get_dram_base(efi_system_table_t *sys_table)
+{
+       efi_status_t status;
+       unsigned long map_size;
+       unsigned long membase  = EFI_ERROR;
+       struct efi_memory_map map;
+       efi_memory_desc_t *md;
+
+       status = efi_get_memory_map(sys_table, (efi_memory_desc_t **)&map.map,
+                                   &map_size, &map.desc_size, NULL, NULL);
+       if (status != EFI_SUCCESS)
+               return membase;
+
+       map.map_end = map.map + map_size;
+
+       for_each_efi_memory_desc(&map, md)
+               if (md->attribute & EFI_MEMORY_WB)
+                       if (membase > md->phys_addr)
+                               membase = md->phys_addr;
+
+       efi_call_phys1(sys_table->boottime->free_pool, map.map);
+
+       return membase;
+}
+
 /*
  * Allocate at the highest possible address that is not above 'max'.
  */
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to