[U-Boot,v2,3/8] x86: slimbootloader: Add memory configuration
diff mbox series

Message ID A1484485FD99714DB2AB2C5EF81E7AC2AA713EAA@ORSMSX116.amr.corp.intel.com
State Superseded
Delegated to: Bin Meng
Headers show
Series
  • x86: Add basic Slim Bootloader payload support
Related show

Commit Message

Park, Aiden June 25, 2019, 11:18 p.m. UTC
- Get memory size from the memory map info hob
- Set ram top for U-Boot relocation lower than 4GB
- Provide e820 entries from the memory map info hob

Signed-off-by: Aiden Park <aiden.park@intel.com>
---
 arch/x86/cpu/slimbootloader/Makefile          |   2 +-
 arch/x86/cpu/slimbootloader/dram.c            | 139 ++++++++++++++++++
 .../asm/arch-slimbootloader/slimbootloader.h  |  38 +++++
 3 files changed, 178 insertions(+), 1 deletion(-)
 create mode 100644 arch/x86/cpu/slimbootloader/dram.c

Comments

Bin Meng July 2, 2019, 2:13 p.m. UTC | #1
Hi Aiden,

On Wed, Jun 26, 2019 at 7:18 AM Park, Aiden <aiden.park@intel.com> wrote:
>
> - Get memory size from the memory map info hob
> - Set ram top for U-Boot relocation lower than 4GB
> - Provide e820 entries from the memory map info hob
>
> Signed-off-by: Aiden Park <aiden.park@intel.com>
> ---
>  arch/x86/cpu/slimbootloader/Makefile          |   2 +-
>  arch/x86/cpu/slimbootloader/dram.c            | 139 ++++++++++++++++++
>  .../asm/arch-slimbootloader/slimbootloader.h  |  38 +++++
>  3 files changed, 178 insertions(+), 1 deletion(-)
>  create mode 100644 arch/x86/cpu/slimbootloader/dram.c
>
> diff --git a/arch/x86/cpu/slimbootloader/Makefile b/arch/x86/cpu/slimbootloader/Makefile
> index 620fc8a139..4b0b3e71c9 100644
> --- a/arch/x86/cpu/slimbootloader/Makefile
> +++ b/arch/x86/cpu/slimbootloader/Makefile
> @@ -2,4 +2,4 @@
>  #
>  # Copyright (C) 2019 Intel Corporation <www.intel.com>
>
> -obj-y += car.o slimbootloader.o hob.o
> +obj-y += car.o slimbootloader.o hob.o dram.o
> diff --git a/arch/x86/cpu/slimbootloader/dram.c b/arch/x86/cpu/slimbootloader/dram.c
> new file mode 100644
> index 0000000000..1defdad1c9
> --- /dev/null
> +++ b/arch/x86/cpu/slimbootloader/dram.c
> @@ -0,0 +1,139 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019 Intel Corporation <www.intel.com>
> + */
> +
> +#include <common.h>
> +#include <linux/sizes.h>
> +#include <asm/e820.h>
> +#include <asm/arch/slimbootloader.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +/**
> + * This returns a data pointer of memory map info from the guid hob.
> + *
> + * @return: A data pointer of memory map info hob
> + */
> +static void *get_memory_map_info(void)
> +{
> +       const struct efi_guid guid = LOADER_MEMORY_MAP_INFO_GUID;
> +
> +       return get_next_guid_hob_data(&guid, gd->arch.hob_list);
> +}
> +
> +/**
> + * This is to give usable memory region information for u-boot relocation.
> + * so search usable memory region lower than 4GB.
> + * The memory map entries from Slim Bootloader hob are already sorted.
> + *
> + * @total_size: The memory size that u-boot occupies
> + * @return    : The top available memory address lower than 4GB
> + */
> +ulong board_get_usable_ram_top(ulong total_size)
> +{
> +       struct memory_map_info *data = NULL;
> +       int i = 0;
> +       phys_addr_t addr_start = 0;
> +       phys_addr_t addr_end = 0;
> +       ulong ram_top = 0;
> +
> +       data = (struct memory_map_info *)get_memory_map_info();
> +       if (!data)
> +               panic("memory map info hob not found\n");
> +
> +       /* sorted memory map entries, so reversed search */
> +       for (i = data->count - 1; i >= 0; i--) {
> +               if (data->entry[i].type != E820_RAM)
> +                       continue;
> +
> +               addr_start = data->entry[i].addr;
> +               addr_end = addr_start + data->entry[i].size;
> +
> +               if (addr_start > SZ_4G)
> +                       continue;
> +
> +               if (addr_end > SZ_4G)
> +                       addr_end = SZ_4G;
> +
> +               if (addr_end < total_size)
> +                       continue;
> +
> +               /* to relocate u-boot at 4K aligned memory */
> +               addr_end = rounddown(addr_end - total_size, SZ_4K);
> +               if (addr_end >= addr_start) {
> +                       ram_top = (ulong)addr_end + total_size;
> +                       break;
> +               }
> +       }
> +
> +       if (!ram_top)
> +               panic("failed to find available memory for relocation!");
> +
> +       return ram_top;
> +}
> +
> +/**
> + * The memory initialization has already been done in previous Slim Bootloader
> + * stage thru FSP-M. Instead, this sets the ram_size from the memory map info
> + * hob.

Is the memory map info created by the FSP, or created by the slim
bootloader? If it is created by newer FSPs, I think such function is
eligible for FSP based board to use in the future.

> + */
> +int dram_init(void)
> +{
> +       struct memory_map_info *data = NULL;
> +       int i = 0;
> +       phys_size_t ram_size = 0;
> +
> +       data = (struct memory_map_info *)get_memory_map_info();
> +       if (!data)
> +               panic("memory map info hob not found\n");
> +
> +       /* sorted memory map entries, so reversed search */
> +       for (i = data->count - 1; i >= 0; i--) {
> +               if (data->entry[i].type != E820_RAM)
> +                       continue;
> +
> +               /* simply use the highest usable memory address as ram size */

This indicates the memory map info is sorted, from highest address to
lowest address. Need some comments.

> +               ram_size = data->entry[i].addr + data->entry[i].size;
> +               break;
> +       }
> +
> +       if (!ram_size)
> +               panic("failed to detect memory size");
> +
> +       gd->ram_size = ram_size;
> +       return 0;
> +}
> +
> +int dram_init_banksize(void)
> +{
> +       /* simply use a single bank to have whole size for now */
> +       if (CONFIG_NR_DRAM_BANKS) {
> +               gd->bd->bi_dram[0].start = 0;
> +               gd->bd->bi_dram[0].size = gd->ram_size;
> +       }
> +       return 0;
> +}
> +
> +unsigned int install_e820_map(unsigned int max_entries,
> +                             struct e820_entry *entries)
> +{
> +       struct memory_map_info *data = NULL;
> +       int i = 0;
> +       unsigned int num_entries = 0;
> +
> +       data = (struct memory_map_info *)get_memory_map_info();
> +       if (!data) {
> +               debug("memory map info hob not found\n");
> +               return 0;
> +       }
> +
> +       for (i = 0; i < data->count; i++) {
> +               entries[num_entries].addr = data->entry[i].addr;
> +               entries[num_entries].size = data->entry[i].size;
> +               entries[num_entries].type = data->entry[i].type;
> +               num_entries++;
> +       }
> +
> +       return num_entries;
> +}
> diff --git a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> index bd1f4ee374..c85201e711 100644
> --- a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> +++ b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> @@ -10,6 +10,44 @@
>  #include <asm/fsp/fsp_types.h>
>  #include <asm/fsp/fsp_hob.h>
>
> +#define LOADER_MEMORY_MAP_INFO_GUID \
> +       { \
> +       0xa1ff7424, 0x7a1a, 0x478e, \
> +       { 0xa9, 0xe4, 0x92, 0xf3, 0x57, 0xd1, 0x28, 0x32 } \
> +       }
> +
> +/**
> + * A single entry of memory map information
> + *
> + * @addr: start address of a memory map entry
> + * @size: size of a memory map entry
> + * @type: ram:1, reserved:2, acpi:3, nvs:4, unusable:5
> + * @flag: only used in Slim Bootloader
> + * @rsvd: padding for alignment
> + */
> +struct memory_map_entry {
> +       phys_addr_t     addr;
> +       phys_size_t     size;
> +       u8      type;
> +       u8      flag;
> +       u8      rsvd[6];
> +} __packed;
> +
> +/**
> + * This includes all memory map entries which are sorted.
> + *
> + * @rev  : revision of memory_map_info structure. currently 1.
> + * @rsvd : padding for alignment
> + * @count: the number of memory map entries
> + * @entry: array of all memory map entries
> + */
> +struct memory_map_info {
> +       u8      rev;
> +       u8      rsvd[3];
> +       u32     count;
> +       struct memory_map_entry entry[0];
> +} __packed;
> +
>  /**
>   * This returns a pointer to hob data buffer if the given guid hob is found.
>   *

Regards,
Bin
Park, Aiden July 8, 2019, 4:40 p.m. UTC | #2
Hi Bin,

> -----Original Message-----
> From: Bin Meng [mailto:bmeng.cn@gmail.com]
> Sent: Tuesday, July 2, 2019 7:13 AM
> To: Park, Aiden <aiden.park@intel.com>
> Cc: U-Boot Mailing List <u-boot@lists.denx.de>; Simon Glass
> <sjg@chromium.org>
> Subject: Re: [PATCH v2 3/8] x86: slimbootloader: Add memory configuration
> 
> Hi Aiden,
> 
> On Wed, Jun 26, 2019 at 7:18 AM Park, Aiden <aiden.park@intel.com> wrote:
> >
> > - Get memory size from the memory map info hob
> > - Set ram top for U-Boot relocation lower than 4GB
> > - Provide e820 entries from the memory map info hob
> >
> > Signed-off-by: Aiden Park <aiden.park@intel.com>
> > ---
> >  arch/x86/cpu/slimbootloader/Makefile          |   2 +-
> >  arch/x86/cpu/slimbootloader/dram.c            | 139 ++++++++++++++++++
> >  .../asm/arch-slimbootloader/slimbootloader.h  |  38 +++++
> >  3 files changed, 178 insertions(+), 1 deletion(-)  create mode 100644
> > arch/x86/cpu/slimbootloader/dram.c
> >
> > diff --git a/arch/x86/cpu/slimbootloader/Makefile
> > b/arch/x86/cpu/slimbootloader/Makefile
> > index 620fc8a139..4b0b3e71c9 100644
> > --- a/arch/x86/cpu/slimbootloader/Makefile
> > +++ b/arch/x86/cpu/slimbootloader/Makefile
> > @@ -2,4 +2,4 @@
> >  #
> >  # Copyright (C) 2019 Intel Corporation <www.intel.com>
> >
> > -obj-y += car.o slimbootloader.o hob.o
> > +obj-y += car.o slimbootloader.o hob.o dram.o
> > diff --git a/arch/x86/cpu/slimbootloader/dram.c
> > b/arch/x86/cpu/slimbootloader/dram.c
> > new file mode 100644
> > index 0000000000..1defdad1c9
> > --- /dev/null
> > +++ b/arch/x86/cpu/slimbootloader/dram.c
> > @@ -0,0 +1,139 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +/*
> > + * Copyright (C) 2019 Intel Corporation <www.intel.com>  */
> > +
> > +#include <common.h>
> > +#include <linux/sizes.h>
> > +#include <asm/e820.h>
> > +#include <asm/arch/slimbootloader.h>
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> > +/**
> > + * This returns a data pointer of memory map info from the guid hob.
> > + *
> > + * @return: A data pointer of memory map info hob  */ static void
> > +*get_memory_map_info(void) {
> > +       const struct efi_guid guid = LOADER_MEMORY_MAP_INFO_GUID;
> > +
> > +       return get_next_guid_hob_data(&guid, gd->arch.hob_list); }
> > +
> > +/**
> > + * This is to give usable memory region information for u-boot relocation.
> > + * so search usable memory region lower than 4GB.
> > + * The memory map entries from Slim Bootloader hob are already sorted.
> > + *
> > + * @total_size: The memory size that u-boot occupies
> > + * @return    : The top available memory address lower than 4GB
> > + */
> > +ulong board_get_usable_ram_top(ulong total_size) {
> > +       struct memory_map_info *data = NULL;
> > +       int i = 0;
> > +       phys_addr_t addr_start = 0;
> > +       phys_addr_t addr_end = 0;
> > +       ulong ram_top = 0;
> > +
> > +       data = (struct memory_map_info *)get_memory_map_info();
> > +       if (!data)
> > +               panic("memory map info hob not found\n");
> > +
> > +       /* sorted memory map entries, so reversed search */
> > +       for (i = data->count - 1; i >= 0; i--) {
> > +               if (data->entry[i].type != E820_RAM)
> > +                       continue;
> > +
> > +               addr_start = data->entry[i].addr;
> > +               addr_end = addr_start + data->entry[i].size;
> > +
> > +               if (addr_start > SZ_4G)
> > +                       continue;
> > +
> > +               if (addr_end > SZ_4G)
> > +                       addr_end = SZ_4G;
> > +
> > +               if (addr_end < total_size)
> > +                       continue;
> > +
> > +               /* to relocate u-boot at 4K aligned memory */
> > +               addr_end = rounddown(addr_end - total_size, SZ_4K);
> > +               if (addr_end >= addr_start) {
> > +                       ram_top = (ulong)addr_end + total_size;
> > +                       break;
> > +               }
> > +       }
> > +
> > +       if (!ram_top)
> > +               panic("failed to find available memory for
> > + relocation!");
> > +
> > +       return ram_top;
> > +}
> > +
> > +/**
> > + * The memory initialization has already been done in previous Slim
> > +Bootloader
> > + * stage thru FSP-M. Instead, this sets the ram_size from the memory
> > +map info
> > + * hob.
> 
> Is the memory map info created by the FSP, or created by the slim
> bootloader? If it is created by newer FSPs, I think such function is eligible for
> FSP based board to use in the future.
As described in serial port hob, this is not provided from FSP, but generated from Slim Bootloader. All these HOBs are eligible for Slim Bootloader based boards.
> 
> > + */
> > +int dram_init(void)
> > +{
> > +       struct memory_map_info *data = NULL;
> > +       int i = 0;
> > +       phys_size_t ram_size = 0;
> > +
> > +       data = (struct memory_map_info *)get_memory_map_info();
> > +       if (!data)
> > +               panic("memory map info hob not found\n");
> > +
> > +       /* sorted memory map entries, so reversed search */
> > +       for (i = data->count - 1; i >= 0; i--) {
> > +               if (data->entry[i].type != E820_RAM)
> > +                       continue;
> > +
> > +               /* simply use the highest usable memory address as ram
> > + size */
> 
> This indicates the memory map info is sorted, from highest address to lowest
> address. Need some comments.
Let me add more comment here. Thanks.
> 
> > +               ram_size = data->entry[i].addr + data->entry[i].size;
> > +               break;
> > +       }
> > +
> > +       if (!ram_size)
> > +               panic("failed to detect memory size");
> > +
> > +       gd->ram_size = ram_size;
> > +       return 0;
> > +}
> > +
> > +int dram_init_banksize(void)
> > +{
> > +       /* simply use a single bank to have whole size for now */
> > +       if (CONFIG_NR_DRAM_BANKS) {
> > +               gd->bd->bi_dram[0].start = 0;
> > +               gd->bd->bi_dram[0].size = gd->ram_size;
> > +       }
> > +       return 0;
> > +}
> > +
> > +unsigned int install_e820_map(unsigned int max_entries,
> > +                             struct e820_entry *entries) {
> > +       struct memory_map_info *data = NULL;
> > +       int i = 0;
> > +       unsigned int num_entries = 0;
> > +
> > +       data = (struct memory_map_info *)get_memory_map_info();
> > +       if (!data) {
> > +               debug("memory map info hob not found\n");
> > +               return 0;
> > +       }
> > +
> > +       for (i = 0; i < data->count; i++) {
> > +               entries[num_entries].addr = data->entry[i].addr;
> > +               entries[num_entries].size = data->entry[i].size;
> > +               entries[num_entries].type = data->entry[i].type;
> > +               num_entries++;
> > +       }
> > +
> > +       return num_entries;
> > +}
> > diff --git a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> > b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> > index bd1f4ee374..c85201e711 100644
> > --- a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> > +++ b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
> > @@ -10,6 +10,44 @@
> >  #include <asm/fsp/fsp_types.h>
> >  #include <asm/fsp/fsp_hob.h>
> >
> > +#define LOADER_MEMORY_MAP_INFO_GUID \
> > +       { \
> > +       0xa1ff7424, 0x7a1a, 0x478e, \
> > +       { 0xa9, 0xe4, 0x92, 0xf3, 0x57, 0xd1, 0x28, 0x32 } \
> > +       }
> > +
> > +/**
> > + * A single entry of memory map information
> > + *
> > + * @addr: start address of a memory map entry
> > + * @size: size of a memory map entry
> > + * @type: ram:1, reserved:2, acpi:3, nvs:4, unusable:5
> > + * @flag: only used in Slim Bootloader
> > + * @rsvd: padding for alignment
> > + */
> > +struct memory_map_entry {
> > +       phys_addr_t     addr;
> > +       phys_size_t     size;
> > +       u8      type;
> > +       u8      flag;
> > +       u8      rsvd[6];
> > +} __packed;
> > +
> > +/**
> > + * This includes all memory map entries which are sorted.
> > + *
> > + * @rev  : revision of memory_map_info structure. currently 1.
> > + * @rsvd : padding for alignment
> > + * @count: the number of memory map entries
> > + * @entry: array of all memory map entries  */ struct memory_map_info
> > +{
> > +       u8      rev;
> > +       u8      rsvd[3];
> > +       u32     count;
> > +       struct memory_map_entry entry[0]; } __packed;
> > +
> >  /**
> >   * This returns a pointer to hob data buffer if the given guid hob is found.
> >   *
> 
> Regards,
> Bin

Best Regards,
Aiden

Patch
diff mbox series

diff --git a/arch/x86/cpu/slimbootloader/Makefile b/arch/x86/cpu/slimbootloader/Makefile
index 620fc8a139..4b0b3e71c9 100644
--- a/arch/x86/cpu/slimbootloader/Makefile
+++ b/arch/x86/cpu/slimbootloader/Makefile
@@ -2,4 +2,4 @@ 
 #
 # Copyright (C) 2019 Intel Corporation <www.intel.com>
 
-obj-y += car.o slimbootloader.o hob.o
+obj-y += car.o slimbootloader.o hob.o dram.o
diff --git a/arch/x86/cpu/slimbootloader/dram.c b/arch/x86/cpu/slimbootloader/dram.c
new file mode 100644
index 0000000000..1defdad1c9
--- /dev/null
+++ b/arch/x86/cpu/slimbootloader/dram.c
@@ -0,0 +1,139 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019 Intel Corporation <www.intel.com>
+ */
+
+#include <common.h>
+#include <linux/sizes.h>
+#include <asm/e820.h>
+#include <asm/arch/slimbootloader.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/**
+ * This returns a data pointer of memory map info from the guid hob.
+ *
+ * @return: A data pointer of memory map info hob
+ */
+static void *get_memory_map_info(void)
+{
+	const struct efi_guid guid = LOADER_MEMORY_MAP_INFO_GUID;
+
+	return get_next_guid_hob_data(&guid, gd->arch.hob_list);
+}
+
+/**
+ * This is to give usable memory region information for u-boot relocation.
+ * so search usable memory region lower than 4GB.
+ * The memory map entries from Slim Bootloader hob are already sorted.
+ *
+ * @total_size: The memory size that u-boot occupies
+ * @return    : The top available memory address lower than 4GB
+ */
+ulong board_get_usable_ram_top(ulong total_size)
+{
+	struct memory_map_info *data = NULL;
+	int i = 0;
+	phys_addr_t addr_start = 0;
+	phys_addr_t addr_end = 0;
+	ulong ram_top = 0;
+
+	data = (struct memory_map_info *)get_memory_map_info();
+	if (!data)
+		panic("memory map info hob not found\n");
+
+	/* sorted memory map entries, so reversed search */
+	for (i = data->count - 1; i >= 0; i--) {
+		if (data->entry[i].type != E820_RAM)
+			continue;
+
+		addr_start = data->entry[i].addr;
+		addr_end = addr_start + data->entry[i].size;
+
+		if (addr_start > SZ_4G)
+			continue;
+
+		if (addr_end > SZ_4G)
+			addr_end = SZ_4G;
+
+		if (addr_end < total_size)
+			continue;
+
+		/* to relocate u-boot at 4K aligned memory */
+		addr_end = rounddown(addr_end - total_size, SZ_4K);
+		if (addr_end >= addr_start) {
+			ram_top = (ulong)addr_end + total_size;
+			break;
+		}
+	}
+
+	if (!ram_top)
+		panic("failed to find available memory for relocation!");
+
+	return ram_top;
+}
+
+/**
+ * The memory initialization has already been done in previous Slim Bootloader
+ * stage thru FSP-M. Instead, this sets the ram_size from the memory map info
+ * hob.
+ */
+int dram_init(void)
+{
+	struct memory_map_info *data = NULL;
+	int i = 0;
+	phys_size_t ram_size = 0;
+
+	data = (struct memory_map_info *)get_memory_map_info();
+	if (!data)
+		panic("memory map info hob not found\n");
+
+	/* sorted memory map entries, so reversed search */
+	for (i = data->count - 1; i >= 0; i--) {
+		if (data->entry[i].type != E820_RAM)
+			continue;
+
+		/* simply use the highest usable memory address as ram size */
+		ram_size = data->entry[i].addr + data->entry[i].size;
+		break;
+	}
+
+	if (!ram_size)
+		panic("failed to detect memory size");
+
+	gd->ram_size = ram_size;
+	return 0;
+}
+
+int dram_init_banksize(void)
+{
+	/* simply use a single bank to have whole size for now */
+	if (CONFIG_NR_DRAM_BANKS) {
+		gd->bd->bi_dram[0].start = 0;
+		gd->bd->bi_dram[0].size = gd->ram_size;
+	}
+	return 0;
+}
+
+unsigned int install_e820_map(unsigned int max_entries,
+			      struct e820_entry *entries)
+{
+	struct memory_map_info *data = NULL;
+	int i = 0;
+	unsigned int num_entries = 0;
+
+	data = (struct memory_map_info *)get_memory_map_info();
+	if (!data) {
+		debug("memory map info hob not found\n");
+		return 0;
+	}
+
+	for (i = 0; i < data->count; i++) {
+		entries[num_entries].addr = data->entry[i].addr;
+		entries[num_entries].size = data->entry[i].size;
+		entries[num_entries].type = data->entry[i].type;
+		num_entries++;
+	}
+
+	return num_entries;
+}
diff --git a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
index bd1f4ee374..c85201e711 100644
--- a/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
+++ b/arch/x86/include/asm/arch-slimbootloader/slimbootloader.h
@@ -10,6 +10,44 @@ 
 #include <asm/fsp/fsp_types.h>
 #include <asm/fsp/fsp_hob.h>
 
+#define LOADER_MEMORY_MAP_INFO_GUID \
+	{ \
+	0xa1ff7424, 0x7a1a, 0x478e, \
+	{ 0xa9, 0xe4, 0x92, 0xf3, 0x57, 0xd1, 0x28, 0x32 } \
+	}
+
+/**
+ * A single entry of memory map information
+ *
+ * @addr: start address of a memory map entry
+ * @size: size of a memory map entry
+ * @type: ram:1, reserved:2, acpi:3, nvs:4, unusable:5
+ * @flag: only used in Slim Bootloader
+ * @rsvd: padding for alignment
+ */
+struct memory_map_entry {
+	phys_addr_t     addr;
+	phys_size_t     size;
+	u8      type;
+	u8      flag;
+	u8      rsvd[6];
+} __packed;
+
+/**
+ * This includes all memory map entries which are sorted.
+ *
+ * @rev  : revision of memory_map_info structure. currently 1.
+ * @rsvd : padding for alignment
+ * @count: the number of memory map entries
+ * @entry: array of all memory map entries
+ */
+struct memory_map_info {
+	u8      rev;
+	u8      rsvd[3];
+	u32     count;
+	struct memory_map_entry entry[0];
+} __packed;
+
 /**
  * This returns a pointer to hob data buffer if the given guid hob is found.
  *