summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Chang <waynec@nvidia.com>2025-04-18 16:12:28 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-05-18 08:24:08 +0200
commit0b32d03e79c1f02b32cde41a9838a6e21d2e8e60 (patch)
treef9c1ab1ad2240d0ca1c2d701e6422a52e4da1796
parentdffa51cf2d3f5bcbc5cf4471b9f4dfbf2ef3c810 (diff)
downloadlinux-0b32d03e79c1f02b32cde41a9838a6e21d2e8e60.tar.gz
linux-0b32d03e79c1f02b32cde41a9838a6e21d2e8e60.tar.bz2
linux-0b32d03e79c1f02b32cde41a9838a6e21d2e8e60.zip
usb: gadget: tegra-xudc: ACK ST_RC after clearing CTRL_RUN
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>
-rw-r--r--drivers/usb/gadget/udc/tegra-xudc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/gadget/udc/tegra-xudc.c b/drivers/usb/gadget/udc/tegra-xudc.c
index 7aa46d426f31..9bb54da8a6ae 100644
--- a/drivers/usb/gadget/udc/tegra-xudc.c
+++ b/drivers/usb/gadget/udc/tegra-xudc.c
@@ -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);