hw/arm: Add WDT to Allwinner-A10 and Cubieboard
This patch adds WDT to Allwinner-A10 and Cubieboard. WDT is added as an overlay to the Timer module memory map. Signed-off-by: Strahinja Jankovic <strahinja.p.jankovic@gmail.com> Reviewed-by: Niek Linnenbank <nieklinnenbank@gmail.com> Message-id: 20230326202256.22980-3-strahinja.p.jankovic@gmail.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
17b9730f98
commit
470f9f2d93
@ -15,3 +15,4 @@ Emulated devices:
|
|||||||
- USB controller
|
- USB controller
|
||||||
- SATA controller
|
- SATA controller
|
||||||
- TWI (I2C) controller
|
- TWI (I2C) controller
|
||||||
|
- Watchdog timer
|
||||||
|
@ -325,6 +325,7 @@ config ALLWINNER_A10
|
|||||||
select ALLWINNER_A10_PIC
|
select ALLWINNER_A10_PIC
|
||||||
select ALLWINNER_A10_CCM
|
select ALLWINNER_A10_CCM
|
||||||
select ALLWINNER_A10_DRAMC
|
select ALLWINNER_A10_DRAMC
|
||||||
|
select ALLWINNER_WDT
|
||||||
select ALLWINNER_EMAC
|
select ALLWINNER_EMAC
|
||||||
select ALLWINNER_I2C
|
select ALLWINNER_I2C
|
||||||
select AXP209_PMU
|
select AXP209_PMU
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#define AW_A10_EHCI_BASE 0x01c14000
|
#define AW_A10_EHCI_BASE 0x01c14000
|
||||||
#define AW_A10_OHCI_BASE 0x01c14400
|
#define AW_A10_OHCI_BASE 0x01c14400
|
||||||
#define AW_A10_SATA_BASE 0x01c18000
|
#define AW_A10_SATA_BASE 0x01c18000
|
||||||
|
#define AW_A10_WDT_BASE 0x01c20c90
|
||||||
#define AW_A10_RTC_BASE 0x01c20d00
|
#define AW_A10_RTC_BASE 0x01c20d00
|
||||||
#define AW_A10_I2C0_BASE 0x01c2ac00
|
#define AW_A10_I2C0_BASE 0x01c2ac00
|
||||||
|
|
||||||
@ -92,6 +93,8 @@ static void aw_a10_init(Object *obj)
|
|||||||
object_initialize_child(obj, "mmc0", &s->mmc0, TYPE_AW_SDHOST_SUN4I);
|
object_initialize_child(obj, "mmc0", &s->mmc0, TYPE_AW_SDHOST_SUN4I);
|
||||||
|
|
||||||
object_initialize_child(obj, "rtc", &s->rtc, TYPE_AW_RTC_SUN4I);
|
object_initialize_child(obj, "rtc", &s->rtc, TYPE_AW_RTC_SUN4I);
|
||||||
|
|
||||||
|
object_initialize_child(obj, "wdt", &s->wdt, TYPE_AW_WDT_SUN4I);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aw_a10_realize(DeviceState *dev, Error **errp)
|
static void aw_a10_realize(DeviceState *dev, Error **errp)
|
||||||
@ -203,6 +206,10 @@ static void aw_a10_realize(DeviceState *dev, Error **errp)
|
|||||||
sysbus_realize(SYS_BUS_DEVICE(&s->i2c0), &error_fatal);
|
sysbus_realize(SYS_BUS_DEVICE(&s->i2c0), &error_fatal);
|
||||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c0), 0, AW_A10_I2C0_BASE);
|
sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c0), 0, AW_A10_I2C0_BASE);
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c0), 0, qdev_get_gpio_in(dev, 7));
|
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c0), 0, qdev_get_gpio_in(dev, 7));
|
||||||
|
|
||||||
|
/* WDT */
|
||||||
|
sysbus_realize(SYS_BUS_DEVICE(&s->wdt), &error_fatal);
|
||||||
|
sysbus_mmio_map_overlap(SYS_BUS_DEVICE(&s->wdt), 0, AW_A10_WDT_BASE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void aw_a10_class_init(ObjectClass *oc, void *data)
|
static void aw_a10_class_init(ObjectClass *oc, void *data)
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "hw/misc/allwinner-a10-ccm.h"
|
#include "hw/misc/allwinner-a10-ccm.h"
|
||||||
#include "hw/misc/allwinner-a10-dramc.h"
|
#include "hw/misc/allwinner-a10-dramc.h"
|
||||||
#include "hw/i2c/allwinner-i2c.h"
|
#include "hw/i2c/allwinner-i2c.h"
|
||||||
|
#include "hw/watchdog/allwinner-wdt.h"
|
||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
|
|
||||||
#include "target/arm/cpu.h"
|
#include "target/arm/cpu.h"
|
||||||
@ -41,6 +42,7 @@ struct AwA10State {
|
|||||||
AwSdHostState mmc0;
|
AwSdHostState mmc0;
|
||||||
AWI2CState i2c0;
|
AWI2CState i2c0;
|
||||||
AwRtcState rtc;
|
AwRtcState rtc;
|
||||||
|
AwWdtState wdt;
|
||||||
MemoryRegion sram_a;
|
MemoryRegion sram_a;
|
||||||
EHCISysBusState ehci[AW_A10_NUM_USB];
|
EHCISysBusState ehci[AW_A10_NUM_USB];
|
||||||
OHCISysBusState ohci[AW_A10_NUM_USB];
|
OHCISysBusState ohci[AW_A10_NUM_USB];
|
||||||
|
Loading…
Reference in New Issue
Block a user