Loading Documentation/ABI/testing/sysfs-bus-usb-lvstest +13 −0 Original line number Diff line number Diff line Loading @@ -45,3 +45,16 @@ Contact: Pratyush Anand <pratyush.anand@gmail.com> Description: Write to this node to issue "U3 exit" for Link Layer Validation device. It is needed for TD.7.36. What: /sys/bus/usb/devices/.../enable_compliance Date: July 2017 Description: Write to this node to set the port to compliance mode to test with Link Layer Validation device. It is needed for TD.7.34. What: /sys/bus/usb/devices/.../warm_reset Date: July 2017 Description: Write to this node to issue "Warm Reset" for Link Layer Validation device. It may be needed to properly reset an xHCI 1.1 host port if compliance mode needed to be explicitly enabled. drivers/usb/misc/lvstest.c +41 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,25 @@ static ssize_t hot_reset_store(struct device *dev, } static DEVICE_ATTR_WO(hot_reset); static ssize_t warm_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_interface *intf = to_usb_interface(dev); struct usb_device *hdev = interface_to_usbdev(intf); struct lvs_rh *lvs = usb_get_intfdata(intf); int ret; ret = lvs_rh_set_port_feature(hdev, lvs->portnum, USB_PORT_FEAT_BH_PORT_RESET); if (ret < 0) { dev_err(dev, "can't issue warm reset %d\n", ret); return ret; } return count; } static DEVICE_ATTR_WO(warm_reset); static ssize_t u2_timeout_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { Loading Loading @@ -274,13 +293,35 @@ static ssize_t get_dev_desc_store(struct device *dev, } static DEVICE_ATTR_WO(get_dev_desc); static ssize_t enable_compliance_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_interface *intf = to_usb_interface(dev); struct usb_device *hdev = interface_to_usbdev(intf); struct lvs_rh *lvs = usb_get_intfdata(intf); int ret; ret = lvs_rh_set_port_feature(hdev, lvs->portnum | USB_SS_PORT_LS_COMP_MOD << 3, USB_PORT_FEAT_LINK_STATE); if (ret < 0) { dev_err(dev, "can't enable compliance mode %d\n", ret); return ret; } return count; } static DEVICE_ATTR_WO(enable_compliance); static struct attribute *lvs_attributes[] = { &dev_attr_get_dev_desc.attr, &dev_attr_u1_timeout.attr, &dev_attr_u2_timeout.attr, &dev_attr_hot_reset.attr, &dev_attr_warm_reset.attr, &dev_attr_u3_entry.attr, &dev_attr_u3_exit.attr, &dev_attr_enable_compliance.attr, NULL }; Loading Loading
Documentation/ABI/testing/sysfs-bus-usb-lvstest +13 −0 Original line number Diff line number Diff line Loading @@ -45,3 +45,16 @@ Contact: Pratyush Anand <pratyush.anand@gmail.com> Description: Write to this node to issue "U3 exit" for Link Layer Validation device. It is needed for TD.7.36. What: /sys/bus/usb/devices/.../enable_compliance Date: July 2017 Description: Write to this node to set the port to compliance mode to test with Link Layer Validation device. It is needed for TD.7.34. What: /sys/bus/usb/devices/.../warm_reset Date: July 2017 Description: Write to this node to issue "Warm Reset" for Link Layer Validation device. It may be needed to properly reset an xHCI 1.1 host port if compliance mode needed to be explicitly enabled.
drivers/usb/misc/lvstest.c +41 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,25 @@ static ssize_t hot_reset_store(struct device *dev, } static DEVICE_ATTR_WO(hot_reset); static ssize_t warm_reset_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_interface *intf = to_usb_interface(dev); struct usb_device *hdev = interface_to_usbdev(intf); struct lvs_rh *lvs = usb_get_intfdata(intf); int ret; ret = lvs_rh_set_port_feature(hdev, lvs->portnum, USB_PORT_FEAT_BH_PORT_RESET); if (ret < 0) { dev_err(dev, "can't issue warm reset %d\n", ret); return ret; } return count; } static DEVICE_ATTR_WO(warm_reset); static ssize_t u2_timeout_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { Loading Loading @@ -274,13 +293,35 @@ static ssize_t get_dev_desc_store(struct device *dev, } static DEVICE_ATTR_WO(get_dev_desc); static ssize_t enable_compliance_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_interface *intf = to_usb_interface(dev); struct usb_device *hdev = interface_to_usbdev(intf); struct lvs_rh *lvs = usb_get_intfdata(intf); int ret; ret = lvs_rh_set_port_feature(hdev, lvs->portnum | USB_SS_PORT_LS_COMP_MOD << 3, USB_PORT_FEAT_LINK_STATE); if (ret < 0) { dev_err(dev, "can't enable compliance mode %d\n", ret); return ret; } return count; } static DEVICE_ATTR_WO(enable_compliance); static struct attribute *lvs_attributes[] = { &dev_attr_get_dev_desc.attr, &dev_attr_u1_timeout.attr, &dev_attr_u2_timeout.attr, &dev_attr_hot_reset.attr, &dev_attr_warm_reset.attr, &dev_attr_u3_entry.attr, &dev_attr_u3_exit.attr, &dev_attr_enable_compliance.attr, NULL }; Loading