From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58203) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDKrO-0004lb-HY for qemu-devel@nongnu.org; Mon, 19 Jan 2015 17:31:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YDKrI-0003eA-M7 for qemu-devel@nongnu.org; Mon, 19 Jan 2015 17:31:50 -0500 Received: from mail-pd0-f179.google.com ([209.85.192.179]:64989) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDKrI-0003e5-H1 for qemu-devel@nongnu.org; Mon, 19 Jan 2015 17:31:44 -0500 Received: by mail-pd0-f179.google.com with SMTP id v10so20721449pde.10 for ; Mon, 19 Jan 2015 14:31:44 -0800 (PST) From: Greg Bellows Date: Mon, 19 Jan 2015 16:30:21 -0600 Message-Id: <1421706621-23731-6-git-send-email-greg.bellows@linaro.org> In-Reply-To: <1421706621-23731-1-git-send-email-greg.bellows@linaro.org> References: <1421706621-23731-1-git-send-email-greg.bellows@linaro.org> Subject: [Qemu-devel] [PATCH 5/5] target-arm: Adjust kernel load address for Image List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, peter.maydell@linaro.org, christoffer.dall@linaro.org Cc: Greg Bellows Adjust the kernel load offset by 0x8000 if not a zImage. Signed-off-by: Pranavkumar Sawargaonkar Signed-off-by: Greg Bellows --- hw/arm/boot.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 52ebd8b..b581cea 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -537,6 +537,32 @@ static void load_image_to_fw_cfg(FWCfgState *fw_cfg, uint16_t size_key, fw_cfg_add_bytes(fw_cfg, data_key, data, size); } +static int check_load_zimage(const char *filename) +{ + int fd; + uint8_t buf[40]; + uint32_t *p = (uint32_t *) &buf[36]; + + fd = open(filename, O_RDONLY | O_BINARY); + if (fd < 0) { + perror(filename); + return -1; + } + + memset(buf, 0, sizeof(buf)); + if (read(fd, buf, sizeof(buf)) != sizeof(buf)) { + close(fd); + return -1; + } + + /* Check for zImage magic number */ + if (*p == 0x016F2818) { + return 1; + } + + return 0; +} + void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) { CPUState *cs; @@ -613,7 +639,12 @@ void arm_load_kernel(ARMCPU *cpu, struct arm_boot_info *info) primary_loader = bootloader; kernel_load_offset = KERNEL_LOAD_ADDR; elf_machine = EM_ARM; - } + + if (!check_load_zimage(info->kernel_filename)) { + /* Assuming we are loading Image hence aligning it to 0x8000 */ + kernel_load_offset -= 0x8000; + } + } info->dtb_filename = qemu_opt_get(qemu_get_machine_opts(), "dtb"); -- 1.8.3.2