From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753284AbcERKY7 (ORCPT ); Wed, 18 May 2016 06:24:59 -0400 Received: from mga04.intel.com ([192.55.52.120]:42412 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753051AbcERKY5 (ORCPT ); Wed, 18 May 2016 06:24:57 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,328,1459839600"; d="asc'?scan'208";a="957112665" From: Felipe Balbi To: Baolin Wang Cc: Greg KH , Mark Brown , USB , LKML Subject: Re: [PATCH] dwc3: gadget: Defer starting the gadget device until gadget is power on In-Reply-To: References: <4d6528e4b742cacf34f384b766a7c3296dfe9dbf.1463134786.git.baolin.wang@linaro.org> <87oa8aqlzh.fsf@linux.intel.com> <87d1oqqhvs.fsf@linux.intel.com> <871t56qg67.fsf@linux.intel.com> <87a8jp15cn.fsf@linux.intel.com> <874m9x11er.fsf@linux.intel.com> <87bn43znc0.fsf@linux.intel.com> User-Agent: Notmuch/0.22+11~g124a67e (http://notmuchmail.org) Emacs/25.0.93.2 (x86_64-pc-linux-gnu) Date: Wed, 18 May 2016 13:22:45 +0300 Message-ID: <8760ubzmve.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Baolin Wang writes: >>> @@ -1485,16 +1490,11 @@ static int dwc3_gadget_run_stop(struct dwc3 >>> *dwc, int is_on, int suspend) >>> { >>> u32 reg; >>> u32 timeout =3D 500, i; >>> >>> + if (pm_runtime_suspended(dwc->dev)) >>> + return 0; >>> >>> (2) >>> @@ -1748,15 +1754,25 @@ static int dwc3_gadget_start(struct usb_gadget = *g, >>> * even though host mode might be active. Don't actually perform >>> * device-specific initialization until device mode is activate= d. >>> */ >>> >>> + if (pm_runtime_suspended(dwc->dev)) { >>> + spin_unlock_irqrestore(&dwc->lock, flags); >>> + return 0; >>> + } >>> >>> + ret =3D __dwc3_gadget_start(dwc); >>> + if (ret) >>> + goto err1; >>> >>> So I think the dwc3 core can enter suspend mode before gadget function >>> is ready to call the 'usb_gadget_udc_start()' and >>> 'usb_udc_connect_control()', then if the dwc3 core has entered >>> suspended mode, we need to return success when starting the gadget, >>> and leave the gadget starting action from gadget resume. What do you >>> think about that? Thanks. >> >> Well, if this makes it work properly. Then, yeah; looks okay to me. I'll >> add this to the patch introducing runtime PM. > > OK. I've updated the branch with slightly modified version of your changes. Can you test again just to make sure it still works ? Basically, here's what I did: on dwc3_gadget_start: =2D __dwc3_gadget_start(dwc); + if (pm_runtime_active(dwc->dev)) + __dwc3_gadget_start(dwc); + on run_stop, I kept the same thing. you just need to replace "usb: dwc3: implement runtime PM" with the new version from my branch. cheers =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXPEJ1AAoJEIaOsuA1yqREw10P/jTALC64c0aIDE9fwdAueZYF wC1E+GCVQdanBG+lsF12RFOTwV/A+ijD0eOBBpwy+pNe2FRlnXfdDCfYSdiSMTz4 ADyaxMlYQ8KFLrDsDmCnTp8JzZkVpCn8uHgHV6WPKwLwMZYrctx9G3c/JmUmjdBX dQGAOmPmDD0NPsH3cqBI7lFjcYwpDgFUwAdnGik2DNW4yRgKMDfP81IDoOZyxDCt 7oA5PbZ5jfmaJ7V6NXMeBGunoQTEhkOg6CmAkHWD4qHLgkyChfGELTo5Beo83ne9 gwMzpbsKuSKvSiIbe3r48oSomKMSDkC9uWPoQdhE4NN2lIOJR7YI2WRoKmOGVy6g Z4L0HrTDmG6vZbcQLtKT6GrpQ39cFwEprZXfyBjTX1LV82C3CjAZuk3gU4arxnlQ GbVA3hCz29+mYK4yuZKHeNaX0TzxSusDhO8fMZbL1p+HrbGqvM08PFZZHiisZWcE YQOtN1LV1/QxGxAJfpclQrj+tfhC/rF7ctMiJ2iVMN41aCZBJs01Obgo6cfOpn/i 12Qxx0gRVOGrUyqRT60y3PMRd/Gy+LY7uqzjC7uswYsp/FwFypsLHhzPL5zaNVXo kaMo3CdlZjOo1J6bh1TDxowLksmRga4UQ7UEYtW53xMbdfvz25h+vNHEew0nf2A0 SyRyeZgzBSJdSoXdpdb0 =xh7G -----END PGP SIGNATURE----- --=-=-=--