All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.