> -----Original Message-----
> From: Cédric Le Goater <c...@kaod.org>
> Sent: Tuesday, March 18, 2025 8:39 PM
> To: Troy Lee <troy_...@aspeedtech.com>; Peter Maydell
> <peter.mayd...@linaro.org>; Steven Lee <steven_...@aspeedtech.com>; Troy
> Lee <leet...@gmail.com>; Jamin Lin <jamin_...@aspeedtech.com>; Andrew
> Jeffery <and...@codeconstruct.com.au>; Joel Stanley <j...@jms.id.au>;
> open list:ASPEED BMCs <qemu-...@nongnu.org>; open list:All patches CC
> here <qemu-devel@nongnu.org>
> Cc: Yunlin Tang <yunlin.t...@aspeedtech.com>
> Subject: Re: [PATCH 2/2] hw/arm: ast27x0: Wire up EHCI controllers
> 
> On 3/17/25 07:59, Troy Lee wrote:
> > AST27x0 has 4 EHCI controllers, where each CPU and I/O die has 2
> > instances. This patch use existing TYPE_PLATFORM_EHCI. After wiring up
> > the EHCI controller, the ast2700a1-evb can find up to 4 USB EHCI
> > interfaces.
> >
> > ehci-platform 12061000.usb: EHCI Host Controller ehci-platform
> > 12061000.usb: new USB bus registered, assigned bus number 2
> > ehci-platform 12063000.usb: EHCI Host Controller ehci-platform
> > 12063000.usb: new USB bus registered, assigned bus number 3
> > ehci-platform 12061000.usb: irq 88, io mem 0x12061000 ehci-platform
> > 12063000.usb: irq 90, io mem 0x12063000 ehci-platform 14121000.usb:
> > EHCI Host Controller ehci-platform 14123000.usb: EHCI Host Controller
> > ehci-platform 12061000.usb: USB 2.0 started, EHCI 1.00 ehci-platform
> > 14121000.usb: new USB bus registered, assigned bus number 5
> > ehci-platform 14123000.usb: new USB bus registered, assigned bus
> > number 6 ehci-platform 14121000.usb: irq 91, io mem 0x14121000
> > ehci-platform 14123000.usb: irq 92, io mem 0x14123000 ehci-platform
> > 12063000.usb: USB 2.0 started, EHCI 1.00 usb usb2: Manufacturer: Linux
> > 6.6.78-dirty-bafd2830c17c-gbafd2830c17c-dirty ehci_hcd usb usb3:
> > Manufacturer: Linux 6.6.78-dirty-bafd2830c17c-gbafd2830c17c-dirty
> > ehci_hcd ehci-platform 14121000.usb: USB 2.0 started, EHCI 1.00 usb
> > usb5: Manufacturer: Linux
> > 6.6.78-dirty-bafd2830c17c-gbafd2830c17c-dirty ehci_hcd ehci-platform
> > 14123000.usb: USB 2.0 started, EHCI 1.00 usb usb6: Manufacturer: Linux
> > 6.6.78-dirty-bafd2830c17c-gbafd2830c17c-dirty ehci_hcd
> 
> This is a custom image ? and not the SDK v09.05.
> 

Yes, this is a customized v09.05 image by enabling ehci0~ehci3 node
in Kernel device tree.

Thanks for reviewing.

