On Tue, Oct 27, 2020 at 10:33:09AM +0200, Felipe Balbi wrote: Hi Balbi: Thank you so much for your comment. > > Hi, > > Dejin Zheng <zhengdejin5@xxxxxxxxx> writes: > > According to Synopsys Programming Guide chapter 2.2 Register Resets, > > it cannot reset the DCTL register by setting DCTL.CSFTRST for core soft > > reset, if DWC3 controller as a slave device and stay connected with a usb > > host, then, while rebooting linux, it will fail to reinitialize dwc3 as a > > slave device when the DWC3 controller did not power off. because the > > connection status is incorrect, so we also need to clear DCTL.RUN_STOP > > bit for disabling connect when doing core soft reset. There will still > > be other stale configuration in DCTL, so reset the other fields of DCTL > > to the default value 0. > > This commit log is a bit hard to understand. When does this problem > actually happen? It seems like it's in the case of, perhaps, kexecing > into a new kernel, is that right? > It happens when entering the kernel for the second time after the reboot command. > At the time dwc3_core_soft_reset() is called, the assumption is that > we're starting with a clean core, from power up. If we have stale > configuration from a previous run, we should fix this on the exit > path. Note that if we're reaching probe with pull up connected, we > already have issues elsewhere. > > I think this is not the right fix for the problem. > I think you are right, Thinh also suggested me fix it on the exit path in the previous patch v2. Do you think I can do these cleanups in the shutdown hook of this driver? Balbi, is there a more suitable place to do this by your rich experience? Thanks! BR, Dejin > -- > balbi