From nobody Thu May 8 03:48:25 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1584032258; cv=none; d=zohomail.com; s=zohoarc; b=Tco5AGFidVa6BEvpucgoIywqdfGm/dlntqVAYKXyUNfU36FpMzPqnoU/RiozQE6lavduDKKfnDYppIUZttCuGW1jzXLiCOAEIX1IswoCHacIgi3FIXxFexavKjDtfgDhRG8bR7vnvcMpBMZDvzLWdwR4EjXaFWv3MJQ4uWc35Uw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584032258; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=horMPjJrgAXZmuAiBtVJBBX6joJcA8hn19QqR1BPc88=; b=SEipaikP7jtVShalrF96EpgrAUdOh6K8nSqkuaqQ5EMhU/ua9ylc7AdTkGqsLzMW0SUnGnM+WLT5EucWsOdxd1i8bU5trbG/H+GqudwpZf5XJeshPA/vmltCo1AneV9svEVHxt8jxkY8z8q9qc45Zf5DQBX/T4Q/PcsN52JzJmE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<peter.maydell@linaro.org> (p=none dis=none) header.from=<peter.maydell@linaro.org> Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584032258754371.33788724095086; Thu, 12 Mar 2020 09:57:38 -0700 (PDT) Received: from localhost ([::1]:45812 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces+importer=patchew.org@nongnu.org>) id 1jCR9N-000642-Ov for importer@patchew.org; Thu, 12 Mar 2020 12:57:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35700) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <peter.maydell@linaro.org>) id 1jCQxW-00005e-EY for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:45:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <peter.maydell@linaro.org>) id 1jCQxU-00059W-LW for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:45:22 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:32963) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from <peter.maydell@linaro.org>) id 1jCQxU-00059A-Ds for qemu-devel@nongnu.org; Thu, 12 Mar 2020 12:45:20 -0400 Received: by mail-wr1-x434.google.com with SMTP id a25so8394652wrd.0 for <qemu-devel@nongnu.org>; Thu, 12 Mar 2020 09:45:20 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id j15sm36838640wrp.85.2020.03.12.09.45.18 for <qemu-devel@nongnu.org> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 09:45:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=horMPjJrgAXZmuAiBtVJBBX6joJcA8hn19QqR1BPc88=; b=X+2nACSr07zImVMBJwzYlPZ9EOswCSskM4NRFlsLDzsthnS+e/vG9MInI092ZVO/vf lQ96xdorO6MC96K6vqAnTVWXj0BlMdzG3+Vk4IlDLtOlGueUKnepOINxzBltcJ/URP49 r3ULFRvM4mxxORvVmfwe4T4LiLkXjdN1JNs83apA4DNhS18+7ds/nKDI3eHLR61wEhaG 6k/FvxnvtwZ+gjfeRSqjtH0sMvcMPbeRfEJrEEdzO0eyg4/Kq87JjvFkq+juD86EnMif ZVb5f3yqVrfMcA6lrMOYWyYMQlfwRitQmk7LU3Aw8r2Z8uNYi1308WxdaBBB199wnr69 ZzSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=horMPjJrgAXZmuAiBtVJBBX6joJcA8hn19QqR1BPc88=; b=AnGaMC1VLc/Qx3GYUMlGxLWgHsMgj6ILqXJIlq320kAV3zyuU+eOuBj6jyYijMUMUd uLGyculRb3TEPqeWL3ujlSPpTO5CUtkQ5yD/LsuTf4P+bXkyJ43Ltfz+drf7n87D4wFS 1yOmKfydAR4g/aWZSoXvyGxhIvIPpcGfQemlfZzF+LVlsDXWrlQGqtG7i4Rssve74/KG EISx6phaEa1UCu27WRZj/4gKCDt+p5WMGTrmExxh2zkBu2bSzc0vfDD9q2vi3NRLEoxd MVWAmXDc9Q8BG3xfP+ppr2qOA/3J12dkJhB1MJWWSrSTbXHZwNxakUlpeMrXcKpHHRG1 7efg== X-Gm-Message-State: ANhLgQ3K7jmHwyeB6dZp60YUPJHU5GcoP7OHoFQKoJF5h2IXCdowGjvh p84FrmoDzDfEq5ELNf2nbL9J5/gWp3/PJg== X-Google-Smtp-Source: ADFU+vvZrLfQ3UtXbO4+gXK2ook+UU7VpIP537hgzt7j6BW+JYBEbBIH7SmJEqZCKcJTrAo3uiA6XQ== X-Received: by 2002:a5d:4683:: with SMTP id u3mr12493411wrq.251.1584031519114; Thu, 12 Mar 2020 09:45:19 -0700 (PDT) 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 Message-Id: <20200312164459.25924-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200312164459.25924-1-peter.maydell@linaro.org> References: <20200312164459.25924-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::434 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: <qemu-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe> List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel> List-Post: <mailto:qemu-devel@nongnu.org> List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help> List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=subscribe> Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" <qemu-devel-bounces+importer=patchew.org@nongnu.org> X-ZohoMail-DKIM: pass (identity @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=C3=A9 <philmd@redhat.com> Reviewed-by: Alex Benn=C3=A9e <alex.bennee@linaro.org> Tested-by: Philippe Mathieu-Daud=C3=A9 <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" =20 @@ -36,6 +37,14 @@ const hwaddr allwinner_h3_memmap[] =3D { [AW_H3_SRAM_A1] =3D 0x00000000, [AW_H3_SRAM_A2] =3D 0x00044000, [AW_H3_SRAM_C] =3D 0x00010000, + [AW_H3_EHCI0] =3D 0x01c1a000, + [AW_H3_OHCI0] =3D 0x01c1a400, + [AW_H3_EHCI1] =3D 0x01c1b000, + [AW_H3_OHCI1] =3D 0x01c1b400, + [AW_H3_EHCI2] =3D 0x01c1c000, + [AW_H3_OHCI2] =3D 0x01c1c400, + [AW_H3_EHCI3] =3D 0x01c1d000, + [AW_H3_OHCI3] =3D 0x01c1d400, [AW_H3_CCU] =3D 0x01c20000, [AW_H3_PIT] =3D 0x01c20c00, [AW_H3_UART0] =3D 0x01c28000, @@ -144,6 +153,14 @@ enum { AW_H3_GIC_SPI_UART3 =3D 3, AW_H3_GIC_SPI_TIMER0 =3D 18, AW_H3_GIC_SPI_TIMER1 =3D 19, + AW_H3_GIC_SPI_EHCI0 =3D 72, + AW_H3_GIC_SPI_OHCI0 =3D 73, + AW_H3_GIC_SPI_EHCI1 =3D 74, + AW_H3_GIC_SPI_OHCI1 =3D 75, + AW_H3_GIC_SPI_EHCI2 =3D 76, + AW_H3_GIC_SPI_OHCI2 =3D 77, + AW_H3_GIC_SPI_EHCI3 =3D 78, + AW_H3_GIC_SPI_OHCI3 =3D 79, }; =20 /* Allwinner H3 general constants */ @@ -284,6 +301,33 @@ static void allwinner_h3_realize(DeviceState *dev, Err= or **errp) qdev_init_nofail(DEVICE(&s->ccu)); sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccu), 0, s->memmap[AW_H3_CCU]); =20 + /* 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_CL= K. */ 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 =3D { .class_init =3D ehci_exynos4210_class_init, }; =20 +static void ehci_aw_h3_class_init(ObjectClass *oc, void *data) +{ + SysBusEHCIClass *sec =3D SYS_BUS_EHCI_CLASS(oc); + DeviceClass *dc =3D DEVICE_CLASS(oc); + + sec->capsbase =3D 0x0; + sec->opregbase =3D 0x10; + set_bit(DEVICE_CATEGORY_USB, dc->categories); +} + +static const TypeInfo ehci_aw_h3_type_info =3D { + .name =3D TYPE_AW_H3_EHCI, + .parent =3D TYPE_SYS_BUS_EHCI, + .class_init =3D ehci_aw_h3_class_init, +}; + static void ehci_tegra2_class_init(ObjectClass *oc, void *data) { SysBusEHCIClass *sec =3D 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 =20 config RASPI bool --=20 2.20.1