From: kernel test robot <lkp@intel.com>
To: Pratham Pratap <quic_ppratap@quicinc.com>,
gregkh@linuxfoundation.org, mathias.nyman@intel.com
Cc: kbuild-all@lists.01.org, linux-usb@vger.kernel.org,
quic_pkondeti@quicinc.com, quic_jackp@quicinc.com,
quic_mrana@quicinc.com, Pratham Pratap <quic_ppratap@quicinc.com>
Subject: Re: [PATCH v1] usb: hub: Power cycle root hub if CSC is set during hub_port_reset
Date: Thu, 20 Jan 2022 01:47:59 +0800 [thread overview]
Message-ID: <202201200108.JJYDWfTS-lkp@intel.com> (raw)
In-Reply-To: <1642607498-8458-1-git-send-email-quic_ppratap@quicinc.com>
Hi Pratham,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on usb/usb-testing]
[also build test ERROR on linus/master peter-chen-usb/for-usb-next v5.16 next-20220118]
[cannot apply to balbi-usb/testing/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Pratham-Pratap/usb-hub-Power-cycle-root-hub-if-CSC-is-set-during-hub_port_reset/20220119-235321
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: alpha-allmodconfig (https://download.01.org/0day-ci/archive/20220120/202201200108.JJYDWfTS-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/ec4d5f04b268fc19d3b5d2843d1889531dafd22f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Pratham-Pratap/usb-hub-Power-cycle-root-hub-if-CSC-is-set-during-hub_port_reset/20220119-235321
git checkout ec4d5f04b268fc19d3b5d2843d1889531dafd22f
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash drivers/usb/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/usb/core/hub.c: In function 'hub_port_wait_reset':
>> drivers/usb/core/hub.c:2907:25: error: 'struct usb_device' has no member named 'reset_resume'
2907 | if (udev->reset_resume && (!udev->parent && hcd->fs_suspend_reset) &&
| ^~
>> drivers/usb/core/hub.c:2909:50: error: 'hdev' undeclared (first use in this function); did you mean 'udev'?
2909 | usb_hub_port_power_cycle(hdev, hub, port1);
| ^~~~
| udev
drivers/usb/core/hub.c:2909:50: note: each undeclared identifier is reported only once for each function it appears in
vim +2907 drivers/usb/core/hub.c
2845
2846 static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2847 struct usb_device *udev, unsigned int delay, bool warm)
2848 {
2849 int delay_time, ret;
2850 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2851 u16 portstatus;
2852 u16 portchange;
2853 u32 ext_portstatus = 0;
2854
2855 for (delay_time = 0;
2856 delay_time < HUB_RESET_TIMEOUT;
2857 delay_time += delay) {
2858 /* wait to give the device a chance to reset */
2859 msleep(delay);
2860
2861 /* read and decode port status */
2862 if (hub_is_superspeedplus(hub->hdev))
2863 ret = hub_ext_port_status(hub, port1,
2864 HUB_EXT_PORT_STATUS,
2865 &portstatus, &portchange,
2866 &ext_portstatus);
2867 else
2868 ret = hub_port_status(hub, port1, &portstatus,
2869 &portchange);
2870 if (ret < 0)
2871 return ret;
2872
2873 /*
2874 * The port state is unknown until the reset completes.
2875 *
2876 * On top of that, some chips may require additional time
2877 * to re-establish a connection after the reset is complete,
2878 * so also wait for the connection to be re-established.
2879 */
2880 if (!(portstatus & USB_PORT_STAT_RESET) &&
2881 (portstatus & USB_PORT_STAT_CONNECTION))
2882 break;
2883
2884 /* switch to the long delay after two short delay failures */
2885 if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2886 delay = HUB_LONG_RESET_TIME;
2887
2888 dev_dbg(&hub->ports[port1 - 1]->dev,
2889 "not %sreset yet, waiting %dms\n",
2890 warm ? "warm " : "", delay);
2891 }
2892
2893 if ((portstatus & USB_PORT_STAT_RESET))
2894 return -EBUSY;
2895
2896 if (hub_port_warm_reset_required(hub, port1, portstatus))
2897 return -ENOTCONN;
2898
2899 /* Device went away? */
2900 if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
2901 /*
2902 * When a FS device is following a suspend-reset-enumeration-data_transfer
2903 * sequence, sometimes it goes back in suspend just after reset without the
2904 * link entering L0. To fix this when CSC bit is set(because of CCS status
2905 * change) power cycle the root hub.
2906 */
> 2907 if (udev->reset_resume && (!udev->parent && hcd->fs_suspend_reset) &&
2908 (portstatus & USB_PORT_STAT_CSC)) {
> 2909 usb_hub_port_power_cycle(hdev, hub, port1);
2910 return -EAGAIN;
2911 }
2912
2913 return -ENOTCONN;
2914 }
2915
2916 /* Retry if connect change is set but status is still connected.
2917 * A USB 3.0 connection may bounce if multiple warm resets were issued,
2918 * but the device may have successfully re-connected. Ignore it.
2919 */
2920 if (!hub_is_superspeed(hub->hdev) &&
2921 (portchange & USB_PORT_STAT_C_CONNECTION)) {
2922 usb_clear_port_feature(hub->hdev, port1,
2923 USB_PORT_FEAT_C_CONNECTION);
2924 return -EAGAIN;
2925 }
2926
2927 if (!(portstatus & USB_PORT_STAT_ENABLE))
2928 return -EBUSY;
2929
2930 if (!udev)
2931 return 0;
2932
2933 if (hub_is_superspeedplus(hub->hdev)) {
2934 /* extended portstatus Rx and Tx lane count are zero based */
2935 udev->rx_lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1;
2936 udev->tx_lanes = USB_EXT_PORT_TX_LANES(ext_portstatus) + 1;
2937 udev->ssp_rate = get_port_ssp_rate(hub->hdev, ext_portstatus);
2938 } else {
2939 udev->rx_lanes = 1;
2940 udev->tx_lanes = 1;
2941 udev->ssp_rate = USB_SSP_GEN_UNKNOWN;
2942 }
2943 if (hub_is_wusb(hub))
2944 udev->speed = USB_SPEED_WIRELESS;
2945 else if (udev->ssp_rate != USB_SSP_GEN_UNKNOWN)
2946 udev->speed = USB_SPEED_SUPER_PLUS;
2947 else if (hub_is_superspeed(hub->hdev))
2948 udev->speed = USB_SPEED_SUPER;
2949 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2950 udev->speed = USB_SPEED_HIGH;
2951 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2952 udev->speed = USB_SPEED_LOW;
2953 else
2954 udev->speed = USB_SPEED_FULL;
2955 return 0;
2956 }
2957
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH v1] usb: hub: Power cycle root hub if CSC is set during hub_port_reset
Date: Thu, 20 Jan 2022 01:47:59 +0800 [thread overview]
Message-ID: <202201200108.JJYDWfTS-lkp@intel.com> (raw)
In-Reply-To: <1642607498-8458-1-git-send-email-quic_ppratap@quicinc.com>
[-- Attachment #1: Type: text/plain, Size: 6886 bytes --]
Hi Pratham,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on usb/usb-testing]
[also build test ERROR on linus/master peter-chen-usb/for-usb-next v5.16 next-20220118]
[cannot apply to balbi-usb/testing/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Pratham-Pratap/usb-hub-Power-cycle-root-hub-if-CSC-is-set-during-hub_port_reset/20220119-235321
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
config: alpha-allmodconfig (https://download.01.org/0day-ci/archive/20220120/202201200108.JJYDWfTS-lkp(a)intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/ec4d5f04b268fc19d3b5d2843d1889531dafd22f
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Pratham-Pratap/usb-hub-Power-cycle-root-hub-if-CSC-is-set-during-hub_port_reset/20220119-235321
git checkout ec4d5f04b268fc19d3b5d2843d1889531dafd22f
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash drivers/usb/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/usb/core/hub.c: In function 'hub_port_wait_reset':
>> drivers/usb/core/hub.c:2907:25: error: 'struct usb_device' has no member named 'reset_resume'
2907 | if (udev->reset_resume && (!udev->parent && hcd->fs_suspend_reset) &&
| ^~
>> drivers/usb/core/hub.c:2909:50: error: 'hdev' undeclared (first use in this function); did you mean 'udev'?
2909 | usb_hub_port_power_cycle(hdev, hub, port1);
| ^~~~
| udev
drivers/usb/core/hub.c:2909:50: note: each undeclared identifier is reported only once for each function it appears in
vim +2907 drivers/usb/core/hub.c
2845
2846 static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2847 struct usb_device *udev, unsigned int delay, bool warm)
2848 {
2849 int delay_time, ret;
2850 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2851 u16 portstatus;
2852 u16 portchange;
2853 u32 ext_portstatus = 0;
2854
2855 for (delay_time = 0;
2856 delay_time < HUB_RESET_TIMEOUT;
2857 delay_time += delay) {
2858 /* wait to give the device a chance to reset */
2859 msleep(delay);
2860
2861 /* read and decode port status */
2862 if (hub_is_superspeedplus(hub->hdev))
2863 ret = hub_ext_port_status(hub, port1,
2864 HUB_EXT_PORT_STATUS,
2865 &portstatus, &portchange,
2866 &ext_portstatus);
2867 else
2868 ret = hub_port_status(hub, port1, &portstatus,
2869 &portchange);
2870 if (ret < 0)
2871 return ret;
2872
2873 /*
2874 * The port state is unknown until the reset completes.
2875 *
2876 * On top of that, some chips may require additional time
2877 * to re-establish a connection after the reset is complete,
2878 * so also wait for the connection to be re-established.
2879 */
2880 if (!(portstatus & USB_PORT_STAT_RESET) &&
2881 (portstatus & USB_PORT_STAT_CONNECTION))
2882 break;
2883
2884 /* switch to the long delay after two short delay failures */
2885 if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2886 delay = HUB_LONG_RESET_TIME;
2887
2888 dev_dbg(&hub->ports[port1 - 1]->dev,
2889 "not %sreset yet, waiting %dms\n",
2890 warm ? "warm " : "", delay);
2891 }
2892
2893 if ((portstatus & USB_PORT_STAT_RESET))
2894 return -EBUSY;
2895
2896 if (hub_port_warm_reset_required(hub, port1, portstatus))
2897 return -ENOTCONN;
2898
2899 /* Device went away? */
2900 if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
2901 /*
2902 * When a FS device is following a suspend-reset-enumeration-data_transfer
2903 * sequence, sometimes it goes back in suspend just after reset without the
2904 * link entering L0. To fix this when CSC bit is set(because of CCS status
2905 * change) power cycle the root hub.
2906 */
> 2907 if (udev->reset_resume && (!udev->parent && hcd->fs_suspend_reset) &&
2908 (portstatus & USB_PORT_STAT_CSC)) {
> 2909 usb_hub_port_power_cycle(hdev, hub, port1);
2910 return -EAGAIN;
2911 }
2912
2913 return -ENOTCONN;
2914 }
2915
2916 /* Retry if connect change is set but status is still connected.
2917 * A USB 3.0 connection may bounce if multiple warm resets were issued,
2918 * but the device may have successfully re-connected. Ignore it.
2919 */
2920 if (!hub_is_superspeed(hub->hdev) &&
2921 (portchange & USB_PORT_STAT_C_CONNECTION)) {
2922 usb_clear_port_feature(hub->hdev, port1,
2923 USB_PORT_FEAT_C_CONNECTION);
2924 return -EAGAIN;
2925 }
2926
2927 if (!(portstatus & USB_PORT_STAT_ENABLE))
2928 return -EBUSY;
2929
2930 if (!udev)
2931 return 0;
2932
2933 if (hub_is_superspeedplus(hub->hdev)) {
2934 /* extended portstatus Rx and Tx lane count are zero based */
2935 udev->rx_lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1;
2936 udev->tx_lanes = USB_EXT_PORT_TX_LANES(ext_portstatus) + 1;
2937 udev->ssp_rate = get_port_ssp_rate(hub->hdev, ext_portstatus);
2938 } else {
2939 udev->rx_lanes = 1;
2940 udev->tx_lanes = 1;
2941 udev->ssp_rate = USB_SSP_GEN_UNKNOWN;
2942 }
2943 if (hub_is_wusb(hub))
2944 udev->speed = USB_SPEED_WIRELESS;
2945 else if (udev->ssp_rate != USB_SSP_GEN_UNKNOWN)
2946 udev->speed = USB_SPEED_SUPER_PLUS;
2947 else if (hub_is_superspeed(hub->hdev))
2948 udev->speed = USB_SPEED_SUPER;
2949 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2950 udev->speed = USB_SPEED_HIGH;
2951 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2952 udev->speed = USB_SPEED_LOW;
2953 else
2954 udev->speed = USB_SPEED_FULL;
2955 return 0;
2956 }
2957
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next prev parent reply other threads:[~2022-01-19 17:48 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-19 15:51 [PATCH v1] usb: hub: Power cycle root hub if CSC is set during hub_port_reset Pratham Pratap
2022-01-19 17:29 ` Alan Stern
2022-01-21 13:09 ` Pratham Pratap
2022-01-21 15:21 ` Alan Stern
2022-01-19 17:47 ` kernel test robot [this message]
2022-01-19 17:47 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202201200108.JJYDWfTS-lkp@intel.com \
--to=lkp@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=quic_jackp@quicinc.com \
--cc=quic_mrana@quicinc.com \
--cc=quic_pkondeti@quicinc.com \
--cc=quic_ppratap@quicinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.