Message ID | 20200314172736.24528-4-linux@roeck-us.net |
---|---|
State | New |
Headers | show |
Series | hw/arm: Implement i.MX watchdog support | expand |
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>
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 --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 */
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(+)