Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1710089iog; Tue, 14 Jun 2022 11:27:31 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uHZBi7AXQs/mzizGD6Q3FtK/cTojBnBL9DZrxvd/hn8BkxZb5vvMNssRKFqk+lQkLqFQfK X-Received: by 2002:a17:90a:e7c5:b0:1e3:3cf1:6325 with SMTP id kb5-20020a17090ae7c500b001e33cf16325mr5833265pjb.178.1655231251794; Tue, 14 Jun 2022 11:27:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655231251; cv=none; d=google.com; s=arc-20160816; b=Jvc87+w6hzEydi5hFaInTAsr62X3axRkj9//UoSySvdfAEF7sMaZhodGTXi59R9wQy CKBsqQE62QNDGsGk11saky7N9FTU1jjapjEcPC5IB33ngKiBNozMNFEZdGTBpK3RFrN6 +S5EkzUQs8M8T/XRwi8M90bcVZvL8JDVmTQbk0R0kefYf18WsCGDbJ81xZTdQRDP07qw hWs8Lb90pqzF1Wvf9VQx0thpbVHhVivju0ZvqZh450pYuqrZlS8NvJrD5actAvRsOMmp eVT9Jj7DAT1+Ry7j/G1BohOVVmKTXOmJhNZtf3SkQv0vFCNOupX956QyaoZoYlvKmG8R MHzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=HYjK3rxh/o4Ln2PasJCrv5tlXw/BblIG4nmWymg4CTU=; b=xUWXIFIubzTStZ10bFoSzQr7d0RkcxJB98XY8u9MLhw43axvS/xxJuxu3HKn7Y0wqe pjapvvX7Og+RZk3wfAuJUDOHmrVQbPoxYqw2fjK8Lh8Cs1bX3rl7Q55JWT6vfQii9iJn U4q46U/jHN2R6SFgt17aA7+GJwpe5MI1XGg9W2qgJeppB9blY8KgvpKDh+VpyqonEu8Y lHrXKJxllODRZim9ohOwCghkdoHov4MV0VuHPhrfu4APxVXZ4Up1O9uF87oy9JG+g5eO m2abJCVahmCGt//FqpaysCTxFB5Md7ijdXC/TXbJjS7mTRE6b32UQR9fRXMET/4STH71 XTnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=Dmcl6h6O; 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=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n5-20020a170902d2c500b001615059fa28si16700085plc.345.2022.06.14.11.27.18; Tue, 14 Jun 2022 11:27:31 -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=@chromium.org header.s=google header.b=Dmcl6h6O; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352366AbiFNRxr (ORCPT + 99 others); Tue, 14 Jun 2022 13:53:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356942AbiFNRxj (ORCPT ); Tue, 14 Jun 2022 13:53:39 -0400 Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8589286FA for ; Tue, 14 Jun 2022 10:53:37 -0700 (PDT) Received: by mail-pl1-x62a.google.com with SMTP id u18so8374767plb.3 for ; Tue, 14 Jun 2022 10:53:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=HYjK3rxh/o4Ln2PasJCrv5tlXw/BblIG4nmWymg4CTU=; b=Dmcl6h6O2UsD1cniilERBIHpLI5g0P/K6YyIIZFmCTiO3zfiNP7vsFGI5yW/YR2P0e PHMFqa5OgjTuzo535YbgmMqa3WUOyvshljH6QUOuRceA/vRqu3tHJjXAifNq2QD6lIPT aH2jUZ1mLLUT+psDLg/ujPik8r4QJQ6H8Rc2w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=HYjK3rxh/o4Ln2PasJCrv5tlXw/BblIG4nmWymg4CTU=; b=tV30XNgLKwzfF6q7f2B461930tdlqBxff4fGjYojgBKymwy2WqDXHVHDubX2RaPxXd 2nj/XkY1+y/WDknLOMUppdXCp6JFfHbSAf9aHnbTuuvC1Xv9Ba1VWORFA8eNN5oBGo94 WpBNuT40iJf/+WJaBpF/3cC9J9wm2JNLY6GJVLqw8lciGc/L4qUm5flMsDf+Ww3sCZgQ ZwuY+VCeRDth/fZ6n0T+9xJRMAGSU9sGi/wJbnL0d3+bloaXsn3+CO58jO8cT3205k3A o4VtH/OL/bZzrk58GRK4zqCeAPMzp99KJ3tqR/xpghZVV//TBCqblt5IUMvTi9Z+5hOR JNdg== X-Gm-Message-State: AJIora/QWHlsVz58lLZSsTHkd9TogMcWiKKQOqSr6RPqMiDvhQDST0ck uKf4W6mJNuSpHq0BC7IA5Moatw== X-Received: by 2002:a17:902:eb92:b0:168:911c:5946 with SMTP id q18-20020a170902eb9200b00168911c5946mr5497583plg.167.1655229217250; Tue, 14 Jun 2022 10:53:37 -0700 (PDT) Received: from localhost ([2620:15c:11a:202:e2d5:2b03:9fb1:ce40]) by smtp.gmail.com with UTF8SMTPSA id r29-20020aa7963d000000b0051bc4ed56bcsm7855498pfg.204.2022.06.14.10.53.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 14 Jun 2022 10:53:36 -0700 (PDT) Date: Tue, 14 Jun 2022 10:53:35 -0700 From: Matthias Kaehlcke To: Krishna Kurapati Cc: Krzysztof Kozlowski , Rob Herring , Andy Gross , Bjorn Andersson , Greg Kroah-Hartman , Felipe Balbi , Stephen Boyd , Doug Anderson , Mathias Nyman , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, quic_pkondeti@quicinc.com, quic_ppratap@quicinc.com, quic_vpulyala@quicinc.com Subject: Re: [PATCH v20 2/5] usb: dwc3: core: Host wake up support from system suspend Message-ID: 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: X-Spam-Status: No, score=-3.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 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; From the doc it isn't clear how the consumer is supposed to check presence of the supplier, the above check of the link status is also used in drivers/cpufreq/mediatek-cpufreq.c , but not elsewhere outside of the driver framework.