mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	libfdt: Add helper function to create a trivial, empty tree
The libfdt read/write functions are now usable enough that it's become a moderately common pattern to use them to build and manipulate a device tree from scratch. For example, we do so ourself in our rw_tree1 testcase, and qemu is starting to use this model when building device trees for some targets such as e500. However, the read/write functions require some sort of valid tree to begin with, so this necessitates either having a trivial canned dtb to begin with or, more commonly, creating an empty tree using the serial-write functions first. This patch adds a helper function which uses the serial-write functions to create a trivial, empty but complete and valid tree in a supplied buffer, ready for manipulation with the read/write functions. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> From git://git.jdl.com/software/dtc.git patch hash be6026838 with adaptations to include/libfdt.h and lib/libfdt/Makefile for the U-Boot environment. Signed-off-by: Gerald Van Baren <vanbaren@cideas.com>
This commit is contained in:
		| @@ -1014,6 +1014,7 @@ int fdt_finish(void *fdt); | ||||
| /* Read-write functions                                               */ | ||||
| /**********************************************************************/ | ||||
|  | ||||
| int fdt_create_empty_tree(void *buf, int bufsize); | ||||
| int fdt_open_into(const void *fdt, void *buf, int bufsize); | ||||
| int fdt_pack(void *fdt); | ||||
|  | ||||
|   | ||||
| @@ -27,7 +27,7 @@ LIB	= $(obj)libfdt.o | ||||
|  | ||||
| SOBJS	= | ||||
|  | ||||
| COBJS-libfdt += fdt.o fdt_ro.o fdt_rw.o fdt_strerror.o fdt_sw.o fdt_wip.o | ||||
| COBJS-libfdt += fdt.o fdt_ro.o fdt_rw.o fdt_strerror.o fdt_sw.o fdt_wip.o fdt_empty_tree.o | ||||
|  | ||||
| COBJS-$(CONFIG_OF_LIBFDT) += $(COBJS-libfdt) | ||||
| COBJS-$(CONFIG_FIT) += $(COBJS-libfdt) | ||||
|   | ||||
							
								
								
									
										84
									
								
								lib/libfdt/fdt_empty_tree.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lib/libfdt/fdt_empty_tree.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| /* | ||||
|  * libfdt - Flat Device Tree manipulation | ||||
|  * Copyright (C) 2012 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_create_empty_tree(void *buf, int bufsize) | ||||
| { | ||||
| 	int err; | ||||
|  | ||||
| 	err = fdt_create(buf, bufsize); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| 	err = fdt_finish_reservemap(buf); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| 	err = fdt_begin_node(buf, ""); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| 	err =  fdt_end_node(buf); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| 	err = fdt_finish(buf); | ||||
| 	if (err) | ||||
| 		return err; | ||||
|  | ||||
| 	return fdt_open_into(buf, buf, bufsize); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user