On 02/03/2014 10:18 AM, Sebastian Huber wrote: > A lot of real world LEON3 systems are shipped with the GRMON boot > loader. This boot loader initializes the stack pointer with the end of > RAM address. The application can use this to detect the RAM size of a > particular board variant. >
Looks good, thank you Sebastian. Reviewed-by: Fabien Chouteau <chout...@adacore.com> > Signed-off-by: Sebastian Huber <sebastian.hu...@embedded-brains.de> > --- > hw/sparc/leon3.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c > index c583c3d..c16e9e4 100644 > --- a/hw/sparc/leon3.c > +++ b/hw/sparc/leon3.c > @@ -45,6 +45,7 @@ > typedef struct ResetData { > SPARCCPU *cpu; > uint32_t entry; /* save kernel entry in case of reset */ > + target_ulong sp; /* initial stack pointer */ > } ResetData; > > static void main_cpu_reset(void *opaque) > @@ -58,6 +59,7 @@ static void main_cpu_reset(void *opaque) > cpu->halted = 0; > env->pc = s->entry; > env->npc = s->entry + 4; > + env->regbase[6] = s->sp; > } > > void leon3_irq_ack(void *irq_manager, int intno) > @@ -133,6 +135,7 @@ static void leon3_generic_hw_init(QEMUMachineInitArgs > *args) > /* Reset data */ > reset_info = g_malloc0(sizeof(ResetData)); > reset_info->cpu = cpu; > + reset_info->sp = 0x40000000 + ram_size; > qemu_register_reset(main_cpu_reset, reset_info); > > /* Allocate IRQ manager */ >