All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] Add "-uboot" option
@ 2012-02-22  6:58 Evgeny Voevodin
  2012-02-22  6:58 ` [Qemu-devel] [PATCH 1/2] ARM: " Evgeny Voevodin
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Evgeny Voevodin @ 2012-02-22  6:58 UTC (permalink / raw)
  To: qemu-devel
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, d.solodkiy, Evgeny Voevodin

These patches add "-uboot" option to ARM boards.
To let user load u-boot, board should initialize
.uboot_start in arm_boot_info struct. 
Added utilisation of "-uboot" for exynos4 and integratorcp.

Evgeny Voevodin (2):
  ARM: Add "-uboot" option.
  ARM: exynos, integratorcp: Specify U-Boot start address.

 hw/arm-misc.h       |    1 +
 hw/arm_boot.c       |   51 ++++++++++++++++++++++++++++++++++++++-------------
 hw/exynos4210.h     |    1 +
 hw/exynos4_boards.c |    1 +
 hw/integratorcp.c   |    1 +
 qemu-options.hx     |    8 ++++++++
 sysemu.h            |    1 +
 vl.c                |    4 ++++
 8 files changed, 55 insertions(+), 13 deletions(-)

-- 
1.7.5.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/2] ARM: Add "-uboot" option.
  2012-02-22  6:58 [Qemu-devel] [PATCH 0/2] Add "-uboot" option Evgeny Voevodin
@ 2012-02-22  6:58 ` Evgeny Voevodin
  2012-02-22  6:58 ` [Qemu-devel] [PATCH 2/2] ARM: exynos, integratorcp: Specify U-Boot start address Evgeny Voevodin
  2012-02-22  8:12 ` [Qemu-devel] [PATCH 0/2] Add "-uboot" option Peter Maydell
  2 siblings, 0 replies; 6+ messages in thread
From: Evgeny Voevodin @ 2012-02-22  6:58 UTC (permalink / raw)
  To: qemu-devel
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, d.solodkiy, Evgeny Voevodin

With this option board can load U-Boot into address specified
through arm_boot_info.uboot_start.

Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com>
---
 hw/arm-misc.h   |    1 +
 hw/arm_boot.c   |   51 ++++++++++++++++++++++++++++++++++++++-------------
 qemu-options.hx |    8 ++++++++
 sysemu.h        |    1 +
 vl.c            |    4 ++++
 5 files changed, 52 insertions(+), 13 deletions(-)

