Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1957043AbdDZIeu (ORCPT ); Wed, 26 Apr 2017 04:34:50 -0400 Received: from mail-bl2nam02on0049.outbound.protection.outlook.com ([104.47.38.49]:32480 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1946590AbdDZIej (ORCPT ); Wed, 26 Apr 2017 04:34:39 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; lists.infradead.org; dkim=none (message not signed) header.d=none;lists.infradead.org; dmarc=fail action=none header.from=nxp.com; Date: Wed, 26 Apr 2017 16:34:28 +0800 From: Peter Chen To: Jisheng Zhang CC: , , , Subject: Re: [PATCH] usb: chipidea: properly handle host or gadget initialization failure Message-ID: <20170426083428.GA4375@b29397-desktop> References: <20170425094311.361-1-jszhang@marvell.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20170425094311.361-1-jszhang@marvell.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-EOPAttributedMessage: 0 X-Matching-Connectors: 131376692766796982;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.158.2;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(336005)(39400400002)(39450400003)(39410400002)(39850400002)(39380400002)(39840400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(24454002)(9170700003)(8676002)(229853002)(47776003)(97756001)(4001350100001)(33656002)(104016004)(2906002)(8936002)(105606002)(69596002)(189998001)(106466001)(33716001)(81166006)(54356999)(50986999)(76176999)(23726003)(356003)(53936002)(110136004)(38730400002)(83506001)(6246003)(6666003)(77096006)(54906002)(2950100002)(6916009)(55016002)(46406003)(85426001)(4326008)(305945005)(50466002)(9686003)(1076002)(5660300001)(86362001)(18370500001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0301MB0608;H:az84smr01.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD024;1:YhjFZw/t2dN4GGUIJe6ASpMlKbvxb0Q057bL1ohAoRJM7jEgAdJ8ghZCVlITEnMPHpwUjoWULPxaypxOgvrIvK5D2bMZ6c39Qs8KbiVYhlqqc3U8x3Zsk/PyEb0xNdT4Rbj52SHuiIDehFN4k9NHt/V5CTAgKB7mswbqxwjM3+g5Jdt8UqY5LAUUooUlGZLABGtCuWG+/UN+ClMEC9U7PZXHoKDh4MF/TPsrkGR1MTJ2RMzCXMsXiXbAvtGgY7X2e21CSuO2FTu5a1IXo6wHtE6M7K/jqwAlME9siG36P6PL44p2I4mcGO4lCIxu1d7NxyWymUFbYCTV18MxC67iFdMXtJ16xVDzuUvsrZ3M9HeuNrXlR2FhmMQLiJ+sD+3SWvuDEfWd5TZ9zfxTOAM3nARm4XdTx+tXtdYIPe896ELEdsTisRlGLyz6Z9jSkrCJGs7vinHuRZa47DtAaBu7CsTOeHkzcKgvzcjDd0AbRdupsdWn3XIj81zQWf+ex+U+suR9P8zGP3pmquOE1a9RBqjWLurJrkEKSQ1d0BZodcLwOi7vf07qYQyJF1aqDwnPQqqHyMjflfxP2gB7QZ9gVbRV5Ayauas97p2ILOv+jZ5mpDCkyLKafY7QN8grR5Q+ X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a9a8a2ba-8120-40d6-004d-08d48c7f1283 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;3:mhllhJDusBv+W+rx/QNtwr5mUi9ThPCGiRf5QmwCWkew4LyzwBL7y+Kgb9jQCUkrH5GfsVNx7obM5RQpoI+1ptSv1sVhGF3Ole8cZurH9tuaIPnXCrC6xt2lv5Sqv9gN4A38jQ1hV5IxalfQyXRFGZD2/Y3vhIEBd+9JnnLZKJHhZqc03HamUNgrpWaU4tYaGbIOALUUVpy8f1ehlcQSx+Ie745DNHsR2DPeRbz8FVM4pQcYydnjR1CXI6OWBN+FXisNb8HR9w/lQMIS9ozcZnAndVXbHuZPMD6zbZHfmcqUwYvfrLngzwbHE3jGRU9bB0UhASS9jUEsoQnaiegc1kK3wO/YPtfnJCEPZUuzHmy+GPDPu0y7sunc5idJpRhtUWGRQwtE//KGtmoUOvXzDyweaszk4wPELyjlhgucEK1PhYPczjxUPv8a4mDzTUh2;25:37ZIyuqmMeK2gA1Xt3iz4MUg1Qpec8eWBbnmZ2HkLDd0ggn5vhnlDEDIqRMaqE31Hhe5R2DineRqzQ9aXan2frtvf+MNi9DDWX86w8EJi6fpKOd+4jovplAks1ldK7kCnak2AwVsBeVCfxi3jVPUCXiOWNCwQrflPxDSV1VzNowDdtp9UVDaGdFj0T5fFI8R18lICYQ4z2i9x2kR4D7Lnp19GHH4nVUW7jiMMHiUwlR96VFEDDp3sVNICESXWHQjsORNdsbt9+6eKKDiMiCqhcHf1iQYdEVzk7gqGIJkU4GHVnGePhy2t/r3hCW0Jk/p1IkHoDfFYFBvj2YxTJYxgTABPRc9cZT6m5pQIJ76Ce5Q7sPJFAhf0nWs4XQy4E/hdXQfbPwbWKknbnMsTV9q1lMyw/Knyy+5Dmg6fcqcDk7e1/1OaNaZZgF1BaGOgqzWJLxZFl41JeS7G1mFqTa4HA== X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;31:FatZMdPdMRhBvlP1VaU+oMM67X1gPTfQ5l2BuqR9bpKts4qlwQb50OXrQ/EgA+TCh5Sr0iydsOxso/clz+rmmsvTDeLQJoQW9Z2HDgm0PsD+s3er1+q6ka7FgIFf5MY70TCed55Zgqz04pVLznSRcS608zC/5fYIrNTCUFEyBMWVrk4ZW9rjHc3cpJ+SRRjJzutUNibFQ0/7nfqDgFHH0aOHri6UM31sT1+TbKABTB3kz777yxtTzJx0n+Sp/RiWwd8hDNeJeuhO68pfT+BlhU0b3F+MXT5i2vKqv3gXp8g= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095135)(601004)(2401047)(13024025)(13023025)(13018025)(13015025)(8121501046)(13017025)(5005006)(93006095)(93001095)(3002001)(10201501046)(6055026)(6096035)(20161123563025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123561025)(20161123565025)(20161123556025);SRVR:DM2PR0301MB0608;BCL:0;PCL:0;RULEID:(400006);SRVR:DM2PR0301MB0608; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;4:WwK4npv9zrQ42hPFo8NGYLXfbXsJ3LWiyjgW4645fqXpMZzIeBPR3o8JGGgIgV9skXMa5ddEVn0IaGMj1qi13g1ovV805sQle7I7SvyZa4saYGUMk0B68IAdXnobutLbHzyjAX7FFBgpVId+dlWZgYGOU3ilbkUYJzvoqZgqLRlPK/2swWqLzi8uNuxG88jVWhiQGs8akCcughqR4CTSVgQboWIL9H9Pi11XyXQyDqAccFWXkB/cTysAkSTuxiFbsSTQhIv5muDkRIzz869AYk+ho7JOZuLAhN1wkGJbqZlSmcRJdUd1XyDbZJgnjEE5SOOCelSJFV40B1WnH8PTsIjLnFSzmEPAuroW7eDPjxbwK2oZMW7Uuwk6X5HjduFivRAVBVxKq+Dk4ze8dSRdVOiFo4WVPZt9m0icZQ0VxQA9ENPP/e85LgUT+cY403hZYnpeKf/eJVztBOBRbGNp1RHH4sUsQT31dcMXiX4TB8fbfMAA+TUk8bZam5t9tAki0EB/qm81NJkrFFdWU2wCmOJywaq8RjYD1H9/8iOqHxZ1r9J3dTTxTbuhghQw749XqvtPC+70k9ZkHLkf1HdcoPPuNFex91riQxRC1xeYJ8DQblVHjJWUFneqlzGxKJTQyGuOiSasm7ph3PAG+hgS2x/i6b7PTSeRXb+oPB7zz4dZBNC3yC3CV3ilSBYHchQ6IJqBhvYwlNgVEFU8TuWs14TMtP6Wr58rPXMRx36vb6H0ERyqNRcJfKeJvpjzVJOBJBrLk54U3LMWtQ4tjZjSJvO7noeY+6+dChLUl0N8DXoZOxUdZ+MGkwVKnKLYbvc2o02ifLdScVMipmu/zcrxxFNyjCZjlHOaSdhvZ5VGAUTVFD9lqWl/1QzVOWztvmKy X-Forefront-PRVS: 0289B6431E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0608;23:Br3ZmNtwBdxA0ISXVQKgFNmO2W1s9JYaI1TihZD?= =?us-ascii?Q?kmk7WhkdN/HNvhIbvi6H8QzKkCzEw/+sgOXQtBY83Sd6u1zCxYuai7Jrd00s?= =?us-ascii?Q?NV1fMHzLqF3UGZ+hl8azqkVX+8Q4OlSWG7ITMRm/bLi7DqF5mRM6wtFY9Khd?= =?us-ascii?Q?kGQ814PDvK3p2UMWP0UIhMYRvxud8g3CVqOsNnrVF9DSeVO680SlgBjVHub1?= =?us-ascii?Q?s0nxQTqwQaKKy8g2Ge8Q3bSvMs7Fs0GfpIadgyoBlK3VG/xwJCJC+dINvCkx?= =?us-ascii?Q?0SVwrcfZM2tXUGXtwRYtS8DfqAaqQa9fJY4Pks/G9ppDxjXMwZguFfTfJcx5?= =?us-ascii?Q?wTICZmyDOxWKZ8j/L3zlH84a+uXcIh03cl9RymPV6WeFESlDFWSbhW4/Ovzb?= =?us-ascii?Q?PblNj0PZosgY2Hf6x+gw5fbrQWeSKIV52+cTjysT4dexwL1NaSRuljagiw/l?= =?us-ascii?Q?tv8gVETWXRJlJuJ8ltvJxtm9hI0daNJZcAR76ow7GC529RiFZZ0aeQz1iBDv?= =?us-ascii?Q?aw7RsbfocdtaOoM99G5QMAU3s5gy1ngXc6EsYNi33LQCq/A4W8cUqKZVcg8y?= =?us-ascii?Q?VQe2FJ5vIkQESS/RpqfXbukuhi3cVZKDs9qLFogdyMI0rzGbpUz9UBAsxLsE?= =?us-ascii?Q?Wc15Gs/2eWDo8Cp6ObGxuar1yRQhsntjvZXIgXLNgCtzidOpBOEuQEDz60Fh?= =?us-ascii?Q?2C1LDY80n9liFTnQaTHcg2mcrL2ybg5b6ogWxSuldeSATdRGeIjj/zrM2Mch?= =?us-ascii?Q?mfvHo5+yC3Po/0rHXAeidVmLdzZr1PiE8x5ubDeVIxMKa0LMWaf6X6j8sfOu?= =?us-ascii?Q?PqlHFwByJlIOjfiGcJtUsLRU/kEHQnNgEXW2O/y7U80lVhOASBt5S9mdlk1p?= =?us-ascii?Q?ghlipUyY1OU9hTf94KJ0vIgIlXkEmDm/o6UUYVKYjh+ALtgExcD8Wn1ya/S1?= =?us-ascii?Q?1HsIedlZjVYOqUs4g7eZ32Gq1XHfIs7cADN70SkvHu/HVEAx0xMTF5Zk2Y6q?= =?us-ascii?Q?xSYXhe8o/k6xerVZEL2lwfMWGj2EzCSyIgBd3TBDGADs2L6gQygf3ONmODEz?= =?us-ascii?Q?LZ/jANutonb+jFVzTlVdQhhdCfi+hZ2NhHKsB+9b+SCG5HbLq26r6ogJNHqU?= =?us-ascii?Q?CPlS7DyMmE7Jk7U7vwoEwJfmKelDGbfTEvcoqYEPAO0YJaIw/dEHW42ocpTq?= =?us-ascii?Q?fEOpSMuCqjXYyqU6WyyUG5rS5WWI6y45wxtzRzlV/2lTVDo41jhbBWU8iZtk?= =?us-ascii?Q?DKROg+y+8GZ/oV0/6YHLp2NtczuF9uXQ5gY6smTYMzCOvyThSBU5PN46CH3P?= =?us-ascii?Q?eJnwKg7i7+0j9Xm5A0+fCMbCXVtDPYCOs4OtRRFCt3tZ+b2dIC3PJOCMe68P?= =?us-ascii?Q?hr8oRrCgLMyx+Hc7h/4aA2K2F/cwzKFBYsMp7+sMFAPldgEtl4/yMy4/V/Cr?= =?us-ascii?Q?QYIy37P318g=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;6:xh9yxfa1dbInbtDM/qAqYGlJ2L+1/SAKIwjYn3wR8oeRTjQ4lu1F4C8BYwR5tseYX62aKGj/6afDsV2PC5SX+gsh2jJDltJBkXGE6kappsaN3+1qcDGPwocYc4ItmKKCDJzOkva39BfnDc3bTlDlr2b1q7kvPHjGU/I64hgdyVPm8N4ZWO2DOsCxtqycA4SOGA+TT/nJq+oyU+hLSO8IcRVs1Yvqx8/U7WCuCLUSmpK5ywR1mwOEtmRuue1SC1+jqy3y6m9VCq2qTZF9g62KBKlwlUUVk/AJCs8wmkpP97PMBa0iH0n4CDD3p0hBlt3jqy7sxgZEle6qKEyjta9dXc14kznM8WyDlbbSYrBBrGQerzio/SCLqpWGqv5TTS4bQ9myCviozckmN14a5ZmkT18vBar6/4/TW6sH2F5udYP9BOZsdjlibkaU6f1xGXMziqxzYkCR+n00gjU3nnm4zXOejtTLw9zAvl/yACCf/PYphz+kVlD9ziA+O3NfEmvB;5:pp+7TgabtxxLOhg9A6F5RWQ5LojYYGKTg17/vAgE22d8QeBha0atNU4Vy3p2Ej9KhA0GlmKAbvaMbNDaGG0vWp7yNMAjUGsDkMTTh33S2bg2ayv8R46P2qsfGFQ2xa8y4UyNwmTo4sl8HGjc/6qBG1Gw16jdv27Rq1Zlk3l3zPwCIjkhtx0DDpSL/h8QoP9U;24:Mq+VUvugRoOSvpPeopAE+2RzGP/QQFYODWoGnTzQ3ZefeaL4MBWcZyZ/ZRekTKDLkVVSnpMRomYBcYhp/o65WvWLxhG7sZQgyZyGH2yWHEM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0608;7:Khq64Tk9eKAGRPqwbiQWj3EY/IaUv97cOLFjUmkYeQz2kmtTc4+v+G9NFmHiN6D/j9Q/EIIAc/hobWKNKbQhkxP/tr8zfj1qGETjNcVkZFesn3EFzbqAfO34FsRkzHgJ06diGYWNjC2k3lbVN7zCbdq1sThrYSlD48i1zhWJZHFaV5Ccxj6z01fQCm6hfJPNUp4h8sy+OuHYOItfpC151D0FCp7c3UQOQTVH/AbM7JjTzMczUHTK9PczvR6YomY1J076E+K4RsB7nmBfX9opSFXEY4PGS/Hrtzftc2LZT5EWjUdA1tRUthbJg5vLtUhCjl+jyCo3TqBBNTNviiDrkg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2017 08:34:36.4456 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0608 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3107 Lines: 107 On Tue, Apr 25, 2017 at 05:43:11PM +0800, Jisheng Zhang wrote: > If ci_hdrc_host_init() or ci_hdrc_gadget_init() returns error and the > error != -ENXIO, as Peter pointed out, "it stands for initialization > for host or gadget has failed", so we'd better return failure rather > continue. > > Signed-off-by: Jisheng Zhang > --- > drivers/usb/chipidea/core.c | 25 +++++++++++++++++++------ > 1 file changed, 19 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c > index 79ad8e91632e..047afdbb7049 100644 > --- a/drivers/usb/chipidea/core.c > +++ b/drivers/usb/chipidea/core.c > @@ -930,20 +930,28 @@ static int ci_hdrc_probe(struct platform_device *pdev) > /* initialize role(s) before the interrupt is requested */ > if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_HOST) { > ret = ci_hdrc_host_init(ci); > - if (ret) > - dev_info(dev, "doesn't support host\n"); > + if (ret) { > + if (ret == -ENXIO) > + dev_info(dev, "doesn't support host\n"); > + else > + goto deinit_phy; > + } > } > > if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_PERIPHERAL) { > ret = ci_hdrc_gadget_init(ci); > - if (ret) > - dev_info(dev, "doesn't support gadget\n"); > + if (ret) { > + if (ret == -ENXIO) > + dev_info(dev, "doesn't support gadget\n"); > + else > + goto deinit_host; > + } > } > > if (!ci->roles[CI_ROLE_HOST] && !ci->roles[CI_ROLE_GADGET]) { > dev_err(dev, "no supported roles\n"); > ret = -ENODEV; > - goto deinit_phy; > + goto deinit_gadget; > } > > if (ci->is_otg && ci->roles[CI_ROLE_GADGET]) { > @@ -1013,7 +1021,12 @@ static int ci_hdrc_probe(struct platform_device *pdev) > return 0; > > stop: > - ci_role_destroy(ci); > + if (ci->is_otg) > + ci_hdrc_otg_destroy(ci); > +deinit_gadget: > + ci_hdrc_gadget_destroy(ci); > +deinit_host: > + ci_hdrc_host_destroy(ci); > deinit_phy: > ci_usb_phy_exit(ci); > ulpi_exit: > -- > 2.11.0 > You change is ok, there are more things need to change for this issue, would you mind adding below changes to your patch, and send v2. Below changes are based on your changes. diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index c55bcdd..4cad8a9 100644 --- a/drivers/usb/chipidea/core.c +++ b/drivers/usb/chipidea/core.c @@ -818,7 +818,7 @@ static inline void ci_role_destroy(struct ci_hdrc *ci) { ci_hdrc_gadget_destroy(ci); ci_hdrc_host_destroy(ci); - if (ci->is_otg) + if (ci->is_otg && ci->roles[CI_ROLE_GADGET]) ci_hdrc_otg_destroy(ci); } @@ -1005,7 +1005,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) ret = ci_hdrc_otg_init(ci); if (ret) { dev_err(dev, "init otg fails, ret = %d\n", ret); - goto stop; + goto deinit_gadget; } } @@ -1075,7 +1075,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) remove_debug: dbg_remove_files(ci); stop: - if (ci->is_otg) + if (ci->is_otg && ci->roles[CI_ROLE_GADGET]) ci_hdrc_otg_destroy(ci); deinit_gadget: ci_hdrc_gadget_destroy(ci); -- Best Regards, Peter Chen