Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1261022iog; Thu, 16 Jun 2022 02:32:14 -0700 (PDT) X-Google-Smtp-Source: AGRyM1s4it6vTzcW4CsI9NiGkA//lgLWeMqQ+ZxkkNalvNOKXXPBpU3dnEoXvd3h89kJAFJ3ldgV X-Received: by 2002:a05:6402:1cc2:b0:434:f631:d7f3 with SMTP id ds2-20020a0564021cc200b00434f631d7f3mr5169543edb.171.1655371934113; Thu, 16 Jun 2022 02:32:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655371934; cv=none; d=google.com; s=arc-20160816; b=WMWfOp4NZP/Je3Sb1bV4oc+5HWNyikrVhA8t5fTktoCAWTf+7cr5/vsyp21K6Vz7Fx r4Lenhe/VxMLk1tGfL7flvqSSuJ5XHiSMSf5bUNFrjwKHdi+x2w+RW03oRyXZeCRXoHa LmtvScT4lSd7rroYAcRMwukHEsTTQ3dTx+xvqPEuomGtHKgEbhvKLaLDtuwHmtygRvnH fVRvsTz3VigIRZ76rhQ4+7TKj8VW97XVGwd/2hRgqipi4G1Lcg0Ak8k5oE4TcyYIXoNz OD3PmRhjuMbgOIu4StSb9F9UpIMkiYgDU1hGHdgGZMIcD6aY0h8bzgWUQ1Y6sa6F/z6z uSvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=RAIhqL2xeDknD95cNLZqPbz62ihnEMqznkDfqUykBmo=; b=gNHTPvsXrtlHNIo9ugMo4dp9EyTBDTfaCBPKoFLMuywFWWFlML7qUV/cIV3WHITzkn /6OEOxsqN1K7Fimjy5DZKhdOhNbs/k9whTbMxMvcv5fVFtTQMwn6I4Qywo7xM7dbQjrW vJ8HGVMKy4JJO9TDgBCfH3+34Y1N9QfOcreCA0Oz8s2wPrtEIwcKN+IkwB9JgHqbVp8h x7XUgo9JsL4U0/dfkzBnbjFehOzcOB5aWpQHINVZHeRfZRVMfxBn6zfbQI0XSlRsR2bv JFnTgeAntI0Osf1Nzo27pm5YIFewlLFqOpnm2Khf5EGJwe9QMjT1pbZtBL4yBwufY3nN 1g3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=nXxCyTE8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hr9-20020a1709073f8900b00718bdf77945si944109ejc.992.2022.06.16.02.31.48; Thu, 16 Jun 2022 02:32:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=nXxCyTE8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376599AbiFPJLZ (ORCPT + 99 others); Thu, 16 Jun 2022 05:11:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358507AbiFPJLY (ORCPT ); Thu, 16 Jun 2022 05:11:24 -0400 Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9AC725537E; Thu, 16 Jun 2022 02:11:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1655370682; x=1686906682; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=RAIhqL2xeDknD95cNLZqPbz62ihnEMqznkDfqUykBmo=; b=nXxCyTE8/3lbaqdCmB8/BhVuvZNTnA1d533K8fHP60oPPKEvW2cxm5lj JrQnA99JFBXzrISSCVj362kN+qGXVqnIC/x2pOZTfQWlKTlOwaTgShHKx tskdjFerqty+Ue94ivZsBW/VAuiLzcdH7DNyGGbwHMUzJ9H5QI6BRcgGT 4=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-01.qualcomm.com with ESMTP; 16 Jun 2022 02:11:21 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg01-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2022 02:11:21 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 16 Jun 2022 02:11:21 -0700 Received: from hu-pkondeti-hyd.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 16 Jun 2022 02:11:14 -0700 Date: Thu, 16 Jun 2022 14:41:10 +0530 From: Pavan Kondeti To: Matthias Kaehlcke CC: Krishna Kurapati , Krzysztof Kozlowski , Rob Herring , "Andy Gross" , Bjorn Andersson , Greg Kroah-Hartman , Felipe Balbi , Stephen Boyd , Doug Anderson , Mathias Nyman , , , , , , , , Subject: Re: [PATCH v20 2/5] usb: dwc3: core: Host wake up support from system suspend Message-ID: <20220616091110.GA24114@hu-pkondeti-hyd.qualcomm.com> References: <1654158277-12921-1-git-send-email-quic_kriskura@quicinc.com> <1654158277-12921-3-git-send-email-quic_kriskura@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Matthias/Krishna, On Tue, Jun 14, 2022 at 10:53:35AM -0700, Matthias Kaehlcke wrote: > On Mon, Jun 13, 2022 at 11:08:32AM -0700, Matthias Kaehlcke wrote: > > On Mon, Jun 06, 2022 at 01:45:51PM -0700, Matthias Kaehlcke wrote: > > > On Thu, Jun 02, 2022 at 12:35:42PM -0700, Matthias Kaehlcke wrote: > > > > Hi Krishna, > > > > > > > > with this version I see xHCI errors on my SC7180 based system, like > > > > these: > > > > > > > > [ 65.352605] xhci-hcd xhci-hcd.13.auto: xHC error in resume, USBSTS 0x401, Reinit > > > > > > > > [ 101.307155] xhci-hcd xhci-hcd.13.auto: WARN: xHC CMD_RUN timeout > > > > > > > > After resume a downstream hub isn't enumerated again. > > > > > > > > So far I didn't see those with v13, but I aso saw the first error with > > > > v16. > > > > > > It also happens with v13, but only when a wakeup capable vUSB <= 2 > > > device is plugged in. Initially I used a wakeup capable USB3 to > > > Ethernet adapter to trigger the wakeup case, however older versions > > > of this series that use usb_wakeup_enabled_descendants() to check > > > for wakeup capable devices didn't actually check for vUSB > 2 > > > devices. > > > > > > So the case were the controller/PHYs is powered down works, but > > > the controller is unhappy when the runtime PM path is used during > > > system suspend. > > > > The issue isn't seen on all systems using dwc3-qcom and the problem starts > > during probe(). The expected probe sequence is something like this: > > > > dwc3_qcom_probe > > dwc3_qcom_of_register_core > > dwc3_probe > > > > if (device_can_wakeup(&qcom->dwc3->dev)) > > ... > > > > The important part is that device_can_wakeup() is called after dwc3_probe() > > has completed. That's what I see on a QC SC7280 system, where wakeup is > > generally working with these patches. > > > > However on a QC SC7180 system dwc3_probe() is deferred and only executed after > > dwc3_qcom_probe(). As a result the device_can_wakeup() call returns false. > > With that the controller/driver ends up in an unhappy state after system > > suspend. > > > > Probing is deferred on SC7180 because device_links_check_suppliers() finds > > that '88e3000.phy' isn't ready yet. > > It seems device links could be used to make sure the dwc3 core is present: > > Another example for an inconsistent state would be a device link that > represents a driver presence dependency, yet is added from the consumer’s > ->probe callback while the supplier hasn’t probed yet: Had the driver core > known about the device link earlier, it wouldn’t have probed the consumer > in the first place. The onus is thus on the consumer to check presence of > the supplier after adding the link, and defer probing on non-presence. > > https://www.kernel.org/doc/html/v5.18/driver-api/device_link.html#usage > > > You could add something like this to dwc3_qcom_of_register_core(): > > > device_link_add(dev, &qcom->dwc3->dev, > DL_FLAG_AUTOREMOVE_CONSUMER | DL_FLAG_AUTOPROBE_CONSUMER); > > if (qcom->dwc3->dev.links.status != DL_DEV_DRIVER_BOUND) > ret = -EPROBE_DEFER; > > I am not very sure how the device_link_add() API works. we are the parent and creating a depdency on child probe. That does not sound correct to me. Any ways, I have another question. When dwc3_qcom_of_register_core() returns error back to dwc3_qcom_probe(), we goto depopulate label which calls of_platform_depopulate() which destroy the child devices that are populated. how does that ensure that child probe is completed by the time, our probe is called again. The child device it self is gone. Is this working because when our probe is called next time, the child probe depenencies are resolved? Thanks, Pavan