> > Note that, AST27x0A0 only has 2 EHCI controllers due to hw issue.
> >
> > Signed-off-by: Troy Lee <troy_...@aspeedtech.com>
> 
> Reviewed-by: Cédric Le Goater <c...@redhat.com>
> 
> Thanks,
> 
> C.
> 
> 
> > ---
> >   hw/arm/aspeed_ast27x0.c     | 28 ++++++++++++++++++++++++++++
> >   include/hw/arm/aspeed_soc.h |  4 +++-
> >   2 files changed, 31 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/arm/aspeed_ast27x0.c b/hw/arm/aspeed_ast27x0.c index
> > dce7255a2c..4ff4462ec1 100644
> > --- a/hw/arm/aspeed_ast27x0.c
> > +++ b/hw/arm/aspeed_ast27x0.c
> > @@ -25,6 +25,8 @@
> >
> >   static const hwaddr aspeed_soc_ast2700_memmap[] = {
> >       [ASPEED_DEV_SRAM]      =  0x10000000,
> > +    [ASPEED_DEV_EHCI1]     =  0x12061000,
> > +    [ASPEED_DEV_EHCI2]     =  0x12063000,
> >       [ASPEED_DEV_HACE]      =  0x12070000,
> >       [ASPEED_DEV_EMMC]      =  0x12090000,
> >       [ASPEED_DEV_INTC]      =  0x12100000,
> > @@ -47,6 +49,8 @@ static const hwaddr aspeed_soc_ast2700_memmap[]
> = {
> >       [ASPEED_DEV_ETH2]      =  0x14060000,
> >       [ASPEED_DEV_ETH3]      =  0x14070000,
> >       [ASPEED_DEV_SDHCI]     =  0x14080000,
> > +    [ASPEED_DEV_EHCI3]     =  0x14121000,
> > +    [ASPEED_DEV_EHCI4]     =  0x14123000,
> >       [ASPEED_DEV_ADC]       =  0x14C00000,
> >       [ASPEED_DEV_SCUIO]     =  0x14C02000,
> >       [ASPEED_DEV_GPIO]      =  0x14C0B000,
> > @@ -91,6 +95,8 @@ static const int aspeed_soc_ast2700a0_irqmap[] = {
> >       [ASPEED_DEV_TIMER7]    = 22,
> >       [ASPEED_DEV_TIMER8]    = 23,
> >       [ASPEED_DEV_DP]        = 28,
> > +    [ASPEED_DEV_EHCI1]     = 33,
> > +    [ASPEED_DEV_EHCI2]     = 37,
> >       [ASPEED_DEV_LPC]       = 128,
> >       [ASPEED_DEV_IBT]       = 128,
> >       [ASPEED_DEV_KCS]       = 128,
> > @@ -137,6 +143,8 @@ static const int aspeed_soc_ast2700a1_irqmap[] = {
> >       [ASPEED_DEV_TIMER7]    = 22,
> >       [ASPEED_DEV_TIMER8]    = 23,
> >       [ASPEED_DEV_DP]        = 28,
> > +    [ASPEED_DEV_EHCI1]     = 33,
> > +    [ASPEED_DEV_EHCI2]     = 37,
> >       [ASPEED_DEV_LPC]       = 192,
> >       [ASPEED_DEV_IBT]       = 192,
> >       [ASPEED_DEV_KCS]       = 192,
> > @@ -212,6 +220,8 @@ static const int ast2700_gic132_gic196_intcmap[] =
> {
> >       [ASPEED_DEV_UART10]    = 16,
> >       [ASPEED_DEV_UART11]    = 17,
> >       [ASPEED_DEV_UART12]    = 18,
> > +    [ASPEED_DEV_EHCI3]     = 28,
> > +    [ASPEED_DEV_EHCI4]     = 29,
> >   };
> >
> >   /* GICINT 133 */
> > @@ -434,6 +444,11 @@ static void aspeed_soc_ast2700_init(Object *obj)
> >           object_initialize_child(obj, "spi[*]", &s->spi[i], typename);
> >       }
> >
> > +    for (i = 0; i < sc->ehcis_num; i++) {
> > +        object_initialize_child(obj, "ehci[*]", &s->ehci[i],
> > +                                TYPE_PLATFORM_EHCI);
> > +    }
> > +
> >       snprintf(typename, sizeof(typename), "aspeed.sdmc-%s", socname);
> >       object_initialize_child(obj, "sdmc", &s->sdmc, typename);
> >       object_property_add_alias(obj, "ram-size", OBJECT(&s->sdmc), @@
> > -709,6 +724,17 @@ static void aspeed_soc_ast2700_realize(DeviceState
> *dev, Error **errp)
> >                           
> > ASPEED_SMC_GET_CLASS(&s->spi[i])->flash_window_base);
> >       }
> >
> > +    /* EHCI */
> > +    for (i = 0; i < sc->ehcis_num; i++) {
> > +        if (!sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), errp)) {
> > +            return;
> > +        }
> > +        aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->ehci[i]), 0,
> > +                        sc->memmap[ASPEED_DEV_EHCI1 + i]);
> > +        sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0,
> > +                           aspeed_soc_get_irq(s, ASPEED_DEV_EHCI1 + i));
> > +    }
> > +
> >       /*
> >        * SDMC - SDRAM Memory Controller
> >        * The SDMC controller is unlocked at SPL stage.
> > @@ -900,6 +926,7 @@ static void
> aspeed_soc_ast2700a0_class_init(ObjectClass *oc, void *data)
> >       sc->silicon_rev  = AST2700_A0_SILICON_REV;
> >       sc->sram_size    = 0x20000;
> >       sc->spis_num     = 3;
> > +    sc->ehcis_num    = 2;
> >       sc->wdts_num     = 8;
> >       sc->macs_num     = 1;
> >       sc->uarts_num    = 13;
> > @@ -927,6 +954,7 @@ static void
> aspeed_soc_ast2700a1_class_init(ObjectClass *oc, void *data)
> >       sc->silicon_rev  = AST2700_A1_SILICON_REV;
> >       sc->sram_size    = 0x20000;
> >       sc->spis_num     = 3;
> > +    sc->ehcis_num    = 4;
> >       sc->wdts_num     = 8;
> >       sc->macs_num     = 3;
> >       sc->uarts_num    = 13;
> > diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
> > index f069d17d16..c1e80c8908 100644
> > --- a/include/hw/arm/aspeed_soc.h
> > +++ b/include/hw/arm/aspeed_soc.h
> > @@ -43,7 +43,7 @@
> >   #include "hw/intc/arm_gicv3.h"
> >
> >   #define ASPEED_SPIS_NUM  3
> > -#define ASPEED_EHCIS_NUM 2
> > +#define ASPEED_EHCIS_NUM 4
> >   #define ASPEED_WDTS_NUM  8
> >   #define ASPEED_CPUS_NUM  4
> >   #define ASPEED_MACS_NUM  4
> > @@ -192,6 +192,8 @@ enum {
> >       ASPEED_DEV_SPI2,
> >       ASPEED_DEV_EHCI1,
> >       ASPEED_DEV_EHCI2,
> > +    ASPEED_DEV_EHCI3,
> > +    ASPEED_DEV_EHCI4,
> >       ASPEED_DEV_VIC,
> >       ASPEED_DEV_INTC,
> >       ASPEED_DEV_INTCIO,

Reply via email to