All of lore.kernel.org
 help / color / mirror / Atom feed
From: Atish Patra <atishp@atishpatra.org>
To: u-boot@lists.denx.de
Subject: [PATCH v2 2/4] cmd: bootefi: Parse reserved-memory node from DT
Date: Fri, 13 Mar 2020 17:55:47 -0700	[thread overview]
Message-ID: <CAOnJCULnKw3X6s=orw6U4TqaY6D9P1JoUSVqaHouNvONRK_L9g@mail.gmail.com> (raw)
In-Reply-To: <20200314001132.17393-3-atish.patra@wdc.com>

On Fri, Mar 13, 2020 at 5:12 PM Atish Patra <atish.patra@wdc.com> wrote:
>
> Currently, bootefi only parses memory reservation block to setup
> EFI reserved memory mappings. However, it doesn't parse the
> reserved-memory[1] device tree node that also can contain the
> reserved memory regions.
>
> Add capability to parse reserved-memory node and update the EFI memory
> mappings accordingly.
>
> 1. <U-Boot source>/doc/device-tree-bindings/reserved-memory/reserved-memory.txt]
>
> Signed-off-by: Atish Patra <atish.patra@wdc.com>
> ---
>  cmd/bootefi.c | 42 +++++++++++++++++++++++++++++++++---------
>  1 file changed, 33 insertions(+), 9 deletions(-)
>
> diff --git a/cmd/bootefi.c b/cmd/bootefi.c
> index 24fc42ae898e..43b36fbacfcd 100644
> --- a/cmd/bootefi.c
> +++ b/cmd/bootefi.c
> @@ -149,6 +149,20 @@ done:
>         return ret;
>  }
>
> +static void efi_reserve_memory(uint64_t addr, uint64_t size)
> +{
> +       uint64_t pages;
> +
> +       /* Convert from sandbox address space. */
> +       addr = (uintptr_t)map_sysmem(addr, 0);
> +       pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK));
> +       addr &= ~EFI_PAGE_MASK;
> +       if (efi_add_memory_map(addr, pages, EFI_RESERVED_MEMORY_TYPE,
> +                              false) != EFI_SUCCESS)
> +               printf("Reserved memory mapping failed addr %llx size %llx\n",
> +                     (unsigned long long)addr, (unsigned long long)size);
> +}
> +
>  /**
>   * efi_carve_out_dt_rsv() - Carve out DT reserved memory ranges
>   *
> @@ -161,7 +175,8 @@ done:
>  static void efi_carve_out_dt_rsv(void *fdt)
>  {
>         int nr_rsv, i;
> -       uint64_t addr, size, pages;
> +       uint64_t addr, size;
> +       int nodeoffset, subnode;
>
>         nr_rsv = fdt_num_mem_rsv(fdt);
>
> @@ -169,15 +184,24 @@ static void efi_carve_out_dt_rsv(void *fdt)
>         for (i = 0; i < nr_rsv; i++) {
>                 if (fdt_get_mem_rsv(fdt, i, &addr, &size) != 0)
>                         continue;
> +               efi_reserve_memory(addr, size);
> +       }
>
> -               /* Convert from sandbox address space. */
> -               addr = (uintptr_t)map_sysmem(addr, 0);
> -
> -               pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK));
> -               addr &= ~EFI_PAGE_MASK;
> -               if (efi_add_memory_map(addr, pages, EFI_RESERVED_MEMORY_TYPE,
> -                                      false) != EFI_SUCCESS)
> -                       printf("FDT memrsv map %d: Failed to add to map\n", i);
> +       /* process reserved-memory */
> +       nodeoffset = fdt_subnode_offset(fdt, 0, "reserved-memory");
> +       if (nodeoffset >= 0) {
> +               subnode = fdt_first_subnode(fdt, nodeoffset);
> +               while (subnode >= 0) {
> +                       /* check if this subnode has a reg property */
> +                       addr = fdtdec_get_addr_size(fdt, subnode, "reg",
> +                                                   (fdt_size_t *)&size);
> +                       if (addr == FDT_ADDR_T_NONE) {
> +                               debug("failed to read address/size\n");
> +                               continue;
> +                       }
> +                       efi_reserve_memory(addr, size);
> +                       subnode = fdt_next_subnode(fdt, subnode);
> +               }
>         }
>  }
>
> --
> 2.25.1
>

Fixed palmer's email address. Sorry for the spam.

-- 
Regards,
Atish

  reply	other threads:[~2020-03-14  0:55 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-14  0:11 [PATCH v2 0/4] DT related fixes for RISC-V UEFI Atish Patra
2020-03-14  0:11 ` [PATCH v2 1/4] riscv: Add boot hartid to Device tree Atish Patra
2020-03-14  0:53   ` Atish Patra
2020-03-14  0:11 ` [PATCH v2 2/4] cmd: bootefi: Parse reserved-memory node from DT Atish Patra
2020-03-14  0:55   ` Atish Patra [this message]
2020-03-14  7:14     ` Heinrich Schuchardt
2020-03-14  8:50       ` Heinrich Schuchardt
2020-03-18  9:10       ` Atish Patra
2020-03-14  0:11 ` [PATCH v2 3/4] riscv: Provide a mechanism for riscv boards to parse reserved memory Atish Patra
2020-03-14  0:54   ` Atish Patra
2020-03-14  9:59     ` Bin Meng
2020-03-16 19:07       ` Atish Patra
2020-03-14  0:11 ` [PATCH v2 4/4] riscv: Setup reserved-memory node for FU540 Atish Patra
2020-03-14  0:55   ` Atish Patra
2020-03-14 10:17   ` Bin Meng
2020-03-16 19:21     ` Atish Patra
2020-03-14  0:53 ` [PATCH v2 0/4] DT related fixes for RISC-V UEFI Atish Patra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAOnJCULnKw3X6s=orw6U4TqaY6D9P1JoUSVqaHouNvONRK_L9g@mail.gmail.com' \
    --to=atishp@atishpatra.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.