From b22da3d8526a935aa31e086e63f60ff3246cb61c Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 09 Dec 2023 07:24:11 +0000
Subject: [PATCH] add stmac read mac form eeprom

---
 kernel/drivers/of/irq.c |  164 ++++++------------------------------------------------
 1 files changed, 20 insertions(+), 144 deletions(-)

diff --git a/kernel/drivers/of/irq.c b/kernel/drivers/of/irq.c
index 5eb96a2..25d17b8 100644
--- a/kernel/drivers/of/irq.c
+++ b/kernel/drivers/of/irq.c
@@ -22,7 +22,6 @@
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
-#include <linux/of_pci.h>
 #include <linux/string.h>
 #include <linux/slab.h>
 
@@ -274,136 +273,11 @@
 }
 EXPORT_SYMBOL_GPL(of_irq_parse_raw);
 
-int of_irq_domain_map(const struct irq_fwspec *in, struct irq_fwspec *out)
-{
-	char *stem_name;
-	char *cells_name, *map_name = NULL, *mask_name = NULL;
-	char *pass_name = NULL;
-	struct device_node *cur, *new = NULL;
-	const __be32 *map, *mask, *pass;
-	static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = ~0 };
-	static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = 0 };
-	__be32 initial_match_array[MAX_PHANDLE_ARGS];
-	const __be32 *match_array = initial_match_array;
-	int i, ret, map_len, match;
-	u32 in_size, out_size;
-
-	stem_name = "";
-	cells_name = "#interrupt-cells";
-
-	ret = -ENOMEM;
-	map_name = kasprintf(GFP_KERNEL, "irqdomain%s-map", stem_name);
-	if (!map_name)
-		goto free;
-
-	mask_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-mask", stem_name);
-	if (!mask_name)
-		goto free;
-
-	pass_name = kasprintf(GFP_KERNEL, "irqdomain%s-map-pass-thru", stem_name);
-	if (!pass_name)
-		goto free;
-
-	/* Get the #interrupt-cells property */
-	cur = to_of_node(in->fwnode);
-	ret = of_property_read_u32(cur, cells_name, &in_size);
-	if (ret < 0)
-		goto put;
-
-	/* Precalculate the match array - this simplifies match loop */
-	for (i = 0; i < in_size; i++)
-		initial_match_array[i] = cpu_to_be32(in->param[i]);
-
-	ret = -EINVAL;
-	/* Get the irqdomain-map property */
-	map = of_get_property(cur, map_name, &map_len);
-	if (!map) {
-		ret = 0;
-		goto free;
-	}
-	map_len /= sizeof(u32);
-
-	/* Get the irqdomain-map-mask property (optional) */
-	mask = of_get_property(cur, mask_name, NULL);
-	if (!mask)
-		mask = dummy_mask;
-	/* Iterate through irqdomain-map property */
-	match = 0;
-	while (map_len > (in_size + 1) && !match) {
-		/* Compare specifiers */
-		match = 1;
-		for (i = 0; i < in_size; i++, map_len--)
-			match &= !((match_array[i] ^ *map++) & mask[i]);
-
-		of_node_put(new);
-		new = of_find_node_by_phandle(be32_to_cpup(map));
-		map++;
-		map_len--;
-
-		/* Check if not found */
-		if (!new)
-			goto put;
-
-		if (!of_device_is_available(new))
-			match = 0;
-
-		ret = of_property_read_u32(new, cells_name, &out_size);
-		if (ret)
-			goto put;
-
-		/* Check for malformed properties */
-		if (WARN_ON(out_size > MAX_PHANDLE_ARGS))
-			goto put;
-		if (map_len < out_size)
-			goto put;
-
-		/* Move forward by new node's #interrupt-cells amount */
-		map += out_size;
-		map_len -= out_size;
-	}
-	if (match) {
-		/* Get the irqdomain-map-pass-thru property (optional) */
-		pass = of_get_property(cur, pass_name, NULL);
-		if (!pass)
-			pass = dummy_pass;
-
-		/*
-		 * Successfully parsed a irqdomain-map translation; copy new
-		 * specifier into the out structure, keeping the
-		 * bits specified in irqdomain-map-pass-thru.
-		 */
-		match_array = map - out_size;
-		for (i = 0; i < out_size; i++) {
-			__be32 val = *(map - out_size + i);
-
-			out->param[i] = in->param[i];
-			if (i < in_size) {
-				val &= ~pass[i];
-				val |= cpu_to_be32(out->param[i]) & pass[i];
-			}
-
-			out->param[i] = be32_to_cpu(val);
-		}
-		out->param_count = in_size = out_size;
-		out->fwnode = of_node_to_fwnode(new);
-	}
-put:
-	of_node_put(cur);
-	of_node_put(new);
-free:
-	kfree(mask_name);
-	kfree(map_name);
-	kfree(pass_name);
-
-	return ret;
-}
-EXPORT_SYMBOL(of_irq_domain_map);
-
 /**
  * of_irq_parse_one - Resolve an interrupt for a device
  * @device: the device whose interrupt is to be resolved
  * @index: index of the interrupt to resolve
- * @out_irq: structure of_irq filled by this function
+ * @out_irq: structure of_phandle_args filled by this function
  *
  * This function resolves an interrupt for a node by walking the interrupt tree,
  * finding which interrupt controller node it is attached to, and returning the
@@ -626,7 +500,7 @@
 		 * pointer, interrupt-parent device_node etc.
 		 */
 		desc = kzalloc(sizeof(*desc), GFP_KERNEL);
