From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 15/36] hw/arm/allwinner-h3: add USB host controller
Date: Thu, 12 Mar 2020 16:44:38 +0000 [thread overview]
Message-ID: <20200312164459.25924-16-peter.maydell@linaro.org> (raw)
In-Reply-To: <20200312164459.25924-1-peter.maydell@linaro.org>
From: Niek Linnenbank <nieklinnenbank@gmail.com>
The Allwinner H3 System on Chip contains multiple USB 2.0 bus
connections which provide software access using the Enhanced
Host Controller Interface (EHCI) and Open Host Controller
Interface (OHCI) interfaces. This commit adds support for
both interfaces in the Allwinner H3 System on Chip.
Signed-off-by: Niek Linnenbank <nieklinnenbank@gmail.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20200311221854.30370-5-nieklinnenbank@gmail.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
hw/usb/hcd-ehci.h | 1 +
include/hw/arm/allwinner-h3.h | 8 +++++++
hw/arm/allwinner-h3.c | 44 +++++++++++++++++++++++++++++++++++
hw/usb/hcd-ehci-sysbus.c | 17 ++++++++++++++
hw/arm/Kconfig | 2 ++
5 files changed, 72 insertions(+)
diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h
index 0298238f0b9..edb59311c4e 100644
--- a/hw/usb/hcd-ehci.h
+++ b/hw/usb/hcd-ehci.h
@@ -342,6 +342,7 @@ typedef struct EHCIPCIState {
#define TYPE_SYS_BUS_EHCI "sysbus-ehci-usb"
#define TYPE_PLATFORM_EHCI "platform-ehci-usb"
#define TYPE_EXYNOS4210_EHCI "exynos4210-ehci-usb"
+#define TYPE_AW_H3_EHCI "aw-h3-ehci-usb"
#define TYPE_TEGRA2_EHCI "tegra2-ehci-usb"
#define TYPE_PPC4xx_EHCI "ppc4xx-ehci-usb"
#define TYPE_FUSBH200_EHCI "fusbh200-ehci-usb"
diff --git a/include/hw/arm/allwinner-h3.h b/include/hw/arm/allwinner-h3.h
index abdc20871a6..4f4dcbcd177 100644
--- a/include/hw/arm/allwinner-h3.h
+++ b/include/hw/arm/allwinner-h3.h
@@ -56,6 +56,14 @@ enum {
AW_H3_SRAM_A1,
AW_H3_SRAM_A2,
AW_H3_SRAM_C,
+ AW_H3_EHCI0,
+ AW_H3_OHCI0,
+ AW_H3_EHCI1,
+ AW_H3_OHCI1,
+ AW_H3_EHCI2,
+ AW_H3_OHCI2,
+ AW_H3_EHCI3,
+ AW_H3_OHCI3,
AW_H3_CCU,
AW_H3_PIT,
AW_H3_UART0,
diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c
index 1fff3c317b4..c205f06738a 100644
--- a/hw/arm/allwinner-h3.c
+++ b/hw/arm/allwinner-h3.c
@@ -28,6 +28,7 @@
#include "hw/sysbus.h"
#include "hw/char/serial.h"
#include "hw/misc/unimp.h"
+#include "hw/usb/hcd-ehci.h"
#include "sysemu/sysemu.h"
#include "hw/arm/allwinner-h3.h"
@@ -36,6 +37,14 @@ const hwaddr allwinner_h3_memmap[] = {
[AW_H3_SRAM_A1] = 0x00000000,
[AW_H3_SRAM_A2] = 0x00044000,
[AW_H3_SRAM_C] = 0x00010000,
+ [AW_H3_EHCI0] = 0x01c1a000,
+ [AW_H3_OHCI0] = 0x01c1a400,
+ [AW_H3_EHCI1] = 0x01c1b000,
+ [AW_H3_OHCI1] = 0x01c1b400,
+ [AW_H3_EHCI2] = 0x01c1c000,
+ [AW_H3_OHCI2] = 0x01c1c400,
+ [AW_H3_EHCI3] = 0x01c1d000,
+ [AW_H3_OHCI3] = 0x01c1d400,
[AW_H3_CCU] = 0x01c20000,
[AW_H3_PIT] = 0x01c20c00,
[AW_H3_UART0] = 0x01c28000,
@@ -144,6 +153,14 @@ enum {
AW_H3_GIC_SPI_UART3 = 3,
AW_H3_GIC_SPI_TIMER0 = 18,
AW_H3_GIC_SPI_TIMER1 = 19,
+ AW_H3_GIC_SPI_EHCI0 = 72,
+ AW_H3_GIC_SPI_OHCI0 = 73,
+ AW_H3_GIC_SPI_EHCI1 = 74,
+ AW_H3_GIC_SPI_OHCI1 = 75,
+ AW_H3_GIC_SPI_EHCI2 = 76,
+ AW_H3_GIC_SPI_OHCI2 = 77,
+ AW_H3_GIC_SPI_EHCI3 = 78,
+ AW_H3_GIC_SPI_OHCI3 = 79,
};
/* Allwinner H3 general constants */
@@ -284,6 +301,33 @@ static void allwinner_h3_realize(DeviceState *dev, Error **errp)
qdev_init_nofail(DEVICE(&s->ccu));
sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccu), 0, s->memmap[AW_H3_CCU]);
+ /* Universal Serial Bus */
+ sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI0],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_EHCI0));
+ sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI1],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_EHCI1));
+ sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI2],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_EHCI2));
+ sysbus_create_simple(TYPE_AW_H3_EHCI, s->memmap[AW_H3_EHCI3],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_EHCI3));
+
+ sysbus_create_simple("sysbus-ohci", s->memmap[AW_H3_OHCI0],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_OHCI0));
+ sysbus_create_simple("sysbus-ohci", s->memmap[AW_H3_OHCI1],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_OHCI1));
+ sysbus_create_simple("sysbus-ohci", s->memmap[AW_H3_OHCI2],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_OHCI2));
+ sysbus_create_simple("sysbus-ohci", s->memmap[AW_H3_OHCI3],
+ qdev_get_gpio_in(DEVICE(&s->gic),
+ AW_H3_GIC_SPI_OHCI3));
+
/* UART0. For future clocktree API: All UARTS are connected to APB2_CLK. */
serial_mm_init(get_system_memory(), s->memmap[AW_H3_UART0], 2,
qdev_get_gpio_in(DEVICE(&s->gic), AW_H3_GIC_SPI_UART0),
diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c
index 5b7991cffe4..3730736540f 100644
--- a/hw/usb/hcd-ehci-sysbus.c
+++ b/hw/usb/hcd-ehci-sysbus.c
@@ -131,6 +131,22 @@ static const TypeInfo ehci_exynos4210_type_info = {
.class_init = ehci_exynos4210_class_init,
};
+static void ehci_aw_h3_class_init(ObjectClass *oc, void *data)
+{
+ SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc);
+ DeviceClass *dc = DEVICE_CLASS(oc);
+
+ sec->capsbase = 0x0;
+ sec->opregbase = 0x10;
+ set_bit(DEVICE_CATEGORY_USB, dc->categories);
+}
+
+static const TypeInfo ehci_aw_h3_type_info = {
+ .name = TYPE_AW_H3_EHCI,
+ .parent = TYPE_SYS_BUS_EHCI,
+ .class_init = ehci_aw_h3_class_init,
+};
+
static void ehci_tegra2_class_init(ObjectClass *oc, void *data)
{
SysBusEHCIClass *sec = SYS_BUS_EHCI_CLASS(oc);
@@ -252,6 +268,7 @@ static void ehci_sysbus_register_types(void)
type_register_static(&ehci_type_info);
type_register_static(&ehci_platform_type_info);
type_register_static(&ehci_exynos4210_type_info);
+ type_register_static(&ehci_aw_h3_type_info);
type_register_static(&ehci_tegra2_type_info);
type_register_static(&ehci_ppc4xx_type_info);
type_register_static(&ehci_fusbh200_type_info);
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index fcdc651b73e..f6422d54664 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -304,6 +304,8 @@ config ALLWINNER_H3
select ARM_TIMER
select ARM_GIC
select UNIMP
+ select USB_OHCI
+ select USB_EHCI_SYSBUS
config RASPI
bool
--
2.20.1
next prev parent reply other threads:[~2020-03-12 16:57 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-12 16:44 [PULL 00/36] target-arm queue Peter Maydell
2020-03-12 16:44 ` [PULL 01/36] hw/intc/armv7m_nvic: Rebuild hflags on reset Peter Maydell
2020-03-12 16:44 ` [PULL 02/36] target/arm: Update hflags in trans_CPS_v7m() Peter Maydell
2020-03-12 16:44 ` [PULL 03/36] target/arm: Recalculate hflags correctly after writes to CONTROL Peter Maydell
2020-03-12 16:44 ` [PULL 04/36] target/arm: Fix some comment typos Peter Maydell
2020-03-12 16:44 ` [PULL 05/36] aspeed/smc: Add some tracing Peter Maydell
2020-03-12 16:44 ` [PULL 06/36] aspeed/smc: Fix User mode select/unselect scheme Peter Maydell
2020-03-12 16:44 ` [PULL 07/36] target/arm: Check addresses for disabled regimes Peter Maydell
2020-03-12 16:44 ` [PULL 08/36] target/arm: Disable clean_data_tbi for system mode Peter Maydell
2020-03-12 16:44 ` [PULL 09/36] hw/arm/cubieboard: make sure SOC object isn't leaked Peter Maydell
2020-03-12 16:44 ` [PULL 10/36] hw/arm/fsl-imx25: Wire up eSDHC controllers Peter Maydell
2020-03-12 16:44 ` [PULL 11/36] hw/arm/fsl-imx25: Wire up USB controllers Peter Maydell
2020-03-12 16:44 ` [PULL 12/36] hw/arm: add Allwinner H3 System-on-Chip Peter Maydell
2020-03-12 16:44 ` [PULL 13/36] hw/arm: add Xunlong Orange Pi PC machine Peter Maydell
2020-03-12 16:44 ` [PULL 14/36] hw/arm/allwinner-h3: add Clock Control Unit Peter Maydell
2020-03-12 16:44 ` Peter Maydell [this message]
2020-03-12 16:44 ` [PULL 16/36] hw/arm/allwinner-h3: add System Control module Peter Maydell
2020-03-12 16:44 ` [PULL 17/36] hw/arm/allwinner: add CPU Configuration module Peter Maydell
2020-03-12 16:44 ` [PULL 18/36] hw/arm/allwinner: add Security Identifier device Peter Maydell
2020-03-12 16:44 ` [PULL 19/36] hw/arm/allwinner: add SD/MMC host controller Peter Maydell
2020-03-12 16:44 ` [PULL 20/36] hw/arm/allwinner-h3: add EMAC ethernet device Peter Maydell
2020-03-12 16:44 ` [PULL 21/36] hw/arm/allwinner-h3: add Boot ROM support Peter Maydell
2020-03-20 12:07 ` Peter Maydell
2020-03-21 17:17 ` Niek Linnenbank
2020-03-21 19:47 ` Peter Maydell
2020-03-12 16:44 ` [PULL 22/36] hw/arm/allwinner-h3: add SDRAM controller device Peter Maydell
2020-03-20 15:46 ` Peter Maydell
2020-03-22 20:23 ` Niek Linnenbank
2020-03-22 21:17 ` Peter Maydell
2020-03-12 16:44 ` [PULL 23/36] hw/arm/allwinner: add RTC device support Peter Maydell
2020-03-12 16:44 ` [PULL 24/36] tests/boot_linux_console: Add a quick test for the OrangePi PC board Peter Maydell
2020-03-12 16:44 ` [PULL 25/36] tests/boot_linux_console: Add initrd test for the Orange Pi " Peter Maydell
2020-03-12 16:44 ` [PULL 26/36] tests/boot_linux_console: Add a SD card test for the OrangePi " Peter Maydell
2020-03-12 16:44 ` [PULL 27/36] tests/boot_linux_console: Add a SLOW test booting Ubuntu on OrangePi PC Peter Maydell
2020-03-12 16:44 ` [PULL 28/36] tests/boot_linux_console: Test booting NetBSD via U-Boot " Peter Maydell
2020-03-12 16:44 ` [PULL 29/36] docs: add Orange Pi PC document Peter Maydell
2020-03-12 16:44 ` [PULL 30/36] hw/arm/virt: Document 'max' value in gic-version property description Peter Maydell
2020-03-12 16:44 ` [PULL 31/36] hw/arm/virt: Introduce VirtGICType enum type Peter Maydell
2020-03-12 16:44 ` [PULL 32/36] hw/arm/virt: Introduce finalize_gic_version() Peter Maydell
2020-03-12 16:44 ` [PULL 33/36] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap Peter Maydell
2020-03-12 16:44 ` [PULL 34/36] hw/arm/virt: kvm: Restructure finalize_gic_version() Peter Maydell
2020-03-12 16:44 ` [PULL 35/36] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work Peter Maydell
2020-03-12 16:44 ` [PULL 36/36] target/arm: kvm: Inject events at the last stage of sync Peter Maydell
2020-03-12 20:32 ` [PULL 00/36] target-arm queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200312164459.25924-16-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).