All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: peter.maydell@linaro.org, qemu-devel@nongnu.org
Cc: fu.wei@linaro.org, christoffer.dall@linaro.org,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [Qemu-devel] [PATCH 6/6] hw/arm/boot: enable DTB support when booting ELF images
Date: Fri,  5 Sep 2014 17:15:26 +0200	[thread overview]
Message-ID: <1409930126-28449-7-git-send-email-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <1409930126-28449-1-git-send-email-ard.biesheuvel@linaro.org>

Add support for loading DTB images when booting ELF images via -kernel.
The DTB image is located at the next 4 KB boundary above the highest address
covered by the loaded ELF image.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
 hw/arm/boot.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index 8d8653978dfe..60c4f6af7884 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -458,7 +458,7 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
     int kernel_size;
     int initrd_size;
     int is_linux = 0;
-    uint64_t elf_entry;
+    uint64_t elf_entry, elf_low_addr;
     int elf_machine;
     hwaddr entry, kernel_load_offset;
     int big_endian;
@@ -529,7 +529,21 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info)
 
     /* Assume that raw images are linux kernels, and ELF images are not.  */
     kernel_size = load_elf(info->kernel_filename, NULL, NULL, &elf_entry,
-                           NULL, NULL, big_endian, elf_machine, 1);
+                           &elf_low_addr, NULL, big_endian, elf_machine, 1);
+    if (kernel_size > 0 && have_dtb(info)) {
+        /* If we have a DTB in combination with an ELF executable image,
+         * put the DTB at the base of RAM like we do for bootloaders.
+         */
+        uint32_t dtb_size;
+
+        if (load_dtb(info->loader_start, info, &dtb_size)) {
+            exit(1);
+        }
+        if (info->loader_start + dtb_size > elf_low_addr) {
+            fprintf(stderr, "Image %s overlaps DTB\n", info->kernel_filename);
+            exit(1);
+        }
+    }
     entry = elf_entry;
     if (kernel_size < 0) {
         kernel_size = load_uimage(info->kernel_filename, &entry, NULL,
-- 
1.8.3.2

  parent reply	other threads:[~2014-09-05 15:15 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-05 15:15 [Qemu-devel] [PATCH 0/6] ARM: -bios/-kernel + DTB boot roundup Ard Biesheuvel
2014-09-05 15:15 ` [Qemu-devel] [PATCH 1/6] hw/arm/virt: Provide flash devices for boot ROMs Ard Biesheuvel
2014-09-09 18:20   ` Peter Maydell
2014-09-10  9:09     ` Ard Biesheuvel
2014-09-10  9:12       ` Peter Maydell
2014-09-10 10:27         ` Ard Biesheuvel
2014-09-05 15:15 ` [Qemu-devel] [PATCH 2/6] hw/arm/boot: return size of loaded DTB from load_dtb() Ard Biesheuvel
2014-09-09 17:57   ` Peter Maydell
2014-09-05 15:15 ` [Qemu-devel] [PATCH 3/6] hw/arm/boot: load device tree to base of DRAM if no -kernel option was passed Ard Biesheuvel
2014-09-09 18:02   ` Peter Maydell
2014-09-05 15:15 ` [Qemu-devel] [PATCH 4/6] hw/arm/boot: register cpu reset handlers if using -bios Ard Biesheuvel
2014-09-09 18:14   ` Peter Maydell
2014-09-17 15:50     ` Ard Biesheuvel
2014-09-17 15:55       ` Andreas Färber
2014-09-17 16:17         ` Peter Maydell
2014-09-17 16:40           ` Andreas Färber
2014-09-17 16:47             ` Peter Maydell
2014-09-17 17:14               ` Andreas Färber
2014-09-17 22:05                 ` Ard Biesheuvel
2014-09-05 15:15 ` [Qemu-devel] [PATCH 5/6] hw/arm/boot: load DTB as a ROM image Ard Biesheuvel
2014-09-09 18:03   ` Peter Maydell
2014-09-05 15:15 ` Ard Biesheuvel [this message]
2014-09-05 16:42   ` [Qemu-devel] [PATCH 6/6] hw/arm/boot: enable DTB support when booting ELF images Ard Biesheuvel
2014-09-09 18:08   ` Peter Maydell
2014-09-09 18:15     ` Ard Biesheuvel
2014-09-09 18:17       ` Peter Maydell
2014-09-09 18:20         ` Ard Biesheuvel

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=1409930126-28449-7-git-send-email-ard.biesheuvel@linaro.org \
    --to=ard.biesheuvel@linaro.org \
    --cc=christoffer.dall@linaro.org \
    --cc=fu.wei@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.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 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.