From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH][for 1.3.5] Fix handling of mem reserves for ramdisk
Date: Sat, 06 Sep 2008 07:57:18 +0200 [thread overview]
Message-ID: <48C21BBE.3080601@denx.de> (raw)
Hello Kumar,
> When we call fdt_chosen in bootm we get a dummy mem reserve added for
> the ramdisk location before its relocated. We need to delete that
> mem reserve before we call fdt_initrd() for the final fixup.
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
> lib_ppc/bootm.c | 16 +++++++++++++++-
> 1 files changed, 15 insertions(+), 1 deletions(-)
>
> diff --git a/lib_ppc/bootm.c b/lib_ppc/bootm.c
> index 348421f..c801021 100644
> --- a/lib_ppc/bootm.c
> +++ b/lib_ppc/bootm.c
> @@ -180,8 +180,22 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
>
> #if defined(CONFIG_OF_LIBFDT)
> /* fixup the initrd now that we know where it should be */
> - if ((of_flat_tree) && (initrd_start && initrd_end))
> + if ((of_flat_tree) && (initrd_start && initrd_end)) {
> + uint64_t addr, size;
> + int total = fdt_num_mem_rsv(of_flat_tree);
> + int j;
> +
> + /* The call to fdt_chosen created a dummy mem rsv, delete it */
> + for (j = 0; j < total; j++) {
> + fdt_get_mem_rsv(of_flat_tree, j, &addr, &size);
> + if (addr == images->rd_start) {
> + fdt_del_mem_rsv(of_flat_tree, j);
> + break;
> + }
> + }
> +
> fdt_initrd(of_flat_tree, initrd_start, initrd_end, 1);
> + }
> #endif
> debug ("## Transferring control to Linux (at address %08lx) ...\n",
> (ulong)kernel);
> -- 1.5.5.1
Hmm... OK, now the code will do the same as before, but is this optimal?
Why must we do a
a) dummy mem reservation
b) search for it
c) delete it
d) make the right mem reservation?
Think the steps a) - c) are useless ...
Please have a look at the following patch, it deletes the steps a) - c)
and fixes the fdt chosen command ...
[PATCH] powerpc: Fix bootm to boot up again with a Ramdisk.
Patch
http://git.denx.de/?p=u-boot.git;a=commitdiff;h=2a1a2cb6e2b87ee550e6f27b647d23331dfd5e1b#patch3
didnt remove the dummy mem reservation which was set up
in fdt_chosen, and this stopped Linux from booting with a
Ramdisk. This patch fixes this, by deleting the useless
dummy mem reservation.
Signed-off-by: Heiko Schocher <hs@denx.de>
---
common/cmd_fdt.c | 3 ++-
common/fdt_support.c | 4 +---
include/fdt_support.h | 2 +-
lib_ppc/bootm.c | 5 +++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c
index 0593bad..288a5c4 100644
--- a/common/cmd_fdt.c
+++ b/common/cmd_fdt.c
@@ -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) {
diff --git a/common/fdt_support.c b/common/fdt_support.c
index a7773ab..8ceeb0f 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -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)
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 424c3c6..ceaadc2 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.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);
diff --git a/lib_ppc/bootm.c b/lib_ppc/bootm.c
index 348421f..d581493 100644
--- a/lib_ppc/bootm.c
+++ b/lib_ppc/bootm.c
@@ -145,8 +145,9 @@ 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) {
+ /* we dont have to pass anymore the dummy initrd info!
+ we'll add this later, immediately with the right values. */
+ if (fdt_chosen(of_flat_tree, 0) < 0) {
puts ("ERROR: ");
puts ("/chosen node create failed");
puts (" - must RESET the board to recover.\n");
--
1.5.4.1
bye
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
next reply other threads:[~2008-09-06 5:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-06 5:57 Heiko Schocher [this message]
2008-09-08 14:02 ` [U-Boot] [PATCH][for 1.3.5] Fix handling of mem reserves for ramdisk Kumar Gala
2008-09-08 14:10 ` Wolfgang Denk
2008-09-08 15:57 ` Kumar Gala
2008-09-10 8:19 ` Heiko Schocher
2008-09-10 9:03 ` Wolfgang Denk
2008-09-09 6:18 ` Heiko Schocher
-- strict thread matches above, loose matches on Subject: below --
2008-09-05 16:13 Kumar Gala
2008-09-06 23:22 ` Wolfgang Denk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48C21BBE.3080601@denx.de \
--to=hs@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.