aboutsummaryrefslogtreecommitdiffstats
path: root/hw/esp.c
diff options
context:
space:
mode:
authorBlue Swirl <blauwirbel@gmail.com>2010-06-10 17:57:39 +0000
committerBlue Swirl <blauwirbel@gmail.com>2010-06-10 17:57:39 +0000
commit85948643b8df28ca87e41a1c4c7f16a66b4ac6cd (patch)
tree787a8d99ad1a959d283288c358b8dcb42e9799c9 /hw/esp.c
parente163ae7b8f80dc4eb38445956929409601a8321c (diff)
esp: lower IRQ on soft reset
42f1ced228c9b616cfa2b69846025271618e4ef5 removed irq lowering during reset. However, for chip reset command and DMA reset signal, its actually the correct thing to do. Lower IRQ on soft reset only. Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'hw/esp.c')
-rw-r--r--hw/esp.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/hw/esp.c b/hw/esp.c
index 0a8cf6e9f..774087910 100644
--- a/hw/esp.c
+++ b/hw/esp.c
@@ -419,7 +419,7 @@ static void handle_ti(ESPState *s)
}
}
-static void esp_reset(DeviceState *d)
+static void esp_hard_reset(DeviceState *d)
{
ESPState *s = container_of(d, ESPState, busdev.qdev);
@@ -435,10 +435,19 @@ static void esp_reset(DeviceState *d)
s->rregs[ESP_CFG1] = 7;
}
+static void esp_soft_reset(DeviceState *d)
+{
+ ESPState *s = container_of(d, ESPState, busdev.qdev);
+
+ qemu_irq_lower(s->irq);
+ esp_hard_reset(d);
+}
+
static void parent_esp_reset(void *opaque, int irq, int level)
{
- if (level)
- esp_reset(opaque);
+ if (level) {
+ esp_soft_reset(opaque);
+ }
}
static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr)
@@ -528,7 +537,7 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
break;
case CMD_RESET:
DPRINTF("Chip reset (%2.2x)\n", val);
- esp_reset(&s->busdev.qdev);
+ esp_soft_reset(&s->busdev.qdev);
break;
case CMD_BUSRESET:
DPRINTF("Bus reset (%2.2x)\n", val);
@@ -679,7 +688,7 @@ static SysBusDeviceInfo esp_info = {
.qdev.name = "esp",
.qdev.size = sizeof(ESPState),
.qdev.vmsd = &vmstate_esp,
- .qdev.reset = esp_reset,
+ .qdev.reset = esp_hard_reset,
.qdev.props = (Property[]) {
{.name = NULL}
}