On 10/27/20 10:00 AM, Johan Hovold wrote: > On Thu, Oct 08, 2020 at 08:16:02PM +0200, Helge Deller wrote: >> On 10/8/20 5:21 PM, Johan Hovold wrote: >>> On Tue, Sep 29, 2020 at 09:33:27PM +0200, Helge Deller wrote: >>>> With a 4-port serial USB HUB with FT232BM chips the serial ports stop >>>> working after a software suspend/resume cycle. >>>> Rewriting the latency timer during the resume phase fixes it. > >>>> +static int ftdi_reset_resume(struct usb_serial *serial) >>>> +{ >>>> + struct usb_serial_port *port = serial->port[0]; >>>> + >>>> + if (tty_port_initialized(&port->port)) >>>> + write_latency_timer(port); >>> >>> Why are you only doing this for open ports? >> >> I more or less copied it from another driver.... >> >>>> + >>>> + return usb_serial_generic_resume(serial); >>>> +} >>> >>> And if the device has been reset there may need to reconfigured the >>> termios settings for open ports. >>> >>> Could you expand a bit on what the problem is here? >> >> My testcase is pretty simple: >> 1. I use e.g. "minicom -D /dev/ttyUSB2". Serial connection works. >> 2. I exit minicom. >> 3. I suspend the workstation: "systemctl suspend" >> 4. I wake up the machine and wait a few seconds. >> 5. I start "minicom -D /dev/ttyUSB2" again. No transfers on the serial port. >> >> With my patch the minicom serial communications does work. >> Another way to wake up the connection is to rmmod the driver and >> insmod it again. > > Weird indeed. If you exit minicom before suspend and no other process is > keeping the port open, then that write_latency_timer() above would never > be executed. > > Could you enable some debugging and provide a dmesg log from a test > cycle (open/close minicom, suspend/resume, open minicom)? > > echo file usb-serial.c +p > /sys/kernel/debug/dynamic_debug/control I enabled the debugging and tried a few times, but somehow I can not reproduce the issue any longer. So, please drop my patch for now. Thanks! Helge