Message ID | 20231017131944.8356-1-quic_kriskura@quicinc.com (mailing list archive) |
---|---|
State | Awaiting Upstream, archived |
Headers | show |
Series | None | expand |
Quoting Krishna Kurapati (2023-10-17 06:19:44) > When runtime suspend happens in host mode, if cable is removed at this > instant, it triggers a resume where a xhci register access is done when > gdsc is not on leading to a crash. Keep usb30 prim gdsc as on during > runtime suspend to avoid this crash. > > Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com> > --- > Note: I am not sure if this is the right way or setting GDSC flags to > PWRSTS_RET_ON is the right approach. So for now made this change to Does using PWRSTS_RET_ON work? Does the GDSC support being turned off or is the lowest power state retention?
On 10/19/2023 6:28 AM, Stephen Boyd wrote: > Quoting Krishna Kurapati (2023-10-17 06:19:44) >> When runtime suspend happens in host mode, if cable is removed at this >> instant, it triggers a resume where a xhci register access is done when >> gdsc is not on leading to a crash. Keep usb30 prim gdsc as on during >> runtime suspend to avoid this crash. >> >> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com> >> --- >> Note: I am not sure if this is the right way or setting GDSC flags to >> PWRSTS_RET_ON is the right approach. So for now made this change to > > Does using PWRSTS_RET_ON work? Does the GDSC support being turned off or > is the lowest power state retention? I didn't see any issue when I put it as PWRSTS_RET_ON. If the GDSC is off, when we remove cable in host mode, we see a crash because of xhci register access. But when I try putting PWRSTS_RET_ON / CLK_RPM_ALWAYS_ON it doesn't crash. Regard, Krishna,
Quoting Krishna Kurapati PSSNV (2023-10-19 01:37:20) > > > On 10/19/2023 6:28 AM, Stephen Boyd wrote: > > Quoting Krishna Kurapati (2023-10-17 06:19:44) > >> When runtime suspend happens in host mode, if cable is removed at this > >> instant, it triggers a resume where a xhci register access is done when > >> gdsc is not on leading to a crash. Keep usb30 prim gdsc as on during > >> runtime suspend to avoid this crash. > >> > >> Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com> > >> --- > >> Note: I am not sure if this is the right way or setting GDSC flags to > >> PWRSTS_RET_ON is the right approach. So for now made this change to > > > > Does using PWRSTS_RET_ON work? Does the GDSC support being turned off or > > is the lowest power state retention? > > I didn't see any issue when I put it as PWRSTS_RET_ON. If the GDSC is > off, when we remove cable in host mode, we see a crash because of xhci > register access. But when I try putting PWRSTS_RET_ON / > CLK_RPM_ALWAYS_ON it doesn't crash. > You need to find out if the GDSC only supports retention mode. Otherwise it sounds like the xhci register access is happening when the genpd is off, and thus the driver needs to power on the device before accessing it.
diff --git a/drivers/clk/qcom/gcc-sm8450.c b/drivers/clk/qcom/gcc-sm8450.c index 75635d40a12d..47cde2de93a2 100644 --- a/drivers/clk/qcom/gcc-sm8450.c +++ b/drivers/clk/qcom/gcc-sm8450.c @@ -2996,6 +2996,7 @@ static struct gdsc usb30_prim_gdsc = { .gdscr = 0x49004, .pd = { .name = "usb30_prim_gdsc", + .flags = GENPD_FLAG_RPM_ALWAYS_ON, }, .pwrsts = PWRSTS_OFF_ON, };
When runtime suspend happens in host mode, if cable is removed at this instant, it triggers a resume where a xhci register access is done when gdsc is not on leading to a crash. Keep usb30 prim gdsc as on during runtime suspend to avoid this crash. Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com> --- Note: I am not sure if this is the right way or setting GDSC flags to PWRSTS_RET_ON is the right approach. So for now made this change to keep GDSC during host mode runtime suspend. drivers/clk/qcom/gcc-sm8450.c | 1 + 1 file changed, 1 insertion(+)