diff mbox series

[3/8] hw/arm/fsl-imx25: Wire up watchdog

Message ID 20200314172736.24528-4-linux@roeck-us.net (mailing list archive)
State New, archived
Headers show
Series hw/arm: Implement i.MX watchdog support | expand

Commit Message

Guenter Roeck March 14, 2020, 5:27 p.m. UTC
With this commit, the watchdog on imx25-pdk is fully operational,
including pretimeout support.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 hw/arm/fsl-imx25.c         | 10 ++++++++++
 include/hw/arm/fsl-imx25.h |  5 +++++
 2 files changed, 15 insertions(+)

Comments

Philippe Mathieu-Daudé March 14, 2020, 9:48 p.m. UTC | #1
On 3/14/20 6:27 PM, Guenter Roeck wrote:
> With this commit, the watchdog on imx25-pdk is fully operational,
> including pretimeout support.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
>   hw/arm/fsl-imx25.c         | 10 ++++++++++
>   include/hw/arm/fsl-imx25.h |  5 +++++
>   2 files changed, 15 insertions(+)
> 
> diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c
> index a3f829f436..7d5aab562d 100644
> --- a/hw/arm/fsl-imx25.c
> +++ b/hw/arm/fsl-imx25.c
> @@ -87,6 +87,7 @@ static void fsl_imx25_init(Object *obj)
>                                 TYPE_CHIPIDEA);
>       }
>   
> +    sysbus_init_child_obj(obj, "wdt", &s->wdt, sizeof(s->wdt), TYPE_IMX2_WDT);
>   }
>   
>   static void fsl_imx25_realize(DeviceState *dev, Error **errp)
> @@ -302,6 +303,15 @@ static void fsl_imx25_realize(DeviceState *dev, Error **errp)
>                                               usb_table[i].irq));
>       }
>   
> +    /* Watchdog */
> +    object_property_set_bool(OBJECT(&s->wdt), true, "pretimeout-support",
> +                             &error_abort);
> +    object_property_set_bool(OBJECT(&s->wdt), true, "realized", &error_abort);
> +    sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt), 0, FSL_IMX25_WDT_ADDR);
> +    sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt), 0,
> +                                      qdev_get_gpio_in(DEVICE(&s->avic),
> +                                                       FSL_IMX25_WDT_IRQ));
> +
>       /* initialize 2 x 16 KB ROM */
>       memory_region_init_rom(&s->rom[0], NULL,
>                              "imx25.rom0", FSL_IMX25_ROM0_SIZE, &err);
> diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h
> index 5e196bbf05..9e228dacea 100644
> --- a/include/hw/arm/fsl-imx25.h
> +++ b/include/hw/arm/fsl-imx25.h
> @@ -29,6 +29,7 @@
>   #include "hw/gpio/imx_gpio.h"
>   #include "hw/sd/sdhci.h"
>   #include "hw/usb/chipidea.h"
> +#include "hw/watchdog/wdt_imx2.h"
>   #include "exec/memory.h"
>   #include "target/arm/cpu.h"
>   
> @@ -60,6 +61,7 @@ typedef struct FslIMX25State {
>       IMXGPIOState   gpio[FSL_IMX25_NUM_GPIOS];
>       SDHCIState     esdhc[FSL_IMX25_NUM_ESDHCS];
>       ChipideaState  usb[FSL_IMX25_NUM_USBS];
> +    IMX2WdtState   wdt;
>       MemoryRegion   rom[2];
>       MemoryRegion   iram;
>       MemoryRegion   iram_alias;
> @@ -229,6 +231,8 @@ typedef struct FslIMX25State {
>   #define FSL_IMX25_GPIO1_SIZE    0x4000
>   #define FSL_IMX25_GPIO2_ADDR    0x53FD0000
>   #define FSL_IMX25_GPIO2_SIZE    0x4000
> +#define FSL_IMX25_WDT_ADDR      0x53FDC000
> +#define FSL_IMX25_WDT_SIZE      0x4000
>   #define FSL_IMX25_USB1_ADDR     0x53FF4000
>   #define FSL_IMX25_USB1_SIZE     0x0200
>   #define FSL_IMX25_USB2_ADDR     0x53FF4400
> @@ -268,5 +272,6 @@ typedef struct FslIMX25State {
>   #define FSL_IMX25_ESDHC2_IRQ    8
>   #define FSL_IMX25_USB1_IRQ      37
>   #define FSL_IMX25_USB2_IRQ      35
> +#define FSL_IMX25_WDT_IRQ       55
>   
>   #endif /* FSL_IMX25_H */
> 

Here you also need:

-- >8 --
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index c662d5f1e0..4cf8fa4967 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -358,6 +358,7 @@ config FSL_IMX25
      select IMX
      select IMX_FEC
      select IMX_I2C
+    select WDT_IMX2
      select DS1338

  config FSL_IMX31
---

With it:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Guenter Roeck March 14, 2020, 10:12 p.m. UTC | #2
On 3/14/20 2:48 PM, Philippe Mathieu-Daudé wrote:
[ ... ]
> Here you also need:
> 
> -- >8 --
> diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
> index c662d5f1e0..4cf8fa4967 100644
> --- a/hw/arm/Kconfig
> +++ b/hw/arm/Kconfig
> @@ -358,6 +358,7 @@ config FSL_IMX25
>      select IMX
>      select IMX_FEC
>      select IMX_I2C
> +    select WDT_IMX2
>      select DS1338
> 
>  config FSL_IMX31
> ---
> 
> With it:
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> 

Done.

Thanks,
Guenter
diff mbox series

Patch

diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c
index a3f829f436..7d5aab562d 100644
--- a/hw/arm/fsl-imx25.c
+++ b/hw/arm/fsl-imx25.c
@@ -87,6 +87,7 @@  static void fsl_imx25_init(Object *obj)
                               TYPE_CHIPIDEA);
     }
 
+    sysbus_init_child_obj(obj, "wdt", &s->wdt, sizeof(s->wdt), TYPE_IMX2_WDT);
 }
 
 static void fsl_imx25_realize(DeviceState *dev, Error **errp)
