forked from mirrors/linux
		
	Sync to upstream dtc commit 0931cea3ba20 ("dtc: fdtdump: check fdt if
not in scanning mode"). In particular, this pulls in dtc overlay
support.
This adds the following commits from upstream:
f88865469b65 dtc: Fix memory leak in character literal parsing
00fbb8696b66 Rename boot_info
1ef86ad2c24f dtc: Clean up /dts-v1/ and /plugin/ handling in grammar
e3c769aa9c16 dtc: Don't always generate __symbols__ for plugins
c96cb3c0169e tests: Don't use -@ on plugin de/recompile tests
66381538ce24 tests: Remove "suppression of fixups" tests
ba765b273f0f tests: Clarify dtc overlay tests
6ea8cd944fcd tests: More thorough tests of libfdt overlay application without dtc
7d8ef6e1db97 tests: Correct fdt handling of overlays without fixups and base trees without symbols
b4dc0ed8b127 tests: Fix double expansion bugs in test code
3ea879dc0c8f tests: Split overlay tests into those with do/don't exercise dtc plugin generation
47b4d66a2f11 tests: Test auto-alias generation on base tree, not overlay
72e1ad811523 tests: Make overlay/plugin tests unconditional
e7b3c3b5951b tests: Add overlay tests
9637e3f772a9 tests: Add check_path test
20f29d8d41f6 dtc: Plugin and fixup support
a2c92cac53f8 dtc: Document the dynamic plugin internals
8f70ac39801d checks: Pass boot_info instead of root node
ea10f953878f libfdt: add missing errors to fdt_strerror()
daa75e8fa594 libfdt: fix fdt_stringlist_search()
e28eff5b787a libfdt: fix fdt_stringlist_count()
ae97c7722840 tests: overlay: Rename the device tree blobs to be more explicit
96162d2bd9cb tests: overlay: Add test suffix to the compiled blobs
5ce8634733b7 libfdt: Add fdt_overlay_apply to the exported symbols
804a9db90ad2 fdt: strerr: Remove spurious BADOVERLAY
e8c3a1a493fa tests: overlay: Move back the bad fixup tests
7a72d89d3f81 libfdt: overlay: Fix symbols and fixups nodes condition
cabbaa972cdd libfdt: overlay: Report a bad overlay for mismatching local fixups
deb0a5c1aeaa libfdt: Add BADPHANDLE error string
7b7a6be9ba15 libfdt: Don't use 'index' as a local variable name
aea8860d831e tests: Add tests cases for the overlay code
0cdd06c5135b libfdt: Add overlay application function
39240cc865cf libfdt: Extend the reach of FDT_ERR_BADPHANDLE
4aa3a6f5e6d9 libfdt: Add new errors for the overlay code
6d1832c9e64b dtc: Remove "home page" link
45fd440a9561 Fix some typing errors in libfdt.h and livetree.c
a59be4939c13 Merge tag 'v1.4.2'
a34bb721caca dtc: Fix assorted problems in the testcases for the -a option
874f40588d3e Implement the -a option to pad dtb aligned
ec02b34c05be dtc: Makefile improvements for release uploading
1ed45d40a137 dtc: Bump version to 1.4.2
36fd7331fb11 libfdt: simplify fdt_del_mem_rsv()
d877364e4a0f libfdt: Add fdt_setprop_inplace_namelen_partial
3e9037aaad44 libfdt: Add fdt_getprop_namelen_w
84e0e1346c68 libfdt: Add max phandle retrieval function
d29126c90acb libfdt: Add iterator over properties
902d0f0953d0 libfdt: Add a subnodes iterator macro
c539075ba8ba fdtput.c: Fix memory leak.
f79ddb83e185 fdtget.c: Fix memory leak
1074ee54b63f convert-dtsv0-lexer.l: fix memory leak
e24d39a024e6 fdtdump.c: make sure size_t argument to memchr is always unsigned.
44a59713cf05 Remove unused srcpos_dump() function
cb9241ae3453 DTC: Fix memory leak on flatname.
1ee0ae24ea09 Simplify check field and macro names
9d97527a8621 Remove property check functions
2e709d158e11 Remove tree check functions
c4cb12e193e3 Alter grammar to allow multiple /dts-v1/ tags
d71d25d76012 Use xasprintf() in srcpos
9dc404958e9c util: Add xasprintf portable asprintf variant
beef80b8b55f Correct a missing space in a fdt_header cast
68d43cec1253 Correct line lengths in libfdt.h
b0dbceafd49a Correct space-after-tab in libfdt.h
Signed-off-by: Rob Herring <robh@kernel.org>
		
	
			
		
			
				
	
	
		
			139 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * libfdt - Flat Device Tree manipulation
 | 
						|
 * Copyright (C) 2006 David Gibson, IBM Corporation.
 | 
						|
 *
 | 
						|
 * libfdt is dual licensed: you can use it either under the terms of
 | 
						|
 * the GPL, or the BSD license, at your option.
 | 
						|
 *
 | 
						|
 *  a) This library is free software; you can redistribute it and/or
 | 
						|
 *     modify it under the terms of the GNU General Public License as
 | 
						|
 *     published by the Free Software Foundation; either version 2 of the
 | 
						|
 *     License, or (at your option) any later version.
 | 
						|
 *
 | 
						|
 *     This library is distributed in the hope that it will be useful,
 | 
						|
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 *     GNU General Public License for more details.
 | 
						|
 *
 | 
						|
 *     You should have received a copy of the GNU General Public
 | 
						|
 *     License along with this library; if not, write to the Free
 | 
						|
 *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
 | 
						|
 *     MA 02110-1301 USA
 | 
						|
 *
 | 
						|
 * Alternatively,
 | 
						|
 *
 | 
						|
 *  b) Redistribution and use in source and binary forms, with or
 | 
						|
 *     without modification, are permitted provided that the following
 | 
						|
 *     conditions are met:
 | 
						|
 *
 | 
						|
 *     1. Redistributions of source code must retain the above
 | 
						|
 *        copyright notice, this list of conditions and the following
 | 
						|
 *        disclaimer.
 | 
						|
 *     2. Redistributions in binary form must reproduce the above
 | 
						|
 *        copyright notice, this list of conditions and the following
 | 
						|
 *        disclaimer in the documentation and/or other materials
 | 
						|
 *        provided with the distribution.
 | 
						|
 *
 | 
						|
 *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 | 
						|
 *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 | 
						|
 *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
						|
 *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
						|
 *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
						|
 *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
						|
 *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
						|
 *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
						|
 *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
 *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
						|
 *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | 
						|
 *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 | 
						|
 *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
 */
 | 
						|
