Skip to content
Snippets Groups Projects
fdt.c 27.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	while(level >= 0) {
    
    		tag = fdt_next_tag(working_fdt, nodeoffset, &nextoffset);
    
    		switch(tag) {
    		case FDT_BEGIN_NODE:
    
    			pathp = fdt_get_name(working_fdt, nodeoffset, NULL);
    
    			if (level <= depth) {
    				if (pathp == NULL)
    					pathp = "/* NULL pointer error */";
    				if (*pathp == '\0')
    					pathp = "/";	/* root is nameless */
    
    				printf("%s%s {\n",
    					&tabs[MAX_LEVEL - level], pathp);
    
    			level++;
    			if (level >= MAX_LEVEL) {
    
    				printf("Nested too deep, aborting.\n");
    
    				return 1;
    			}
    			break;
    		case FDT_END_NODE:
    			level--;
    
    			if (level <= depth)
    
    				printf("%s};\n", &tabs[MAX_LEVEL - level]);
    			if (level == 0) {
    				level = -1;		/* exit the loop */
    			}
    			break;
    		case FDT_PROP:
    
    			fdt_prop = fdt_offset_ptr(working_fdt, nodeoffset,
    
    					sizeof(*fdt_prop));
    
    			pathp    = fdt_string(working_fdt,
    
    					fdt32_to_cpu(fdt_prop->nameoff));
    			len      = fdt32_to_cpu(fdt_prop->len);
    			nodep    = fdt_prop->data;
    
    			if (len < 0) {
    				printf ("libfdt fdt_getprop(): %s\n",
    					fdt_strerror(len));
    				return 1;
    			} else if (len == 0) {
    				/* the property has no value */
    
    				if (level <= depth)
    
    					printf("%s%s;\n",
    						&tabs[MAX_LEVEL - level],
    						pathp);
    			} else {
    
    				if (level <= depth) {
    
    						&tabs[MAX_LEVEL - level],
    						pathp);
    					print_data (nodep, len);
    					printf(";\n");
    				}
    			}
    			break;
    		case FDT_NOP:
    
    Andrew Klossner's avatar
    Andrew Klossner committed
    			printf("%s/* NOP */\n", &tabs[MAX_LEVEL - level]);
    
    			break;
    		case FDT_END:
    			return 1;
    		default:
    
    			if (level <= depth)
    
    				printf("Unknown tag 0x%08X\n", tag);
    			return 1;
    		}
    		nodeoffset = nextoffset;
    	}
    	return 0;
    }
    
    
    /********************************************************************/
    
    #ifdef CONFIG_SYS_LONGHELP
    static char fdt_help_text[] =
    
    	"addr [-c]  <addr> [<length>]   - Set the [control] fdt location to <addr>\n"
    
    #ifdef CONFIG_OF_LIBFDT_OVERLAY
    	"fdt apply <addr>                    - Apply overlay to the DT\n"
    #endif
    
    #ifdef CONFIG_OF_BOARD_SETUP
    	"fdt boardsetup                      - Do board-specific set up\n"
    
    #endif
    #ifdef CONFIG_OF_SYSTEM_SETUP
    	"fdt systemsetup                     - Do system-specific set up\n"
    
    	"fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active\n"
    
    	"fdt resize [<extrasize>]            - Resize fdt to size + padding to 4k addr + some optional <extrasize> if needed\n"
    
    	"fdt print  <path> [<prop>]          - Recursive print starting at <path>\n"
    	"fdt list   <path> [<prop>]          - Print one level starting at <path>\n"
    
    	"fdt get value <var> <path> <prop>   - Get <property> and store in <var>\n"
    	"fdt get name <var> <path> <index>   - Get name of node <index> and store in <var>\n"
    	"fdt get addr <var> <path> <prop>    - Get start address of <property> and store in <var>\n"
    	"fdt get size <var> <path> [<prop>]  - Get size of [<property>] or num nodes and store in <var>\n"
    
    	"fdt set    <path> <prop> [<val>]    - Set <property> [to <val>]\n"
    	"fdt mknode <path> <node>            - Create a new node after <path>\n"
    	"fdt rm     <path> [<prop>]          - Delete the node or <property>\n"
    
    Kumar Gala's avatar
    Kumar Gala committed
    	"fdt header                          - Display header info\n"
    	"fdt bootcpu <id>                    - Set boot cpuid\n"
    	"fdt memory <addr> <size>            - Add/Update memory node\n"
    	"fdt rsvmem print                    - Show current mem reserves\n"
    	"fdt rsvmem add <addr> <size>        - Add a mem reserve\n"
    	"fdt rsvmem delete <index>           - Delete a mem reserves\n"
    
    	"fdt chosen [<start> <end>]          - Add/update the /chosen branch in the tree\n"
    	"                                        <start>/<end> - initrd start/end addr\n"
    
    #if defined(CONFIG_FIT_SIGNATURE)
    	"fdt checksign [<addr>]              - check FIT signature\n"
    	"                                        <start> - addr of key blob\n"
    	"                                                  default gd->fdt_blob\n"
    #endif
    
    	"NOTE: Dereference aliases by omitting the leading '/', "
    
    		"e.g. fdt print ethernet0.";
    #endif
    
    U_BOOT_CMD(
    	fdt,	255,	0,	do_fdt,
    	"flattened device tree utility commands", fdt_help_text