The Allwinner A10 GPIO is added to the Allwinner A10 description, so it is available when Cubieboard is emulated.
Update the documentation for Cubieboard to indicate GPIO availability. Signed-off-by: Strahinja Jankovic <[email protected]> --- docs/system/arm/cubieboard.rst | 1 + hw/arm/Kconfig | 1 + hw/arm/allwinner-a10.c | 8 ++++++++ include/hw/arm/allwinner-a10.h | 2 ++ 4 files changed, 12 insertions(+) diff --git a/docs/system/arm/cubieboard.rst b/docs/system/arm/cubieboard.rst index 90d24c73a1..ee9f489ead 100644 --- a/docs/system/arm/cubieboard.rst +++ b/docs/system/arm/cubieboard.rst @@ -12,6 +12,7 @@ Emulated devices: - RTC - EMAC - SDHCI +- GPIO - USB controller - SATA controller - TWI (I2C) controller diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 260d2f0751..6d326746c9 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -311,6 +311,7 @@ config ALLWINNER_A10 select ALLWINNER_EMAC select ALLWINNER_I2C select ALLWINNER_A10_SPI + select ALLWINNER_GPIO select AXP2XX_PMU select SERIAL_MM select UNIMP diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c index 66f30757dd..66fe484ae0 100644 --- a/hw/arm/allwinner-a10.c +++ b/hw/arm/allwinner-a10.c @@ -41,6 +41,7 @@ #define AW_A10_EHCI_BASE 0x01c14000 #define AW_A10_OHCI_BASE 0x01c14400 #define AW_A10_SATA_BASE 0x01c18000 +#define AW_A10_GPIO_BASE 0x01c20800 #define AW_A10_WDT_BASE 0x01c20c90 #define AW_A10_RTC_BASE 0x01c20d00 #define AW_A10_I2C0_BASE 0x01c2ac00 @@ -83,6 +84,8 @@ static void aw_a10_init(Object *obj) object_initialize_child(obj, "spi0", &s->spi0, TYPE_AW_A10_SPI); + object_initialize_child(obj, "gpio", &s->gpio, TYPE_AW_GPIO); + for (size_t i = 0; i < AW_A10_NUM_USB; i++) { object_initialize_child(obj, "ehci[*]", &s->ehci[i], TYPE_PLATFORM_EHCI); @@ -203,6 +206,11 @@ static void aw_a10_realize(DeviceState *dev, Error **errp) sysbus_mmio_map(SYS_BUS_DEVICE(&s->spi0), 0, AW_A10_SPI0_BASE); sysbus_connect_irq(SYS_BUS_DEVICE(&s->spi0), 0, qdev_get_gpio_in(dev, 10)); + /* GPIO */ + sysbus_realize(SYS_BUS_DEVICE(&s->gpio), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, AW_A10_GPIO_BASE); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0, qdev_get_gpio_in(dev, 28)); + /* 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); diff --git a/include/hw/arm/allwinner-a10.h b/include/hw/arm/allwinner-a10.h index 445ba1be21..8b7736c7bd 100644 --- a/include/hw/arm/allwinner-a10.h +++ b/include/hw/arm/allwinner-a10.h @@ -13,6 +13,7 @@ #include "hw/misc/allwinner-a10-dramc.h" #include "hw/i2c/allwinner-i2c.h" #include "hw/ssi/allwinner-a10-spi.h" +#include "hw/gpio/allwinner-gpio.h" #include "hw/watchdog/allwinner-wdt.h" #include "system/block-backend.h" @@ -42,6 +43,7 @@ struct AwA10State { AwSdHostState mmc0; AWI2CState i2c0; AWA10SPIState spi0; + AWGPIOState gpio; AwRtcState rtc; AwWdtState wdt; MemoryRegion sram_a; -- 2.55.0
