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. |