|
@@ -939,6 +939,11 @@ static void esp_soft_reset(ESPState *s)
|
|
esp_hard_reset(s);
|
|
esp_hard_reset(s);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void esp_bus_reset(ESPState *s)
|
|
|
|
+{
|
|
|
|
+ qbus_reset_all(BUS(&s->bus));
|
|
|
|
+}
|
|
|
|
+
|
|
static void parent_esp_reset(ESPState *s, int irq, int level)
|
|
static void parent_esp_reset(ESPState *s, int irq, int level)
|
|
{
|
|
{
|
|
if (level) {
|
|
if (level) {
|
|
@@ -1067,6 +1072,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val)
|
|
break;
|
|
break;
|
|
case CMD_BUSRESET:
|
|
case CMD_BUSRESET:
|
|
trace_esp_mem_writeb_cmd_bus_reset(val);
|
|
trace_esp_mem_writeb_cmd_bus_reset(val);
|
|
|
|
+ esp_bus_reset(s);
|
|
if (!(s->wregs[ESP_CFG1] & CFG1_RESREPT)) {
|
|
if (!(s->wregs[ESP_CFG1] & CFG1_RESREPT)) {
|
|
s->rregs[ESP_RINTR] |= INTR_RST;
|
|
s->rregs[ESP_RINTR] |= INTR_RST;
|
|
esp_raise_irq(s);
|
|
esp_raise_irq(s);
|