]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN
authorWayne Chang <waynec@nvidia.com>
Fri, 18 Apr 2025 08:12:28 +0000 (16:12 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 18 May 2025 06:24:08 +0000 (08:24 +0200)
commit 59820fde001500c167342257650541280c622b73 upstream.

We identified a bug where the ST_RC bit in the status register was not
being acknowledged after clearing the CTRL_RUN bit in the control
register. This could lead to unexpected behavior in the USB gadget
drivers.

This patch resolves the issue by adding the necessary code to explicitly
acknowledge ST_RC after clearing CTRL_RUN based on the programming
sequence, ensuring proper state transition.

Fixes: 49db427232fe ("usb: gadget: Add UDC driver for tegra XUSB device mode controller")
Cc: stable <stable@kernel.org>
Signed-off-by: Wayne Chang <waynec@nvidia.com>
Link: https://lore.kernel.org/r/20250418081228.1194779-1-waynec@nvidia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/udc/tegra-xudc.c

index 7aa46d426f31b26a1ee4e650f28871db1e3d4de4..9bb54da8a6ae15de4fdcfd2725e79fcd8daf2d0d 100644 (file)
@@ -1749,6 +1749,10 @@ static int __tegra_xudc_ep_disable(struct tegra_xudc_ep *ep)
                val = xudc_readl(xudc, CTRL);
                val &= ~CTRL_RUN;
                xudc_writel(xudc, val, CTRL);
+
+               val = xudc_readl(xudc, ST);
+               if (val & ST_RC)
+                       xudc_writel(xudc, ST_RC, ST);
        }
 
        dev_info(xudc->dev, "ep %u disabled\n", ep->index);