Skip to contentSkip to conversation

Fix vhub engine stop dma register setting.

PATCH In review Ryan Chen 3 participants 4 messages Jan 8, 2021 – Jan 11, 2021

Subsystems (2)
lore
Share & tools
lore

Ryan Chen

author reviewer
#0 lore raw

cover Fix vhub engine stop dma register setting.

This patch fixes vhub engine stop dma should have different register setting.

Ryan Chen (1):
usb: gadget: aspeed: fix stop dma register setting.

 drivers/usb/gadget/udc/aspeed-vhub/epn.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
Signature · 1 line
2.17.1
author reviewer
#1 lore raw

PATCH 1/1 usb: gadget: aspeed: fix stop dma register setting.

The vhub engine has two dma mode, one is descriptor list, another is single stage DMA. Each mode has different stop register setting. Descriptor list operation (bit2) : 0 disable reset, 1: enable reset Single mode operation (bit0) : 0 : disable, 1: enable

---
 drivers/usb/gadget/udc/aspeed-vhub/epn.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/usb/gadget/udc/aspeed-vhub/epn.c +4 -1
index 0bd6b20435b8..02d8bfae58fb 100644
@@ -420,7 +420,10 @@ static void ast_vhub_stop_active_req(struct ast_vhub_ep *ep,
 	u32 state, reg, loops;
 
 	/* Stop DMA activity */
-	writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
+	if (ep->epn.desc_mode)
+		writel(VHUB_EP_DMA_CTRL_RESET, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
+	else
+		writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
 
 	/* Wait for it to complete */
 	for (loops = 0; loops < 1000; loops++) {
Signature · 1 line
2.17.1
Acked-by on v1 1/1
#2 lore raw

Re: [PATCH 1/1] usb: gadget: aspeed: fix stop dma register setting.

Hi,

Quoted 6 lines · Ryan Chen

The vhub engine has two dma mode, one is descriptor list, another is single stage DMA. Each mode has different stop register setting. Descriptor list operation (bit2) : 0 disable reset, 1: enable reset Single mode operation (bit0) : 0 : disable, 1: enable

I don't have HW, but FWIW:

Signature · 1 line
balbi
maintainer Acked-by on v1 1/1
#3 lore raw

Re: [PATCH 1/1] usb: gadget: aspeed: fix stop dma register setting.

In reply to Ryan Chen
Quoted 16 lines · Ryan Chen

The vhub engine has two dma mode, one is descriptor list, another is single stage DMA. Each mode has different stop register setting. Descriptor list operation (bit2) : 0 disable reset, 1: enable reset Single mode operation (bit0) : 0 : disable, 1: enable

---
 drivers/usb/gadget/udc/aspeed-vhub/epn.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/usb/gadget/udc/aspeed-vhub/epn.c +0 -0
index 0bd6b20435b8..02d8bfae58fb 100644

drivers/usb/gadget/udc/aspeed-vhub/epn.c static void ast_vhub_stop_active_req(struct ast_vhub_ep *ep, · line 426

Quoted 8 lines
drivers/usb/gadget/udc/aspeed-vhub/epn.c +4 -1
@@ -420,7 +420,10 @@ static void ast_vhub_stop_active_req(struct ast_vhub_ep *ep,
        u32 state, reg, loops;
 
        /* Stop DMA activity */
-       writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
+       if (ep->epn.desc_mode)
+               writel(VHUB_EP_DMA_CTRL_RESET, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);
+       else
+               writel(0, ep->epn.regs + AST_VHUB_EP_DMA_CTLSTAT);

This looks correct, as whenever the driver re-enables DMA it uses ep->epn.dma_conf for the value of this register. So we're not losing any configuration by setting it to 0.

Fixes 7ecca2a4080c ("usb/gadget: Add driver for Aspeed SoC virtual hub")

I've cc'd Ben for his ack too.

Cheers,

Joel

Quoted 6 lines
drivers/usb/gadget/udc/aspeed-vhub/epn.c +0 -1
        /* Wait for it to complete */
        for (loops = 0; loops < 1000; loops++) {
--

2.17.1