From: "Lu, Baolu" <baolu.lu@linux.intel.com>
To: Mathias Nyman <mathias.nyman@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
stable <stable@vger.kernel.org>
Subject: Re: [PATCH 1/1] usb: xhci: handle Config Error Change (CEC) in xhci driver
Date: Sun, 08 Mar 2015 17:19:23 +0800 [thread overview]
Message-ID: <54FC141B.3030206@linux.intel.com> (raw)
In-Reply-To: <1425629552-17808-1-git-send-email-baolu.lu@linux.intel.com>
Hi Alan,
Do you have any comments for this patch?
Thanks,
Baolu
On 03/06/2015 04:12 PM, Lu Baolu wrote:
> Linux xHCI driver doesn't report and handle port cofig error change.
> If Port Configure Error for root hub port occurs, CEC bit in PORTSC
> would be set by xHC and remains 1. This happends when the root port
> fails to configure its link partner, e.g. the port fails to exchange
> port capabilities information using Port Capability LMPs.
>
> Then the Port Status Change Events will be blocked until all status
> change bits(CEC is one of the change bits) are cleared('0') (refer to
> xHCI spec 4.19.2). Otherwise, the port status change event for this
> root port will not be generated anymore, then root port would look
> like dead for user and can't be recovered until a Host Controller
> Reset(HCRST).
>
> This patch is to check CEC bit in PORTSC in xhci_get_port_status()
> and set a Config Error in the return status if CEC is set. This will
> cause a ClearPortFeature request, where CEC bit is cleared in
> xhci_clear_port_change_bit().
>
> [Mathias Nyman contributed the idea. The commit log is based on patch
> posted at http://marc.info/?l=linux-kernel&m=142323612321434&w=2]
>
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> Cc: stable <stable@vger.kernel.org> # v3.2+
> ---
> drivers/usb/host/xhci-hub.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
> index a7865c4..0827d7c 100644
> --- a/drivers/usb/host/xhci-hub.c
> +++ b/drivers/usb/host/xhci-hub.c
> @@ -387,6 +387,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue,
> status = PORT_PLC;
> port_change_bit = "link state";
> break;
> + case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
> + status = PORT_CEC;
> + port_change_bit = "config error";
> + break;
> default:
> /* Should never happen */
> return;
> @@ -588,6 +592,8 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
> status |= USB_PORT_STAT_C_LINK_STATE << 16;
> if ((raw_port_status & PORT_WRC))
> status |= USB_PORT_STAT_C_BH_RESET << 16;
> + if ((raw_port_status & PORT_CEC))
> + status |= USB_PORT_STAT_C_CONFIG_ERROR << 16;
> }
>
> if (hcd->speed != HCD_USB3) {
> @@ -1005,6 +1011,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
> case USB_PORT_FEAT_C_OVER_CURRENT:
> case USB_PORT_FEAT_C_ENABLE:
> case USB_PORT_FEAT_C_PORT_LINK_STATE:
> + case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
> xhci_clear_port_change_bit(xhci, wValue, wIndex,
> port_array[wIndex], temp);
> break;
> @@ -1069,7 +1076,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
> */
> status = bus_state->resuming_ports;
>
> - mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
> + mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC;
>
> spin_lock_irqsave(&xhci->lock, flags);
> /* For each port, did anything change? If so, set that bit in buf. */
next prev parent reply other threads:[~2015-03-08 9:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-06 8:12 [PATCH 1/1] usb: xhci: handle Config Error Change (CEC) in xhci driver Lu Baolu
2015-03-08 9:19 ` Lu, Baolu [this message]
2015-03-08 15:25 ` Alan Stern
2015-03-12 14:32 ` Mathias Nyman
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=54FC141B.3030206@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
/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.