<div dir="ltr"><div>Sorry about the delay, I've patched my linux kernel and here are the differing addresses:<br></div><div><br></div><div><br></div><div><div>[root@Desk-r6 /]# grep . /sys/bus/usb/devices/usb*/*-0\<wbr>:1.0/usb*-port*/location</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port1/location:0x8000<wbr>0001</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port10/location:0x800<wbr>0000a</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port11/location:0x800<wbr>0000b</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port12/location:0x800<wbr>0000c</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port13/location:0x800<wbr>0000d</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port14/location:0x800<wbr>0000e</div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port15/location:0x800<wbr>00000                                        </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port16/location:0x800<wbr>00000                                        </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/location:0x8000<wbr>0002                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port3/location:0x8000<wbr>0003                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port4/location:0x8000<wbr>0004                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port5/location:0x8000<wbr>0005                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/location:0x8000<wbr>0006                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port7/location:0x8000<wbr>0007                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port8/location:0x8000<wbr>0008                                         </div><div>/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port9/location:0x8000<wbr>0009                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/location:0x8000<wbr>000f                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/location:0x8000<wbr>0010                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port3/location:0x8000<wbr>0011                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port4/location:0x8000<wbr>0012                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port5/location:0x8000<wbr>000b                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/location:0x8000<wbr>0006                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port7/location:0x8000<wbr>0007                                         </div><div>/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port8/location:0x8000<wbr>0008                                         </div><div>/sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port1/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port2/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port3/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port4/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port1/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port2/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port3/location:0x0000<wbr>0000                                         </div><div>/sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port4/location:0x0000<wbr>0000  </div></div><div><br></div><div>--</div><div>Paul</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 24 January 2018 at 15:06, Paul Gildea <span dir="ltr"><<a href="mailto:gildeap@tcd.ie" target="_blank">gildeap@tcd.ie</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Seems like that could be it. I had been looking at ACPI/BIOS too, as when I went looking online for mentions of missing peer links a comment alluded to that possibly being an issue.</div><div><br></div><div>My linux is a buildroot build so I will be able to patch it and get back to you, thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On 24 January 2018 at 12:48, Bjørn Mork <span dir="ltr"><<a href="mailto:bjorn@mork.no" target="_blank">bjorn@mork.no</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">I guess we need USB/xhci experts if we want an explaination.  It all<br>
looks completely wrong to me.<br>
<br>
Made another attempt on understanding drivers/usb/core/port.c, and I<br>
now have a working theory.  The real magic happens here, and the comment<br>
hints where this cold go wrong - The "platform firmware" is trusted oever<br>
anything else:<br>
<br>
/*<br>
 * Find the peer port either via explicit platform firmware "location"<br>
 * data, the peer hcd for root hubs, or the upstream peer relationship<br>
 * for all other hubs.<br>
 */<br>
