All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
To: Sughosh Ganu <sughosh.ganu@linaro.org>, u-boot@lists.denx.de
Cc: Tom Rini <trini@konsulko.com>,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	 Simon Glass <sjg@chromium.org>, Marek Vasut <marex@denx.de>,
	Mark Kettenis <mark.kettenis@xs4all.nl>,
	Fabio Estevam <festevam@gmail.com>
Subject: Re: [RFC PATCH 30/31] temp: cmd: efi_mem: add a command to test efi alloc/free
Date: Sat, 08 Jun 2024 05:37:33 +0200	[thread overview]
Message-ID: <5BF273F8-08EB-44C9-9B59-1AAA924F4591@gmx.de> (raw)
In-Reply-To: <20240607185240.1892031-31-sughosh.ganu@linaro.org>



Am 7. Juni 2024 20:52:39 MESZ schrieb Sughosh Ganu <sughosh.ganu@linaro.org>:
>Not for committing.

Best put "DON'T MERGE" into the title to avoid mishaps in future versions.

In the final series we should have unit test covering all relevant aspects of the memory system.

Best regards

Heinrich

>
>Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
>---
> cmd/Makefile     |   1 +
> cmd/efi_memory.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 156 insertions(+)
> create mode 100644 cmd/efi_memory.c
>
>diff --git a/cmd/Makefile b/cmd/Makefile
>index 87133cc27a..35fcc4af5a 100644
>--- a/cmd/Makefile
>+++ b/cmd/Makefile
>@@ -10,6 +10,7 @@ obj-$(CONFIG_CMD_BOOTM) += bootm.o
> obj-y += help.o
> obj-y += panic.o
> obj-y += version.o
>+obj-y += efi_memory.o
> 
> # command
> obj-$(CONFIG_CMD_ARMFFA) += armffa.o
>diff --git a/cmd/efi_memory.c b/cmd/efi_memory.c
>new file mode 100644
>index 0000000000..52ddcb7146
>--- /dev/null
>+++ b/cmd/efi_memory.c
>@@ -0,0 +1,155 @@
>+// SPDX-License-Identifier: GPL-2.0+
>+/*
>+ *  Allocate and Free EFI memory
>+ *
>+ *  Copyright (c) 2024 Linaro Limited
>+ */
>+
>+#include <command.h>
>+#include <efi_loader.h>
>+#include <lmb.h>
>+#include <vsprintf.h>
>+
>+#include <linux/types.h>
>+
>+static int do_efi_mem_free(struct cmd_tbl *cmdtp, int flag, int argc,
>+			   char * const argv[])
>+{
>+	uint64_t addr = 0, size = 0;
>+	efi_uintn_t pages;
>+	efi_status_t status;
>+
>+	if (argc != 3)
>+		return CMD_RET_USAGE;
>+
>+	argc--; argv++;
>+
>+	size = simple_strtoul(argv[0], NULL, 16);
>+	if (!size) {
>+		printf("Enter valid size for free in Hex\n");
>+		return CMD_RET_USAGE;
>+	}
>+
>+	
>+	addr = simple_strtoul(argv[1], NULL, 16);
>+	if (!addr) {
>+		printf("Enter a valid address in Hex\n");
>+		return CMD_RET_USAGE;
>+	}
>+
>+	pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK));
>+
>+	status = efi_free_pages(addr, pages);
>+	if (status != EFI_SUCCESS) {
>+		printf("Unable to free memory, error (%#lx)\n", status);
>+		return CMD_RET_FAILURE;
>+	}
>+
>+	return CMD_RET_SUCCESS;
>+}
>+
>+static int do_efi_mem_alloc(struct cmd_tbl *cmdtp, int flag, int argc,
>+			    char * const argv[])
>+{
>+	enum efi_allocate_type type;
>+	uint64_t addr = 0, size = 0;
>+	efi_uintn_t pages;
>+	efi_status_t status;
>+	bool max = false;
>+
>+	if (argc < 2)
>+		return CMD_RET_USAGE;
>+
>+	argc--; argv++;
>+
>+	if (!strcmp("max", argv[0])) {
>+		if (argc != 3)
>+			return CMD_RET_USAGE;
>+
>+		max = true;
>+		argv++;
>+		argc--;
>+	}
>+
>+	size = simple_strtoul(argv[0], NULL, 16);
>+	if (!size) {
>+		printf("Enter valid size for allocation in Hex\n");
>+		return CMD_RET_USAGE;
>+	}
>+
>+	if (max || argc == 2) {
>+		addr = simple_strtoul(argv[1], NULL, 16);
>+		if (!addr) {
>+			printf("Enter a valid address in Hex\n");
>+			return CMD_RET_USAGE;
>+		}
>+	}
>+
>+	if (max)
>+		type = EFI_ALLOCATE_MAX_ADDRESS;
>+	else if (addr)
>+		type = EFI_ALLOCATE_ADDRESS;
>+	else
>+		type = EFI_ALLOCATE_ANY_PAGES;
>+
>+	pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK));
>+	status = efi_allocate_pages(type, EFI_BOOT_SERVICES_DATA, pages,
>+				    &addr);
>+	if (status != EFI_SUCCESS) {
>+		printf("efi_allocate_pages failed %lx\n", status);
>+		return CMD_RET_FAILURE;
>+	} else {
>+		printf("Address returned %#llx\n", addr);
>+	}
>+
>+	return CMD_RET_SUCCESS;
>+}
>+
>+static struct cmd_tbl cmd_efi_mem_sub[] = {
>+	U_BOOT_CMD_MKENT(alloc, 3, 0, do_efi_mem_alloc,
>+		"", ""),
>+	U_BOOT_CMD_MKENT(free, 2, 0, do_efi_mem_free,
>+		"", ""),
>+};
>+
>+static int do_efi_mem(struct cmd_tbl *cmdtp, int flag, int argc,
>+		      char *const argv[])
>+{
>+	struct cmd_tbl *cp;
>+	efi_status_t r;
>+
>+	if (argc < 3)
>+		return CMD_RET_USAGE;
>+
>+	argc--; argv++;
>+
>+	/* Initialize UEFI subsystem */
>+	r = efi_init_obj_list();
>+	if (r != EFI_SUCCESS) {
>+		printf("Error: Cannot initialize UEFI sub-system, r = %lu\n",
>+		       r & ~EFI_ERROR_MASK);
>+		return CMD_RET_FAILURE;
>+	}
>+
>+	cp = find_cmd_tbl(argv[0], cmd_efi_mem_sub,
>+			  ARRAY_SIZE(cmd_efi_mem_sub));
>+	if (!cp)
>+		return CMD_RET_USAGE;
>+
>+	return cp->cmd(cmdtp, flag, argc, argv);
>+}
>+
>+U_BOOT_LONGHELP(efi_mem,
>+	"Functions to allocate and free memory\n"
>+	"\n"
>+	"efi_mem alloc <size> [addr]\n"
>+	"efi_mem alloc max <size> <max-addr>\n"
>+	"efi_mem free <size> <addr>\n"
>+	"\n"
>+);
>+
>+U_BOOT_CMD(
>+	efi_mem, CONFIG_SYS_MAXARGS, 0, do_efi_mem,
>+	"Allocate and free EFI memory",
>+	efi_mem_help_text
>+);

  reply	other threads:[~2024-06-08  3:37 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-07 18:52 [RFC PATCH 00/31] Make U-Boot memory reservations coherent Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 01/31] lmb: remove the unused lmb_is_reserved() function Sughosh Ganu
