[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] ARM Versatile/Realview reset (resent)
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH] ARM Versatile/Realview reset (resent) |
Date: |
Wed, 28 Feb 2007 12:14:52 +0100 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
On Mon, Jan 22, 2007 at 12:07:29PM +0100, Aurelien Jarno wrote:
> On Wed, Nov 15, 2006 at 02:17:22AM +0100, Aurelien Jarno wrote:
> > On Wed, Nov 15, 2006 at 01:26:59AM +0100, Aurelien Jarno wrote:
> > > The ARM Versatile and Realview platforms support reset (but not halt),
> > > howvever it is not implemented in QEMU. The patch below adds this
> > > support. It is very similar to the patch from Daniel Jacobowitz
> > > concerning the MIPS platform.
> > >
> > > Note that you need a kernel >= 2.6.19-rc1 (or a patched kernel) to
> > > get the SCSI controller correctly detected on reboot on the Versatile
> > > platform.
> > >
>
> Please find and updated version below.
>
The patch needed an update once again, please find it below
Index: hw/arm_sysctl.c
===================================================================
RCS file: /sources/qemu/qemu/hw/arm_sysctl.c,v
retrieving revision 1.1
diff -u -d -p -r1.1 arm_sysctl.c
--- hw/arm_sysctl.c 23 Sep 2006 17:40:58 -0000 1.1
+++ hw/arm_sysctl.c 28 Feb 2007 10:31:02 -0000
@@ -149,7 +149,7 @@ static void arm_sysctl_write(void *opaqu
if (s->lockval == LOCK_VALUE) {
s->resetlevel = val;
if (val & 0x100)
- cpu_abort(cpu_single_env, "Board reset\n");
+ qemu_system_reset_request ();
}
break;
case 0x44: /* PCICTL */
Index: hw/realview.c
===================================================================
RCS file: /sources/qemu/qemu/hw/realview.c,v
retrieving revision 1.3
diff -u -d -p -r1.3 realview.c
--- hw/realview.c 16 Jan 2007 18:54:31 -0000 1.3
+++ hw/realview.c 28 Feb 2007 10:31:02 -0000
@@ -10,6 +10,18 @@
#include "vl.h"
#include "arm_pic.h"
+static void main_cpu_reset(void *opaque)
+{
+ CPUState *env = opaque;
+
+ cpu_reset(env);
+ cpu_arm_set_model(env, ARM_CPUID_ARM926);
+ if (env->kernel_filename)
+ arm_load_kernel(env, env->ram_size, env->kernel_filename,
+ env->kernel_cmdline, env->initrd_filename,
+ env->board_id);
+}
+
/* Board init. */
static void realview_init(int ram_size, int vga_ram_size, int boot_device,
@@ -32,6 +44,7 @@ static void realview_init(int ram_size,
/* SDRAM at address zero. */
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
+ qemu_register_reset(main_cpu_reset, env);
arm_sysctl_init(0x10000000, 0xc1400400);
pic = arm_pic_init_cpu(env);
/* ??? The documentation says GIC1 is nFIQ and either GIC2 or GIC3
@@ -129,6 +142,11 @@ static void realview_init(int ram_size,
arm_load_kernel(env, ram_size, kernel_filename, kernel_cmdline,
initrd_filename, 0x33b);
+ env->ram_size = ram_size;
+ env->kernel_filename = kernel_filename;
+ env->kernel_cmdline = kernel_cmdline;
+ env->initrd_filename = initrd_filename;
+ env->board_id = 0x33b;
}
QEMUMachine realview_machine = {
Index: hw/versatilepb.c
===================================================================
RCS file: /sources/qemu/qemu/hw/versatilepb.c,v
retrieving revision 1.8
diff -u -d -p -r1.8 versatilepb.c
--- hw/versatilepb.c 16 Jan 2007 18:54:31 -0000 1.8
+++ hw/versatilepb.c 28 Feb 2007 10:31:02 -0000
@@ -145,6 +145,18 @@ static vpb_sic_state *vpb_sic_init(uint3
return s;
}
+static void main_cpu_reset(void *opaque)
+{
+ CPUState *env = opaque;
+
+ cpu_reset(env);
+ cpu_arm_set_model(env, ARM_CPUID_ARM926);
+ if (env->kernel_filename)
+ arm_load_kernel(env, env->ram_size, env->kernel_filename,
+ env->kernel_cmdline, env->initrd_filename,
+ env->board_id);
+}
+
/* Board init. */
/* The AB and PB boards both use the same core, just with different
@@ -171,6 +183,7 @@ static void versatile_init(int ram_size,
/* SDRAM at address zero. */
cpu_register_physical_memory(0, ram_size, IO_MEM_RAM);
+ qemu_register_reset(main_cpu_reset, env);
arm_sysctl_init(0x10000000, 0x41007004);
pic = arm_pic_init_cpu(env);
pic = pl190_init(0x10140000, pic, ARM_PIC_CPU_IRQ, ARM_PIC_CPU_FIQ);
@@ -252,6 +265,11 @@ static void versatile_init(int ram_size,
arm_load_kernel(env, ram_size, kernel_filename, kernel_cmdline,
initrd_filename, board_id);
+ env->ram_size = ram_size;
+ env->kernel_filename = kernel_filename;
+ env->kernel_cmdline = kernel_cmdline;
+ env->initrd_filename = initrd_filename;
+ env->board_id = board_id;
}
static void vpb_init(int ram_size, int vga_ram_size, int boot_device,
Index: target-arm/cpu.h
===================================================================
RCS file: /sources/qemu/qemu/target-arm/cpu.h,v
retrieving revision 1.19
diff -u -d -p -r1.19 cpu.h
--- target-arm/cpu.h 31 Jan 2007 12:16:50 -0000 1.19
+++ target-arm/cpu.h 28 Feb 2007 10:31:02 -0000
@@ -122,6 +122,11 @@ typedef struct CPUARMState {
CPU_COMMON
+ int ram_size;
+ const char *kernel_filename;
+ const char *kernel_cmdline;
+ const char *initrd_filename;
+ int board_id;
} CPUARMState;
CPUARMState *cpu_arm_init(void);
Index: target-arm/helper.c
===================================================================
RCS file: /sources/qemu/qemu/target-arm/helper.c,v
retrieving revision 1.8
diff -u -d -p -r1.8 helper.c
--- target-arm/helper.c 20 Jan 2007 17:12:09 -0000 1.8
+++ target-arm/helper.c 28 Feb 2007 10:31:02 -0000
@@ -7,6 +7,7 @@
void cpu_reset(CPUARMState *env)
{
+ memset(env, 0, offsetof(CPUARMState, breakpoints));
#if defined (CONFIG_USER_ONLY)
env->uncached_cpsr = ARM_CPU_MODE_USR;
env->vfp.xregs[ARM_VFP_FPEXC] = 1 << 30;
@@ -16,6 +17,7 @@ void cpu_reset(CPUARMState *env)
env->vfp.xregs[ARM_VFP_FPEXC] = 0;
#endif
env->regs[15] = 0;
+ tlb_flush(env, 1);
}
CPUARMState *cpu_arm_init(void)
@@ -27,7 +29,6 @@ CPUARMState *cpu_arm_init(void)
return NULL;
cpu_exec_init(env);
cpu_reset(env);
- tlb_flush(env, 1);
return env;
}
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' address@hidden | address@hidden
`- people.debian.org/~aurel32 | www.aurel32.net
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] ARM Versatile/Realview reset (resent),
Aurelien Jarno <=