Commit a9dd8f3c authored by Saravana Kannan's avatar Saravana Kannan Committed by Greg Kroah-Hartman

of: property: Add fw_devlink support for optional properties

Not all DT bindings are mandatory bindings. Add support for optional DT
bindings and mark iommus, iommu-map, dmas as optional DT bindings.
Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarSaravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-5-saravanak@google.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 19d0f5f6
...@@ -1235,6 +1235,7 @@ static struct device_node *parse_##fname(struct device_node *np, \ ...@@ -1235,6 +1235,7 @@ static struct device_node *parse_##fname(struct device_node *np, \
struct supplier_bindings { struct supplier_bindings {
struct device_node *(*parse_prop)(struct device_node *np, struct device_node *(*parse_prop)(struct device_node *np,
const char *prop_name, int index); const char *prop_name, int index);
bool optional;
}; };
DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells") DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")
...@@ -1309,12 +1310,12 @@ static struct device_node *parse_interrupts(struct device_node *np, ...@@ -1309,12 +1310,12 @@ static struct device_node *parse_interrupts(struct device_node *np,
static const struct supplier_bindings of_supplier_bindings[] = { static const struct supplier_bindings of_supplier_bindings[] = {
{ .parse_prop = parse_clocks, }, { .parse_prop = parse_clocks, },
{ .parse_prop = parse_interconnects, }, { .parse_prop = parse_interconnects, },
{ .parse_prop = parse_iommus, }, { .parse_prop = parse_iommus, .optional = true, },
{ .parse_prop = parse_iommu_maps, }, { .parse_prop = parse_iommu_maps, .optional = true, },
{ .parse_prop = parse_mboxes, }, { .parse_prop = parse_mboxes, },
{ .parse_prop = parse_io_channels, }, { .parse_prop = parse_io_channels, },
{ .parse_prop = parse_interrupt_parent, }, { .parse_prop = parse_interrupt_parent, },
{ .parse_prop = parse_dmas, }, { .parse_prop = parse_dmas, .optional = true, },
{ .parse_prop = parse_power_domains, }, { .parse_prop = parse_power_domains, },
{ .parse_prop = parse_hwlocks, }, { .parse_prop = parse_hwlocks, },
{ .parse_prop = parse_extcon, }, { .parse_prop = parse_extcon, },
...@@ -1368,6 +1369,11 @@ static int of_link_property(struct device_node *con_np, const char *prop_name) ...@@ -1368,6 +1369,11 @@ static int of_link_property(struct device_node *con_np, const char *prop_name)
/* Do not stop at first failed link, link all available suppliers. */ /* Do not stop at first failed link, link all available suppliers. */
while (!matched && s->parse_prop) { while (!matched && s->parse_prop) {
if (s->optional && !fw_devlink_is_strict()) {
s++;
continue;
}
while ((phandle = s->parse_prop(con_np, prop_name, i))) { while ((phandle = s->parse_prop(con_np, prop_name, i))) {
matched = true; matched = true;
i++; i++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment