|
From: <bob...@us...> - 2007-07-22 10:51:58
|
Revision: 1198
http://svn.sourceforge.net/hackndev/?rev=1198&view=rev
Author: bobofdoom
Date: 2007-07-22 03:51:55 -0700 (Sun, 22 Jul 2007)
Log Message:
-----------
QEMU: Hacky suspend/resume handling.
Modified Paths:
--------------
qemu/trunk/hw/pxa2xx.c
Modified: qemu/trunk/hw/pxa2xx.c
===================================================================
--- qemu/trunk/hw/pxa2xx.c 2007-07-22 06:54:01 UTC (rev 1197)
+++ qemu/trunk/hw/pxa2xx.c 2007-07-22 10:51:55 UTC (rev 1198)
@@ -163,7 +163,7 @@
case CCCR:
case CKEN:
case OSCC:
- return s->cm_regs[addr >> 2];
+ return s->cm_regs[addr >> 2] | 1;
case CCSR:
return s->cm_regs[CCCR >> 2] | (3 << 28);
@@ -254,6 +254,18 @@
return 0;
}
+static void pxa2xx_sleep_reset(void *opaque)
+{
+ struct pxa2xx_state_s *s = (struct pxa2xx_state_s *) opaque;
+ cpu_reset(s->env);
+ s->pm_regs[PSSR >> 2] |= 0x1; /* Set SSS */
+ s->pm_regs[RCSR >> 2] |= 0x4; /* Set SMR */
+ s->pm_regs[PEDR >> 2] = 0x0;
+ //s->pm_regs[PSPR >> 2] |= 0x4;
+ printf("reset PC=%x PSPR=%x\n", s->env->regs[15], s->pm_regs[PSPR>>2]);
+ //s->env->regs[15] = s->pm_regs[PSPR >> 2];
+}
+
static void pxa2xx_clkpwr_write(void *opaque, int op2, int reg, int crm,
uint32_t value)
{
@@ -293,6 +305,8 @@
goto message;
case 3:
+ case 4:
+ case 7:
s->env->uncached_cpsr =
ARM_CPU_MODE_SVC | CPSR_A | CPSR_F | CPSR_I;
s->env->cp15.c1_sys = 0;
@@ -319,8 +333,8 @@
#endif
/* Suspend */
- cpu_interrupt(cpu_single_env, CPU_INTERRUPT_HALT);
-
+ qemu_register_reset(pxa2xx_sleep_reset, s);
+ qemu_system_reset_request();
goto message;
default:
@@ -2116,7 +2130,7 @@
s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
-
+
/* GPIO1 resets the processor */
/* The handler can be overriden by board-specific code */
pxa2xx_gpio_handler_set(s->gpio, 1, pxa2xx_reset, s);
@@ -2225,7 +2239,7 @@
s->i2c[1] = pxa2xx_i2c_init(0x40f00100, s->pic[PXA2XX_PIC_PWRI2C], 0xff);
s->i2s = pxa2xx_i2s_init(0x40400000, s->pic[PXA2XX_PIC_I2S], s->dma);
-
+
/* GPIO1 resets the processor */
/* The handler can be overriden by board-specific code */
pxa2xx_gpio_handler_set(s->gpio, 1, pxa2xx_reset, s);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|