Skip to content

Commit 14e4971

Browse files
Selvarasu Ganesangregkh
authored andcommitted
usb: dwc3: core: Prevent USB core invalid event buffer address access
This commit addresses an issue where the USB core could access an invalid event buffer address during runtime suspend, potentially causing SMMU faults and other memory issues in Exynos platforms. The problem arises from the following sequence. 1. In dwc3_gadget_suspend, there is a chance of a timeout when moving the USB core to the halt state after clearing the run/stop bit by software. 2. In dwc3_core_exit, the event buffer is cleared regardless of the USB core's status, which may lead to an SMMU faults and other memory issues. if the USB core tries to access the event buffer address. To prevent this hardware quirk on Exynos platforms, this commit ensures that the event buffer address is not cleared by software when the USB core is active during runtime suspend by checking its status before clearing the buffer address. Cc: stable <stable@kernel.org> Signed-off-by: Selvarasu Ganesan <selvarasu.g@samsung.com> Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Link: https://lore.kernel.org/r/20240815064836.1491-1-selvarasu.g@samsung.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 6e95097 commit 14e4971

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

drivers/usb/dwc3/core.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,9 +564,17 @@ int dwc3_event_buffers_setup(struct dwc3 *dwc)
564564
void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
565565
{
566566
struct dwc3_event_buffer *evt;
567+
u32 reg;
567568

568569
if (!dwc->ev_buf)
569570
return;
571+
/*
572+
* Exynos platforms may not be able to access event buffer if the
573+
* controller failed to halt on dwc3_core_exit().
574+
*/
575+
reg = dwc3_readl(dwc->regs, DWC3_DSTS);
576+
if (!(reg & DWC3_DSTS_DEVCTRLHLT))
577+
return;
570578

571579
evt = dwc->ev_buf;
572580

0 commit comments

Comments
 (0)