[Nut-upsuser] bcmxcp_usb can not communicate with Eaton Powerware 5110
Arnaud Quette
aquette.dev at gmail.com
Wed Dec 5 19:57:47 UTC 2012
2012/12/3 Jevgeni Jurtsenko <jevgenious at gmail.com>
> Hi Arnaud,
Hi Jevgeni,
> Unfortunately your patch didn't solved the problem for me.
>
it couldn't, since your issue is upstream to it (i.e, in kernel land)
> I googled about the issue once more while setting the OS second time to
> give logs you asked previously. Out of the syslog you can see that it is
> being flooded with *usbfs *errors about claiming the device. One of the
> suggestions was the problem with *dwc_otg *driver. However
> my solution was a script, which resets usb and I'm able to get data from
> UPS again.. As I mentioned above that re-plugging the usb cable solved it.
> Problem is not stable ~3 fails out of 5 startups. At the moment I am using
> PW5115
>
> lsusb -v -d0x06da:0x0002
>
> Bus 001 Device 004: ID 06da:0002 Phoenixtec Power Co., Ltd UPS
> Device Descriptor:
> bLength 18
> bDescriptorType 1
> bcdUSB 1.10
> bDeviceClass 0 (Defined at Interface level)
> bDeviceSubClass 0
> bDeviceProtocol 0
> bMaxPacketSize0 8
> idVendor 0x06da Phoenixtec Power Co., Ltd
> idProduct 0x0002 UPS
> bcdDevice 1.00
> iManufacturer 4
> iProduct 24
> iSerial 0
> bNumConfigurations 1
> Configuration Descriptor:
> bLength 9
> bDescriptorType 2
> wTotalLength 34
> bNumInterfaces 1
> bConfigurationValue 1
> iConfiguration 0
> bmAttributes 0x80
> (Bus Powered)
> MaxPower 60mA
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 1
> bInterfaceClass 255 Vendor Specific Class
> bInterfaceSubClass 0
> bInterfaceProtocol 0
> iInterface 0
> ** UNRECOGNIZED: 09 21 00 01 00 01 22 00 00
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x81 EP 1 IN
> bmAttributes 3
> Transfer Type Interrupt
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0008 1x 8 bytes
> bInterval 20
> Device Status: 0x5a08
> (Bus Powered)
> ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
> *grep usb /var/log/syslog*
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021492] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021531] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021573] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021611] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021653] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021693] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021733] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021774] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021815] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021855] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021897] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021936] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.021976] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> Nov 25 11:41:51 raspberrypi kernel: [ 95.022017] usb 1-1.2: usbfs:
> process 1862 (bcmxcp_usb) did not claim interface 0 before use
> ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
> */lib/nut/bcmxcp_usb -DDDDD -u root -a ups*
> Network UPS Tools - BCMXCP UPS driver 0.26 (2.6.5)
> USB communication subdriver 0.22
> 0.000000 send_to_all: SETINFO driver.parameter.port "auto"
> 0.002520 debug level is '5'
> 0.019435 entering nutusb_open()
> 0.037846 device 004 opened successfully
> 0.039967 Can't claim POWERWARE USB interface: could not claim
> interface 0: Device or resource busy
> 0.041162 Can't reset POWERWARE USB endpoint: could not clear/halt
> ep 129: Device or resource busy
> 0.041965 device 004 opened successfully
> 0.042690 Can't claim POWERWARE USB interface: could not claim
> interface 0: Device or resource busy
> 0.043556 Can't reset POWERWARE USB endpoint: could not clear/halt
> ep 129: Device or resource busy
> 0.043866 device 004 opened successfully
> 0.047520 Can't claim POWERWARE USB interface: could not claim
> interface 0: Device or resource busy
> 0.047826 Can't reset POWERWARE USB endpoint: could not clear/halt
> ep 129: Device or resource busy
> 0.048427 device 004 opened successfully
> 0.048982 Can't claim POWERWARE USB interface: could not claim
> interface 0: Device or resource busy
> 0.049834 Can't reset POWERWARE USB endpoint: could not clear/halt
> ep 129: Device or resource busy
> 0.051205 send_to_all: SETINFO device.type "ups"
> 0.051958 send_to_all: SETINFO driver.version "2.6.5"
> 0.052674 send_to_all: SETINFO driver.version.internal "0.26"
> 0.053397 send_to_all: SETINFO driver.name "bcmxcp_usb"
> 0.057015 send_read_command: (4 bytes) => ab 01 31 23
> 0.058327 entering get_answer(31)
> 0.058576 => packet_loop (0, 0)
> 0.058761 => bytes_read (0)
> 0.059160 => usb_interrupt_read -16
> 0.059762 => packet_loop (0, 0)
> 0.060236 => bytes_read (0)
> 0.061093 => usb_interrupt_read -16
> 0.062454 => packet_loop (0, 0)
> 0.062681 => bytes_read (0)
> 0.063447 => usb_interrupt_read -16
> 0.064235 => packet_loop (0, 0)
> 0.067008 => bytes_read (0)
> 0.077926 => usb_interrupt_read -16
> 0.078266 => packet_loop (0, 0)
> 0.078472 => bytes_read (0)
> 0.078729 => usb_interrupt_read -16
> 0.078989 => packet_loop (0, 0)
> 0.079185 => bytes_read (0)
> 0.080005 => usb_interrupt_read -16
> 0.080783 => packet_loop (0, 0)
> 0.081474 => bytes_read (0)
> 0.087552 => usb_interrupt_read -16
> 0.088423 => packet_loop (0, 0)
> 0.089122 => bytes_read (0)
> 0.089437 => usb_interrupt_read -16
> 0.090164 => packet_loop (0, 0)
> 0.090891 => bytes_read (0)
> 0.091226 => usb_interrupt_read -16
> 0.091990 => packet_loop (0, 0)
> 0.092673 => bytes_read (0)
> 0.092970 => usb_interrupt_read -16
> 0.093732 => packet_loop (0, 0)
> 0.094733 => bytes_read (0)
> 0.095671 => usb_interrupt_read -16
> 0.095957 => packet_loop (0, 0)
> 0.096650 => bytes_read (0)
> 0.097030 => usb_interrupt_read -16
> 0.097827 => packet_loop (0, 0)
> 0.098527 => bytes_read (0)
> 0.099317 => usb_interrupt_read -16
> 0.107015 => packet_loop (0, 0)
> 0.107782 => bytes_read (0)
> 0.108528 => usb_interrupt_read -16
> 0.108810 => packet_loop (0, 0)
> 0.109511 => bytes_read (0)
> 0.110432 => usb_interrupt_read -16
> 0.110710 => packet_loop (0, 0)
> 0.111359 => bytes_read (0)
> 0.111704 => usb_interrupt_read -16
> 0.112659 => packet_loop (0, 0)
> 0.112876 => bytes_read (0)
> 0.117529 => usb_interrupt_read -16
> 0.118350 => packet_loop (0, 0)
> 0.119051 => bytes_read (0)
> 0.119353 => usb_interrupt_read -16
> 0.120120 => packet_loop (0, 0)
> 0.120336 => bytes_read (0)
> ¤¤¤¤¤¤¤¤¤¤¤¤¤¤
> * ps -efl | grep bcm*
> 1 R nut 1984 1 42 80 0 - 558 - 16:51 ? 00:05:50
> /lib/nut/bcmxcp_usb -a ups
> 0 S root 2167 2129 0 80 0 - 883 pipe_w 17:05 pts/0 00:00:00
> grep bcm
> ¤¤¤¤¤¤¤¤¤¤¤¤¤¤
> *usbreset.c*
> #include <stdlib.h>
> #include <stdio.h>
> #include <fcntl.h>
> #include <errno.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <sys/ioctl.h>
> #include <linux/usbdevice_fs.h>
>
> void main(int argc, char **argv)
> {
> const char *filename;
> int fd;
>
> if (argc < 2) {
> printf("Give USB device name as parameter\n");
> exit(1);
> }
> filename = argv[1];
> fd = open(filename, O_WRONLY);
> if (fd == -1) {
> perror("USB device open failed");
> exit(2);
> }
> if (ioctl(fd, USBDEVFS_RESET, 0) == -1) {
> perror("USBDEVFS_RESET device ioctl failed");
> exit(3);
> }
> close(fd);
> }
> ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
> After reset I receive in */var/log/messages*
> Dec 3 17:24:57 kernel: [ 2027.136079] usb 1-1.3: usbfs: process 2228
> (bcmxcp_usb) did not claim interface 0 before use
> Dec 3 17:25:18 kernel: [ 2047.672034] usb 1-1.3: reset low-speed USB
> device number 4 using dwc_otg
> Dec 3 17:27:16 kernel: [ 2166.249994] usb 1-1.3: USB disconnect, device
> number 4
> Dec 3 17:27:18 kernel: [ 2168.021096] usb 1-1.3: new low-speed USB
> device number 5 using dwc_otg
> Dec 3 17:27:18 kernel: [ 2168.129013] usb 1-1.3: New USB device found,
> idVendor=06da, idProduct=0002
> Dec 3 17:27:18 kernel: [ 2168.129041] usb 1-1.3: New USB device strings:
> Mfr=4, Product=24, SerialNumbe r=0
> Dec 3 17:27:18 kernel: [ 2168.129056] usb 1-1.3: Product: Powerware UPS
> Dec 3 17:27:18 kernel: [ 2168.129067] usb 1-1.3: Manufacturer: Powerware
> * tail -f /var/log/syslog*
> Dec 3 17:30:45 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
> Dec 3 17:30:49 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
> Dec 3 17:30:53 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
> Dec 3 17:30:57 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
> Dec 3 17:31:01 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
> Dec 3 17:31:05 raspberrypi bcmxcp_usb[2236]: RECONNECT USB DEVICE
>
your issue is indeed related to dwc_otg, which binds to the device, and
conflicts with bcmxcp_usb.
your reset attempt was a good try, but dwc_otg will re-attach as soon as
the "new device" appears.
that said, there are 2 possible solutions:
- blacklist dwc_otg
- add a call to usb_detach_kernel_driver_np(), to detach dwc_otg (preferred
solution).
there is a patch attached for this one. note that I've not tested it, since
I've no HW under the hand.
feedback welcome.
cheers,
Arnaud
--
NUT (Network UPS Tools) Project Leader - http://www.networkupstools.org
Debian Developer - http://www.debian.org
Free Software Developer - http://arnaud.quette.fr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/nut-upsuser/attachments/20121205/62201f88/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: xcpusb-detach-drv.diff
Type: application/octet-stream
Size: 1600 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/nut-upsuser/attachments/20121205/62201f88/attachment-0001.obj>
More information about the Nut-upsuser
mailing list