Hi, Dejin Zheng <zhengdejin5@xxxxxxxxx> writes: >> 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! I don't think shutdown is called during removal, I'm not sure. I think we had some fixes done in shutdown time, though. Test it out, but make sure there are no issues with a regular modprobe cycle. -- balbi
Attachment:
signature.asc
Description: PGP signature