From 5ccc73145fb98afb888cd616d0a39fa75b81288a Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Wed, 30 May 2018 15:05:28 +0200
Subject: devicetree: Add method to delete property by name

Will be used on Cavium SoC to delete devicetree entries that aren't
available with the board/configuration.

Change-Id: I7c58a2411206bca62d0e96fa627530e937383ac9
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/26693
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
---
 src/include/device_tree.h |  2 ++
 src/lib/device_tree.c     | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

(limited to 'src')

diff --git a/src/include/device_tree.h b/src/include/device_tree.h
index 54aecb98b8..7f725e4d74 100644
--- a/src/include/device_tree.h
+++ b/src/include/device_tree.h
@@ -151,6 +151,8 @@ struct device_tree_node *dt_find_prop_value(struct device_tree_node *parent, con
 uint32_t dt_get_phandle(struct device_tree_node *node);
 // Write src into *dest as a 'length'-byte big-endian integer.
 void dt_write_int(u8 *dest, u64 src, size_t length);
+// Delete a property
+void dt_delete_prop(struct device_tree_node *node, const char *name);
 // Add different kinds of properties to a node, or update existing ones.
 void dt_add_bin_prop(struct device_tree_node *node, const char *name, void *data,
 		     size_t size);
diff --git a/src/lib/device_tree.c b/src/lib/device_tree.c
index de14c15536..21916598c5 100644
--- a/src/lib/device_tree.c
+++ b/src/lib/device_tree.c
@@ -762,6 +762,24 @@ void dt_write_int(u8 *dest, u64 src, size_t length)
 	}
 }
 
+/*
+ * Delete a property by name in a given node if it exists.
+ *
+ * @param node		The device tree node to operate on.
+ * @param name		The name of the property to delete.
+ */
+void dt_delete_prop(struct device_tree_node *node, const char *name)
+{
+	struct device_tree_property *prop;
+
+	list_for_each(prop, node->properties, list_node) {
+		if (!strcmp(prop->prop.name, name)) {
+			list_remove(&prop->list_node);
+			return;
+		}
+	}
+}
+
 /*
  * Add an arbitrary property to a node, or update it if it already exists.
  *
-- 
cgit v1.2.3