mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-20 20:04:46 +00: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:
parent
fc9c1727b5
commit
56844a22b7
5 changed files with 9 additions and 7 deletions
|
@ -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);
|
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 */
|
/* resize the fdt */
|
||||||
else if (strncmp(argv[1], "re", 2) == 0) {
|
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;
|
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 nodeoffset;
|
||||||
int err;
|
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
|
#ifdef CONFIG_OF_STDOUT_VIA_ALIAS
|
||||||
path = fdt_getprop(fdt, nodeoffset, "linux,stdout-path", NULL);
|
path = fdt_getprop(fdt, nodeoffset, "linux,stdout-path", NULL);
|
||||||
if ((path == NULL) || force)
|
if ((path == NULL) || force)
|
||||||
|
|
|
@ -57,4 +57,6 @@ struct fdt_property {
|
||||||
#define FDT_V16_SIZE FDT_V3_SIZE
|
#define FDT_V16_SIZE FDT_V3_SIZE
|
||||||
#define FDT_V17_SIZE (FDT_V16_SIZE + sizeof(uint32_t))
|
#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 */
|
#endif /* _FDT_H */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <fdt.h>
|
#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);
|
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,
|
void do_fixup_by_path(void *fdt, const char *path, const char *prop,
|
||||||
const void *val, int len, int create);
|
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 the user wants it (the logic is in the subroutines).
|
||||||
*/
|
*/
|
||||||
if (of_size) {
|
if (of_size) {
|
||||||
/* pass in dummy initrd info, we'll fix up later */
|
if (fdt_chosen(of_flat_tree, 0) < 0) {
|
||||||
if (fdt_chosen(of_flat_tree, images->rd_start, images->rd_end, 0) < 0) {
|
|
||||||
puts ("ERROR: ");
|
puts ("ERROR: ");
|
||||||
puts ("/chosen node create failed");
|
puts ("/chosen node create failed");
|
||||||
puts (" - must RESET the board to recover.\n");
|
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;
|
goto error;
|
||||||
of_size = ret;
|
of_size = ret;
|
||||||
|
|
||||||
|
if ((of_flat_tree) && (initrd_start && initrd_end))
|
||||||
|
of_size += FDT_RAMDISK_OVERHEAD;
|
||||||
/* Create a new LMB reservation */
|
/* Create a new LMB reservation */
|
||||||
lmb_reserve(lmb, (ulong)of_flat_tree, of_size);
|
lmb_reserve(lmb, (ulong)of_flat_tree, of_size);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue