cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

base.c (57656B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Procedures for creating, accessing and interpreting the device tree.
      4 *
      5 * Paul Mackerras	August 1996.
      6 * Copyright (C) 1996-2005 Paul Mackerras.
      7 *
      8 *  Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
      9 *    {engebret|bergner}@us.ibm.com
     10 *
     11 *  Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net
     12 *
     13 *  Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and
     14 *  Grant Likely.
     15 */
     16
     17#define pr_fmt(fmt)	"OF: " fmt
     18
     19#include <linux/console.h>
     20#include <linux/ctype.h>
     21#include <linux/cpu.h>
     22#include <linux/module.h>
     23#include <linux/of.h>
     24#include <linux/of_device.h>
     25#include <linux/of_graph.h>
     26#include <linux/spinlock.h>
     27#include <linux/slab.h>
     28#include <linux/string.h>
     29#include <linux/proc_fs.h>
     30
     31#include "of_private.h"
     32
     33LIST_HEAD(aliases_lookup);
     34
     35struct device_node *of_root;
     36EXPORT_SYMBOL(of_root);
     37struct device_node *of_chosen;
     38EXPORT_SYMBOL(of_chosen);
     39struct device_node *of_aliases;
     40struct device_node *of_stdout;
     41static const char *of_stdout_options;
     42
     43struct kset *of_kset;
     44
     45/*
     46 * Used to protect the of_aliases, to hold off addition of nodes to sysfs.
     47 * This mutex must be held whenever modifications are being made to the
     48 * device tree. The of_{attach,detach}_node() and
     49 * of_{add,remove,update}_property() helpers make sure this happens.
     50 */
     51DEFINE_MUTEX(of_mutex);
     52
     53/* use when traversing tree through the child, sibling,
     54 * or parent members of struct device_node.
     55 */
     56DEFINE_RAW_SPINLOCK(devtree_lock);
     57
     58bool of_node_name_eq(const struct device_node *np, const char *name)
     59{
     60	const char *node_name;
     61	size_t len;
     62
     63	if (!np)
     64		return false;
     65
     66	node_name = kbasename(np->full_name);
     67	len = strchrnul(node_name, '@') - node_name;
     68
     69	return (strlen(name) == len) && (strncmp(node_name, name, len) == 0);
     70}
     71EXPORT_SYMBOL(of_node_name_eq);
     72
     73bool of_node_name_prefix(const struct device_node *np, const char *prefix)
     74{
     75	if (!np)
     76		return false;
     77
     78	return strncmp(kbasename(np->full_name), prefix, strlen(prefix)) == 0;
     79}
     80EXPORT_SYMBOL(of_node_name_prefix);
     81
     82static bool __of_node_is_type(const struct device_node *np, const char *type)
     83{
     84	const char *match = __of_get_property(np, "device_type", NULL);
     85
     86	return np && match && type && !strcmp(match, type);
     87}
     88
     89int of_bus_n_addr_cells(struct device_node *np)
     90{
     91	u32 cells;
     92
     93	for (; np; np = np->parent)
     94		if (!of_property_read_u32(np, "#address-cells", &cells))
     95			return cells;
     96
     97	/* No #address-cells property for the root node */
     98	return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
     99}
    100
    101int of_n_addr_cells(struct device_node *np)
    102{
    103	if (np->parent)
    104		np = np->parent;
    105
    106	return of_bus_n_addr_cells(np);
    107}
    108EXPORT_SYMBOL(of_n_addr_cells);
    109
    110int of_bus_n_size_cells(struct device_node *np)
    111{
    112	u32 cells;
    113
    114	for (; np; np = np->parent)
    115		if (!of_property_read_u32(np, "#size-cells", &cells))
    116			return cells;
    117
    118	/* No #size-cells property for the root node */
    119	return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
    120}
    121
    122int of_n_size_cells(struct device_node *np)
    123{
    124	if (np->parent)
    125		np = np->parent;
    126
    127	return of_bus_n_size_cells(np);
    128}
    129EXPORT_SYMBOL(of_n_size_cells);
    130
    131#ifdef CONFIG_NUMA
    132int __weak of_node_to_nid(struct device_node *np)
    133{
    134	return NUMA_NO_NODE;
    135}
    136#endif
    137
    138#define OF_PHANDLE_CACHE_BITS	7
    139#define OF_PHANDLE_CACHE_SZ	BIT(OF_PHANDLE_CACHE_BITS)
    140
    141static struct device_node *phandle_cache[OF_PHANDLE_CACHE_SZ];
    142
    143static u32 of_phandle_cache_hash(phandle handle)
    144{
    145	return hash_32(handle, OF_PHANDLE_CACHE_BITS);
    146}
    147
    148/*
    149 * Caller must hold devtree_lock.
    150 */
    151void __of_phandle_cache_inv_entry(phandle handle)
    152{
    153	u32 handle_hash;
    154	struct device_node *np;
    155
    156	if (!handle)
    157		return;
    158
    159	handle_hash = of_phandle_cache_hash(handle);
    160
    161	np = phandle_cache[handle_hash];
    162	if (np && handle == np->phandle)
    163		phandle_cache[handle_hash] = NULL;
    164}
    165
    166void __init of_core_init(void)
    167{
    168	struct device_node *np;
    169
    170
    171	/* Create the kset, and register existing nodes */
    172	mutex_lock(&of_mutex);
    173	of_kset = kset_create_and_add("devicetree", NULL, firmware_kobj);
    174	if (!of_kset) {
    175		mutex_unlock(&of_mutex);
    176		pr_err("failed to register existing nodes\n");
    177		return;
    178	}
    179	for_each_of_allnodes(np) {
    180		__of_attach_node_sysfs(np);
    181		if (np->phandle && !phandle_cache[of_phandle_cache_hash(np->phandle)])
    182			phandle_cache[of_phandle_cache_hash(np->phandle)] = np;
    183	}
    184	mutex_unlock(&of_mutex);
    185
    186	/* Symlink in /proc as required by userspace ABI */
    187	if (of_root)
    188		proc_symlink("device-tree", NULL, "/sys/firmware/devicetree/base");
    189}
    190
    191static struct property *__of_find_property(const struct device_node *np,
    192					   const char *name, int *lenp)
    193{
    194	struct property *pp;
    195
    196	if (!np)
    197		return NULL;
    198
    199	for (pp = np->properties; pp; pp = pp->next) {
    200		if (of_prop_cmp(pp->name, name) == 0) {
    201			if (lenp)
    202				*lenp = pp->length;
    203			break;
    204		}
    205	}
    206
    207	return pp;
    208}
    209
    210struct property *of_find_property(const struct device_node *np,
    211				  const char *name,
    212				  int *lenp)
    213{
    214	struct property *pp;
    215	unsigned long flags;
    216
    217	raw_spin_lock_irqsave(&devtree_lock, flags);
    218	pp = __of_find_property(np, name, lenp);
    219	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    220
    221	return pp;
    222}
    223EXPORT_SYMBOL(of_find_property);
    224
    225struct device_node *__of_find_all_nodes(struct device_node *prev)
    226{
    227	struct device_node *np;
    228	if (!prev) {
    229		np = of_root;
    230	} else if (prev->child) {
    231		np = prev->child;
    232	} else {
    233		/* Walk back up looking for a sibling, or the end of the structure */
    234		np = prev;
    235		while (np->parent && !np->sibling)
    236			np = np->parent;
    237		np = np->sibling; /* Might be null at the end of the tree */
    238	}
    239	return np;
    240}
    241
    242/**
    243 * of_find_all_nodes - Get next node in global list
    244 * @prev:	Previous node or NULL to start iteration
    245 *		of_node_put() will be called on it
    246 *
    247 * Return: A node pointer with refcount incremented, use
    248 * of_node_put() on it when done.
    249 */
    250struct device_node *of_find_all_nodes(struct device_node *prev)
    251{
    252	struct device_node *np;
    253	unsigned long flags;
    254
    255	raw_spin_lock_irqsave(&devtree_lock, flags);
    256	np = __of_find_all_nodes(prev);
    257	of_node_get(np);
    258	of_node_put(prev);
    259	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    260	return np;
    261}
    262EXPORT_SYMBOL(of_find_all_nodes);
    263
    264/*
    265 * Find a property with a given name for a given node
    266 * and return the value.
    267 */
    268const void *__of_get_property(const struct device_node *np,
    269			      const char *name, int *lenp)
    270{
    271	struct property *pp = __of_find_property(np, name, lenp);
    272
    273	return pp ? pp->value : NULL;
    274}
    275
    276/*
    277 * Find a property with a given name for a given node
    278 * and return the value.
    279 */
    280const void *of_get_property(const struct device_node *np, const char *name,
    281			    int *lenp)
    282{
    283	struct property *pp = of_find_property(np, name, lenp);
    284
    285	return pp ? pp->value : NULL;
    286}
    287EXPORT_SYMBOL(of_get_property);
    288
    289/**
    290 * of_get_cpu_hwid - Get the hardware ID from a CPU device node
    291 *
    292 * @cpun: CPU number(logical index) for which device node is required
    293 * @thread: The local thread number to get the hardware ID for.
    294 *
    295 * Return: The hardware ID for the CPU node or ~0ULL if not found.
    296 */
    297u64 of_get_cpu_hwid(struct device_node *cpun, unsigned int thread)
    298{
    299	const __be32 *cell;
    300	int ac, len;
    301
    302	ac = of_n_addr_cells(cpun);
    303	cell = of_get_property(cpun, "reg", &len);
    304	if (!cell || !ac || ((sizeof(*cell) * ac * (thread + 1)) > len))
    305		return ~0ULL;
    306
    307	cell += ac * thread;
    308	return of_read_number(cell, ac);
    309}
    310
    311/*
    312 * arch_match_cpu_phys_id - Match the given logical CPU and physical id
    313 *
    314 * @cpu: logical cpu index of a core/thread
    315 * @phys_id: physical identifier of a core/thread
    316 *
    317 * CPU logical to physical index mapping is architecture specific.
    318 * However this __weak function provides a default match of physical
    319 * id to logical cpu index. phys_id provided here is usually values read
    320 * from the device tree which must match the hardware internal registers.
    321 *
    322 * Returns true if the physical identifier and the logical cpu index
    323 * correspond to the same core/thread, false otherwise.
    324 */
    325bool __weak arch_match_cpu_phys_id(int cpu, u64 phys_id)
    326{
    327	return (u32)phys_id == cpu;
    328}
    329
    330/*
    331 * Checks if the given "prop_name" property holds the physical id of the
    332 * core/thread corresponding to the logical cpu 'cpu'. If 'thread' is not
    333 * NULL, local thread number within the core is returned in it.
    334 */
    335static bool __of_find_n_match_cpu_property(struct device_node *cpun,
    336			const char *prop_name, int cpu, unsigned int *thread)
    337{
    338	const __be32 *cell;
    339	int ac, prop_len, tid;
    340	u64 hwid;
    341
    342	ac = of_n_addr_cells(cpun);
    343	cell = of_get_property(cpun, prop_name, &prop_len);
    344	if (!cell && !ac && arch_match_cpu_phys_id(cpu, 0))
    345		return true;
    346	if (!cell || !ac)
    347		return false;
    348	prop_len /= sizeof(*cell) * ac;
    349	for (tid = 0; tid < prop_len; tid++) {
    350		hwid = of_read_number(cell, ac);
    351		if (arch_match_cpu_phys_id(cpu, hwid)) {
    352			if (thread)
    353				*thread = tid;
    354			return true;
    355		}
    356		cell += ac;
    357	}
    358	return false;
    359}
    360
    361/*
    362 * arch_find_n_match_cpu_physical_id - See if the given device node is
    363 * for the cpu corresponding to logical cpu 'cpu'.  Return true if so,
    364 * else false.  If 'thread' is non-NULL, the local thread number within the
    365 * core is returned in it.
    366 */
    367bool __weak arch_find_n_match_cpu_physical_id(struct device_node *cpun,
    368					      int cpu, unsigned int *thread)
    369{
    370	/* Check for non-standard "ibm,ppc-interrupt-server#s" property
    371	 * for thread ids on PowerPC. If it doesn't exist fallback to
    372	 * standard "reg" property.
    373	 */
    374	if (IS_ENABLED(CONFIG_PPC) &&
    375	    __of_find_n_match_cpu_property(cpun,
    376					   "ibm,ppc-interrupt-server#s",
    377					   cpu, thread))
    378		return true;
    379
    380	return __of_find_n_match_cpu_property(cpun, "reg", cpu, thread);
    381}
    382
    383/**
    384 * of_get_cpu_node - Get device node associated with the given logical CPU
    385 *
    386 * @cpu: CPU number(logical index) for which device node is required
    387 * @thread: if not NULL, local thread number within the physical core is
    388 *          returned
    389 *
    390 * The main purpose of this function is to retrieve the device node for the
    391 * given logical CPU index. It should be used to initialize the of_node in
    392 * cpu device. Once of_node in cpu device is populated, all the further
    393 * references can use that instead.
    394 *
    395 * CPU logical to physical index mapping is architecture specific and is built
    396 * before booting secondary cores. This function uses arch_match_cpu_phys_id
    397 * which can be overridden by architecture specific implementation.
    398 *
    399 * Return: A node pointer for the logical cpu with refcount incremented, use
    400 * of_node_put() on it when done. Returns NULL if not found.
    401 */
    402struct device_node *of_get_cpu_node(int cpu, unsigned int *thread)
    403{
    404	struct device_node *cpun;
    405
    406	for_each_of_cpu_node(cpun) {
    407		if (arch_find_n_match_cpu_physical_id(cpun, cpu, thread))
    408			return cpun;
    409	}
    410	return NULL;
    411}
    412EXPORT_SYMBOL(of_get_cpu_node);
    413
    414/**
    415 * of_cpu_node_to_id: Get the logical CPU number for a given device_node
    416 *
    417 * @cpu_node: Pointer to the device_node for CPU.
    418 *
    419 * Return: The logical CPU number of the given CPU device_node or -ENODEV if the
    420 * CPU is not found.
    421 */
    422int of_cpu_node_to_id(struct device_node *cpu_node)
    423{
    424	int cpu;
    425	bool found = false;
    426	struct device_node *np;
    427
    428	for_each_possible_cpu(cpu) {
    429		np = of_cpu_device_node_get(cpu);
    430		found = (cpu_node == np);
    431		of_node_put(np);
    432		if (found)
    433			return cpu;
    434	}
    435
    436	return -ENODEV;
    437}
    438EXPORT_SYMBOL(of_cpu_node_to_id);
    439
    440/**
    441 * of_get_cpu_state_node - Get CPU's idle state node at the given index
    442 *
    443 * @cpu_node: The device node for the CPU
    444 * @index: The index in the list of the idle states
    445 *
    446 * Two generic methods can be used to describe a CPU's idle states, either via
    447 * a flattened description through the "cpu-idle-states" binding or via the
    448 * hierarchical layout, using the "power-domains" and the "domain-idle-states"
    449 * bindings. This function check for both and returns the idle state node for
    450 * the requested index.
    451 *
    452 * Return: An idle state node if found at @index. The refcount is incremented
    453 * for it, so call of_node_put() on it when done. Returns NULL if not found.
    454 */
    455struct device_node *of_get_cpu_state_node(struct device_node *cpu_node,
    456					  int index)
    457{
    458	struct of_phandle_args args;
    459	int err;
    460
    461	err = of_parse_phandle_with_args(cpu_node, "power-domains",
    462					"#power-domain-cells", 0, &args);
    463	if (!err) {
    464		struct device_node *state_node =
    465			of_parse_phandle(args.np, "domain-idle-states", index);
    466
    467		of_node_put(args.np);
    468		if (state_node)
    469			return state_node;
    470	}
    471
    472	return of_parse_phandle(cpu_node, "cpu-idle-states", index);
    473}
    474EXPORT_SYMBOL(of_get_cpu_state_node);
    475
    476/**
    477 * __of_device_is_compatible() - Check if the node matches given constraints
    478 * @device: pointer to node
    479 * @compat: required compatible string, NULL or "" for any match
    480 * @type: required device_type value, NULL or "" for any match
    481 * @name: required node name, NULL or "" for any match
    482 *
    483 * Checks if the given @compat, @type and @name strings match the
    484 * properties of the given @device. A constraints can be skipped by
    485 * passing NULL or an empty string as the constraint.
    486 *
    487 * Returns 0 for no match, and a positive integer on match. The return
    488 * value is a relative score with larger values indicating better
    489 * matches. The score is weighted for the most specific compatible value
    490 * to get the highest score. Matching type is next, followed by matching
    491 * name. Practically speaking, this results in the following priority
    492 * order for matches:
    493 *
    494 * 1. specific compatible && type && name
    495 * 2. specific compatible && type
    496 * 3. specific compatible && name
    497 * 4. specific compatible
    498 * 5. general compatible && type && name
    499 * 6. general compatible && type
    500 * 7. general compatible && name
    501 * 8. general compatible
    502 * 9. type && name
    503 * 10. type
    504 * 11. name
    505 */
    506static int __of_device_is_compatible(const struct device_node *device,
    507				     const char *compat, const char *type, const char *name)
    508{
    509	struct property *prop;
    510	const char *cp;
    511	int index = 0, score = 0;
    512
    513	/* Compatible match has highest priority */
    514	if (compat && compat[0]) {
    515		prop = __of_find_property(device, "compatible", NULL);
    516		for (cp = of_prop_next_string(prop, NULL); cp;
    517		     cp = of_prop_next_string(prop, cp), index++) {
    518			if (of_compat_cmp(cp, compat, strlen(compat)) == 0) {
    519				score = INT_MAX/2 - (index << 2);
    520				break;
    521			}
    522		}
    523		if (!score)
    524			return 0;
    525	}
    526
    527	/* Matching type is better than matching name */
    528	if (type && type[0]) {
    529		if (!__of_node_is_type(device, type))
    530			return 0;
    531		score += 2;
    532	}
    533
    534	/* Matching name is a bit better than not */
    535	if (name && name[0]) {
    536		if (!of_node_name_eq(device, name))
    537			return 0;
    538		score++;
    539	}
    540
    541	return score;
    542}
    543
    544/** Checks if the given "compat" string matches one of the strings in
    545 * the device's "compatible" property
    546 */
    547int of_device_is_compatible(const struct device_node *device,
    548		const char *compat)
    549{
    550	unsigned long flags;
    551	int res;
    552
    553	raw_spin_lock_irqsave(&devtree_lock, flags);
    554	res = __of_device_is_compatible(device, compat, NULL, NULL);
    555	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    556	return res;
    557}
    558EXPORT_SYMBOL(of_device_is_compatible);
    559
    560/** Checks if the device is compatible with any of the entries in
    561 *  a NULL terminated array of strings. Returns the best match
    562 *  score or 0.
    563 */
    564int of_device_compatible_match(struct device_node *device,
    565			       const char *const *compat)
    566{
    567	unsigned int tmp, score = 0;
    568
    569	if (!compat)
    570		return 0;
    571
    572	while (*compat) {
    573		tmp = of_device_is_compatible(device, *compat);
    574		if (tmp > score)
    575			score = tmp;
    576		compat++;
    577	}
    578
    579	return score;
    580}
    581
    582/**
    583 * of_machine_is_compatible - Test root of device tree for a given compatible value
    584 * @compat: compatible string to look for in root node's compatible property.
    585 *
    586 * Return: A positive integer if the root node has the given value in its
    587 * compatible property.
    588 */
    589int of_machine_is_compatible(const char *compat)
    590{
    591	struct device_node *root;
    592	int rc = 0;
    593
    594	root = of_find_node_by_path("/");
    595	if (root) {
    596		rc = of_device_is_compatible(root, compat);
    597		of_node_put(root);
    598	}
    599	return rc;
    600}
    601EXPORT_SYMBOL(of_machine_is_compatible);
    602
    603/**
    604 *  __of_device_is_available - check if a device is available for use
    605 *
    606 *  @device: Node to check for availability, with locks already held
    607 *
    608 *  Return: True if the status property is absent or set to "okay" or "ok",
    609 *  false otherwise
    610 */
    611static bool __of_device_is_available(const struct device_node *device)
    612{
    613	const char *status;
    614	int statlen;
    615
    616	if (!device)
    617		return false;
    618
    619	status = __of_get_property(device, "status", &statlen);
    620	if (status == NULL)
    621		return true;
    622
    623	if (statlen > 0) {
    624		if (!strcmp(status, "okay") || !strcmp(status, "ok"))
    625			return true;
    626	}
    627
    628	return false;
    629}
    630
    631/**
    632 *  of_device_is_available - check if a device is available for use
    633 *
    634 *  @device: Node to check for availability
    635 *
    636 *  Return: True if the status property is absent or set to "okay" or "ok",
    637 *  false otherwise
    638 */
    639bool of_device_is_available(const struct device_node *device)
    640{
    641	unsigned long flags;
    642	bool res;
    643
    644	raw_spin_lock_irqsave(&devtree_lock, flags);
    645	res = __of_device_is_available(device);
    646	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    647	return res;
    648
    649}
    650EXPORT_SYMBOL(of_device_is_available);
    651
    652/**
    653 *  __of_device_is_fail - check if a device has status "fail" or "fail-..."
    654 *
    655 *  @device: Node to check status for, with locks already held
    656 *
    657 *  Return: True if the status property is set to "fail" or "fail-..." (for any
    658 *  error code suffix), false otherwise
    659 */
    660static bool __of_device_is_fail(const struct device_node *device)
    661{
    662	const char *status;
    663
    664	if (!device)
    665		return false;
    666
    667	status = __of_get_property(device, "status", NULL);
    668	if (status == NULL)
    669		return false;
    670
    671	return !strcmp(status, "fail") || !strncmp(status, "fail-", 5);
    672}
    673
    674/**
    675 *  of_device_is_big_endian - check if a device has BE registers
    676 *
    677 *  @device: Node to check for endianness
    678 *
    679 *  Return: True if the device has a "big-endian" property, or if the kernel
    680 *  was compiled for BE *and* the device has a "native-endian" property.
    681 *  Returns false otherwise.
    682 *
    683 *  Callers would nominally use ioread32be/iowrite32be if
    684 *  of_device_is_big_endian() == true, or readl/writel otherwise.
    685 */
    686bool of_device_is_big_endian(const struct device_node *device)
    687{
    688	if (of_property_read_bool(device, "big-endian"))
    689		return true;
    690	if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) &&
    691	    of_property_read_bool(device, "native-endian"))
    692		return true;
    693	return false;
    694}
    695EXPORT_SYMBOL(of_device_is_big_endian);
    696
    697/**
    698 * of_get_parent - Get a node's parent if any
    699 * @node:	Node to get parent
    700 *
    701 * Return: A node pointer with refcount incremented, use
    702 * of_node_put() on it when done.
    703 */
    704struct device_node *of_get_parent(const struct device_node *node)
    705{
    706	struct device_node *np;
    707	unsigned long flags;
    708
    709	if (!node)
    710		return NULL;
    711
    712	raw_spin_lock_irqsave(&devtree_lock, flags);
    713	np = of_node_get(node->parent);
    714	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    715	return np;
    716}
    717EXPORT_SYMBOL(of_get_parent);
    718
    719/**
    720 * of_get_next_parent - Iterate to a node's parent
    721 * @node:	Node to get parent of
    722 *
    723 * This is like of_get_parent() except that it drops the
    724 * refcount on the passed node, making it suitable for iterating
    725 * through a node's parents.
    726 *
    727 * Return: A node pointer with refcount incremented, use
    728 * of_node_put() on it when done.
    729 */
    730struct device_node *of_get_next_parent(struct device_node *node)
    731{
    732	struct device_node *parent;
    733	unsigned long flags;
    734
    735	if (!node)
    736		return NULL;
    737
    738	raw_spin_lock_irqsave(&devtree_lock, flags);
    739	parent = of_node_get(node->parent);
    740	of_node_put(node);
    741	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    742	return parent;
    743}
    744EXPORT_SYMBOL(of_get_next_parent);
    745
    746static struct device_node *__of_get_next_child(const struct device_node *node,
    747						struct device_node *prev)
    748{
    749	struct device_node *next;
    750
    751	if (!node)
    752		return NULL;
    753
    754	next = prev ? prev->sibling : node->child;
    755	of_node_get(next);
    756	of_node_put(prev);
    757	return next;
    758}
    759#define __for_each_child_of_node(parent, child) \
    760	for (child = __of_get_next_child(parent, NULL); child != NULL; \
    761	     child = __of_get_next_child(parent, child))
    762
    763/**
    764 * of_get_next_child - Iterate a node childs
    765 * @node:	parent node
    766 * @prev:	previous child of the parent node, or NULL to get first
    767 *
    768 * Return: A node pointer with refcount incremented, use of_node_put() on
    769 * it when done. Returns NULL when prev is the last child. Decrements the
    770 * refcount of prev.
    771 */
    772struct device_node *of_get_next_child(const struct device_node *node,
    773	struct device_node *prev)
    774{
    775	struct device_node *next;
    776	unsigned long flags;
    777
    778	raw_spin_lock_irqsave(&devtree_lock, flags);
    779	next = __of_get_next_child(node, prev);
    780	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    781	return next;
    782}
    783EXPORT_SYMBOL(of_get_next_child);
    784
    785/**
    786 * of_get_next_available_child - Find the next available child node
    787 * @node:	parent node
    788 * @prev:	previous child of the parent node, or NULL to get first
    789 *
    790 * This function is like of_get_next_child(), except that it
    791 * automatically skips any disabled nodes (i.e. status = "disabled").
    792 */
    793struct device_node *of_get_next_available_child(const struct device_node *node,
    794	struct device_node *prev)
    795{
    796	struct device_node *next;
    797	unsigned long flags;
    798
    799	if (!node)
    800		return NULL;
    801
    802	raw_spin_lock_irqsave(&devtree_lock, flags);
    803	next = prev ? prev->sibling : node->child;
    804	for (; next; next = next->sibling) {
    805		if (!__of_device_is_available(next))
    806			continue;
    807		if (of_node_get(next))
    808			break;
    809	}
    810	of_node_put(prev);
    811	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    812	return next;
    813}
    814EXPORT_SYMBOL(of_get_next_available_child);
    815
    816/**
    817 * of_get_next_cpu_node - Iterate on cpu nodes
    818 * @prev:	previous child of the /cpus node, or NULL to get first
    819 *
    820 * Unusable CPUs (those with the status property set to "fail" or "fail-...")
    821 * will be skipped.
    822 *
    823 * Return: A cpu node pointer with refcount incremented, use of_node_put()
    824 * on it when done. Returns NULL when prev is the last child. Decrements
    825 * the refcount of prev.
    826 */
    827struct device_node *of_get_next_cpu_node(struct device_node *prev)
    828{
    829	struct device_node *next = NULL;
    830	unsigned long flags;
    831	struct device_node *node;
    832
    833	if (!prev)
    834		node = of_find_node_by_path("/cpus");
    835
    836	raw_spin_lock_irqsave(&devtree_lock, flags);
    837	if (prev)
    838		next = prev->sibling;
    839	else if (node) {
    840		next = node->child;
    841		of_node_put(node);
    842	}
    843	for (; next; next = next->sibling) {
    844		if (__of_device_is_fail(next))
    845			continue;
    846		if (!(of_node_name_eq(next, "cpu") ||
    847		      __of_node_is_type(next, "cpu")))
    848			continue;
    849		if (of_node_get(next))
    850			break;
    851	}
    852	of_node_put(prev);
    853	raw_spin_unlock_irqrestore(&devtree_lock, flags);
    854	return next;
    855}
    856EXPORT_SYMBOL(of_get_next_cpu_node);
    857
    858/**
    859 * of_get_compatible_child - Find compatible child node
    860 * @parent:	parent node
    861 * @compatible:	compatible string
    862 *
    863 * Lookup child node whose compatible property contains the given compatible
    864 * string.
    865 *
    866 * Return: a node pointer with refcount incremented, use of_node_put() on it
    867 * when done; or NULL if not found.
    868 */
    869struct device_node *of_get_compatible_child(const struct device_node *parent,
    870				const char *compatible)
    871{
    872	struct device_node *child;
    873
    874	for_each_child_of_node(parent, child) {
    875		if (of_device_is_compatible(child, compatible))
    876			break;
    877	}
    878
    879	return child;
    880}
    881EXPORT_SYMBOL(of_get_compatible_child);
    882
    883/**
    884 * of_get_child_by_name - Find the child node by name for a given parent
    885 * @node:	parent node
    886 * @name:	child name to look for.
    887 *
    888 * This function looks for child node for given matching name
    889 *
    890 * Return: A node pointer if found, with refcount incremented, use
    891 * of_node_put() on it when done.
    892 * Returns NULL if node is not found.
    893 */
    894struct device_node *of_get_child_by_name(const struct device_node *node,
    895				const char *name)
    896{
    897	struct device_node *child;
    898
    899	for_each_child_of_node(node, child)
    900		if (of_node_name_eq(child, name))
    901			break;
    902	return child;
    903}
    904EXPORT_SYMBOL(of_get_child_by_name);
    905
    906struct device_node *__of_find_node_by_path(struct device_node *parent,
    907						const char *path)
    908{
    909	struct device_node *child;
    910	int len;
    911
    912	len = strcspn(path, "/:");
    913	if (!len)
    914		return NULL;
    915
    916	__for_each_child_of_node(parent, child) {
    917		const char *name = kbasename(child->full_name);
    918		if (strncmp(path, name, len) == 0 && (strlen(name) == len))
    919			return child;
    920	}
    921	return NULL;
    922}
    923
    924struct device_node *__of_find_node_by_full_path(struct device_node *node,
    925						const char *path)
    926{
    927	const char *separator = strchr(path, ':');
    928
    929	while (node && *path == '/') {
    930		struct device_node *tmp = node;
    931
    932		path++; /* Increment past '/' delimiter */
    933		node = __of_find_node_by_path(node, path);
    934		of_node_put(tmp);
    935		path = strchrnul(path, '/');
    936		if (separator && separator < path)
    937			break;
    938	}
    939	return node;
    940}
    941
    942/**
    943 * of_find_node_opts_by_path - Find a node matching a full OF path
    944 * @path: Either the full path to match, or if the path does not
    945 *       start with '/', the name of a property of the /aliases
    946 *       node (an alias).  In the case of an alias, the node
    947 *       matching the alias' value will be returned.
    948 * @opts: Address of a pointer into which to store the start of
    949 *       an options string appended to the end of the path with
    950 *       a ':' separator.
    951 *
    952 * Valid paths:
    953 *  * /foo/bar	Full path
    954 *  * foo	Valid alias
    955 *  * foo/bar	Valid alias + relative path
    956 *
    957 * Return: A node pointer with refcount incremented, use
    958 * of_node_put() on it when done.
    959 */
    960struct device_node *of_find_node_opts_by_path(const char *path, const char **opts)
    961{
    962	struct device_node *np = NULL;
    963	struct property *pp;
    964	unsigned long flags;
    965	const char *separator = strchr(path, ':');
    966
    967	if (opts)
    968		*opts = separator ? separator + 1 : NULL;
    969
    970	if (strcmp(path, "/") == 0)
    971		return of_node_get(of_root);
    972
    973	/* The path could begin with an alias */
    974	if (*path != '/') {
    975		int len;
    976		const char *p = separator;
    977
    978		if (!p)
    979			p = strchrnul(path, '/');
    980		len = p - path;
    981
    982		/* of_aliases must not be NULL */
    983		if (!of_aliases)
    984			return NULL;
    985
    986		for_each_property_of_node(of_aliases, pp) {
    987			if (strlen(pp->name) == len && !strncmp(pp->name, path, len)) {
    988				np = of_find_node_by_path(pp->value);
    989				break;
    990			}
    991		}
    992		if (!np)
    993			return NULL;
    994		path = p;
    995	}
    996
    997	/* Step down the tree matching path components */
    998	raw_spin_lock_irqsave(&devtree_lock, flags);
    999	if (!np)
   1000		np = of_node_get(of_root);
   1001	np = __of_find_node_by_full_path(np, path);
   1002	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1003	return np;
   1004}
   1005EXPORT_SYMBOL(of_find_node_opts_by_path);
   1006
   1007/**
   1008 * of_find_node_by_name - Find a node by its "name" property
   1009 * @from:	The node to start searching from or NULL; the node
   1010 *		you pass will not be searched, only the next one
   1011 *		will. Typically, you pass what the previous call
   1012 *		returned. of_node_put() will be called on @from.
   1013 * @name:	The name string to match against
   1014 *
   1015 * Return: A node pointer with refcount incremented, use
   1016 * of_node_put() on it when done.
   1017 */
   1018struct device_node *of_find_node_by_name(struct device_node *from,
   1019	const char *name)
   1020{
   1021	struct device_node *np;
   1022	unsigned long flags;
   1023
   1024	raw_spin_lock_irqsave(&devtree_lock, flags);
   1025	for_each_of_allnodes_from(from, np)
   1026		if (of_node_name_eq(np, name) && of_node_get(np))
   1027			break;
   1028	of_node_put(from);
   1029	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1030	return np;
   1031}
   1032EXPORT_SYMBOL(of_find_node_by_name);
   1033
   1034/**
   1035 * of_find_node_by_type - Find a node by its "device_type" property
   1036 * @from:	The node to start searching from, or NULL to start searching
   1037 *		the entire device tree. The node you pass will not be
   1038 *		searched, only the next one will; typically, you pass
   1039 *		what the previous call returned. of_node_put() will be
   1040 *		called on from for you.
   1041 * @type:	The type string to match against
   1042 *
   1043 * Return: A node pointer with refcount incremented, use
   1044 * of_node_put() on it when done.
   1045 */
   1046struct device_node *of_find_node_by_type(struct device_node *from,
   1047	const char *type)
   1048{
   1049	struct device_node *np;
   1050	unsigned long flags;
   1051
   1052	raw_spin_lock_irqsave(&devtree_lock, flags);
   1053	for_each_of_allnodes_from(from, np)
   1054		if (__of_node_is_type(np, type) && of_node_get(np))
   1055			break;
   1056	of_node_put(from);
   1057	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1058	return np;
   1059}
   1060EXPORT_SYMBOL(of_find_node_by_type);
   1061
   1062/**
   1063 * of_find_compatible_node - Find a node based on type and one of the
   1064 *                                tokens in its "compatible" property
   1065 * @from:	The node to start searching from or NULL, the node
   1066 *		you pass will not be searched, only the next one
   1067 *		will; typically, you pass what the previous call
   1068 *		returned. of_node_put() will be called on it
   1069 * @type:	The type string to match "device_type" or NULL to ignore
   1070 * @compatible:	The string to match to one of the tokens in the device
   1071 *		"compatible" list.
   1072 *
   1073 * Return: A node pointer with refcount incremented, use
   1074 * of_node_put() on it when done.
   1075 */
   1076struct device_node *of_find_compatible_node(struct device_node *from,
   1077	const char *type, const char *compatible)
   1078{
   1079	struct device_node *np;
   1080	unsigned long flags;
   1081
   1082	raw_spin_lock_irqsave(&devtree_lock, flags);
   1083	for_each_of_allnodes_from(from, np)
   1084		if (__of_device_is_compatible(np, compatible, type, NULL) &&
   1085		    of_node_get(np))
   1086			break;
   1087	of_node_put(from);
   1088	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1089	return np;
   1090}
   1091EXPORT_SYMBOL(of_find_compatible_node);
   1092
   1093/**
   1094 * of_find_node_with_property - Find a node which has a property with
   1095 *                              the given name.
   1096 * @from:	The node to start searching from or NULL, the node
   1097 *		you pass will not be searched, only the next one
   1098 *		will; typically, you pass what the previous call
   1099 *		returned. of_node_put() will be called on it
   1100 * @prop_name:	The name of the property to look for.
   1101 *
   1102 * Return: A node pointer with refcount incremented, use
   1103 * of_node_put() on it when done.
   1104 */
   1105struct device_node *of_find_node_with_property(struct device_node *from,
   1106	const char *prop_name)
   1107{
   1108	struct device_node *np;
   1109	struct property *pp;
   1110	unsigned long flags;
   1111
   1112	raw_spin_lock_irqsave(&devtree_lock, flags);
   1113	for_each_of_allnodes_from(from, np) {
   1114		for (pp = np->properties; pp; pp = pp->next) {
   1115			if (of_prop_cmp(pp->name, prop_name) == 0) {
   1116				of_node_get(np);
   1117				goto out;
   1118			}
   1119		}
   1120	}
   1121out:
   1122	of_node_put(from);
   1123	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1124	return np;
   1125}
   1126EXPORT_SYMBOL(of_find_node_with_property);
   1127
   1128static
   1129const struct of_device_id *__of_match_node(const struct of_device_id *matches,
   1130					   const struct device_node *node)
   1131{
   1132	const struct of_device_id *best_match = NULL;
   1133	int score, best_score = 0;
   1134
   1135	if (!matches)
   1136		return NULL;
   1137
   1138	for (; matches->name[0] || matches->type[0] || matches->compatible[0]; matches++) {
   1139		score = __of_device_is_compatible(node, matches->compatible,
   1140						  matches->type, matches->name);
   1141		if (score > best_score) {
   1142			best_match = matches;
   1143			best_score = score;
   1144		}
   1145	}
   1146
   1147	return best_match;
   1148}
   1149
   1150/**
   1151 * of_match_node - Tell if a device_node has a matching of_match structure
   1152 * @matches:	array of of device match structures to search in
   1153 * @node:	the of device structure to match against
   1154 *
   1155 * Low level utility function used by device matching.
   1156 */
   1157const struct of_device_id *of_match_node(const struct of_device_id *matches,
   1158					 const struct device_node *node)
   1159{
   1160	const struct of_device_id *match;
   1161	unsigned long flags;
   1162
   1163	raw_spin_lock_irqsave(&devtree_lock, flags);
   1164	match = __of_match_node(matches, node);
   1165	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1166	return match;
   1167}
   1168EXPORT_SYMBOL(of_match_node);
   1169
   1170/**
   1171 * of_find_matching_node_and_match - Find a node based on an of_device_id
   1172 *				     match table.
   1173 * @from:	The node to start searching from or NULL, the node
   1174 *		you pass will not be searched, only the next one
   1175 *		will; typically, you pass what the previous call
   1176 *		returned. of_node_put() will be called on it
   1177 * @matches:	array of of device match structures to search in
   1178 * @match:	Updated to point at the matches entry which matched
   1179 *
   1180 * Return: A node pointer with refcount incremented, use
   1181 * of_node_put() on it when done.
   1182 */
   1183struct device_node *of_find_matching_node_and_match(struct device_node *from,
   1184					const struct of_device_id *matches,
   1185					const struct of_device_id **match)
   1186{
   1187	struct device_node *np;
   1188	const struct of_device_id *m;
   1189	unsigned long flags;
   1190
   1191	if (match)
   1192		*match = NULL;
   1193
   1194	raw_spin_lock_irqsave(&devtree_lock, flags);
   1195	for_each_of_allnodes_from(from, np) {
   1196		m = __of_match_node(matches, np);
   1197		if (m && of_node_get(np)) {
   1198			if (match)
   1199				*match = m;
   1200			break;
   1201		}
   1202	}
   1203	of_node_put(from);
   1204	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1205	return np;
   1206}
   1207EXPORT_SYMBOL(of_find_matching_node_and_match);
   1208
   1209/**
   1210 * of_modalias_node - Lookup appropriate modalias for a device node
   1211 * @node:	pointer to a device tree node
   1212 * @modalias:	Pointer to buffer that modalias value will be copied into
   1213 * @len:	Length of modalias value
   1214 *
   1215 * Based on the value of the compatible property, this routine will attempt
   1216 * to choose an appropriate modalias value for a particular device tree node.
   1217 * It does this by stripping the manufacturer prefix (as delimited by a ',')
   1218 * from the first entry in the compatible list property.
   1219 *
   1220 * Return: This routine returns 0 on success, <0 on failure.
   1221 */
   1222int of_modalias_node(struct device_node *node, char *modalias, int len)
   1223{
   1224	const char *compatible, *p;
   1225	int cplen;
   1226
   1227	compatible = of_get_property(node, "compatible", &cplen);
   1228	if (!compatible || strlen(compatible) > cplen)
   1229		return -ENODEV;
   1230	p = strchr(compatible, ',');
   1231	strlcpy(modalias, p ? p + 1 : compatible, len);
   1232	return 0;
   1233}
   1234EXPORT_SYMBOL_GPL(of_modalias_node);
   1235
   1236/**
   1237 * of_find_node_by_phandle - Find a node given a phandle
   1238 * @handle:	phandle of the node to find
   1239 *
   1240 * Return: A node pointer with refcount incremented, use
   1241 * of_node_put() on it when done.
   1242 */
   1243struct device_node *of_find_node_by_phandle(phandle handle)
   1244{
   1245	struct device_node *np = NULL;
   1246	unsigned long flags;
   1247	u32 handle_hash;
   1248
   1249	if (!handle)
   1250		return NULL;
   1251
   1252	handle_hash = of_phandle_cache_hash(handle);
   1253
   1254	raw_spin_lock_irqsave(&devtree_lock, flags);
   1255
   1256	if (phandle_cache[handle_hash] &&
   1257	    handle == phandle_cache[handle_hash]->phandle)
   1258		np = phandle_cache[handle_hash];
   1259
   1260	if (!np) {
   1261		for_each_of_allnodes(np)
   1262			if (np->phandle == handle &&
   1263			    !of_node_check_flag(np, OF_DETACHED)) {
   1264				phandle_cache[handle_hash] = np;
   1265				break;
   1266			}
   1267	}
   1268
   1269	of_node_get(np);
   1270	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1271	return np;
   1272}
   1273EXPORT_SYMBOL(of_find_node_by_phandle);
   1274
   1275void of_print_phandle_args(const char *msg, const struct of_phandle_args *args)
   1276{
   1277	int i;
   1278	printk("%s %pOF", msg, args->np);
   1279	for (i = 0; i < args->args_count; i++) {
   1280		const char delim = i ? ',' : ':';
   1281
   1282		pr_cont("%c%08x", delim, args->args[i]);
   1283	}
   1284	pr_cont("\n");
   1285}
   1286
   1287int of_phandle_iterator_init(struct of_phandle_iterator *it,
   1288		const struct device_node *np,
   1289		const char *list_name,
   1290		const char *cells_name,
   1291		int cell_count)
   1292{
   1293	const __be32 *list;
   1294	int size;
   1295
   1296	memset(it, 0, sizeof(*it));
   1297
   1298	/*
   1299	 * one of cell_count or cells_name must be provided to determine the
   1300	 * argument length.
   1301	 */
   1302	if (cell_count < 0 && !cells_name)
   1303		return -EINVAL;
   1304
   1305	list = of_get_property(np, list_name, &size);
   1306	if (!list)
   1307		return -ENOENT;
   1308
   1309	it->cells_name = cells_name;
   1310	it->cell_count = cell_count;
   1311	it->parent = np;
   1312	it->list_end = list + size / sizeof(*list);
   1313	it->phandle_end = list;
   1314	it->cur = list;
   1315
   1316	return 0;
   1317}
   1318EXPORT_SYMBOL_GPL(of_phandle_iterator_init);
   1319
   1320int of_phandle_iterator_next(struct of_phandle_iterator *it)
   1321{
   1322	uint32_t count = 0;
   1323
   1324	if (it->node) {
   1325		of_node_put(it->node);
   1326		it->node = NULL;
   1327	}
   1328
   1329	if (!it->cur || it->phandle_end >= it->list_end)
   1330		return -ENOENT;
   1331
   1332	it->cur = it->phandle_end;
   1333
   1334	/* If phandle is 0, then it is an empty entry with no arguments. */
   1335	it->phandle = be32_to_cpup(it->cur++);
   1336
   1337	if (it->phandle) {
   1338
   1339		/*
   1340		 * Find the provider node and parse the #*-cells property to
   1341		 * determine the argument length.
   1342		 */
   1343		it->node = of_find_node_by_phandle(it->phandle);
   1344
   1345		if (it->cells_name) {
   1346			if (!it->node) {
   1347				pr_err("%pOF: could not find phandle %d\n",
   1348				       it->parent, it->phandle);
   1349				goto err;
   1350			}
   1351
   1352			if (of_property_read_u32(it->node, it->cells_name,
   1353						 &count)) {
   1354				/*
   1355				 * If both cell_count and cells_name is given,
   1356				 * fall back to cell_count in absence
   1357				 * of the cells_name property
   1358				 */
   1359				if (it->cell_count >= 0) {
   1360					count = it->cell_count;
   1361				} else {
   1362					pr_err("%pOF: could not get %s for %pOF\n",
   1363					       it->parent,
   1364					       it->cells_name,
   1365					       it->node);
   1366					goto err;
   1367				}
   1368			}
   1369		} else {
   1370			count = it->cell_count;
   1371		}
   1372
   1373		/*
   1374		 * Make sure that the arguments actually fit in the remaining
   1375		 * property data length
   1376		 */
   1377		if (it->cur + count > it->list_end) {
   1378			if (it->cells_name)
   1379				pr_err("%pOF: %s = %d found %td\n",
   1380					it->parent, it->cells_name,
   1381					count, it->list_end - it->cur);
   1382			else
   1383				pr_err("%pOF: phandle %s needs %d, found %td\n",
   1384					it->parent, of_node_full_name(it->node),
   1385					count, it->list_end - it->cur);
   1386			goto err;
   1387		}
   1388	}
   1389
   1390	it->phandle_end = it->cur + count;
   1391	it->cur_count = count;
   1392
   1393	return 0;
   1394
   1395err:
   1396	if (it->node) {
   1397		of_node_put(it->node);
   1398		it->node = NULL;
   1399	}
   1400
   1401	return -EINVAL;
   1402}
   1403EXPORT_SYMBOL_GPL(of_phandle_iterator_next);
   1404
   1405int of_phandle_iterator_args(struct of_phandle_iterator *it,
   1406			     uint32_t *args,
   1407			     int size)
   1408{
   1409	int i, count;
   1410
   1411	count = it->cur_count;
   1412
   1413	if (WARN_ON(size < count))
   1414		count = size;
   1415
   1416	for (i = 0; i < count; i++)
   1417		args[i] = be32_to_cpup(it->cur++);
   1418
   1419	return count;
   1420}
   1421
   1422int __of_parse_phandle_with_args(const struct device_node *np,
   1423				 const char *list_name,
   1424				 const char *cells_name,
   1425				 int cell_count, int index,
   1426				 struct of_phandle_args *out_args)
   1427{
   1428	struct of_phandle_iterator it;
   1429	int rc, cur_index = 0;
   1430
   1431	if (index < 0)
   1432		return -EINVAL;
   1433
   1434	/* Loop over the phandles until all the requested entry is found */
   1435	of_for_each_phandle(&it, rc, np, list_name, cells_name, cell_count) {
   1436		/*
   1437		 * All of the error cases bail out of the loop, so at
   1438		 * this point, the parsing is successful. If the requested
   1439		 * index matches, then fill the out_args structure and return,
   1440		 * or return -ENOENT for an empty entry.
   1441		 */
   1442		rc = -ENOENT;
   1443		if (cur_index == index) {
   1444			if (!it.phandle)
   1445				goto err;
   1446
   1447			if (out_args) {
   1448				int c;
   1449
   1450				c = of_phandle_iterator_args(&it,
   1451							     out_args->args,
   1452							     MAX_PHANDLE_ARGS);
   1453				out_args->np = it.node;
   1454				out_args->args_count = c;
   1455			} else {
   1456				of_node_put(it.node);
   1457			}
   1458
   1459			/* Found it! return success */
   1460			return 0;
   1461		}
   1462
   1463		cur_index++;
   1464	}
   1465
   1466	/*
   1467	 * Unlock node before returning result; will be one of:
   1468	 * -ENOENT : index is for empty phandle
   1469	 * -EINVAL : parsing error on data
   1470	 */
   1471
   1472 err:
   1473	of_node_put(it.node);
   1474	return rc;
   1475}
   1476EXPORT_SYMBOL(__of_parse_phandle_with_args);
   1477
   1478/**
   1479 * of_parse_phandle_with_args_map() - Find a node pointed by phandle in a list and remap it
   1480 * @np:		pointer to a device tree node containing a list
   1481 * @list_name:	property name that contains a list
   1482 * @stem_name:	stem of property names that specify phandles' arguments count
   1483 * @index:	index of a phandle to parse out
   1484 * @out_args:	optional pointer to output arguments structure (will be filled)
   1485 *
   1486 * This function is useful to parse lists of phandles and their arguments.
   1487 * Returns 0 on success and fills out_args, on error returns appropriate errno
   1488 * value. The difference between this function and of_parse_phandle_with_args()
   1489 * is that this API remaps a phandle if the node the phandle points to has
   1490 * a <@stem_name>-map property.
   1491 *
   1492 * Caller is responsible to call of_node_put() on the returned out_args->np
   1493 * pointer.
   1494 *
   1495 * Example::
   1496 *
   1497 *  phandle1: node1 {
   1498 *  	#list-cells = <2>;
   1499 *  };
   1500 *
   1501 *  phandle2: node2 {
   1502 *  	#list-cells = <1>;
   1503 *  };
   1504 *
   1505 *  phandle3: node3 {
   1506 *  	#list-cells = <1>;
   1507 *  	list-map = <0 &phandle2 3>,
   1508 *  		   <1 &phandle2 2>,
   1509 *  		   <2 &phandle1 5 1>;
   1510 *  	list-map-mask = <0x3>;
   1511 *  };
   1512 *
   1513 *  node4 {
   1514 *  	list = <&phandle1 1 2 &phandle3 0>;
   1515 *  };
   1516 *
   1517 * To get a device_node of the ``node2`` node you may call this:
   1518 * of_parse_phandle_with_args(node4, "list", "list", 1, &args);
   1519 */
   1520int of_parse_phandle_with_args_map(const struct device_node *np,
   1521				   const char *list_name,
   1522				   const char *stem_name,
   1523				   int index, struct of_phandle_args *out_args)
   1524{
   1525	char *cells_name, *map_name = NULL, *mask_name = NULL;
   1526	char *pass_name = NULL;
   1527	struct device_node *cur, *new = NULL;
   1528	const __be32 *map, *mask, *pass;
   1529	static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = ~0 };
   1530	static const __be32 dummy_pass[] = { [0 ... MAX_PHANDLE_ARGS] = 0 };
   1531	__be32 initial_match_array[MAX_PHANDLE_ARGS];
   1532	const __be32 *match_array = initial_match_array;
   1533	int i, ret, map_len, match;
   1534	u32 list_size, new_size;
   1535
   1536	if (index < 0)
   1537		return -EINVAL;
   1538
   1539	cells_name = kasprintf(GFP_KERNEL, "#%s-cells", stem_name);
   1540	if (!cells_name)
   1541		return -ENOMEM;
   1542
   1543	ret = -ENOMEM;
   1544	map_name = kasprintf(GFP_KERNEL, "%s-map", stem_name);
   1545	if (!map_name)
   1546		goto free;
   1547
   1548	mask_name = kasprintf(GFP_KERNEL, "%s-map-mask", stem_name);
   1549	if (!mask_name)
   1550		goto free;
   1551
   1552	pass_name = kasprintf(GFP_KERNEL, "%s-map-pass-thru", stem_name);
   1553	if (!pass_name)
   1554		goto free;
   1555
   1556	ret = __of_parse_phandle_with_args(np, list_name, cells_name, -1, index,
   1557					   out_args);
   1558	if (ret)
   1559		goto free;
   1560
   1561	/* Get the #<list>-cells property */
   1562	cur = out_args->np;
   1563	ret = of_property_read_u32(cur, cells_name, &list_size);
   1564	if (ret < 0)
   1565		goto put;
   1566
   1567	/* Precalculate the match array - this simplifies match loop */
   1568	for (i = 0; i < list_size; i++)
   1569		initial_match_array[i] = cpu_to_be32(out_args->args[i]);
   1570
   1571	ret = -EINVAL;
   1572	while (cur) {
   1573		/* Get the <list>-map property */
   1574		map = of_get_property(cur, map_name, &map_len);
   1575		if (!map) {
   1576			ret = 0;
   1577			goto free;
   1578		}
   1579		map_len /= sizeof(u32);
   1580
   1581		/* Get the <list>-map-mask property (optional) */
   1582		mask = of_get_property(cur, mask_name, NULL);
   1583		if (!mask)
   1584			mask = dummy_mask;
   1585		/* Iterate through <list>-map property */
   1586		match = 0;
   1587		while (map_len > (list_size + 1) && !match) {
   1588			/* Compare specifiers */
   1589			match = 1;
   1590			for (i = 0; i < list_size; i++, map_len--)
   1591				match &= !((match_array[i] ^ *map++) & mask[i]);
   1592
   1593			of_node_put(new);
   1594			new = of_find_node_by_phandle(be32_to_cpup(map));
   1595			map++;
   1596			map_len--;
   1597
   1598			/* Check if not found */
   1599			if (!new)
   1600				goto put;
   1601
   1602			if (!of_device_is_available(new))
   1603				match = 0;
   1604
   1605			ret = of_property_read_u32(new, cells_name, &new_size);
   1606			if (ret)
   1607				goto put;
   1608
   1609			/* Check for malformed properties */
   1610			if (WARN_ON(new_size > MAX_PHANDLE_ARGS))
   1611				goto put;
   1612			if (map_len < new_size)
   1613				goto put;
   1614
   1615			/* Move forward by new node's #<list>-cells amount */
   1616			map += new_size;
   1617			map_len -= new_size;
   1618		}
   1619		if (!match)
   1620			goto put;
   1621
   1622		/* Get the <list>-map-pass-thru property (optional) */
   1623		pass = of_get_property(cur, pass_name, NULL);
   1624		if (!pass)
   1625			pass = dummy_pass;
   1626
   1627		/*
   1628		 * Successfully parsed a <list>-map translation; copy new
   1629		 * specifier into the out_args structure, keeping the
   1630		 * bits specified in <list>-map-pass-thru.
   1631		 */
   1632		match_array = map - new_size;
   1633		for (i = 0; i < new_size; i++) {
   1634			__be32 val = *(map - new_size + i);
   1635
   1636			if (i < list_size) {
   1637				val &= ~pass[i];
   1638				val |= cpu_to_be32(out_args->args[i]) & pass[i];
   1639			}
   1640
   1641			out_args->args[i] = be32_to_cpu(val);
   1642		}
   1643		out_args->args_count = list_size = new_size;
   1644		/* Iterate again with new provider */
   1645		out_args->np = new;
   1646		of_node_put(cur);
   1647		cur = new;
   1648	}
   1649put:
   1650	of_node_put(cur);
   1651	of_node_put(new);
   1652free:
   1653	kfree(mask_name);
   1654	kfree(map_name);
   1655	kfree(cells_name);
   1656	kfree(pass_name);
   1657
   1658	return ret;
   1659}
   1660EXPORT_SYMBOL(of_parse_phandle_with_args_map);
   1661
   1662/**
   1663 * of_count_phandle_with_args() - Find the number of phandles references in a property
   1664 * @np:		pointer to a device tree node containing a list
   1665 * @list_name:	property name that contains a list
   1666 * @cells_name:	property name that specifies phandles' arguments count
   1667 *
   1668 * Return: The number of phandle + argument tuples within a property. It
   1669 * is a typical pattern to encode a list of phandle and variable
   1670 * arguments into a single property. The number of arguments is encoded
   1671 * by a property in the phandle-target node. For example, a gpios
   1672 * property would contain a list of GPIO specifies consisting of a
   1673 * phandle and 1 or more arguments. The number of arguments are
   1674 * determined by the #gpio-cells property in the node pointed to by the
   1675 * phandle.
   1676 */
   1677int of_count_phandle_with_args(const struct device_node *np, const char *list_name,
   1678				const char *cells_name)
   1679{
   1680	struct of_phandle_iterator it;
   1681	int rc, cur_index = 0;
   1682
   1683	/*
   1684	 * If cells_name is NULL we assume a cell count of 0. This makes
   1685	 * counting the phandles trivial as each 32bit word in the list is a
   1686	 * phandle and no arguments are to consider. So we don't iterate through
   1687	 * the list but just use the length to determine the phandle count.
   1688	 */
   1689	if (!cells_name) {
   1690		const __be32 *list;
   1691		int size;
   1692
   1693		list = of_get_property(np, list_name, &size);
   1694		if (!list)
   1695			return -ENOENT;
   1696
   1697		return size / sizeof(*list);
   1698	}
   1699
   1700	rc = of_phandle_iterator_init(&it, np, list_name, cells_name, -1);
   1701	if (rc)
   1702		return rc;
   1703
   1704	while ((rc = of_phandle_iterator_next(&it)) == 0)
   1705		cur_index += 1;
   1706
   1707	if (rc != -ENOENT)
   1708		return rc;
   1709
   1710	return cur_index;
   1711}
   1712EXPORT_SYMBOL(of_count_phandle_with_args);
   1713
   1714/**
   1715 * __of_add_property - Add a property to a node without lock operations
   1716 * @np:		Caller's Device Node
   1717 * @prop:	Property to add
   1718 */
   1719int __of_add_property(struct device_node *np, struct property *prop)
   1720{
   1721	struct property **next;
   1722
   1723	prop->next = NULL;
   1724	next = &np->properties;
   1725	while (*next) {
   1726		if (strcmp(prop->name, (*next)->name) == 0)
   1727			/* duplicate ! don't insert it */
   1728			return -EEXIST;
   1729
   1730		next = &(*next)->next;
   1731	}
   1732	*next = prop;
   1733
   1734	return 0;
   1735}
   1736
   1737/**
   1738 * of_add_property - Add a property to a node
   1739 * @np:		Caller's Device Node
   1740 * @prop:	Property to add
   1741 */
   1742int of_add_property(struct device_node *np, struct property *prop)
   1743{
   1744	unsigned long flags;
   1745	int rc;
   1746
   1747	mutex_lock(&of_mutex);
   1748
   1749	raw_spin_lock_irqsave(&devtree_lock, flags);
   1750	rc = __of_add_property(np, prop);
   1751	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1752
   1753	if (!rc)
   1754		__of_add_property_sysfs(np, prop);
   1755
   1756	mutex_unlock(&of_mutex);
   1757
   1758	if (!rc)
   1759		of_property_notify(OF_RECONFIG_ADD_PROPERTY, np, prop, NULL);
   1760
   1761	return rc;
   1762}
   1763EXPORT_SYMBOL_GPL(of_add_property);
   1764
   1765int __of_remove_property(struct device_node *np, struct property *prop)
   1766{
   1767	struct property **next;
   1768
   1769	for (next = &np->properties; *next; next = &(*next)->next) {
   1770		if (*next == prop)
   1771			break;
   1772	}
   1773	if (*next == NULL)
   1774		return -ENODEV;
   1775
   1776	/* found the node */
   1777	*next = prop->next;
   1778	prop->next = np->deadprops;
   1779	np->deadprops = prop;
   1780
   1781	return 0;
   1782}
   1783
   1784/**
   1785 * of_remove_property - Remove a property from a node.
   1786 * @np:		Caller's Device Node
   1787 * @prop:	Property to remove
   1788 *
   1789 * Note that we don't actually remove it, since we have given out
   1790 * who-knows-how-many pointers to the data using get-property.
   1791 * Instead we just move the property to the "dead properties"
   1792 * list, so it won't be found any more.
   1793 */
   1794int of_remove_property(struct device_node *np, struct property *prop)
   1795{
   1796	unsigned long flags;
   1797	int rc;
   1798
   1799	if (!prop)
   1800		return -ENODEV;
   1801
   1802	mutex_lock(&of_mutex);
   1803
   1804	raw_spin_lock_irqsave(&devtree_lock, flags);
   1805	rc = __of_remove_property(np, prop);
   1806	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1807
   1808	if (!rc)
   1809		__of_remove_property_sysfs(np, prop);
   1810
   1811	mutex_unlock(&of_mutex);
   1812
   1813	if (!rc)
   1814		of_property_notify(OF_RECONFIG_REMOVE_PROPERTY, np, prop, NULL);
   1815
   1816	return rc;
   1817}
   1818EXPORT_SYMBOL_GPL(of_remove_property);
   1819
   1820int __of_update_property(struct device_node *np, struct property *newprop,
   1821		struct property **oldpropp)
   1822{
   1823	struct property **next, *oldprop;
   1824
   1825	for (next = &np->properties; *next; next = &(*next)->next) {
   1826		if (of_prop_cmp((*next)->name, newprop->name) == 0)
   1827			break;
   1828	}
   1829	*oldpropp = oldprop = *next;
   1830
   1831	if (oldprop) {
   1832		/* replace the node */
   1833		newprop->next = oldprop->next;
   1834		*next = newprop;
   1835		oldprop->next = np->deadprops;
   1836		np->deadprops = oldprop;
   1837	} else {
   1838		/* new node */
   1839		newprop->next = NULL;
   1840		*next = newprop;
   1841	}
   1842
   1843	return 0;
   1844}
   1845
   1846/*
   1847 * of_update_property - Update a property in a node, if the property does
   1848 * not exist, add it.
   1849 *
   1850 * Note that we don't actually remove it, since we have given out
   1851 * who-knows-how-many pointers to the data using get-property.
   1852 * Instead we just move the property to the "dead properties" list,
   1853 * and add the new property to the property list
   1854 */
   1855int of_update_property(struct device_node *np, struct property *newprop)
   1856{
   1857	struct property *oldprop;
   1858	unsigned long flags;
   1859	int rc;
   1860
   1861	if (!newprop->name)
   1862		return -EINVAL;
   1863
   1864	mutex_lock(&of_mutex);
   1865
   1866	raw_spin_lock_irqsave(&devtree_lock, flags);
   1867	rc = __of_update_property(np, newprop, &oldprop);
   1868	raw_spin_unlock_irqrestore(&devtree_lock, flags);
   1869
   1870	if (!rc)
   1871		__of_update_property_sysfs(np, newprop, oldprop);
   1872
   1873	mutex_unlock(&of_mutex);
   1874
   1875	if (!rc)
   1876		of_property_notify(OF_RECONFIG_UPDATE_PROPERTY, np, newprop, oldprop);
   1877
   1878	return rc;
   1879}
   1880
   1881static void of_alias_add(struct alias_prop *ap, struct device_node *np,
   1882			 int id, const char *stem, int stem_len)
   1883{
   1884	ap->np = np;
   1885	ap->id = id;
   1886	strncpy(ap->stem, stem, stem_len);
   1887	ap->stem[stem_len] = 0;
   1888	list_add_tail(&ap->link, &aliases_lookup);
   1889	pr_debug("adding DT alias:%s: stem=%s id=%i node=%pOF\n",
   1890		 ap->alias, ap->stem, ap->id, np);
   1891}
   1892
   1893/**
   1894 * of_alias_scan - Scan all properties of the 'aliases' node
   1895 * @dt_alloc:	An allocator that provides a virtual address to memory
   1896 *		for storing the resulting tree
   1897 *
   1898 * The function scans all the properties of the 'aliases' node and populates
   1899 * the global lookup table with the properties.  It returns the
   1900 * number of alias properties found, or an error code in case of failure.
   1901 */
   1902void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
   1903{
   1904	struct property *pp;
   1905
   1906	of_aliases = of_find_node_by_path("/aliases");
   1907	of_chosen = of_find_node_by_path("/chosen");
   1908	if (of_chosen == NULL)
   1909		of_chosen = of_find_node_by_path("/chosen@0");
   1910
   1911	if (of_chosen) {
   1912		/* linux,stdout-path and /aliases/stdout are for legacy compatibility */
   1913		const char *name = NULL;
   1914
   1915		if (of_property_read_string(of_chosen, "stdout-path", &name))
   1916			of_property_read_string(of_chosen, "linux,stdout-path",
   1917						&name);
   1918		if (IS_ENABLED(CONFIG_PPC) && !name)
   1919			of_property_read_string(of_aliases, "stdout", &name);
   1920		if (name)
   1921			of_stdout = of_find_node_opts_by_path(name, &of_stdout_options);
   1922	}
   1923
   1924	if (!of_aliases)
   1925		return;
   1926
   1927	for_each_property_of_node(of_aliases, pp) {
   1928		const char *start = pp->name;
   1929		const char *end = start + strlen(start);
   1930		struct device_node *np;
   1931		struct alias_prop *ap;
   1932		int id, len;
   1933
   1934		/* Skip those we do not want to proceed */
   1935		if (!strcmp(pp->name, "name") ||
   1936		    !strcmp(pp->name, "phandle") ||
   1937		    !strcmp(pp->name, "linux,phandle"))
   1938			continue;
   1939
   1940		np = of_find_node_by_path(pp->value);
   1941		if (!np)
   1942			continue;
   1943
   1944		/* walk the alias backwards to extract the id and work out
   1945		 * the 'stem' string */
   1946		while (isdigit(*(end-1)) && end > start)
   1947			end--;
   1948		len = end - start;
   1949
   1950		if (kstrtoint(end, 10, &id) < 0)
   1951			continue;
   1952
   1953		/* Allocate an alias_prop with enough space for the stem */
   1954		ap = dt_alloc(sizeof(*ap) + len + 1, __alignof__(*ap));
   1955		if (!ap)
   1956			continue;
   1957		memset(ap, 0, sizeof(*ap) + len + 1);
   1958		ap->alias = start;
   1959		of_alias_add(ap, np, id, start, len);
   1960	}
   1961}
   1962
   1963/**
   1964 * of_alias_get_id - Get alias id for the given device_node
   1965 * @np:		Pointer to the given device_node
   1966 * @stem:	Alias stem of the given device_node
   1967 *
   1968 * The function travels the lookup table to get the alias id for the given
   1969 * device_node and alias stem.
   1970 *
   1971 * Return: The alias id if found.
   1972 */
   1973int of_alias_get_id(struct device_node *np, const char *stem)
   1974{
   1975	struct alias_prop *app;
   1976	int id = -ENODEV;
   1977
   1978	mutex_lock(&of_mutex);
   1979	list_for_each_entry(app, &aliases_lookup, link) {
   1980		if (strcmp(app->stem, stem) != 0)
   1981			continue;
   1982
   1983		if (np == app->np) {
   1984			id = app->id;
   1985			break;
   1986		}
   1987	}
   1988	mutex_unlock(&of_mutex);
   1989
   1990	return id;
   1991}
   1992EXPORT_SYMBOL_GPL(of_alias_get_id);
   1993
   1994/**
   1995 * of_alias_get_highest_id - Get highest alias id for the given stem
   1996 * @stem:	Alias stem to be examined
   1997 *
   1998 * The function travels the lookup table to get the highest alias id for the
   1999 * given alias stem.  It returns the alias id if found.
   2000 */
   2001int of_alias_get_highest_id(const char *stem)
   2002{
   2003	struct alias_prop *app;
   2004	int id = -ENODEV;
   2005
   2006	mutex_lock(&of_mutex);
   2007	list_for_each_entry(app, &aliases_lookup, link) {
   2008		if (strcmp(app->stem, stem) != 0)
   2009			continue;
   2010
   2011		if (app->id > id)
   2012			id = app->id;
   2013	}
   2014	mutex_unlock(&of_mutex);
   2015
   2016	return id;
   2017}
   2018EXPORT_SYMBOL_GPL(of_alias_get_highest_id);
   2019
   2020/**
   2021 * of_console_check() - Test and setup console for DT setup
   2022 * @dn: Pointer to device node
   2023 * @name: Name to use for preferred console without index. ex. "ttyS"
   2024 * @index: Index to use for preferred console.
   2025 *
   2026 * Check if the given device node matches the stdout-path property in the
   2027 * /chosen node. If it does then register it as the preferred console.
   2028 *
   2029 * Return: TRUE if console successfully setup. Otherwise return FALSE.
   2030 */
   2031bool of_console_check(struct device_node *dn, char *name, int index)
   2032{
   2033	if (!dn || dn != of_stdout || console_set_on_cmdline)
   2034		return false;
   2035
   2036	/*
   2037	 * XXX: cast `options' to char pointer to suppress complication
   2038	 * warnings: printk, UART and console drivers expect char pointer.
   2039	 */
   2040	return !add_preferred_console(name, index, (char *)of_stdout_options);
   2041}
   2042EXPORT_SYMBOL_GPL(of_console_check);
   2043
   2044/**
   2045 * of_find_next_cache_node - Find a node's subsidiary cache
   2046 * @np:	node of type "cpu" or "cache"
   2047 *
   2048 * Return: A node pointer with refcount incremented, use
   2049 * of_node_put() on it when done.  Caller should hold a reference
   2050 * to np.
   2051 */
   2052struct device_node *of_find_next_cache_node(const struct device_node *np)
   2053{
   2054	struct device_node *child, *cache_node;
   2055
   2056	cache_node = of_parse_phandle(np, "l2-cache", 0);
   2057	if (!cache_node)
   2058		cache_node = of_parse_phandle(np, "next-level-cache", 0);
   2059
   2060	if (cache_node)
   2061		return cache_node;
   2062
   2063	/* OF on pmac has nodes instead of properties named "l2-cache"
   2064	 * beneath CPU nodes.
   2065	 */
   2066	if (IS_ENABLED(CONFIG_PPC_PMAC) && of_node_is_type(np, "cpu"))
   2067		for_each_child_of_node(np, child)
   2068			if (of_node_is_type(child, "cache"))
   2069				return child;
   2070
   2071	return NULL;
   2072}
   2073
   2074/**
   2075 * of_find_last_cache_level - Find the level at which the last cache is
   2076 * 		present for the given logical cpu
   2077 *
   2078 * @cpu: cpu number(logical index) for which the last cache level is needed
   2079 *
   2080 * Return: The the level at which the last cache is present. It is exactly
   2081 * same as  the total number of cache levels for the given logical cpu.
   2082 */
   2083int of_find_last_cache_level(unsigned int cpu)
   2084{
   2085	u32 cache_level = 0;
   2086	struct device_node *prev = NULL, *np = of_cpu_device_node_get(cpu);
   2087
   2088	while (np) {
   2089		prev = np;
   2090		of_node_put(np);
   2091		np = of_find_next_cache_node(np);
   2092	}
   2093
   2094	of_property_read_u32(prev, "cache-level", &cache_level);
   2095
   2096	return cache_level;
   2097}
   2098
   2099/**
   2100 * of_map_id - Translate an ID through a downstream mapping.
   2101 * @np: root complex device node.
   2102 * @id: device ID to map.
   2103 * @map_name: property name of the map to use.
   2104 * @map_mask_name: optional property name of the mask to use.
   2105 * @target: optional pointer to a target device node.
   2106 * @id_out: optional pointer to receive the translated ID.
   2107 *
   2108 * Given a device ID, look up the appropriate implementation-defined
   2109 * platform ID and/or the target device which receives transactions on that
   2110 * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or
   2111 * @id_out may be NULL if only the other is required. If @target points to
   2112 * a non-NULL device node pointer, only entries targeting that node will be
   2113 * matched; if it points to a NULL value, it will receive the device node of
   2114 * the first matching target phandle, with a reference held.
   2115 *
   2116 * Return: 0 on success or a standard error code on failure.
   2117 */
   2118int of_map_id(struct device_node *np, u32 id,
   2119	       const char *map_name, const char *map_mask_name,
   2120	       struct device_node **target, u32 *id_out)
   2121{
   2122	u32 map_mask, masked_id;
   2123	int map_len;
   2124	const __be32 *map = NULL;
   2125
   2126	if (!np || !map_name || (!target && !id_out))
   2127		return -EINVAL;
   2128
   2129	map = of_get_property(np, map_name, &map_len);
   2130	if (!map) {
   2131		if (target)
   2132			return -ENODEV;
   2133		/* Otherwise, no map implies no translation */
   2134		*id_out = id;
   2135		return 0;
   2136	}
   2137
   2138	if (!map_len || map_len % (4 * sizeof(*map))) {
   2139		pr_err("%pOF: Error: Bad %s length: %d\n", np,
   2140			map_name, map_len);
   2141		return -EINVAL;
   2142	}
   2143
   2144	/* The default is to select all bits. */
   2145	map_mask = 0xffffffff;
   2146
   2147	/*
   2148	 * Can be overridden by "{iommu,msi}-map-mask" property.
   2149	 * If of_property_read_u32() fails, the default is used.
   2150	 */
   2151	if (map_mask_name)
   2152		of_property_read_u32(np, map_mask_name, &map_mask);
   2153
   2154	masked_id = map_mask & id;
   2155	for ( ; map_len > 0; map_len -= 4 * sizeof(*map), map += 4) {
   2156		struct device_node *phandle_node;
   2157		u32 id_base = be32_to_cpup(map + 0);
   2158		u32 phandle = be32_to_cpup(map + 1);
   2159		u32 out_base = be32_to_cpup(map + 2);
   2160		u32 id_len = be32_to_cpup(map + 3);
   2161
   2162		if (id_base & ~map_mask) {
   2163			pr_err("%pOF: Invalid %s translation - %s-mask (0x%x) ignores id-base (0x%x)\n",
   2164				np, map_name, map_name,
   2165				map_mask, id_base);
   2166			return -EFAULT;
   2167		}
   2168
   2169		if (masked_id < id_base || masked_id >= id_base + id_len)
   2170			continue;
   2171
   2172		phandle_node = of_find_node_by_phandle(phandle);
   2173		if (!phandle_node)
   2174			return -ENODEV;
   2175
   2176		if (target) {
   2177			if (*target)
   2178				of_node_put(phandle_node);
   2179			else
   2180				*target = phandle_node;
   2181
   2182			if (*target != phandle_node)
   2183				continue;
   2184		}
   2185
   2186		if (id_out)
   2187			*id_out = masked_id - id_base + out_base;
   2188
   2189		pr_debug("%pOF: %s, using mask %08x, id-base: %08x, out-base: %08x, length: %08x, id: %08x -> %08x\n",
   2190			np, map_name, map_mask, id_base, out_base,
   2191			id_len, id, masked_id - id_base + out_base);
   2192		return 0;
   2193	}
   2194
   2195	pr_info("%pOF: no %s translation for id 0x%x on %pOF\n", np, map_name,
   2196		id, target && *target ? *target : NULL);
   2197
   2198	/* Bypasses translation */
   2199	if (id_out)
   2200		*id_out = id;
   2201	return 0;
   2202}
   2203EXPORT_SYMBOL_GPL(of_map_id);