diff --git a/hw/arm-misc.h b/hw/arm-misc.h
index 306013a..54a9450 100644
--- a/hw/arm-misc.h
+++ b/hw/arm-misc.h
@@ -29,6 +29,7 @@ struct arm_boot_info {
     const char *kernel_filename;
     const char *kernel_cmdline;
     const char *initrd_filename;
+    target_phys_addr_t uboot_start;
     target_phys_addr_t loader_start;
     /* multicore boards that use the default secondary core boot functions
      * need to put the address of the secondary boot code, the boot reg,
diff --git a/hw/arm_boot.c b/hw/arm_boot.c
index 2ef25ca..0700884 100644
--- a/hw/arm_boot.c
+++ b/hw/arm_boot.c
@@ -15,6 +15,7 @@
 
 #define KERNEL_ARGS_ADDR 0x100
 #define KERNEL_LOAD_ADDR 0x00010000
+#define UIMAGE_LOAD_ADDR 0x00007fc0
 #define INITRD_LOAD_ADDR 0x00d00000
 
 /* The worlds second smallest bootloader.  Set r0-r2, then jump to kernel.  */
@@ -236,7 +237,7 @@ static void do_cpu_reset(void *opaque)
 
 void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
 {
-    int kernel_size;
+    int kernel_size, uboot_size;
     int initrd_size;
     int n;
     int is_linux = 0;
@@ -266,19 +267,43 @@ void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
     big_endian = 0;
 #endif
 
-    /* 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);
-    entry = elf_entry;
-    if (kernel_size < 0) {
-        kernel_size = load_uimage(info->kernel_filename, &entry, NULL,
-                                  &is_linux);
-    }
-    if (kernel_size < 0) {
-        entry = info->loader_start + KERNEL_LOAD_ADDR;
-        kernel_size = load_image_targphys(info->kernel_filename, entry,
-                                          ram_size - KERNEL_LOAD_ADDR);
+    if (uboot_name != NULL) {
+
+        entry = info->uboot_start;
+
+        if (!entry) {
+            fprintf(stderr, "Entry point for u-boot must be specified\n");
+            exit(1);
+        }
+
+        uboot_size =
+                load_image_targphys(uboot_name, entry, info->ram_size);
+        if (uboot_size < 0) {
+            fprintf(stderr, "qemu: could not load u-boot '%s'\n", uboot_name);
+            exit(1);
+        }
+
+        kernel_size = load_image_targphys(info->kernel_filename,
+                info->loader_start + UIMAGE_LOAD_ADDR,
+                info->ram_size - uboot_size);
         is_linux = 1;
+
+    } else { /* uboot_name == NULL */
+
+        /* 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);
+        entry = elf_entry;
+        if (kernel_size < 0) {
+            kernel_size = load_uimage(info->kernel_filename, &entry, NULL,
+                    &is_linux);
+        }
+        if (kernel_size < 0) {
+            entry = info->loader_start + KERNEL_LOAD_ADDR;
+            kernel_size = load_image_targphys(info->kernel_filename, entry,
+                    ram_size - KERNEL_LOAD_ADDR);
+            is_linux = 1;
+        }
     }
     if (kernel_size < 0) {
         fprintf(stderr, "qemu: could not load kernel '%s'\n",
diff --git a/qemu-options.hx b/qemu-options.hx
index b129996..d498fbb 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -2336,6 +2336,14 @@ STEXI
 Set the filename for the BIOS.
 ETEXI
 
+DEF("uboot", HAS_ARG, QEMU_OPTION_uboot, \
+    "-uboot file     set the filename for the U-Boot\n", QEMU_ARCH_ARM)
+STEXI
+@item -uboot @var{file}
+@findex -uboot
+Set the filename for the U-Boot.
+ETEXI
+
 DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
     "-enable-kvm     enable KVM full virtualization support\n", QEMU_ARCH_ALL)
 STEXI
diff --git a/sysemu.h b/sysemu.h
index 9d5ce33..116a4ff 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -13,6 +13,7 @@
 /* vl.c */
 
 extern const char *bios_name;
+extern const char *uboot_name;
 
 extern const char *qemu_name;
 extern uint8_t qemu_uuid[];
diff --git a/vl.c b/vl.c
index d8a521a..b3c68cb 100644
--- a/vl.c
+++ b/vl.c
@@ -176,6 +176,7 @@ int main(int argc, char **argv)
 
 static const char *data_dir;
 const char *bios_name = NULL;
+const char *uboot_name = NULL;
 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
 DisplayType display_type = DT_DEFAULT;
 int display_remote = 0;
@@ -2617,6 +2618,9 @@ int main(int argc, char **argv, char **envp)
             case QEMU_OPTION_bios:
                 bios_name = optarg;
                 break;
+            case QEMU_OPTION_uboot:
+                uboot_name = optarg;
+                break;
             case QEMU_OPTION_singlestep:
                 singlestep = 1;
                 break;
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/2] ARM: exynos, integratorcp: Specify U-Boot start address.
  2012-02-22  6:58 [Qemu-devel] [PATCH 0/2] Add "-uboot" option Evgeny Voevodin
  2012-02-22  6:58 ` [Qemu-devel] [PATCH 1/2] ARM: " Evgeny Voevodin
@ 2012-02-22  6:58 ` Evgeny Voevodin
  2012-02-22  8:12 ` [Qemu-devel] [PATCH 0/2] Add "-uboot" option Peter Maydell
  2 siblings, 0 replies; 6+ messages in thread
From: Evgeny Voevodin @ 2012-02-22  6:58 UTC (permalink / raw)
  To: qemu-devel
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, d.solodkiy, Evgeny Voevodin

Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com>
---
 hw/exynos4210.h     |    1 +
 hw/exynos4_boards.c |    1 +
 hw/integratorcp.c   |    1 +
 3 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/hw/exynos4210.h b/hw/exynos4210.h
index e7522f8..9035a2a 100644
--- a/hw/exynos4210.h
+++ b/hw/exynos4210.h
@@ -43,6 +43,7 @@
 #define EXYNOS4210_IRAM_BASE_ADDR           0x02020000
 #define EXYNOS4210_IRAM_SIZE                0x00020000  /* 128 KB */
 
+#define EXYNOS4210_UBOOT_ADDR               0x44800000
 /* Secondary CPU startup code is in IROM memory */
 #define EXYNOS4210_SMP_BOOT_ADDR            EXYNOS4210_IROM_BASE_ADDR
 #define EXYNOS4210_SMP_BOOT_SIZE            0x1000
diff --git a/hw/exynos4_boards.c b/hw/exynos4_boards.c
index 553a02b..937aab1 100644
--- a/hw/exynos4_boards.c
+++ b/hw/exynos4_boards.c
@@ -67,6 +67,7 @@ static unsigned long exynos4_board_ram_size[EXYNOS4_NUM_OF_BOARDS] = {
 };
 
 static struct arm_boot_info exynos4_board_binfo = {
+    .uboot_start      = EXYNOS4210_UBOOT_ADDR,
     .loader_start     = EXYNOS4210_BASE_BOOT_ADDR,
     .smp_loader_start = EXYNOS4210_SMP_BOOT_ADDR,
     .nb_cpus          = EXYNOS4210_NCPUS,
diff --git a/hw/integratorcp.c b/hw/integratorcp.c
index 5b06c81..174ef38 100644
--- a/hw/integratorcp.c
+++ b/hw/integratorcp.c
@@ -434,6 +434,7 @@ static void icp_control_init(target_phys_addr_t base)
 /* Board init.  */
 
 static struct arm_boot_info integrator_binfo = {
+    .uboot_start = 0x01000000,
     .loader_start = 0x0,
     .board_id = 0x113,
 };
-- 
1.7.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Add "-uboot" option
  2012-02-22  6:58 [Qemu-devel] [PATCH 0/2] Add "-uboot" option Evgeny Voevodin
  2012-02-22  6:58 ` [Qemu-devel] [PATCH 1/2] ARM: " Evgeny Voevodin
  2012-02-22  6:58 ` [Qemu-devel] [PATCH 2/2] ARM: exynos, integratorcp: Specify U-Boot start address Evgeny Voevodin
@ 2012-02-22  8:12 ` Peter Maydell
  2012-02-22  8:29   ` Evgeny Voevodin
  2 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2012-02-22  8:12 UTC (permalink / raw)
  To: Evgeny Voevodin
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, qemu-devel, d.solodkiy

On 22 February 2012 06:58, Evgeny Voevodin <e.voevodin@samsung.com> wrote:
> These patches add "-uboot" option to ARM boards.
> To let user load u-boot, board should initialize
> .uboot_start in arm_boot_info struct.
> Added utilisation of "-uboot" for exynos4 and integratorcp.

Nack. This kind of thing should be done by making QEMU
load an ELF file which has u-boot in it (which at the
moment you can do with -kernel). Loading Linux kernels
is a special case in arm_boot because of the complicated
boot protocol they have and because people want to load
lots of different kernels.

-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Add "-uboot" option
  2012-02-22  8:12 ` [Qemu-devel] [PATCH 0/2] Add "-uboot" option Peter Maydell
@ 2012-02-22  8:29   ` Evgeny Voevodin
  2012-02-22  8:34     ` Peter Maydell
  0 siblings, 1 reply; 6+ messages in thread
From: Evgeny Voevodin @ 2012-02-22  8:29 UTC (permalink / raw)
  To: Peter Maydell
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, qemu-devel, d.solodkiy

On 22.02.2012 12:12, Peter Maydell wrote:
> On 22 February 2012 06:58, Evgeny Voevodin<e.voevodin@samsung.com>  wrote:
>> These patches add "-uboot" option to ARM boards.
>> To let user load u-boot, board should initialize
>> .uboot_start in arm_boot_info struct.
>> Added utilisation of "-uboot" for exynos4 and integratorcp.
> Nack. This kind of thing should be done by making QEMU
> load an ELF file which has u-boot in it (which at the
> moment you can do with -kernel). Loading Linux kernels
> is a special case in arm_boot because of the complicated
> boot protocol they have and because people want to load
> lots of different kernels.
>
> -- PMM
>

As I understood, you mean that -kernel is for people who want to quickly 
compile and try different kernel.
As for me, -uboot is the same ) No need to generate a file, where u-boot 
and kernel are placed. Just use -uboot ./u-boot -kernel ./uImage, change 
kernel, or change u-boot, or both, as you wish.