#include "libfdt_env.h"
 | 
						|
 | 
						|
#include <fdt.h>
 | 
						|
#include <libfdt.h>
 | 
						|
 | 
						|
#include "libfdt_internal.h"
 | 
						|
 | 
						|
int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
 | 
						|
					const char *name, int namelen,
 | 
						|
					uint32_t idx, const void *val,
 | 
						|
					int len)
 | 
						|
{
 | 
						|
	void *propval;
 | 
						|
	int proplen;
 | 
						|
 | 
						|
	propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen,
 | 
						|
					&proplen);
 | 
						|
	if (!propval)
 | 
						|
		return proplen;
 | 
						|
 | 
						|
	if (proplen < (len + idx))
 | 
						|
		return -FDT_ERR_NOSPACE;
 | 
						|
 | 
						|
	memcpy((char *)propval + idx, val, len);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
 | 
						|
			const void *val, int len)
 | 
						|
{
 | 
						|
	const void *propval;
 | 
						|
	int proplen;
 | 
						|
 | 
						|
	propval = fdt_getprop(fdt, nodeoffset, name, &proplen);
 | 
						|
	if (! propval)
 | 
						|
		return proplen;
 | 
						|
 | 
						|
	if (proplen != len)
 | 
						|
		return -FDT_ERR_NOSPACE;
 | 
						|
 | 
						|
	return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name,
 | 
						|
						   strlen(name), 0,
 | 
						|
						   val, len);
 | 
						|
}
 | 
						|
 | 
						|
static void _fdt_nop_region(void *start, int len)
 | 
						|
{
 | 
						|
	fdt32_t *p;
 | 
						|
 | 
						|
	for (p = start; (char *)p < ((char *)start + len); p++)
 | 
						|
		*p = cpu_to_fdt32(FDT_NOP);
 | 
						|
}
 | 
						|
 | 
						|
int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
 | 
						|
{
 | 
						|
	struct fdt_property *prop;
 | 
						|
	int len;
 | 
						|
 | 
						|
	prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
 | 
						|
	if (! prop)
 | 
						|
		return len;
 | 
						|
 | 
						|
	_fdt_nop_region(prop, len + sizeof(*prop));
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
int _fdt_node_end_offset(void *fdt, int offset)
 | 
						|
{
 | 
						|
	int depth = 0;
 | 
						|
 | 
						|
	while ((offset >= 0) && (depth >= 0))
 | 
						|
		offset = fdt_next_node(fdt, offset, &depth);
 | 
						|
 | 
						|
	return offset;
 | 
						|
}
 | 
						|
 | 
						|
int fdt_nop_node(void *fdt, int nodeoffset)
 | 
						|
{
 | 
						|
	int endoffset;
 | 
						|
 | 
						|
	endoffset = _fdt_node_end_offset(fdt, nodeoffset);
 | 
						|
	if (endoffset < 0)
 | 
						|
		return endoffset;
 | 
						|
 | 
						|
	_fdt_nop_region(fdt_offset_ptr_w(fdt, nodeoffset, 0),
 | 
						|
			endoffset - nodeoffset);
 | 
						|
	return 0;
 | 
						|
}
 |