mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	powerpc: Fix bootm to boot up again with a Ramdisk
Commit 2a1a2cb6 didnt remove the dummy mem reservation in fdt_chosen,
and this stopped Linux from booting with a Ramdisk. This patch fixes
this, by deleting the useless dummy mem reservation.
When booting with a Ramdisk, a fix offset FDT_RAMDISK_OVERHEAD is now
added to of_size, so we dont need anymore a dummy mem reservation.
I measured the value of FDT_RAMDISK_OVERHEAD on a MPC8270 based
system (=0x44 bytes) and rounded it up to 0x80).
Signed-off-by: Heiko Schocher <hs@denx.de>
Acked-by: Kumar Gala <galak@kernel.crashing.org>
			
			
This commit is contained in:
		
				
					committed by
					
						 Wolfgang Denk
						Wolfgang Denk
					
				
			
			
				
	
			
			
			
						parent
						
							fc9c1727b5
						
					
				
				
					commit
					56844a22b7
				
			| @@ -450,7 +450,8 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) | ||||
| 			initrd_end = simple_strtoul(argv[3], NULL, 16); | ||||
| 		} | ||||
|  | ||||
| 		fdt_chosen(working_fdt, initrd_start, initrd_end, 1); | ||||
| 		fdt_chosen(working_fdt, 1); | ||||
| 		fdt_initrd(working_fdt, initrd_start, initrd_end, 1); | ||||
| 	} | ||||
| 	/* resize the fdt */ | ||||
| 	else if (strncmp(argv[1], "re", 2) == 0) { | ||||
|   | ||||
| @@ -165,7 +165,7 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force) | ||||
| int fdt_chosen(void *fdt, int force) | ||||
| { | ||||
| 	int   nodeoffset; | ||||
| 	int   err; | ||||
| @@ -215,8 +215,6 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	fdt_initrd(fdt, initrd_start, initrd_end, force); | ||||
|  | ||||
| #ifdef CONFIG_OF_STDOUT_VIA_ALIAS | ||||
| 	path = fdt_getprop(fdt, nodeoffset, "linux,stdout-path", NULL); | ||||
| 	if ((path == NULL) || force) | ||||
|   | ||||
| @@ -57,4 +57,6 @@ struct fdt_property { | ||||
| #define FDT_V16_SIZE	FDT_V3_SIZE | ||||
| #define FDT_V17_SIZE	(FDT_V16_SIZE + sizeof(uint32_t)) | ||||
|  | ||||
| /* adding a ramdisk needs 0x44 bytes in version 2008.10 */ | ||||
| #define FDT_RAMDISK_OVERHEAD	0x80 | ||||
| #endif /* _FDT_H */ | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
|  | ||||
| #include <fdt.h> | ||||
|  | ||||
| int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force); | ||||
| int fdt_chosen(void *fdt, int force); | ||||
| int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force); | ||||
| void do_fixup_by_path(void *fdt, const char *path, const char *prop, | ||||
| 		      const void *val, int len, int create); | ||||
|   | ||||
| @@ -145,8 +145,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) | ||||
| 	 * if the user wants it (the logic is in the subroutines). | ||||
| 	 */ | ||||
| 	if (of_size) { | ||||
| 		/* pass in dummy initrd info, we'll fix up later */ | ||||
| 		if (fdt_chosen(of_flat_tree, images->rd_start, images->rd_end, 0) < 0) { | ||||
| 		if (fdt_chosen(of_flat_tree, 0) < 0) { | ||||
| 			puts ("ERROR: "); | ||||
| 			puts ("/chosen node create failed"); | ||||
| 			puts (" - must RESET the board to recover.\n"); | ||||
| @@ -169,6 +168,8 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) | ||||
| 			goto error; | ||||
| 		of_size = ret; | ||||
|  | ||||
| 		if ((of_flat_tree) && (initrd_start && initrd_end)) | ||||
| 			of_size += FDT_RAMDISK_OVERHEAD; | ||||
| 		/* Create a new LMB reservation */ | ||||
| 		lmb_reserve(lmb, (ulong)of_flat_tree, of_size); | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user