-- 
Kind regards,
Evgeny Voevodin,
Leading Software Engineer,
ASWG, Moscow R&D center, Samsung Electronics
e-mail: e.voevodin@samsung.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Add "-uboot" option
  2012-02-22  8:29   ` Evgeny Voevodin
@ 2012-02-22  8:34     ` Peter Maydell
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2012-02-22  8:34 UTC (permalink / raw)
  To: Evgeny Voevodin
  Cc: kyungmin.park, m.kozlov, i.mitsyanko, qemu-devel, d.solodkiy

On 22 February 2012 08:29, Evgeny Voevodin <e.voevodin@samsung.com> wrote:
> On 22.02.2012 12:12, Peter Maydell wrote:
>> Nack. This kind of thing should be done by making QEMU
>> load an ELF file which has u-boot in it (which at the
>> moment you can do with -kernel). Loading Linux kernels
>> is a special case in arm_boot because of the complicated
>> boot protocol they have and because people want to load
>> lots of different kernels.

> As I understood, you mean that -kernel is for people who want to quickly
> compile and try different kernel.
> As for me, -uboot is the same ) No need to generate a file, where u-boot and
> kernel are placed. Just use -uboot ./u-boot -kernel ./uImage, change kernel,
> or change u-boot, or both, as you wish.

If you're using -kernel you don't need to provide a u-boot
because qemu is being the bootloader. If you're making
qemu execute a bootloader than you should just put the
kernel where u-boot would load it normally.

We really can't add random options to qemu to support
loading every single thing you might possibly want to load,
which is why I'm drawing a line in the sand here.

-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-02-22  8:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-22  6:58 [Qemu-devel] [PATCH 0/2] Add "-uboot" option Evgeny Voevodin
2012-02-22  6:58 ` [Qemu-devel] [PATCH 1/2] ARM: " Evgeny Voevodin
2012-02-22  6:58 ` [Qemu-devel] [PATCH 2/2] ARM: exynos, integratorcp: Specify U-Boot start address Evgeny Voevodin
2012-02-22  8:12 ` [Qemu-devel] [PATCH 0/2] Add "-uboot" option Peter Maydell
2012-02-22  8:29   ` Evgeny Voevodin
2012-02-22  8:34     ` Peter Maydell

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.