From patchwork Mon Apr 8 10:35:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivek Gautam X-Patchwork-Id: 234732 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 8D3182C00C3 for ; Mon, 8 Apr 2013 20:38:55 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0569F4A347; Mon, 8 Apr 2013 12:38:45 +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 Urt5sO2YQLFj; Mon, 8 Apr 2013 12:38:44 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 5AAAC4A2F0; Mon, 8 Apr 2013 12:38:21 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 75D964A31C for ; Mon, 8 Apr 2013 12:38:07 +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 ohAHAxaZu6hy for ; Mon, 8 Apr 2013 12:38:04 +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 mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by theia.denx.de (Postfix) with ESMTP id 56EC24A31E for ; Mon, 8 Apr 2013 12:38:01 +0200 (CEST) Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MKX000HRMVATP21@mailout2.samsung.com> for u-boot@lists.denx.de; Mon, 08 Apr 2013 19:37:58 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.125]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 2F.49.20872.60E92615; Mon, 08 Apr 2013 19:37:58 +0900 (KST) X-AuditID: cbfee68d-b7f786d000005188-60-51629e062f87 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 89.2E.17838.60E92615; Mon, 08 Apr 2013 19:37:58 +0900 (KST) Received: from vivekkumarg-linuxpc.sisodomain.com ([107.108.214.169]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MKX008PGMUQGH60@mmp1.samsung.com>; Mon, 08 Apr 2013 19:37:58 +0900 (KST) From: Vivek Gautam To: u-boot@lists.denx.de Date: Mon, 08 Apr 2013 16:05:55 +0530 Message-id: <1365417358-31921-3-git-send-email-gautam.vivek@samsung.com> X-Mailer: git-send-email 1.7.6.5 In-reply-to: <1365417358-31921-1-git-send-email-gautam.vivek@samsung.com> References: <1365417358-31921-1-git-send-email-gautam.vivek@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsWyRsSkVpdtXlKgQdcOOYsvCzrZLd60NTJa TDn8hcWiZe0BVotvW7YxWix/vZHd4u1eoOzNZ9uZHDg8ZjdcZPGYN+sEi8eCTaUed67tYfM4 e2cHo0ffllWMAWxRXDYpqTmZZalF+nYJXBmzH11nLzgiULH7/T7GBsYW3i5GTg4JAROJAwvX M0LYYhIX7q1nA7GFBJYySmzfxA9Ts+vUPaYuRi6g+CJGiV+vHzNDOFOYJHqe7QLrYBPQlWh6 uwtskoiAhMSv/qtgNrPAYkaJC7tsQWxhAXuJI0euM4HYLAKqEsuX9gIN4uDgFfCQmLawAGKZ gsSb28/AwpwCnhK3ZkpB3OMh0XHiPivIWgmBVewSB77dZIMYIyDxbfIhFpB6CQFZiU0HmCHG SEocXHGDZQKj8AJGhlWMoqkFyQXFSelFhnrFibnFpXnpesn5uZsYgWF/+t+z3h2Mtw9YH2JM Bho3kVlKNDkfGDd5JfGGxmZGFqYmpsZG5pZmpAkrifOqtVgHCgmkJ5akZqemFqQWxReV5qQW H2Jk4uCUamC0zFk377TYbo6o0HrGuDWfb+wLLyhV5L7m6PA+KiDx16aj7moWXqanV3zl9FHz kBATz3q4eMXcX2uLa6O2JNoHT/77u5HtkOqW+g3Td129FH2X7a9a9t4pmUnxG8s3XWpYzau9 40RiR8s+7n+Bd96+sj2t2XtaXmVxiUjug28ly7iefDH1nlulxFKckWioxVxUnAgArQ0Oq5EC AAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrDIsWRmVeSWpSXmKPExsVy+t9jAV22eUmBBv9/ilp8WdDJbvGmrZHR YsrhLywWLWsPsFp827KN0WL5643sFm/3AmVvPtvO5MDhMbvhIovHvFknWDwWbCr1uHNtD5vH 2Ts7GD36tqxiDGCLamC0yUhNTEktUkjNS85PycxLt1XyDo53jjc1MzDUNbS0MFdSyEvMTbVV cvEJ0HXLzAG6SEmhLDGnFCgUkFhcrKRvh2lCaIibrgVMY4Sub0gQXI+RARpIWMOYMfvRdfaC IwIVu9/vY2xgbOHtYuTkkBAwkdh16h4ThC0mceHeerYuRi4OIYFFjBK/Xj9mhnCmMEn0PNvF BlLFJqAr0fR2FyOILSIgIfGr/yqYzSywmFHiwi5bEFtYwF7iyJHrYFNZBFQlli/tBRrEwcEr 4CExbWEBxDIFiTe3n4GFOQU8JW7NlAIJCwFVdJy4zzqBkXcBI8MqRtHUguSC4qT0XEO94sTc 4tK8dL3k/NxNjOC4eia1g3Flg8UhRgEORiUeXskfiYFCrIllxZW5hxglOJiVRHjFZyYFCvGm JFZWpRblxxeV5qQWH2JMBrppIrOUaHI+MObzSuINjU3MTY1NLU0sTMwsSRNWEuc90GodKCSQ nliSmp2aWpBaBLOFiYNTqoHRNzpa9mvL3cNfmqr53i1U+ZIx/6wxn/aH/aHpP8u1ixluP38f oVggZLg69dqu2kwpxsqG8DncTUeb3dqLNoU/i7GW27vr8qq2Lxq5k59la6W13jz3/PUs9se6 b69lHndN8dvR6sb/fZKKRtS6V0K5mQc+VSRFzYjqcH587LPWpx9bL+9epH1BiaU4I9FQi7mo OBEACLk9xe8CAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: marex@denx.de, u-boot-review@google.com, patches@linaro.org, rajeshwari.s@samsung.com, vikas.sajjan@samsung.com Subject: [U-Boot] [PATCH v2 2/5] 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 --- common/usb_hub.c | 36 ++++++++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-) diff --git a/common/usb_hub.c b/common/usb_hub.c index b5eeb62..4bfed09 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -111,11 +111,47 @@ 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 */ USB_HUB_PRINTF("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); + USB_HUB_PRINTF("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) { + USB_HUB_PRINTF("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)) { + USB_HUB_PRINTF("port %d: Port power change failed\n", + i + 1); + return; + } + usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); USB_HUB_PRINTF("port %d returns %lX\n", i + 1, dev->status); }