diff options
author | Patrick Rudolph <patrick.rudolph@9elements.com> | 2018-05-30 15:05:28 +0200 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2018-06-28 09:01:26 +0000 |
commit | 5ccc73145fb98afb888cd616d0a39fa75b81288a (patch) | |
tree | a29ab02aed416f9f4075329e87cafbafa77e893b | |
parent | eb5d76a510d7a4b46e6b33d8a697a30510a0a6d7 (diff) |
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>
-rw-r--r-- | src/include/device_tree.h | 2 | ||||
-rw-r--r-- | src/lib/device_tree.c | 18 |
2 files changed, 20 insertions, 0 deletions
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 @@ -763,6 +763,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. * * @param node The device tree node to add to. |