static void find_and_link_peer(struct usb_hub *hub, int port1)<br>
{<br>
        struct usb_port *port_dev = hub->ports[port1 - 1], *peer;<br>
        struct usb_device *hdev = hub->hdev;<br>
        struct usb_device *peer_hdev;<br>
        struct usb_hub *peer_hub;<br>
<br>
        /*<br>
         * If location data is available then we can only peer this port<br>
         * by a location match, not the default peer (lest we create a<br>
         * situation where we need to go back and undo a default peering<br>
         * when the port is later peered by location data)<br>
         */<br>
        if (port_dev->location) {<br>
                /* we link the peer in match_location() if found */<br>
                usb_for_each_dev(port_dev, match_location);<br>
                return;<br>
        } else if (!hdev->parent) {<br>
                struct usb_hcd *hcd = bus_to_hcd(hdev->bus);<br>
                struct usb_hcd *peer_hcd = hcd->shared_hcd;<br>
<br>
                if (!peer_hcd)<br>
                        return;<br>
<br>
                peer_hdev = peer_hcd->self.root_hub;<br>
        } else {<br>
..<br>
<br>
<br>
<br>
The enabling magic is in drivers/usb/core/usb-acpi.c:<br>
<br>
                status = acpi_get_physical_device_locat<wbr>ion(handle, &pld);<br>
                if (ACPI_FAILURE(status) || !pld)<br>
                        return adev;<br>
<br>
                port_dev->location = USB_ACPI_LOCATION_VALID<br>
                        | pld->group_token << 8 | pld->group_position;<br>
<br>
<br>
So this depens on the BIOS vendor managing to get the<br>
"physical_device_location" correct (or at least equal) for both ports.<br>
If ACPI tells us that the port locations are different, or that only one<br>
of the ports have a location, then there will be no peer relationship.<br>
<br>
I tried to figure out if there exists a simple way to make the kernel<br>
tell us what happens when it calls acpi_get_physical_device_locat<wbr>ion(),<br>
but I did not find much.  This call will most likely return something<br>
into &pld.  The real question is what that is. And I see no way to<br>
figure it out without patching the kernel.<br>
<br>
We should fix that.  A simple straight forward fix would be something<br>
like the attached patch. Are you in a position to test that?  It would<br>
be good if we could confirm the theory that your BIOS gets this wrong.<br>
How you do that depend a bit on your system.  With a default Debian<br>
stable kernel, this is how I tested it:<br>
<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ uname -a<br>
Linux miraculix 4.9.0-5-amd64 #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04) x86_64 GNU/Linux<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ git checkout -b test-v4.9.65 v4.9.65<br>
Switched to a new branch 'test-v4.9.65'<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ git am /tmp/0001-usb-export-firmware-<wbr>port-location-in-sysfs.patch<br>
Applying: usb: export firmware port location in sysfs<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd`/drivers/usb/core usbcore.ko<br>
make: Entering directory '/usr/src/linux-headers-4.9.0-<wbr>5-amd64'<br>
  CC [M]  /usr/local/src/git/linux/drive<wbr>rs/usb/core/port.o<br>
  LD [M]  /usr/local/src/git/linux/drive<wbr>rs/usb/core/usbcore.o<br>
  MODPOST 1 modules<br>
  LD [M]  /usr/local/src/git/linux/drive<wbr>rs/usb/core/usbcore.ko<br>
make: Leaving directory '/usr/src/linux-headers-4.9.0-<wbr>5-amd64'<br>
<br>
<br>
It's fully possible to test without rebooting.  The hard part is to<br>
unload all USB modules.  Use lsmod to figure out what you need to<br>
unload.  I did (yes, I have tested many different USB devices since my<br>
last reboot, so I had lots of USB drivers to unload):<br>
<br>
  # modprobe -r usbmon usbhid uas usb_storage btusb ax88179_178a cdc_mbim qmi_wwan cdc_ncm<br>
  # modprobe -r qcserial option cp210x pl2303<br>
  modprobe: FATAL: Module qcserial is in use.<br>
  # systemctl stop ModemManager<br>
  # modprobe -r qcserial option cp210x pl2303<br>
  # modprobe -r uvcvideo pegasus xpad xhci_pci xhci_hcd<br>
<br>
<br>
Then loading a minimum of the drivers, only this time with the newly<br>
build usbcore.ko:<br>
<br>
  # modprobe usb_common<br>
  # insmod /usr/local/src/git/linux/drive<wbr>rs/usb/core/usbcore.ko<br>
  # modprobe xhci_pci<br>
<br>
The rest will autoload at this point.  The patch will simply show<br>
whatever 'location' we got from ACPI in sysfs:<br>
<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ grep . /sys/bus/usb/devices/usb*/*-0\<wbr>:1.0/usb*-port*/location<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port10/location:0x800<wbr>00000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port11/location:0x800<wbr>00000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port12/location:0x800<wbr>00000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port1/location:0x8000<wbr>0001<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port3/location:0x8000<wbr>0002<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port4/location:0x8000<wbr>0004<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port5/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/location:0x8000<wbr>0003<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port7/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port8/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port9/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/location:0x8000<wbr>0001<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port3/location:0x8000<wbr>0002<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port4/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port5/location:0x8000<wbr>0000<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/location:0x8000<wbr>0003<br>
<br>
<br>
The high bit is the USB_ACPI_LOCATION_VALID quoted above, telling us<br>
that my firmware did return a valid acpi_get_physical_device_locat<wbr>ion()<br>
result for every port, as expected.  And you can easily see how the peer<br>
ports align up.  But you can also easily see the kernel bug here... The<br>
resulting peer relationships are:<br>
<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ ls -ld /sys/bus/usb/devices/usb*/*-0:<wbr>1.0/usb*-port*/peer<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port1/peer -> ../../../usb2/2-0:1.0/usb2-por<wbr>t1<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/peer -> ../../../usb2/2-0:1.0/usb2-por<wbr>t2<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port3/peer -> ../../../usb2/2-0:1.0/usb2-por<wbr>t3<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/peer -> ../../../usb2/2-0:1.0/usb2-por<wbr>t6<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/peer -> ../../../usb1/1-0:1.0/usb1-por<wbr>t1<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/peer -> ../../../usb1/1-0:1.0/usb1-por<wbr>t2<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port3/peer -> ../../../usb1/1-0:1.0/usb1-por<wbr>t3<br>
lrwxrwxrwx 1 root root 0 Jan 24 13:36 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/peer -> ../../../usb1/1-0:1.0/usb1-por<wbr>t6<br>
<br>
<br>
But the 'usb1-port2 <-> usb2-port2' connection is in fact bogus, and<br>
completely arbitrary.  There are a number of matching locations.  These<br>
two were only chosen because they happened to be first on the list.<br>
<br>
Now, that does not matter much for me, because these ports are not in<br>
use:<br>
<br>
bjorn@miraculix:/usr/local/src<wbr>/git/linux$ grep . /sys/bus/usb/devices/usb*/*-0\<wbr>:1.0/usb*-port2/connect_type<br>
/sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/connect_type:no<wbr>t used<br>
/sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/connect_type:no<wbr>t used<br>
<br>
<br>
But I believe it should be fixed.  I guess I'll end up sending more than<br>
one patch here.   But let's first figure out if my suspicion is<br>
justified, or if the BIOS vendor is innocent after all.<br>
<span class="m_8984404223796070851HOEnZb"><font color="#888888"><br>
<br>
<br>
<br>
Bjørn<br>
<br>
<br>
</font></span><br><br>
<br>
<br></div></div><span class="">
Paul Gildea <<a href="mailto:gildeap@tcd.ie" target="_blank">gildeap@tcd.ie</a>> writes:<br>
<br>
> dmesg indicated SuperSpeed for 2-2. Here is the output of that command:<br>
><br></span>
> ls -ld /sys/bus/usb/devices/usb*/*-0:<wbr>1.0/usb*-port*/peer<br>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port11/peer -><br>
> ../../../usb2/2-0:1.0/usb2-por<wbr>t5/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/peer -><br>
> ../../../usb2/2-0:1.0/usb2-por<wbr>t6/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port7/peer -><br>
> ../../../usb2/2-0:1.0/usb2-por<wbr>t7/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port8/peer -><br>
> ../../../usb2/2-0:1.0/usb2-por<wbr>t8/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port5/peer -><br>
> ../../../usb1/1-0:1.0/usb1-por<wbr>t11/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/peer -><br>
> ../../../usb1/1-0:1.0/usb1-por<wbr>t6/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port7/peer -><br>
> ../../../usb1/1-0:1.0/usb1-por<wbr>t7/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port8/peer -><br>
> ../../../usb1/1-0:1.0/usb1-por<wbr>t8/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port1/peer -><br>
> ../../../usb4/4-0:1.0/usb4-por<wbr>t1/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port2/peer -><br>
> ../../../usb4/4-0:1.0/usb4-por<wbr>t2/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:45<span class=""><br>
> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port3/peer -><br>
> ../../../usb4/4-0:1.0/usb4-por<wbr>t3/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:46<span class=""><br>
> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port4/peer -><br>
> ../../../usb4/4-0:1.0/usb4-por<wbr>t4/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port1/peer -><br>
> ../../../usb3/3-0:1.0/usb3-por<wbr>t1/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port2/peer -><br>
> ../../../usb3/3-0:1.0/usb3-por<wbr>t2/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:47<span class=""><br>
> /sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port3/peer -><br>
> ../../../usb3/3-0:1.0/usb3-por<wbr>t3/<br></span>
> lrwxrwxrwx    1 root     root             0 Jan 24 11:46<div><div class="h5"><br>
> /sys/bus/usb/devices/usb4/4-0:<wbr>1.0/usb4-port4/peer -><br>
> ../../../usb3/3-0:1.0/usb3-por<wbr>t4/<br>
><br>
><br>
> and this is the mapping for my modems, USB3 -> USB2:<br>
><br>
><br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb2/2-1 -><br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb1/1-4<br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb2/2-2 -><br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb1/1-1<br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb2/2-3 -><br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb1/1-6<br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb2/2-4 -><br>
> /sys/devices/pci0000:00/0000:0<wbr>0:14.0/usb1/1-8<br>
><br>
><br>
> My S/N is the same in all modes for MC7455's, useful at least as a backup<br>
> method if it is unreliable.<br>
><br>
> --<br>
> Paul<br>
><br>
><br>
> On 23 Jan 2018 18:06, "Bjørn Mork" <<a href="mailto:bjorn@mork.no" target="_blank">bjorn@mork.no</a>> wrote:<br>
><br>
>> Paul Gildea <<a href="mailto:gildeap@tcd.ie" target="_blank">gildeap@tcd.ie</a>> writes:<br>
>><br>
>> > Checking 2-2 there is no such peer file inside port for some reason.<br>
>><br>
>> OK, at least that explains the failure.  And the 2-2 device is of course<br>
>> running at SuperSpeed?<br>
>><br>
>> Tried to read drivers/usb/core/port.c , but not sure I understand if/how<br>
>> this is supposed to work.  Looks like there are plenty of possible<br>
>> failure modes. And most will be silently ignored unless you enable<br>
>> kernel debug messages. Yuck.<br>
>><br>
>> Could you do a 'ls -ld /sys/bus/usb/devices/usb*/*-0:<wbr>1.0/usb*-port*/peer'?<br>
>><br>
>> I tried finding examples of missing peers, but all my Linux systems with<br>
>> USB3 look fine. My laptop:<br>
>><br>
>><br></div></div>
>> bjorn@miraculix:~$ ls -ld /sys/bus/usb/devices/usb*/*-0:<br>
>> 1.0/usb*-port*/peer<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:59 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port1/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t1<br>
>> lrwxrwxrwx 1 root root 0 Jan 11 13:53 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t2<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:58 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port3/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t3<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:12 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t6<br>
>> lrwxrwxrwx 1 root root 0 Jan 11 13:52 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t1<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:55 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t2<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:58 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port3/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t3<br>
>> lrwxrwxrwx 1 root root 0 Jan 12 09:12 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t6<br>
>><br>
>><span class=""><br>
>> A desktop:<br>
>><br>
>> bjorn@canardo:~$ ls -ld /sys/bus/usb/devices/usb*/*-0:<wbr>1.0/usb*-port*/peer<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port10/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t10<br></span>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port1/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t1<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port2/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t2<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port3/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t3<span class=""><br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port4/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t4<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port5/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t5<br></span>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port6/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t6<span class=""><br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port7/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t7<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port8/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t8<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb1/1-0:<wbr>1.0/usb1-port9/peer<br>
>> -> ../../../usb2/2-0:1.0/usb2-por<wbr>t9<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port10/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t10<br></span>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t1<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t2<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port3/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t3<span class=""><br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port4/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t4<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port5/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t5<br></span>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port6/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t6<span class=""><br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port7/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t7<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port8/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t8<br>
>> lrwxrwxrwx 1 root root 0 Jan 23 18:44 /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port9/peer<br>
>> -> ../../../usb1/1-0:1.0/usb1-por<wbr>t9<br>
>><br>
>> A Linksys router:<br>
>><br></span>
>> root@wrt1900ac-1:~# ls -ld /sys/bus/usb/devices/usb*/*-0:<br>
>> 1.0/usb*-port*/peer<span class=""><br>
>> lrwxrwxrwx    1 root     root             0 Jan 12 09:50<br>
>> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port1/peer -><br>
>> ../../../usb3/3-0:1.0/usb3-por<wbr>t1<br>
>> lrwxrwxrwx    1 root     root             0 Jan 12 09:51<br>
>> /sys/bus/usb/devices/usb2/2-0:<wbr>1.0/usb2-port2/peer -><br>
>> ../../../usb3/3-0:1.0/usb3-por<wbr>t2<br>
>> lrwxrwxrwx    1 root     root             0 Jan 12 09:50<br></span>
>> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port1/peer -><br>
>> ../../../usb2/2-0:1.0/usb2-por<wbr>t1<span class=""><br>
>> lrwxrwxrwx    1 root     root             0 Jan 12 09:51<br>
>> /sys/bus/usb/devices/usb3/3-0:<wbr>1.0/usb3-port2/peer -><br>
>> ../../../usb2/2-0:1.0/usb2-por<wbr>t2<br>
>><br>
>><br>
>> I was really hoping we could use these peer links, because I cannot see<br>
>> how else we're supposed to make the EM7455 upgrade work on SuperSpeed<br>
>> capable ports.<br>
>><br>
>> OK, I see one alternative: The MC7455/EM7455 serial number is the same<br>
>> in bootloader and application mode (at least on my modems...).  We could<br>
>> save it and accept the bootloader QDL device on any USB port if the<br>
>> serial number matches.<br>
>><br>
>> Note that this particular serial number behaviour is in no way<br>
>> guaranteed anywhere. So it does feel somewhat less safe than matching<br>
>> USB ports. My EM7565 will change the serial number, for example. But its<br>
>> bootloader use SuperSpeed so it doesn't have the same upgrade issue.<br>
>><br>
>><br>
>> Bjørn<br>
>><br>
<br></span></blockquote></div><br></div>
</blockquote></div><br></div>