@@ -302,6 +303,15 @@  static void fsl_imx25_realize(DeviceState *dev, Error **errp)
                                             usb_table[i].irq));
     }
 
+    /* Watchdog */
+    object_property_set_bool(OBJECT(&s->wdt), true, "pretimeout-support",
+                             &error_abort);
+    object_property_set_bool(OBJECT(&s->wdt), true, "realized", &error_abort);
+    sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt), 0, FSL_IMX25_WDT_ADDR);
+    sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt), 0,
+                                      qdev_get_gpio_in(DEVICE(&s->avic),
+                                                       FSL_IMX25_WDT_IRQ));
+
     /* initialize 2 x 16 KB ROM */
     memory_region_init_rom(&s->rom[0], NULL,
                            "imx25.rom0", FSL_IMX25_ROM0_SIZE, &err);
diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h
index 5e196bbf05..9e228dacea 100644
--- a/include/hw/arm/fsl-imx25.h
+++ b/include/hw/arm/fsl-imx25.h
@@ -29,6 +29,7 @@ 
 #include "hw/gpio/imx_gpio.h"
 #include "hw/sd/sdhci.h"
 #include "hw/usb/chipidea.h"
+#include "hw/watchdog/wdt_imx2.h"
 #include "exec/memory.h"
 #include "target/arm/cpu.h"
 
@@ -60,6 +61,7 @@  typedef struct FslIMX25State {
     IMXGPIOState   gpio[FSL_IMX25_NUM_GPIOS];
     SDHCIState     esdhc[FSL_IMX25_NUM_ESDHCS];
     ChipideaState  usb[FSL_IMX25_NUM_USBS];
+    IMX2WdtState   wdt;
     MemoryRegion   rom[2];
     MemoryRegion   iram;
     MemoryRegion   iram_alias;
@@ -229,6 +231,8 @@  typedef struct FslIMX25State {
 #define FSL_IMX25_GPIO1_SIZE    0x4000
 #define FSL_IMX25_GPIO2_ADDR    0x53FD0000
 #define FSL_IMX25_GPIO2_SIZE    0x4000
+#define FSL_IMX25_WDT_ADDR      0x53FDC000
+#define FSL_IMX25_WDT_SIZE      0x4000
 #define FSL_IMX25_USB1_ADDR     0x53FF4000
 #define FSL_IMX25_USB1_SIZE     0x0200
 #define FSL_IMX25_USB2_ADDR     0x53FF4400
@@ -268,5 +272,6 @@  typedef struct FslIMX25State {
 #define FSL_IMX25_ESDHC2_IRQ    8
 #define FSL_IMX25_USB1_IRQ      37
 #define FSL_IMX25_USB2_IRQ      35
+#define FSL_IMX25_WDT_IRQ       55
 
 #endif /* FSL_IMX25_H */