aboutsummaryrefslogtreecommitdiff
path: root/hw/mips/malta.c
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2022-11-02 16:24:39 +0100
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2023-01-13 09:32:32 +0100
commitcd5066f8618bc6c80ec9088923c58f4a42ab0e7a (patch)
tree750b98a49a6ae66847efffa0afef095087b5f77c /hw/mips/malta.c
parent14c2b18414ee88a175b4855361dfbdaa836e0491 (diff)
downloadqemu-cd5066f8618bc6c80ec9088923c58f4a42ab0e7a.zip
qemu-cd5066f8618bc6c80ec9088923c58f4a42ab0e7a.tar.gz
qemu-cd5066f8618bc6c80ec9088923c58f4a42ab0e7a.tar.bz2
hw/mips/bootloader: Handle buffers as opaque arrays
It is irrelevant to the API what the buffers to fill are made of. In particular, some MIPS ISA have 16-bit wide instructions. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20221211204533.85359-2-philmd@linaro.org>
Diffstat (limited to 'hw/mips/malta.c')
-rw-r--r--hw/mips/malta.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index f959bce..b5b62e7 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -844,6 +844,7 @@ static void write_bootloader(uint8_t *base, uint64_t run_addr,
uint64_t kernel_entry)
{
uint32_t *p;
+ void *v;
/* Small bootloader */
p = (uint32_t *)base;
@@ -886,38 +887,39 @@ static void write_bootloader(uint8_t *base, uint64_t run_addr,
#else
#define cpu_to_gt32 cpu_to_be32
#endif
+ v = p;
/* move GT64120 registers from 0x14000000 to 0x1be00000 */
- bl_gen_write_u32(&p, /* GT_ISD */
+ bl_gen_write_u32(&v, /* GT_ISD */
cpu_mips_phys_to_kseg1(NULL, 0x14000000 + 0x68),
cpu_to_gt32(0x1be00000 << 3));
/* setup MEM-to-PCI0 mapping */
/* setup PCI0 io window to 0x18000000-0x181fffff */
- bl_gen_write_u32(&p, /* GT_PCI0IOLD */
+ bl_gen_write_u32(&v, /* GT_PCI0IOLD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x48),
cpu_to_gt32(0x18000000 << 3));
- bl_gen_write_u32(&p, /* GT_PCI0IOHD */
+ bl_gen_write_u32(&v, /* GT_PCI0IOHD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x50),
cpu_to_gt32(0x08000000 << 3));
/* setup PCI0 mem windows */
- bl_gen_write_u32(&p, /* GT_PCI0M0LD */
+ bl_gen_write_u32(&v, /* GT_PCI0M0LD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x58),
cpu_to_gt32(0x10000000 << 3));
- bl_gen_write_u32(&p, /* GT_PCI0M0HD */
+ bl_gen_write_u32(&v, /* GT_PCI0M0HD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x60),
cpu_to_gt32(0x07e00000 << 3));
- bl_gen_write_u32(&p, /* GT_PCI0M1LD */
+ bl_gen_write_u32(&v, /* GT_PCI0M1LD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x80),
cpu_to_gt32(0x18200000 << 3));
- bl_gen_write_u32(&p, /* GT_PCI0M1HD */
+ bl_gen_write_u32(&v, /* GT_PCI0M1HD */
cpu_mips_phys_to_kseg1(NULL, 0x1be00000 + 0x88),
cpu_to_gt32(0x0bc00000 << 3));
#undef cpu_to_gt32
- bl_gen_jump_kernel(&p,
+ bl_gen_jump_kernel(&v,
true, ENVP_VADDR - 64,
/*
* If semihosting is used, arguments have already been
@@ -928,6 +930,7 @@ static void write_bootloader(uint8_t *base, uint64_t run_addr,
true, ENVP_VADDR + 8,
true, loaderparams.ram_low_size,
kernel_entry);
+ p = v;
/* YAMON subroutines */
p = (uint32_t *) (base + 0x800);