[PATCH linux dev-5.4 1/2] usb: gadget: aspeed: add ast2600 vhub support
Tao Ren
rentao.bupt at gmail.com
Fri Jan 17 10:57:30 AEDT 2020
On Fri, Jan 17, 2020 at 10:13:57AM +1030, Andrew Jeffery wrote:
>
>
> On Fri, 17 Jan 2020, at 09:55, rentao.bupt at gmail.com wrote:
> > From: Tao Ren <rentao.bupt at gmail.com>
> >
> > Add AST2600 support in aspeed-vhub driver.
> >
> > There are 3 major differences between AST2500 and AST2600 vhub:
> > - AST2600 supports 7 downstream devices while AST2500 supports 5.
> > - AST2600 supports 21 programmable endpoints while AST2500 supports 15.
> > - EP0 data buffer's 8-byte DMA alignment restriction is removed from
> > AST2600.
> >
> > Signed-off-by: Tao Ren <rentao.bupt at gmail.com>
> > ---
> > drivers/usb/gadget/udc/aspeed-vhub/Kconfig | 4 +--
> > drivers/usb/gadget/udc/aspeed-vhub/core.c | 25 ++++++-----------
> > drivers/usb/gadget/udc/aspeed-vhub/vhub.h | 32 ++++++++++++++++------
> > 3 files changed, 35 insertions(+), 26 deletions(-)
> >
> > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/Kconfig
> > b/drivers/usb/gadget/udc/aspeed-vhub/Kconfig
> > index 83ba8a2eb6af..605500b19cf3 100644
> > --- a/drivers/usb/gadget/udc/aspeed-vhub/Kconfig
> > +++ b/drivers/usb/gadget/udc/aspeed-vhub/Kconfig
> > @@ -4,5 +4,5 @@ config USB_ASPEED_VHUB
> > depends on ARCH_ASPEED || COMPILE_TEST
> > depends on USB_LIBCOMPOSITE
> > help
> > - USB peripheral controller for the Aspeed AST2500 family
> > - SoCs supporting the "vHub" functionality and USB2.0
> > + USB peripheral controller for the Aspeed AST2400, AST2500 and
> > + AST2600 family SoCs supporting the "vHub" functionality and USB2.0
> > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/core.c
> > b/drivers/usb/gadget/udc/aspeed-vhub/core.c
> > index 90b134d5dca9..5fafe91d3619 100644
> > --- a/drivers/usb/gadget/udc/aspeed-vhub/core.c
> > +++ b/drivers/usb/gadget/udc/aspeed-vhub/core.c
> > @@ -97,6 +97,7 @@ void ast_vhub_free_request(struct usb_ep *u_ep,
> > struct usb_request *u_req)
> >
> > static irqreturn_t ast_vhub_irq(int irq, void *data)
> > {
> > + u32 i;
> > struct ast_vhub *vhub = data;
> > irqreturn_t iret = IRQ_NONE;
> > u32 istat;
> > @@ -121,7 +122,7 @@ static irqreturn_t ast_vhub_irq(int irq, void *data)
> >
> > /* Handle generic EPs first */
> > if (istat & VHUB_IRQ_EP_POOL_ACK_STALL) {
> > - u32 i, ep_acks = readl(vhub->regs + AST_VHUB_EP_ACK_ISR);
> > + u32 ep_acks = readl(vhub->regs + AST_VHUB_EP_ACK_ISR);
> > writel(ep_acks, vhub->regs + AST_VHUB_EP_ACK_ISR);
> >
> > for (i = 0; ep_acks && i < AST_VHUB_NUM_GEN_EPs; i++) {
> > @@ -134,21 +135,10 @@ static irqreturn_t ast_vhub_irq(int irq, void *data)
> > }
> >
> > /* Handle device interrupts */
> > - if (istat & (VHUB_IRQ_DEVICE1 |
> > - VHUB_IRQ_DEVICE2 |
> > - VHUB_IRQ_DEVICE3 |
> > - VHUB_IRQ_DEVICE4 |
> > - VHUB_IRQ_DEVICE5)) {
> > - if (istat & VHUB_IRQ_DEVICE1)
> > - ast_vhub_dev_irq(&vhub->ports[0].dev);
> > - if (istat & VHUB_IRQ_DEVICE2)
> > - ast_vhub_dev_irq(&vhub->ports[1].dev);
> > - if (istat & VHUB_IRQ_DEVICE3)
> > - ast_vhub_dev_irq(&vhub->ports[2].dev);
> > - if (istat & VHUB_IRQ_DEVICE4)
> > - ast_vhub_dev_irq(&vhub->ports[3].dev);
> > - if (istat & VHUB_IRQ_DEVICE5)
> > - ast_vhub_dev_irq(&vhub->ports[4].dev);
> > + for (i = 0; i < AST_VHUB_NUM_PORTS; i++) {
> > + u32 dev_irq = VHUB_IRQ_DEVICE1 << i;
> > + if (istat & dev_irq)
> > + ast_vhub_dev_irq(&vhub->ports[i].dev);
> > }
> >
> > /* Handle top-level vHub EP0 interrupts */
> > @@ -407,6 +397,9 @@ static const struct of_device_id ast_vhub_dt_ids[]
> > = {
> > {
> > .compatible = "aspeed,ast2500-usb-vhub",
> > },
> > + {
> > + .compatible = "aspeed,ast2600-usb-vhub",
> > + },
> > { }
> > };
> > MODULE_DEVICE_TABLE(of, ast_vhub_dt_ids);
> > diff --git a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> > b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> > index 761919e220d3..76935d02decf 100644
> > --- a/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> > +++ b/drivers/usb/gadget/udc/aspeed-vhub/vhub.h
> > @@ -2,6 +2,23 @@
> > #ifndef __ASPEED_VHUB_H
> > #define __ASPEED_VHUB_H
> >
> > +/*****************************
> > + * *
> > + * Maximum devices/endpoints *
> > + * *
> > + *****************************/
> > +
> > +#ifdef CONFIG_MACH_ASPEED_G6
>
> No, this prevents building a kernel supporting multiple AST generations. Please
> describe the differences in a platform data struct attached to struct of_device_id.
Got it. I took "#ifdef" approach just because it involves little
changes. Let me move to of_device_id direction then.
> Also, what's the plan for upstreaming these changes? It's okay to send them for
> inclusion in the openbmc tree if you're wanting them to bake there for some
> more widespread testing, but it's not clear what the intent is.
>
> Cheers,
>
> Andrew
My major goal was to get more testing and early feedback. Given we've
decided to go with of_device_id approach, let's ignore the patchs then.
Cheers,
Tao
More information about the openbmc
mailing list