From patchwork Fri Apr 12 11:04:35 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivek Gautam X-Patchwork-Id: 236034 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 9B1842C00B9 for ; Fri, 12 Apr 2013 21:07:13 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A3FA44A033; Fri, 12 Apr 2013 13:07:08 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id m7fo0h22RqHI; Fri, 12 Apr 2013 13:07:08 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 001DE4A03F; Fri, 12 Apr 2013 13:06:56 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 99D344A028 for ; Fri, 12 Apr 2013 13:06:55 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QU4pckjQQqVx for ; Fri, 12 Apr 2013 13:06:54 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by theia.denx.de (Postfix) with ESMTP id 1A8064A033 for ; Fri, 12 Apr 2013 13:06:45 +0200 (CEST) Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0ML500MW12V7D2X0@mailout4.samsung.com> for u-boot@lists.denx.de; Fri, 12 Apr 2013 20:06:44 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.123]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 7A.5B.07735.3CAE7615; Fri, 12 Apr 2013 20:06:43 +0900 (KST) X-AuditID: cbfee68e-b7f946d000001e37-0b-5167eac376f6 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id B8.44.17838.3CAE7615; Fri, 12 Apr 2013 20:06:43 +0900 (KST) Received: from vivekkumarg-linuxpc.sisodomain.com ([107.108.214.169]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0ML500IF52UIWD90@mmp2.samsung.com>; Fri, 12 Apr 2013 20:06:43 +0900 (KST) From: Vivek Gautam To: u-boot@lists.denx.de Date: Fri, 12 Apr 2013 16:34:35 +0530 Message-id: <1365764680-10917-4-git-send-email-gautam.vivek@samsung.com> X-Mailer: git-send-email 1.7.6.5 In-reply-to: <1365764680-10917-1-git-send-email-gautam.vivek@samsung.com> References: <1365764680-10917-1-git-send-email-gautam.vivek@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprAIsWRmVeSWpSXmKPExsWyRsSkWvfwq/RAg0uHzS2+LOhkt2i7cpDd 4k1bI6PFlMNfWCxa1h5gtfi2ZRujxfLXG9kt3u4FKrn5bDuTxb9L11gduDxmN1xk8Zg36wSL x4JNpR53ru1h8zh7ZwejR9+WVYweT3/sZQ5gj+KySUnNySxLLdK3S+DKuPRzK0vBUYGK198X MzcwNvF2MXJySAiYSDx6/pcZwhaTuHBvPVsXIxeHkMBSRonHjWtYYIpm9y2FSkxnlNj59Ag7 hDOFSeL9v+tg7WwCuhJNb3cxgtgiAhISv/qvgtnMAhcZJe4ccgexhQXsJR7vmcUEYrMIqEq0 TnzMCmLzCnhIbFm1gQ1im4LEm9vPwGZyCnhKnF/6lh3EFgKqWdm/mwVksYTAPnaJ82dns0IM EpD4NvkQUIIDKCErsekA1DuSEgdX3GCZwCi8gJFhFaNoakFyQXFSepGRXnFibnFpXrpecn7u JkZgbJz+96xvB+PNA9aHGJOBxk1klhJNzgfGVl5JvKGxmZGFqYmpsZG5pRlpwkrivGot1oFC AumJJanZqakFqUXxRaU5qcWHGJk4OKUaGHUW9Xr3SxU8YJm6ZlfXwoOmGy913hJqX7XA1Yhz +om9pesmp/xz3XSrxsfHSzH+xFbDjoqdZ8IPa+jOjDd58cuEOYqxsSH84P/vK6vkWrZMvvZs 67WFTa//S19Wvcz9ffaRHvl91sbaf47K8syPu5ac3dc7Iz+AR0lVv/lbT6htdK5y2BK+ciWW 4oxEQy3mouJEAIVC2n2jAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsVy+t9jQd3Dr9IDDTYf0bD4sqCT3aLtykF2 izdtjYwWUw5/YbFoWXuA1eLblm2MFstfb2S3eLsXqOTms+1MFv8uXWN14PKY3XCRxWPerBMs Hgs2lXrcubaHzePsnR2MHn1bVjF6PP2xlzmAPaqB0SYjNTEltUghNS85PyUzL91WyTs43jne 1MzAUNfQ0sJcSSEvMTfVVsnFJ0DXLTMH6EAlhbLEnFKgUEBicbGSvh2mCaEhbroWMI0Rur4h QXA9RgZoIGENY8aln1tZCo4KVLz+vpi5gbGJt4uRk0NCwERidt9SNghbTOLCvfVANheHkMB0 RomdT4+wQzhTmCTe/7vODFLFJqAr0fR2FyOILSIgIfGr/yqYzSxwkVHiziF3EFtYwF7i8Z5Z TCA2i4CqROvEx6wgNq+Ah8SWVRugtilIvLn9DGwmp4CnxPmlb9lBbCGgmpX9u1kmMPIuYGRY xSiaWpBcUJyUnmuoV5yYW1yal66XnJ+7iREcec+kdjCubLA4xCjAwajEw/tCOD1QiDWxrLgy 9xCjBAezkghvzN60QCHelMTKqtSi/Pii0pzU4kOMyUBXTWSWEk3OByaFvJJ4Q2MTc1NjU0sT CxMzS9KElcR5D7RaBwoJpCeWpGanphakFsFsYeLglGpg7JK6O7k84csp19TZMbFzzfgZny7r urQ0+MPhY8sWs5euSc2bdDAl8anhzPb78/o2tGbP4ZzE1N1yqlXz0acdHSLdRi5GmjPfmP46 N6uw1/Pe9maJnonl5a9t3ic5Jt+1d1uRnRmvb2mnrNB5fs7m+yInPWTbvkrPqp79XkVAVLZJ tknVvv6GEktxRqKhFnNRcSIAHdx7jQADAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: marex@denx.de, u-boot-review@google.com, patches@linaro.org, gautam.vivek@samsung.com, rajeshwari.s@samsung.com, vikas.sajjan@samsung.com Subject: [U-Boot] [PATCH v3 3/8] usb: hub: Power-cycle on root-hub ports X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de XHCI ports are powered on after a H/W reset, however EHCI ports are not. So disabling and re-enabling power on all ports invariably. Signed-off-by: Amar Signed-off-by: Vivek Gautam --- Changes from v2: - Replaced USB_HUB_PRINTFs to debug() common/usb_hub.c | 34 ++++++++++++++++++++++++++++++++++ 1 files changed, 34 insertions(+), 0 deletions(-) diff --git a/common/usb_hub.c b/common/usb_hub.c index f2a0285..e4f4e3c 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -100,11 +100,45 @@ static void usb_hub_power_on(struct usb_hub_device *hub) int i; struct usb_device *dev; unsigned pgood_delay = hub->desc.bPwrOn2PwrGood * 2; + ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1); + unsigned short portstatus; + int ret; dev = hub->pusb_dev; /* Enable power to the ports */ debug("enabling power on all ports\n"); for (i = 0; i < dev->maxchild; i++) { + /* + * Power-cycle the ports here: aka, + * turning them off and turning on again. + */ + usb_clear_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); + debug("port %d returns %lX\n", i + 1, dev->status); + + /* Wait at least 2*bPwrOn2PwrGood for PP to change */ + mdelay(pgood_delay); + + ret = usb_get_port_status(dev, i + 1, portsts); + if (ret < 0) { + debug("port %d: get_port_status failed\n", i + 1); + return; + } + + /* + * Check to confirm the state of Port Power: + * xHCI says "After modifying PP, s/w shall read + * PP and confirm that it has reached the desired state + * before modifying it again, undefined behavior may occur + * if this procedure is not followed". + * EHCI doesn't say anything like this, but no harm in keeping + * this. + */ + portstatus = le16_to_cpu(portsts->wPortStatus); + if (portstatus & (USB_PORT_STAT_POWER << 1)) { + debug("port %d: Port power change failed\n", i + 1); + return; + } + usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); debug("port %d returns %lX\n", i + 1, dev->status); }