[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/9] hw/xtensa/xtfpga: rewrite mini bootloader
From: |
Max Filippov |
Subject: |
[Qemu-devel] [PATCH 1/9] hw/xtensa/xtfpga: rewrite mini bootloader |
Date: |
Thu, 11 Jan 2018 13:04:55 -0800 |
Don't load jump target into the CPU config, instead put it and initial
a2 as literals into the mini bootloader and use l32r to load them
natively. With these changes it should be possible to do warm reboot of
the guest.
Signed-off-by: Max Filippov <address@hidden>
---
hw/xtensa/xtfpga.c | 28 +++++++++++++++++++++++-----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index 1971ecfdc5a3..ba681683d608 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -372,15 +372,33 @@ static void lx_init(const LxBoardDesc *board,
MachineState *machine)
}
}
if (entry_point != env->pc) {
- static const uint8_t jx_a0[] = {
+ uint8_t boot[] = {
#ifdef TARGET_WORDS_BIGENDIAN
- 0x0a, 0, 0,
+ 0x60, 0x00, 0x08, /* j 1f */
+ 0x00, /* .literal_position */
+ 0x00, 0x00, 0x00, 0x00, /* .literal entry_pc */
+ 0x00, 0x00, 0x00, 0x00, /* .literal entry_a2 */
+ /* 1: */
+ 0x10, 0xff, 0xfe, /* l32r a0, entry_pc */
+ 0x12, 0xff, 0xfe, /* l32r a2, entry_a2 */
+ 0x0a, 0x00, 0x00, /* jx a0 */
#else
- 0xa0, 0, 0,
+ 0x06, 0x02, 0x00, /* j 1f */
+ 0x00, /* .literal_position */
+ 0x00, 0x00, 0x00, 0x00, /* .literal entry_pc */
+ 0x00, 0x00, 0x00, 0x00, /* .literal entry_a2 */
+ /* 1: */
+ 0x01, 0xfe, 0xff, /* l32r a0, entry_pc */
+ 0x21, 0xfe, 0xff, /* l32r a2, entry_a2 */
+ 0xa0, 0x00, 0x00, /* jx a0 */
#endif
};
- env->regs[0] = entry_point;
- cpu_physical_memory_write(env->pc, jx_a0, sizeof(jx_a0));
+ uint32_t entry_pc = tswap32(entry_point);
+ uint32_t entry_a2 = tswap32(tagptr);
+
+ memcpy(boot + 4, &entry_pc, sizeof(entry_pc));
+ memcpy(boot + 8, &entry_a2, sizeof(entry_a2));
+ cpu_physical_memory_write(env->pc, boot, sizeof(boot));
}
} else {
if (flash) {
--
2.1.4
- [Qemu-devel] [PATCH 0/9] target/xtensa: add noMMU support to XTFPGA, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 1/9] hw/xtensa/xtfpga: rewrite mini bootloader,
Max Filippov <=
- [Qemu-devel] [PATCH 2/9] hw/xtensa/xtfpga: clean up function/structure names, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 3/9] target/xtensa: fix default sysrom/sysram addresses, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 4/9] hw/xtensa: extract xtensa_create_memory_regions, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 5/9] hw/xtensa/xtfpga: extract flash configuration, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 9/9] target/xtensa: add sample_controller core, Max Filippov, 2018/01/11
- [Qemu-devel] [PATCH 7/9] target/xtensa: add de212 core, Max Filippov, 2018/01/11