diff mbox series

[13/16] hw/dma/pl080: Provide device reset function

Message ID 20180809130115.28951-14-peter.maydell@linaro.org
State Superseded
Headers show
Series arm: Implement MPS2 watchdogs and DMA | expand

Commit Message

Peter Maydell Aug. 9, 2018, 1:01 p.m. UTC
The PL080/PL081 model is missing a reset function; implement it.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 hw/dma/pl080.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

-- 
2.17.1

Comments

Philippe Mathieu-Daudé Aug. 10, 2018, 5:11 a.m. UTC | #1
On 08/09/2018 10:01 AM, Peter Maydell wrote:
> The PL080/PL081 model is missing a reset function; implement it.

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


> ---

>  hw/dma/pl080.c | 25 +++++++++++++++++++++++++

>  1 file changed, 25 insertions(+)

> 

> diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c

> index 8f9f3e08d9a..a7aacad74f0 100644

> --- a/hw/dma/pl080.c

> +++ b/hw/dma/pl080.c

> @@ -348,6 +348,30 @@ static const MemoryRegionOps pl080_ops = {

>      .endianness = DEVICE_NATIVE_ENDIAN,

>  };

>  

> +static void pl080_reset(DeviceState *dev)

> +{

> +    PL080State *s = PL080(dev);

> +    int i;

> +

> +    s->tc_int = 0;

> +    s->tc_mask = 0;

> +    s->err_int = 0;

> +    s->err_mask = 0;

> +    s->conf = 0;

> +    s->sync = 0;

> +    s->req_single = 0;

> +    s->req_burst = 0;

> +    s->running = 0;

> +

> +    for (i = 0; i < s->nchannels; i++) {

> +        s->chan[i].src = 0;

> +        s->chan[i].dest = 0;

> +        s->chan[i].lli = 0;

> +        s->chan[i].ctrl = 0;

> +        s->chan[i].conf = 0;

> +    }

> +}

> +

>  static void pl080_init(Object *obj)

>  {

>      SysBusDevice *sbd = SYS_BUS_DEVICE(obj);

> @@ -393,6 +417,7 @@ static void pl080_class_init(ObjectClass *oc, void *data)

>      dc->vmsd = &vmstate_pl080;

>      dc->realize = pl080_realize;

>      dc->props = pl080_properties;

> +    dc->reset = pl080_reset;

>  }

>  

>  static const TypeInfo pl080_info = {

>
diff mbox series

Patch

diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c
index 8f9f3e08d9a..a7aacad74f0 100644
--- a/hw/dma/pl080.c
+++ b/hw/dma/pl080.c
@@ -348,6 +348,30 @@  static const MemoryRegionOps pl080_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
+static void pl080_reset(DeviceState *dev)
+{
+    PL080State *s = PL080(dev);
+    int i;
+
+    s->tc_int = 0;
+    s->tc_mask = 0;
+    s->err_int = 0;
+    s->err_mask = 0;
+    s->conf = 0;
+    s->sync = 0;
+    s->req_single = 0;
+    s->req_burst = 0;
+    s->running = 0;
+
+    for (i = 0; i < s->nchannels; i++) {
+        s->chan[i].src = 0;
+        s->chan[i].dest = 0;
+        s->chan[i].lli = 0;
+        s->chan[i].ctrl = 0;
+        s->chan[i].conf = 0;
+    }
+}
+
 static void pl080_init(Object *obj)
 {
     SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
@@ -393,6 +417,7 @@  static void pl080_class_init(ObjectClass *oc, void *data)
     dc->vmsd = &vmstate_pl080;
     dc->realize = pl080_realize;
     dc->props = pl080_properties;
+    dc->reset = pl080_reset;
 }
 
 static const TypeInfo pl080_info = {