From patchwork Wed Mar 27 09:28:58 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vivek Gautam X-Patchwork-Id: 15678 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id E8CC523E10 for ; Wed, 27 Mar 2013 09:31:40 +0000 (UTC) Received: from mail-vc0-f177.google.com (mail-vc0-f177.google.com [209.85.220.177]) by fiordland.canonical.com (Postfix) with ESMTP id 8AEE9A18120 for ; Wed, 27 Mar 2013 09:31:40 +0000 (UTC) Received: by mail-vc0-f177.google.com with SMTP id ia10so6327708vcb.36 for ; Wed, 27 Mar 2013 02:31:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-forwarded-to:x-forwarded-for:delivered-to:x-received :received-spf:x-auditid:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references:x-brightmail-tracker:x-brightmail-tracker :dlp-filter:x-mtr:x-cfilter-loop:x-gm-message-state; bh=8CxE5rsLNG1bO3p/EtesvD+6gOME50BIUPuy4ZVdtBI=; b=edrpEqaDTxVMLQHUa3uXpq4kcyjqtpQ2AmPVMHac6livkm8XN15uCogGNIsDMrV4aU YrtFMRwbah3WvZyDjaU4K6MzkPzzrvzx/q+1vDxhcVd7IWf2GaR+/09NlORVmZDDQaZb pMAGNc+ilVz5tjvNfsJdCf9snEVDkZfEIWVh3DQKzbyy7bXdYfBXSJ7EHoZMPJlKfn9x CLXLqHDhWcp6oC8q2L48HDoBkiyLeUhEGMg73xOox3vk1iK4Huwza7+z1TqaoeY+eylp hG1eygP39QQnM1PtemCOo5APYb02GvV6eARVonlysi454b3gBDIT6nd7uM8BvJr8jWJb hsbw== X-Received: by 10.52.233.225 with SMTP id tz1mr19611679vdc.54.1364376700074; Wed, 27 Mar 2013 02:31:40 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.59.4.204 with SMTP id cg12csp107582ved; Wed, 27 Mar 2013 02:31:39 -0700 (PDT) X-Received: by 10.66.228.194 with SMTP id sk2mr29146605pac.51.1364376699020; Wed, 27 Mar 2013 02:31:39 -0700 (PDT) Received: from mailout2.samsung.com (mailout2.samsung.com. [203.254.224.25]) by mx.google.com with ESMTP id xp9si21094138pbc.340.2013.03.27.02.31.38; Wed, 27 Mar 2013 02:31:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of gautam.vivek@samsung.com designates 203.254.224.25 as permitted sender) client-ip=203.254.224.25; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of gautam.vivek@samsung.com designates 203.254.224.25 as permitted sender) smtp.mail=gautam.vivek@samsung.com Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MKB001QJBSPGZP0@mailout2.samsung.com> for patches@linaro.org; Wed, 27 Mar 2013 18:31:37 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.123]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 75.DC.07735.97CB2515; Wed, 27 Mar 2013 18:31:37 +0900 (KST) X-AuditID: cbfee68e-b7f946d000001e37-96-5152bc792a3a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 94.B7.17838.97CB2515; Wed, 27 Mar 2013 18:31:37 +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 <0MKB00C14BRFI6F0@mmp2.samsung.com>; Wed, 27 Mar 2013 18:31:37 +0900 (KST) From: Vivek Gautam To: u-boot@lists.denx.de Cc: patches@linaro.org, marex@denx.de, sjg@chromium.org, rajeshwari.s@samsung.com, vikas.sajjan@samsung.com, amarendra.xt@samsung.com Subject: [PATCH 2/7] usb: hub: Conditionally power on usb's root-hub ports Date: Wed, 27 Mar 2013 14:58:58 +0530 Message-id: <1364376543-7526-3-git-send-email-gautam.vivek@samsung.com> X-Mailer: git-send-email 1.7.6.5 In-reply-to: <1364376543-7526-1-git-send-email-gautam.vivek@samsung.com> References: <1364376543-7526-1-git-send-email-gautam.vivek@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBLMWRmVeSWpSXmKPExsWyRsSkWrdyT1CgwYonChZfFnSyW7xpa2S0 mHL4C4tFy9oDrBbftmxjtHi7Fyhx89l2Jgd2j9kNF1k85s06weJx59oeNo+zd3YwevRtWcUY wBrFZZOSmpNZllqkb5fAlXGhoYexYDJfxaLDV9gaGFdwdzFyckgImEhs2X6PHcIWk7hwbz1b FyMXh5DAUkaJIxvamWGKft7axw6RmM4ocXDJJChnCpPEvjf72ECq2AR0JZre7mIEsUUEJCR+ 9V9lBCliFmhnlNi8cTZYkbCAl8TTnTvBxrIIqEpsefSRBcTmFXCXaO34wwKxTkHize1nYDWc Ah4SM15NA4sLAdUcOreHEaJmHrvEokVuEHMEJL5NPgRUwwEUl5XYdADqakmJgytusExgFF7A yLCKUTS1ILmgOCm9yEivODG3uDQvXS85P3cTIzDUT/971reD8eYB60OMyUDjJjJLiSbnA2Ml ryTe0NjMyMLUxNTYyNzSjDRhJXFetRbrQCGB9MSS1OzU1ILUovii0pzU4kOMTBycUg2MMetN fiyzW/rmz6On/83lnJc+kM2S9d3HYtrkMTdLeDd3Z9f7qkKWGIO1W2pDI5KWx0r+uBFy70/g Cbv0WxmCBWUCr2eKdCQsS+ATm275RPU6q4D+3RYnlwMl3Md2uMnruKa+OTbT4KKOyfIzjc/7 dHYl1+1OzLXWejJZp9M35lXfrOhY3ztKLMUZiYZazEXFiQBBKZBdiwIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrGIsWRmVeSWpSXmKPExsVy+t9jQd3KPUGBBi+eSFh8WdDJbvGmrZHR YsrhLywWLWsPsFp827KN0eLtXqDEzWfbmRzYPWY3XGTxmDfrBIvHnWt72DzO3tnB6NG3ZRVj AGtUA6NNRmpiSmqRQmpecn5KZl66rZJ3cLxzvKmZgaGuoaWFuZJCXmJuqq2Si0+ArltmDtAh SgpliTmlQKGAxOJiJX07TBNCQ9x0LWAaI3R9Q4LgeowM0EDCGsaMCw09jAWT+SoWHb7C1sC4 gruLkZNDQsBE4uetfewQtpjEhXvr2boYuTiEBKYzShxcMokdwpnCJLHvzT42kCo2AV2Jpre7 GEFsEQEJiV/9VxlBipgF2hklNm+cDVYkLOAl8XTnTmYQm0VAVWLLo48sIDavgLtEa8cfFoh1 ChJvbj8Dq+EU8JCY8WoaWFwIqObQuT2MExh5FzAyrGIUTS1ILihOSs811CtOzC0uzUvXS87P 3cQIjqVnUjsYVzZYHGIU4GBU4uGdwRAUKMSaWFZcmXuIUYKDWUmE98UKoBBvSmJlVWpRfnxR aU5q8SHGZKCrJjJLiSbnA+M8ryTe0NjE3NTY1NLEwsTMkjRhJXHeA63WgUIC6YklqdmpqQWp RTBbmDg4pRoYF260yy8wdfNzYvNJT5nNFiRRmJtrtavwtfP5I2+y9lga/LkVHSp9fKYsc0CM UxfTValr518w+S5r7F3y3HpnofnpXx+1Hqy/r8QsFdqyblvk8T6uaTskxT96zJzIw/xQfOu8 hx5MWu85bIu9HzX+5lhUeiJnXsCfislyj4+fXJnwqEKDUzZSiaU4I9FQi7moOBEAv9RBh+kC AAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Gm-Message-State: ALoCoQlSpKh10XzmbjydlLqDBFl/z0339vMNJLvIsbMOldxjVZnSU+4vwALHvjOosrTcukSk5iO4 Power on root hubs' ports only when they are not yet powered on. Its seen with USB 3.0 ports that they are powered on after a H/W reset, as also reflected in XHCI spec (sec 4.3): "After a Chip Hardware Reset, HCRST, or commanded to the PLS = RxDetect state, all Root Hub ports shall be in Disconnected state, i.e. the port is powered on (PP = 1)" Signed-off-by: Amar Signed-off-by: Vivek Gautam --- common/usb_hub.c | 22 +++++++++++++++++++--- 1 files changed, 19 insertions(+), 3 deletions(-) diff --git a/common/usb_hub.c b/common/usb_hub.c index b5eeb62..0677004 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -111,13 +111,29 @@ 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 */ + + /* Enable power to ports whose power is not yet on */ USB_HUB_PRINTF("enabling power on all ports\n"); for (i = 0; i < dev->maxchild; i++) { - usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); - USB_HUB_PRINTF("port %d returns %lX\n", i + 1, dev->status); + 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; + } + + portstatus = le16_to_cpu(portsts->wPortStatus); + + if (!(portstatus & (USB_PORT_STAT_POWER << 1))) { + usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); + USB_HUB_PRINTF("port %d returns %lX\n", i + 1, + dev->status); + } } /* Wait at least 100 msec for power to become stable */