From: Vikram Garhwal <vikram.garhwal@amd.com>
To: <xen-devel@lists.xenproject.org>
Cc: <michal.orzel@amd.com>, <sstabellini@kernel.org>,
<vikram.garhwal@amd.com>, <jbeulich@suse.com>,
Wei Liu <wl@xen.org>,
"Anthony PERARD" <anthony.perard@citrix.com>,
Juergen Gross <jgross@suse.com>
Subject: [XEN][PATCH v7 18/19] tools/libs/light: Implement new libxl functions for device tree overlay ops
Date: Thu, 1 Jun 2023 17:48:23 -0700 [thread overview]
Message-ID: <20230602004824.20731-19-vikram.garhwal@amd.com> (raw)
In-Reply-To: <20230602004824.20731-1-vikram.garhwal@amd.com>
Signed-off-by: Vikram Garhwal <vikram.garhwal@amd.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
---
tools/include/libxl.h | 11 +++++
tools/libs/light/Makefile | 3 ++
tools/libs/light/libxl_dt_overlay.c | 71 +++++++++++++++++++++++++++++
3 files changed, 85 insertions(+)
create mode 100644 tools/libs/light/libxl_dt_overlay.c
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index cfa1a19131..1c5e8abaae 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -250,6 +250,12 @@
*/
#define LIBXL_HAVE_DEVICETREE_PASSTHROUGH 1
+#if defined(__arm__) || defined(__aarch64__)
+/**
+ * This means Device Tree Overlay is supported.
+ */
+#define LIBXL_HAVE_DT_OVERLAY 1
+#endif
/*
* libxl_domain_build_info has device_model_user to specify the user to
* run the device model with. See docs/misc/qemu-deprivilege.txt.
@@ -2453,6 +2459,11 @@ libxl_device_pci *libxl_device_pci_list(libxl_ctx *ctx, uint32_t domid,
int *num);
void libxl_device_pci_list_free(libxl_device_pci* list, int num);
+#if defined(__arm__) || defined(__aarch64__)
+int libxl_dt_overlay(libxl_ctx *ctx, void *overlay,
+ uint32_t overlay_size, uint8_t overlay_op);
+#endif
+
/*
* Turns the current process into a backend device service daemon
* for a driver domain.
diff --git a/tools/libs/light/Makefile b/tools/libs/light/Makefile
index 5d7ff94b05..ba4c1b7933 100644
--- a/tools/libs/light/Makefile
+++ b/tools/libs/light/Makefile
@@ -112,6 +112,9 @@ OBJS-y += _libxl_types.o
OBJS-y += libxl_flask.o
OBJS-y += _libxl_types_internal.o
+# Device tree overlay is enabled only for ARM architecture.
+OBJS-$(CONFIG_ARM) += libxl_dt_overlay.o
+
ifeq ($(CONFIG_LIBNL),y)
CFLAGS_LIBXL += $(LIBNL3_CFLAGS)
endif
diff --git a/tools/libs/light/libxl_dt_overlay.c b/tools/libs/light/libxl_dt_overlay.c
new file mode 100644
index 0000000000..a6c709a6dc
--- /dev/null
+++ b/tools/libs/light/libxl_dt_overlay.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2021 Xilinx Inc.
+ * Author Vikram Garhwal <fnu.vikram@xilinx.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+
+#include "libxl_osdeps.h" /* must come before any other headers */
+#include "libxl_internal.h"
+#include <libfdt.h>
+#include <xenctrl.h>
+
+static int check_overlay_fdt(libxl__gc *gc, void *fdt, size_t size)
+{
+ int r;
+
+ if (fdt_magic(fdt) != FDT_MAGIC) {
+ LOG(ERROR, "Overlay FDT is not a valid Flat Device Tree");
+ return ERROR_FAIL;
+ }
+
+ r = fdt_check_header(fdt);
+ if (r) {
+ LOG(ERROR, "Failed to check the overlay FDT (%d)", r);
+ return ERROR_FAIL;
+ }
+
+ if (fdt_totalsize(fdt) > size) {
+ LOG(ERROR, "Overlay FDT totalsize is too big");
+ return ERROR_FAIL;
+ }
+
+ return 0;
+}
+
+int libxl_dt_overlay(libxl_ctx *ctx, void *overlay_dt, uint32_t overlay_dt_size,
+ uint8_t overlay_op)
+{
+ int rc;
+ int r;
+ GC_INIT(ctx);
+
+ if (check_overlay_fdt(gc, overlay_dt, overlay_dt_size)) {
+ LOG(ERROR, "Overlay DTB check failed");
+ rc = ERROR_FAIL;
+ goto out;
+ } else {
+ LOG(DEBUG, "Overlay DTB check passed");
+ rc = 0;
+ }
+
+ r = xc_dt_overlay(ctx->xch, overlay_dt, overlay_dt_size, overlay_op);
+
+ if (r) {
+ LOG(ERROR, "%s: Adding/Removing overlay dtb failed.", __func__);
+ rc = ERROR_FAIL;
+ }
+
+out:
+ GC_FREE;
+ return rc;
+}
+
--
2.17.1
next prev parent reply other threads:[~2023-06-02 0:49 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-02 0:48 [XEN][PATCH v7 00/19] dynamic node programming using overlay dtbo Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 01/19] common/device_tree: handle memory allocation failure in __unflatten_device_tree() Vikram Garhwal
2023-06-02 7:09 ` Michal Orzel
2023-06-05 18:54 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 02/19] common/device_tree.c: unflatten_device_tree() propagate errors Vikram Garhwal
2023-06-02 7:14 ` Michal Orzel
2023-06-06 19:08 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 03/19] xen/arm/device: Remove __init from function type Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 04/19] common/device_tree: change __unflatten_device_tree() type Vikram Garhwal
2023-06-02 7:15 ` Michal Orzel
2023-06-05 19:04 ` Julien Grall
2023-06-06 19:09 ` Vikram Garhwal
2023-08-16 23:49 ` Vikram Garhwal
2023-08-17 7:59 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 05/19] xen/arm: Add CONFIG_OVERLAY_DTB Vikram Garhwal
2023-06-02 1:43 ` Henry Wang
2023-06-02 7:16 ` Michal Orzel
2023-06-02 9:06 ` Jan Beulich
2023-06-02 9:22 ` Henry Wang
2023-06-06 19:11 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 06/19] libfdt: Keep fdt functions after init for CONFIG_OVERLAY_DTB Vikram Garhwal
2023-06-02 9:09 ` Jan Beulich
2023-06-02 0:48 ` [XEN][PATCH v7 07/19] libfdt: overlay: change overlay_get_target() Vikram Garhwal
2023-06-05 19:05 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 08/19] xen/device-tree: Add device_tree_find_node_by_path() to find nodes in device tree Vikram Garhwal
2023-06-02 1:52 ` Henry Wang
2023-06-02 7:24 ` Michal Orzel
2023-06-05 19:12 ` Julien Grall
2023-06-06 20:29 ` Vikram Garhwal
2023-06-07 6:22 ` Michal Orzel
2023-06-07 6:27 ` Henry Wang
2023-06-07 8:30 ` Luca Fancellu
2023-06-02 0:48 ` [XEN][PATCH v7 09/19] xen/iommu: Move spin_lock from iommu_dt_device_is_assigned to caller Vikram Garhwal
2023-06-02 7:45 ` Michal Orzel
2023-06-05 19:22 ` Julien Grall
2023-06-06 20:33 ` Vikram Garhwal
2023-06-02 9:19 ` Jan Beulich
2023-06-02 9:26 ` Jan Beulich
2023-06-05 19:19 ` Julien Grall
2023-08-16 23:55 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 10/19] xen/iommu: protect iommu_add_dt_device() with dtdevs_lock Vikram Garhwal
2023-06-02 9:21 ` Jan Beulich
2023-06-05 19:25 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 11/19] xen/iommu: Introduce iommu_remove_dt_device() Vikram Garhwal
2023-06-02 9:22 ` Jan Beulich
2023-06-05 19:37 ` Julien Grall
2023-08-16 23:58 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 12/19] xen/smmu: Add remove_device callback for smmu_iommu ops Vikram Garhwal
2023-06-02 7:47 ` Michal Orzel
2023-06-02 0:48 ` [XEN][PATCH v7 13/19] asm/smp.h: Fix circular dependency for device_tree.h and rwlock.h Vikram Garhwal
2023-06-05 19:46 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 14/19] common/device_tree: Add rwlock for dt_host Vikram Garhwal
2023-06-02 1:58 ` Henry Wang
2023-06-05 7:10 ` Michal Orzel
2023-06-05 19:52 ` Julien Grall
2023-08-16 23:59 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 15/19] xen/arm: Implement device tree node removal functionalities Vikram Garhwal
2023-06-02 9:31 ` Jan Beulich
2023-06-05 7:52 ` Michal Orzel
2023-06-05 21:07 ` Julien Grall
2023-08-17 0:31 ` Vikram Garhwal
2023-08-17 8:14 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 16/19] xen/arm: Implement device tree node addition functionalities Vikram Garhwal
2023-06-05 8:35 ` Michal Orzel
2023-06-02 0:48 ` [XEN][PATCH v7 17/19] tools/libs/ctrl: Implement new xc interfaces for dt overlay Vikram Garhwal
2023-06-12 11:17 ` Anthony PERARD
2023-06-02 0:48 ` Vikram Garhwal [this message]
2023-06-02 0:48 ` [XEN][PATCH v7 19/19] tools/xl: Add new xl command overlay for device tree overlay support Vikram Garhwal
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=20230602004824.20731-19-vikram.garhwal@amd.com \
--to=vikram.garhwal@amd.com \
--cc=anthony.perard@citrix.com \
--cc=jbeulich@suse.com \
--cc=jgross@suse.com \
--cc=michal.orzel@amd.com \
--cc=sstabellini@kernel.org \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).