2024-06-10  9:33   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 02/31] lmb: staticize __lmb_alloc_base() Sughosh Ganu
2024-06-10  9:37   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 03/31] lmb: make the lmb reservations persistent Sughosh Ganu
2024-06-10 21:17   ` Ilias Apalodimas
2024-06-10 11:23     ` Heinrich Schuchardt
2024-06-10 16:55       ` Tom Rini
2024-06-11 18:52   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 04/31] lmb: remove local instances of the lmb structure variable Sughosh Ganu
2024-06-11 18:52   ` Simon Glass
2024-06-11 21:01     ` Tom Rini
2024-06-11 22:08       ` Simon Glass
2024-06-11 22:55         ` Tom Rini
2024-06-12  2:41           ` Simon Glass
2024-06-12  5:41             ` Ilias Apalodimas
2024-06-12  6:13             ` Heinrich Schuchardt
2024-06-12 17:22             ` Tom Rini
2024-06-12 20:24               ` Simon Glass
2024-06-12 21:40                 ` Tom Rini
2024-06-13 15:22                   ` Simon Glass
2024-06-13 15:42                     ` Tom Rini
2024-06-13 16:59                       ` Simon Glass
2024-06-13 17:27                         ` Heinrich Schuchardt
2024-06-13 18:17                           ` Sughosh Ganu
2024-06-13 19:06                             ` Simon Glass
2024-06-13 19:05                           ` Simon Glass
2024-06-13 20:11                             ` Heinrich Schuchardt
2024-06-14  5:58                               ` Ilias Apalodimas
2024-06-19  3:01                                 ` Simon Glass
2024-06-19  3:03                               ` Simon Glass
2024-06-13 20:06                         ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 05/31] lmb: pass a flag to image_setup_libfdt() for lmb reservations Sughosh Ganu
2024-06-10 17:12   ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 06/31] lmb: reserve and add common memory regions post relocation Sughosh Ganu
2024-06-10 17:30   ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 07/31] lmb: remove lmb_init_and_reserve_range() function Sughosh Ganu
2024-06-10 17:30   ` Tom Rini
2024-06-10 21:42   ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 08/31] lmb: replcace the lmb_init_and_reserve() function Sughosh Ganu
2024-06-10 17:31   ` Tom Rini
2024-06-11  8:50     ` Sughosh Ganu
2024-06-11 13:57       ` Tom Rini
2024-06-07 18:52 ` [RFC PATCH 09/31] lmb: allow for resizing lmb regions Sughosh Ganu
2024-06-10 12:03   ` Ilias Apalodimas
2024-06-10 12:20     ` Sughosh Ganu
2024-06-10 12:47       ` Ilias Apalodimas
2024-06-10 12:57         ` Sughosh Ganu
2024-06-10 14:21           ` Ilias Apalodimas
2024-06-10 14:33             ` Sughosh Ganu
2024-06-10 12:54       ` Heinrich Schuchardt
2024-06-10 13:01         ` Sughosh Ganu
2024-06-11  9:17   ` Heinrich Schuchardt
2024-06-11  9:50     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 10/31] event: add events to notify memory map changes Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 11/31] lib: Kconfig: add a config symbol for getting memory map updates Sughosh Ganu
2024-06-08  3:53   ` Heinrich Schuchardt
2024-06-08  4:34     ` Heinrich Schuchardt
2024-06-10 11:44   ` Ilias Apalodimas
2024-06-10 11:47     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 12/31] add a function to check if an address is in RAM memory Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 13/31] efi_memory: notify of any changes to the EFI memory map Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 14/31] lmb: notify of any changes to the LMB " Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 15/31] efi_memory: add an event handler to update " Sughosh Ganu
2024-06-10 12:09   ` Ilias Apalodimas
2024-06-10 12:25     ` Sughosh Ganu
2024-06-10 14:17       ` Ilias Apalodimas
2024-06-10 14:52         ` Sughosh Ganu
2024-06-10 14:54           ` Sughosh Ganu
2024-06-11  6:19           ` Ilias Apalodimas
2024-06-10 15:12   ` Heinrich Schuchardt
2024-06-10 15:42     ` Sughosh Ganu
2024-06-10 15:54       ` Simon Glass
2024-06-12  6:45         ` Ilias Apalodimas
2024-06-12  7:11           ` Sughosh Ganu
2024-06-11 10:17   ` Heinrich Schuchardt
2024-06-11 10:27     ` Sughosh Ganu
2024-06-11 14:36     ` Tom Rini
2024-06-11 18:52       ` Simon Glass
2024-06-11 21:01         ` Tom Rini
2024-06-11 22:22           ` Simon Glass
2024-06-11 22:54             ` Tom Rini
2024-06-12  2:42               ` Simon Glass
2024-06-12  5:48                 ` Ilias Apalodimas
2024-06-12  6:20                   ` Sughosh Ganu
2024-06-12 20:24                   ` Simon Glass
2024-06-12  6:06                 ` Heinrich Schuchardt
2024-06-12 20:24                   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 16/31] lmb: " Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 17/31] lmb: remove call to efi_lmb_reserve() Sughosh Ganu
2024-06-10 11:46   ` Ilias Apalodimas
2024-06-11  9:11   ` Heinrich Schuchardt
2024-06-11  9:49     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 18/31] sandbox: iommu: remove lmb allocation in the driver Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 19/31] zynq: lmb: do not add to lmb map before relocation Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 20/31] test: cedit: use allocated address for reading file Sughosh Ganu
2024-06-11 18:52   ` Simon Glass
2024-06-07 18:52 ` [RFC PATCH 21/31] test: event: update the expected event dump output Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 22/31] test: lmb: run the LMB tests only on sandbox Sughosh Ganu
2024-06-10 17:44   ` Tom Rini
2024-06-11  8:55     ` Sughosh Ganu
2024-06-11  9:56       ` Heinrich Schuchardt
2024-06-11 10:09         ` Sughosh Ganu
2024-06-11 14:05       ` Tom Rini
2024-06-11 14:06         ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 23/31] test: lmb: initialise the lmb structure before tests Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 24/31] test: lmb: add a test case for checking overlapping region add Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 25/31] test: lmb: adjust the test case to handle overlapping regions Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 26/31] test: lmb: run lmb tests only manually Sughosh Ganu
2024-06-08  4:39   ` Heinrich Schuchardt
2024-06-10  6:22     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 27/31] test: bdinfo: dump the global LMB memory map Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 28/31] cmd: bdinfo: only dump the current LMB memory Sughosh Ganu
2024-06-08  3:59   ` Heinrich Schuchardt
2024-06-10 11:42     ` Ilias Apalodimas
2024-06-07 18:52 ` [RFC PATCH 29/31] temp: mx6sabresd: bump up the size limit of the board Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 30/31] temp: cmd: efi_mem: add a command to test efi alloc/free Sughosh Ganu
2024-06-08  3:37   ` Heinrich Schuchardt [this message]
2024-06-10  6:44     ` Sughosh Ganu
2024-06-07 18:52 ` [RFC PATCH 31/31] temp: cmd: efi: add a command to dump EFI memory map Sughosh Ganu
2024-06-08  3:28   ` Heinrich Schuchardt
2024-06-10  6:45     ` Sughosh Ganu
2024-06-10 21:05 ` [RFC PATCH 00/31] Make U-Boot memory reservations coherent Tom Rini
2024-06-11  9:01   ` Sughosh Ganu
2024-06-11 14:39     ` Tom Rini
2024-06-11 18:52 ` Simon Glass

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=5BF273F8-08EB-44C9-9B59-1AAA924F4591@gmx.de \
    --to=xypron.glpk@gmx.de \
    --cc=festevam@gmail.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=marex@denx.de \
    --cc=mark.kettenis@xs4all.nl \
    --cc=sjg@chromium.org \
    --cc=sughosh.ganu@linaro.org \
    --cc=trini@konsulko.com \
    --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.