-		if (WARN_ON(!desc)) {
+		if (!desc) {
 			of_node_put(np);
 			goto err;
 		}
@@ -702,55 +576,57 @@
 	}
 }
 
-static u32 __of_msi_map_rid(struct device *dev, struct device_node **np,
-			    u32 rid_in)
+static u32 __of_msi_map_id(struct device *dev, struct device_node **np,
+			    u32 id_in)
 {
 	struct device *parent_dev;
-	u32 rid_out = rid_in;
+	u32 id_out = id_in;
 
 	/*
 	 * Walk up the device parent links looking for one with a
 	 * "msi-map" property.
 	 */
 	for (parent_dev = dev; parent_dev; parent_dev = parent_dev->parent)
-		if (!of_pci_map_rid(parent_dev->of_node, rid_in, "msi-map",
-				    "msi-map-mask", np, &rid_out))
+		if (!of_map_id(parent_dev->of_node, id_in, "msi-map",
+				"msi-map-mask", np, &id_out))
 			break;
-	return rid_out;
+	return id_out;
 }
 
 /**
- * of_msi_map_rid - Map a MSI requester ID for a device.
+ * of_msi_map_id - Map a MSI ID for a device.
  * @dev: device for which the mapping is to be done.
  * @msi_np: device node of the expected msi controller.
- * @rid_in: unmapped MSI requester ID for the device.
+ * @id_in: unmapped MSI ID for the device.
  *
  * Walk up the device hierarchy looking for devices with a "msi-map"
- * property.  If found, apply the mapping to @rid_in.
+ * property.  If found, apply the mapping to @id_in.
  *
- * Returns the mapped MSI requester ID.
+ * Returns the mapped MSI ID.
  */
-u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in)
+u32 of_msi_map_id(struct device *dev, struct device_node *msi_np, u32 id_in)
 {
-	return __of_msi_map_rid(dev, &msi_np, rid_in);
+	return __of_msi_map_id(dev, &msi_np, id_in);
 }
 
 /**
  * of_msi_map_get_device_domain - Use msi-map to find the relevant MSI domain
  * @dev: device for which the mapping is to be done.
- * @rid: Requester ID for the device.
+ * @id: Device ID.
+ * @bus_token: Bus token
  *
  * Walk up the device hierarchy looking for devices with a "msi-map"
  * property.
  *
  * Returns: the MSI domain for this device (or NULL on failure)
  */
-struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 rid)
+struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 id,
+						u32 bus_token)
 {
 	struct device_node *np = NULL;
 
-	__of_msi_map_rid(dev, &np, rid);
-	return irq_find_matching_host(np, DOMAIN_BUS_PCI_MSI);
+	__of_msi_map_id(dev, &np, id);
+	return irq_find_matching_host(np, bus_token);
 }
 
 /**

--
Gitblit v1.6.2