From: Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Shawn Guo <shawn.guo-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linaro-dev <linaro-dev-cunTk1MwBs8s++Sfvej+rw@public.gmane.org>
Subject: Re: linaro-uboot: device tree without ramdisk and boot_relocate_fdt cause illegal memory access in kernel
Date: Sat, 28 May 2011 22:54:53 +0800 [thread overview]
Message-ID: <BANLkTi=Nu7d2eoBOpP9JvgkfcizKatGnDQ@mail.gmail.com> (raw)
In-Reply-To: <20110527093141.GE30146-+NayF8gZjK2ctlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
hi Shawn,
thanks a lot.
-barry
2011/5/27 Shawn Guo <shawn.guo@freescale.com>:
> On Fri, May 27, 2011 at 04:52:38PM +0800, Barry Song wrote:
>> Hi all,
>> i am using linaro uboot(u-boot-linaro-stable.git). i have let our
>> prima2 board support device tree with some workaround in uboot. two
>> problems i have meet:
>> 1. device tree without ramdisk
>> now uboot used commands like
>> "bootm kernel_address ramdisk_address dtb_address"
>> to start linux kernel.
>> in many cases, people have no ramdisk at all, but the following codes
>> will still stop people to use device tree to start kernel since it got
>> an illegal ramdisk:
>>
>> common/cmd_bootm.c:
>> if (((images.os.type == IH_TYPE_KERNEL) ||
>> (images.os.type == IH_TYPE_MULTI)) &&
>> (images.os.os == IH_OS_LINUX)) {
>> /* find ramdisk */
>> ret = boot_get_ramdisk (argc, argv, &images, IH_INITRD_ARCH,
>> &images.rd_start, &images.rd_end);
>> if (ret) {
>> puts ("Ramdisk image is corrupt or invalid\n");
>> return 1;
>> }
>>
>> #if defined(CONFIG_OF_LIBFDT)
>> /* find flattened device tree */
>> ret = boot_get_fdt (flag, argc, argv, &images,
>> &images.ft_addr, &images.ft_len);
>> if (ret) {
>> puts ("Could not find a valid device tree\n");
>> return 1;
>> }
>> then i delete the first return 1 to let uboot ignore the ramdisk checking.
>>
>> 2. boot_relocate_fdt in common/image.c
>> this function will relocate fdt to an new address by:
>> lmb_alloc_base(lmb, of_len, 0x1000, getenv_bootm_mapsize() + getenv_bootm_low())
>>
>> but the return address is probably not in the initilized scale which
>> kernel will build mapping in head.S. then in the function
>> setup_machine_fdt() of arch/arm/kernel/devtree.c, when executing:
>> devtree = phys_to_virt(dt_phys);
>>
>> /* check device tree validity */
>> if (be32_to_cpu(devtree->magic) != OF_DT_HEADER)
>> return NULL;
>> kernel will die due to illegal memory access since dt_phys was not
>> mapped to virtual address yet.
>>
>> For problem1 , could uboot have a way to ignore ramdisk by itself?
>> since we need 3 param in bootm to support device tree. For problem2,
>
> bootm kernel_address - dtb_address
>
> Use '-' for ramdisk address, if you do not have a ramdisk image.
>
>> could uboot just relocate fdt to the original address of old ATAG,
>> OFF+ 0x100?
>>
> Do you have the following commit on your kernel tree?
>
> commit 4d901c4271951d110afb13ee9aa73d27a6c8e53d
> Author: Rob Herring <rob.herring@calxeda.com>
> Date: Wed Feb 2 16:33:17 2011 +0100
>
> ARM: 6648/1: map ATAGs when not in first 1MB of RAM
>
> If ATAGs or DTB pointer is not within first 1MB of RAM, then the boot params
> will not be mapped early enough, so map the 1MB region that r2 points to. Only
> map the first 1MB when r2 is 0.
>
> Some assembly improvements from Nicolas Pitre.
>
> Acked-by: Tony Lindgren <tony@atomide.com>
> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
>
> You can get it from linux-linaro-2.6.38 tree.
>
> --
> Regards,
> Shawn
>
_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss
prev parent reply other threads:[~2011-05-28 14:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-27 8:52 linaro-uboot: device tree without ramdisk and boot_relocate_fdt cause illegal memory access in kernel Barry Song
[not found] ` <BANLkTikK9EVVZrRa1--8n1j_OXv2qK8XmA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-05-27 9:31 ` Shawn Guo
[not found] ` <20110527093141.GE30146-+NayF8gZjK2ctlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2011-05-28 14:54 ` Barry Song [this message]
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='BANLkTi=Nu7d2eoBOpP9JvgkfcizKatGnDQ@mail.gmail.com' \
--to=21cnbao-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=linaro-dev-cunTk1MwBs8s++Sfvej+rw@public.gmane.org \
--cc=shawn.guo-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).