servo: V4: errors during init: sbu_uart_sel & atmega_rst controls |
||||
Issue description
To repro,
1. connect servo V4 to CCD capable device (I'm using careena).
2. do something that causes CCD USB device to disappear. Dead battery seems to be reliable but there are also other occasions it seems to fall off rails
3. sudo servod --product 0x501b
2018-11-28 09:04:01,705 - Servod - ERROR - Problem initializing sbu_uart_sel -> ccd
Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/servo/servo_server.py", line 850, in hwinit
if self.get(control_name) != value:
File "/usr/lib64/python2.7/site-packages/servo/servo_server.py", line 764, in get
val = drv.get()
File "/usr/lib64/python2.7/site-packages/servo/drv/tca6416.py", line 78, in get
value = self._i2c_obj._read_reg(self.REG_INP + self._port)
File "/usr/lib64/python2.7/site-packages/servo/drv/i2c_reg.py", line 95, in _read_reg
rlist = self._wr_rd(reg, [], self._reg_len)
File "/usr/lib64/python2.7/site-packages/servo/drv/i2c_reg.py", line 172, in _wr_rd
rlist = self._i2c.wr_rd(self._slave, wlist, rcnt)
File "/usr/lib64/python2.7/site-packages/servo/i2c_base.py", line 57, in wr_rd
return self._raw_wr_rd(slave_address, write_list, read_count)
File "/usr/lib64/python2.7/site-packages/servo/stm32i2c.py", line 138, in _raw_wr_rd
data = self._susb._read_ep.read(read_count + 4, self._susb.TIMEOUT_MS)
File "/usr/lib64/python2.7/site-packages/usb/core.py", line 300, in read
return self.device.read(self.bEndpointAddress, size, self.interface, timeout)
File "/usr/lib64/python2.7/site-packages/usb/core.py", line 670, in read
self.__get_timeout(timeout)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 780, in bulk_read
timeout)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 889, in __read
_check(retval)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 571, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
USBError: [Errno 110] Operation timed out
2018-11-28 09:04:01,812 - Servod - ERROR - Problem initializing atmega_rst -> on
Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/servo/servo_server.py", line 850, in hwinit
if self.get(control_name) != value:
File "/usr/lib64/python2.7/site-packages/servo/servo_server.py", line 764, in get
val = drv.get()
File "/usr/lib64/python2.7/site-packages/servo/drv/tca6416.py", line 78, in get
value = self._i2c_obj._read_reg(self.REG_INP + self._port)
File "/usr/lib64/python2.7/site-packages/servo/drv/i2c_reg.py", line 95, in _read_reg
rlist = self._wr_rd(reg, [], self._reg_len)
File "/usr/lib64/python2.7/site-packages/servo/drv/i2c_reg.py", line 172, in _wr_rd
rlist = self._i2c.wr_rd(self._slave, wlist, rcnt)
File "/usr/lib64/python2.7/site-packages/servo/i2c_base.py", line 57, in wr_rd
return self._raw_wr_rd(slave_address, write_list, read_count)
File "/usr/lib64/python2.7/site-packages/servo/stm32i2c.py", line 138, in _raw_wr_rd
data = self._susb._read_ep.read(read_count + 4, self._susb.TIMEOUT_MS)
File "/usr/lib64/python2.7/site-packages/usb/core.py", line 300, in read
return self.device.read(self.bEndpointAddress, size, self.interface, timeout)
File "/usr/lib64/python2.7/site-packages/usb/core.py", line 670, in read
self.__get_timeout(timeout)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 780, in bulk_read
self.__get_timeout(timeout)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 780, in bulk_read
timeout)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 889, in __read
_check(retval)
File "/usr/lib64/python2.7/site-packages/usb/backend/libusb1.py", line 571, in _check
raise USBError(_str_error[ret], ret, _libusb_errno[ret])
USBError: [Errno 110] Operation timed out
Looks like USB gets wedged perhaps from the CCD disappearance. Haven't found means to remotely recover ATM.
,
Nov 29
Tried rebooting servo V4 via its console and while I no longer see init warnings for atmega_rst & sbu_uart_sel ... servo_v4_role is still stuck-at 'snk'
,
Nov 29
After the servo V4 reboot via console I'm now seeing the following on servo_v4_console_pty, C0 st2 C0 st3 C0 st5 C0 st30 <repeat sequence of 4 every ~1sec indefinitely> Which I believe translates to: + "SNK_DISCONNECTED", // 2 + "SNK_DISCONNECTED_DEBOUNCE", // 3 + "SNK_DISCOVERY", // 5 + "SRC_SWAP_STANDBY", // 30 Not recalling details of USBPD spec it seems strange that this should at some point result in a USBPD reset (soft or hard) at some point.
,
Nov 29
Tried getting a little nastier via the servo_v4 console itself, > pd 0 soft Seemed to send the soft reset and was then accompanied by the receipt of a hard (presumably from zinger PSU) softC0 st5 ## Note 'soft' is me typing C0 st30 > C0 st2 C0 st3 C0 st31 C0 st2 C0 st3 C0 st5 C0 HARD RST RX C0 st4 C0 st2 C0 st3 C0 st5 C0 st2 C0 st3 C0 st5 <repeat last 3 ~every 1sec indefinitely> Then I believe I tried forcing the role on the port pd 0 dualrole source pd 0 dualrole sink At that point the USBPD state transitions of C0 st2 C0 st3 C0 st5 stopped repeating but I still did not have a power contract between zinger & servo v4. At that point I tried another 'reset' on servo V4 console and that did recover things dut-control servo_v4_role:src servo_v4_role servo_v4_role:snk servo_v4_role servo_v4_role:src servo_v4_role:src servo_v4_role:snk So good news is that there is a means to hopefully recover from this error state programmatically however ATM I don't know what triggers the failure nor a more elegant way to recover from it than quieting the USBPD transactions followed by rebooting servo V4.
,
Nov 30
,
Nov 30
|
||||
►
Sign in to add a comment |
||||
Comment 1 by tbroch@google.com
, Nov 29