mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
hw/arm/allwinner: add RTC device support
Allwinner System-on-Chips usually contain a Real Time Clock (RTC) for non-volatile system date and time keeping. This commit adds a generic Allwinner RTC device that supports the RTC devices found in Allwinner SoC family sun4i (A10), sun7i (A20) and sun6i and newer (A31, H2+, H3, etc). The following RTC functionality and features are implemented: * Year-Month-Day read/write * Hour-Minute-Second read/write * General Purpose storage The following boards are extended with the RTC device: * Cubieboard (hw/arm/cubieboard.c) * Orange Pi PC (hw/arm/orangepi.c) Signed-off-by: Niek Linnenbank <nieklinnenbank@gmail.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-id: 20200311221854.30370-13-nieklinnenbank@gmail.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
b71d0385e9
commit
a9ad9e73a7
8 changed files with 571 additions and 1 deletions
|
@ -35,6 +35,7 @@
|
|||
#define AW_A10_EHCI_BASE 0x01c14000
|
||||
#define AW_A10_OHCI_BASE 0x01c14400
|
||||
#define AW_A10_SATA_BASE 0x01c18000
|
||||
#define AW_A10_RTC_BASE 0x01c20d00
|
||||
|
||||
static void aw_a10_init(Object *obj)
|
||||
{
|
||||
|
@ -68,6 +69,9 @@ static void aw_a10_init(Object *obj)
|
|||
|
||||
sysbus_init_child_obj(obj, "mmc0", &s->mmc0, sizeof(s->mmc0),
|
||||
TYPE_AW_SDHOST_SUN4I);
|
||||
|
||||
sysbus_init_child_obj(obj, "rtc", &s->rtc, sizeof(s->rtc),
|
||||
TYPE_AW_RTC_SUN4I);
|
||||
}
|
||||
|
||||
static void aw_a10_realize(DeviceState *dev, Error **errp)
|
||||
|
@ -175,6 +179,10 @@ static void aw_a10_realize(DeviceState *dev, Error **errp)
|
|||
sysbus_connect_irq(SYS_BUS_DEVICE(&s->mmc0), 0, qdev_get_gpio_in(dev, 32));
|
||||
object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->mmc0),
|
||||
"sd-bus", &error_abort);
|
||||
|
||||
/* RTC */
|
||||
qdev_init_nofail(DEVICE(&s->rtc));
|
||||
sysbus_mmio_map_overlap(SYS_BUS_DEVICE(&s->rtc), 0, AW_A10_RTC_BASE, 10);
|
||||
}
|
||||
|
||||
static void aw_a10_class_init(ObjectClass *oc, void *data)
|
||||
|
|
|
@ -63,6 +63,7 @@ const hwaddr allwinner_h3_memmap[] = {
|
|||
[AW_H3_GIC_CPU] = 0x01c82000,
|
||||
[AW_H3_GIC_HYP] = 0x01c84000,
|
||||
[AW_H3_GIC_VCPU] = 0x01c86000,
|
||||
[AW_H3_RTC] = 0x01f00000,
|
||||
[AW_H3_CPUCFG] = 0x01f01c00,
|
||||
[AW_H3_SDRAM] = 0x40000000
|
||||
};
|
||||
|
@ -118,7 +119,6 @@ struct AwH3Unimplemented {
|
|||
{ "csi", 0x01cb0000, 320 * KiB },
|
||||
{ "tve", 0x01e00000, 64 * KiB },
|
||||
{ "hdmi", 0x01ee0000, 128 * KiB },
|
||||
{ "rtc", 0x01f00000, 1 * KiB },
|
||||
{ "r_timer", 0x01f00800, 1 * KiB },
|
||||
{ "r_intc", 0x01f00c00, 1 * KiB },
|
||||
{ "r_wdog", 0x01f01000, 1 * KiB },
|
||||
|
@ -235,6 +235,9 @@ static void allwinner_h3_init(Object *obj)
|
|||
"ram-addr", &error_abort);
|
||||
object_property_add_alias(obj, "ram-size", OBJECT(&s->dramc),
|
||||
"ram-size", &error_abort);
|
||||
|
||||
sysbus_init_child_obj(obj, "rtc", &s->rtc, sizeof(s->rtc),
|
||||
TYPE_AW_RTC_SUN6I);
|
||||
}
|
||||
|
||||
static void allwinner_h3_realize(DeviceState *dev, Error **errp)
|
||||
|
@ -425,6 +428,10 @@ static void allwinner_h3_realize(DeviceState *dev, Error **errp)
|
|||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->dramc), 1, s->memmap[AW_H3_DRAMCTL]);
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->dramc), 2, s->memmap[AW_H3_DRAMPHY]);
|
||||
|
||||
/* RTC */
|
||||
qdev_init_nofail(DEVICE(&s->rtc));
|
||||
sysbus_mmio_map(SYS_BUS_DEVICE(&s->rtc), 0, s->memmap[AW_H3_RTC]);
|
||||
|
||||
/* Unimplemented devices */
|
||||
for (i = 0; i < ARRAY_SIZE(unimplemented); i++) {
|
||||
create_unimplemented_device(unimplemented[i].device_name,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue