From 3ebc0f8d5df57c75a2c5e899b70007d150c38623 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>
Date: Sat, 15 May 2021 21:43:44 +0200
Subject: [PATCH 256/463] of: property: fw_devlink: Support allwinner,sram
 links

allwinner,sram property points to a node representing section of SRAM,
which is implemented by its ancestor (syscon), so we link to the
parent of parent of the actual SRAM section node that the link points
to.

Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
 drivers/of/property.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index 164d77cb94458..6fcfcda9d9ade 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -1355,6 +1355,27 @@ static struct device_node *parse_remote_endpoint(struct device_node *np,
 	return of_graph_get_remote_port_parent(np);
 }
 
+static struct device_node *parse_allwinner_sram(struct device_node *np,
+						const char *prop_name, int index)
+{
+	struct device_node *sram_node;
+
+	if (!IS_ENABLED(CONFIG_SUNXI_SRAM))
+		return NULL;
+
+	if (strcmp(prop_name, "allwinner,sram"))
+		return NULL;
+
+	if (index > 0)
+		return NULL;
+
+	sram_node = of_parse_phandle(np, prop_name, 0);
+	sram_node = of_get_parent(sram_node);
+	sram_node = of_get_parent(sram_node);
+
+	return sram_node;
+}
+
 static const struct supplier_bindings of_supplier_bindings[] = {
 	{ .parse_prop = parse_clocks, },
 	{ .parse_prop = parse_interconnects, },
@@ -1403,6 +1424,7 @@ static const struct supplier_bindings of_supplier_bindings[] = {
 		.parse_prop = parse_post_init_providers,
 		.fwlink_flags = FWLINK_FLAG_IGNORE,
 	},
+	{ .parse_prop = parse_allwinner_sram, },
 	{}
 };
 
-- 
2.46.0

