From: Max Filippov <jcmvbkbc@gmail.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: Blue Swirl <blauwirbel@gmail.com>,
jcmvbkbc@gmail.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 2/3] xtensa_lx60: pass kernel arguments from -append
Date: Tue, 1 Nov 2011 02:17:29 +0400 [thread overview]
Message-ID: <1320099455-17326-5-git-send-email-jcmvbkbc@gmail.com> (raw)
In-Reply-To: <1320099455-17326-1-git-send-email-jcmvbkbc@gmail.com>
Create boot parameters in the end of SRAM region, insert kernel
arguments specified in -append there.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
---
hw/xtensa_bootparam.h | 25 +++++++++++++++++++++++++
hw/xtensa_lx60.c | 24 ++++++++++++++++++++----
2 files changed, 45 insertions(+), 4 deletions(-)
create mode 100644 hw/xtensa_bootparam.h
diff --git a/hw/xtensa_bootparam.h b/hw/xtensa_bootparam.h
new file mode 100644
index 0000000..38ef32b
--- /dev/null
+++ b/hw/xtensa_bootparam.h
@@ -0,0 +1,25 @@
+#ifndef HW_XTENSA_BOOTPARAM
+#define HW_XTENSA_BOOTPARAM
+
+typedef struct BpTag {
+ uint16_t tag;
+ uint16_t size;
+} BpTag;
+
+static inline ram_addr_t put_tag(ram_addr_t addr, uint16_t tag,
+ size_t size, const void *data)
+{
+ BpTag bp_tag = {
+ .tag = tswap16(tag),
+ .size = tswap16((size + 3) & ~3),
+ };
+
+ cpu_physical_memory_write(addr, &bp_tag, sizeof(bp_tag));
+ addr += sizeof(bp_tag);
+ cpu_physical_memory_write(addr, data, size);
+ addr += (size + 3) & ~3;
+
+ return addr;
+}
+
+#endif
diff --git a/hw/xtensa_lx60.c b/hw/xtensa_lx60.c
index cb047d2..069b21c 100644
--- a/hw/xtensa_lx60.c
+++ b/hw/xtensa_lx60.c
@@ -34,6 +34,7 @@
#include "pc.h"
#include "sysbus.h"
#include "flash.h"
+#include "xtensa_bootparam.h"
typedef struct LxBoardDesc {
size_t flash_size;
@@ -188,10 +189,6 @@ static void lx_init(const LxBoardDesc *board,
memory_region_init_ram(ram, NULL, "xtensa.sram", ram_size);
memory_region_add_subregion(system_memory, 0, ram);
- rom = g_malloc(sizeof(*rom));
- memory_region_init_ram(rom, NULL, "xtensa.rom", 0x1000);
- memory_region_add_subregion(system_memory, 0xfe000000, rom);
-
system_io = g_malloc(sizeof(*system_io));
memory_region_init(system_io, "system.io", 224 * 1024 * 1024);
memory_region_add_subregion(system_memory, 0xf0000000, system_io);
@@ -223,6 +220,25 @@ static void lx_init(const LxBoardDesc *board,
/* Use presence of kernel file name as 'boot from SRAM' switch. */
if (kernel_filename) {
+ rom = g_malloc(sizeof(*rom));
+ memory_region_init_ram(rom, NULL, "lx60.sram", board->sram_size);
+ memory_region_add_subregion(system_memory, 0xfe000000, rom);
+
+ /* Put kernel bootparameters to the end of that SRAM */
+ if (kernel_cmdline) {
+ size_t cmdline_size = strlen(kernel_cmdline) + 1;
+ size_t bp_size = sizeof(BpTag[4]) + cmdline_size;
+ uint32_t tagptr = (0xfe000000 + board->sram_size - bp_size) & ~0xff;
+
+ env->regs[2] = tagptr;
+
+ tagptr = put_tag(tagptr, 0x7b0b, 0, NULL);
+ if (cmdline_size > 1) {
+ tagptr = put_tag(tagptr, 0x1001,
+ cmdline_size, kernel_cmdline);
+ }
+ tagptr = put_tag(tagptr, 0x7e0b, 0, NULL);
+ }
uint64_t elf_entry;
uint64_t elf_lowaddr;
int success = load_elf(kernel_filename, translate_phys_addr, env,
--
1.7.6.4
next prev parent reply other threads:[~2011-10-31 22:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-31 22:17 [Qemu-devel] [PULL 0/7] target-xtensa patches for 1.0 Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 1/7] target-xtensa: mask out undefined bits of WINDOWBASE SR Max Filippov
2011-11-02 13:34 ` [Qemu-devel] [PATCH v2] target-xtensa: mask out undefined bits of WINDOWSTART SR Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 1/3] xtensa_lx60: add FLASH support Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 2/7] target-xtensa: handle cache options in the overlay tool Max Filippov
2011-10-31 22:17 ` Max Filippov [this message]
2011-10-31 22:17 ` [Qemu-devel] [PATCH 3/7] target-xtensa: raise an exception for invalid and reserved opcodes Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 3/3] xtensa_lx60: fix build date code and change memory region names Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 4/7] opencores_eth: fix RX path: FCS, padding and TL Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 5/7] xtensa_lx60: add FLASH support Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 6/7] xtensa_lx60: pass kernel arguments from -append Max Filippov
2011-10-31 22:17 ` [Qemu-devel] [PATCH 7/7] xtensa_lx60: fix build date code and change memory region names Max Filippov
2011-10-31 22:26 ` [Qemu-devel] [PULL 0/7] target-xtensa patches for 1.0 Max Filippov
2011-11-02 20:55 ` Blue Swirl
-- strict thread matches above, loose matches on Subject: below --
2011-10-30 18:03 [Qemu-devel] [PATCH 0/3] xtensa_lx60: FLASH, kernel args support, minor fixes Max Filippov
2011-10-30 18:03 ` [Qemu-devel] [PATCH 2/3] xtensa_lx60: pass kernel arguments from -append Max Filippov
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=1320099455-17326-5-git-send-email-jcmvbkbc@gmail.com \
--to=jcmvbkbc@gmail.com \
--cc=aliguori@us.ibm.com \
--cc=blauwirbel@gmail.com \
--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.