Hi Kevin.

The patch from this email was identical to the patch I sent the other
day.

I can not confirm with that. For your reference I have added the patch you sent 
on 11.12.2014 19:46:

It looks like the hub is found, but responds with a "stall" error on
the get_hub_desc() request.  Looks like usb3 hubs use a different
descriptor id.  You could try the patch below - it's a lot of guess
work though.

-Kevin


diff --git a/src/hw/usb-hub.c b/src/hw/usb-hub.c
index c21cbfb..7688ef2 100644
--- a/src/hw/usb-hub.c
+++ b/src/hw/usb-hub.c
@@ -17,7 +17,10 @@ get_hub_desc(struct usb_pipe *pipe, struct 
usb_hub_descriptor *desc)
     struct usb_ctrlrequest req;
     req.bRequestType = USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_DEVICE;
     req.bRequest = USB_REQ_GET_DESCRIPTOR;
-    req.wValue = USB_DT_HUB<<8;
+    if (pipe->speed == USB_SUPERSPEED)
+        req.wValue = USB_DT_HUB3<<8;
+    else
+        req.wValue = USB_DT_HUB<<8;
     req.wIndex = 0;
     req.wLength = sizeof(*desc);
     return usb_send_default_control(pipe, &req, desc);
@@ -105,7 +108,9 @@ usb_hub_reset(struct usbhub_s *hub, u32 port)
         ret = get_port_status(hub, port, &sts);
         if (ret)
             goto fail;
-        if (!(sts.wPortStatus & USB_PORT_STAT_RESET))
+        if (!(sts.wPortStatus & USB_PORT_STAT_RESET)
+            && (hub->usbdev->speed != USB_SUPERSPEED
+                || !(sts.wPortStatus & USB_PORT_STAT_LINK_MASK)))
             break;
         if (timer_check(end)) {
             warn_timeout();
@@ -119,6 +124,8 @@ usb_hub_reset(struct usbhub_s *hub, u32 port)
         // Device no longer present
         return -1;
+ if (hub->usbdev->speed == USB_SUPERSPEED)
+        return USB_SUPERSPEED;
     return ((sts.wPortStatus & USB_PORT_STAT_SPEED_MASK)
             >> USB_PORT_STAT_SPEED_SHIFT);
diff --git a/src/hw/usb-hub.h b/src/hw/usb-hub.h
index 5b09947..f7436a5 100644
--- a/src/hw/usb-hub.h
+++ b/src/hw/usb-hub.h
@@ -11,6 +11,7 @@ int usb_hub_setup(struct usbdevice_s *usbdev);
  ****************************************************************/
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
+#define USB_DT_HUB3                     (USB_TYPE_CLASS | 0x0a)
struct usb_hub_descriptor {
     u8  bDescLength;
@@ -48,7 +49,8 @@ struct usb_port_status {
 #define USB_PORT_STAT_SUSPEND           0x0004
 #define USB_PORT_STAT_OVERCURRENT       0x0008
 #define USB_PORT_STAT_RESET             0x0010
-#define USB_PORT_STAT_L1                0x0020
+#define USB_PORT_STAT_LINK_SHIFT        5
+#define USB_PORT_STAT_LINK_MASK         (0x7 << USB_PORT_STAT_LINK_SHIFT)
 #define USB_PORT_STAT_POWER             0x0100
 #define USB_PORT_STAT_SPEED_SHIFT       9
 #define USB_PORT_STAT_SPEED_MASK        (0x3 << USB_PORT_STAT_SPEED_SHIFT)

This is way different from your latest patch Paul mentioned.
Did I missed something or wath your first patch not the right one?

Werner

Am 17.12.2014 um 14:14 schrieb Kevin O'Connor:
On Tue, Dec 16, 2014 at 11:06:29PM +0100, Paul Menzel wrote:
Dear Kevin,

thank you for the patch! I am adding Werner to CC.

The patch from this email was identical to the patch I sent the other
day.

Am Montag, den 15.12.2014, 21:47 -0500 schrieb Kevin O'Connor:
Super speed hubs (usb3 spec) have specific initialization
requirements.  Add the code necessary to detect and initialize these
hubs.
Could you please add how you tested this? For example the board, the hub
and what you booted from it for example.
I used an Anker 4 port usb3.0 hub, which I tested with an ADATA 16GB
usb3.0 flash drive on both my Acer c720 and Asrock e350m1-usb3.

If you're requesting that info be in the commit message - I don't
think that level of detail is required there.

-Kevin



_______________________________________________
SeaBIOS mailing list
[email protected]
http://www.seabios.org/mailman/listinfo/seabios

Reply via email to