From owner-freebsd-arch@FreeBSD.ORG Thu May 16 18:34:39 2013 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 97743512; Thu, 16 May 2013 18:34:39 +0000 (UTC) (envelope-from chmeeedalf@gmail.com) Received: from mail-bk0-x22f.google.com (mail-bk0-x22f.google.com [IPv6:2a00:1450:4008:c01::22f]) by mx1.freebsd.org (Postfix) with ESMTP id F320B9F5; Thu, 16 May 2013 18:34:38 +0000 (UTC) Received: by mail-bk0-f47.google.com with SMTP id jg9so1870650bkc.6 for ; Thu, 16 May 2013 11:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=ZpeceN2dtavbix26/canzy2pU0+WKxYhGGOtggG+Hoc=; b=r1ii7V9oNc5mJvbdpwxKhV/NCzEqwWnhzA0buyELAacvJAMZowUf1ys+Cbp7Y1Nr76 ZVn7sV5L4UaEt3s7VJujfVstx9zz3+vMIEipK+0ay0w9deYiFoOul40oJU7Jo+eWbXYg N1HOgsjP7z/W/QOWLfK1mJET394a0ovpAJolojneqzPW1ehfHWNmlDRMZzhgaqdwKrKK sB6ZM8flAY4BfqLi6B3OfvyLLjUxR6Csd17cGHAU0cG4JyZRlGAFnJJfMchzZDyuC7cZ rop8ST4kvhWlJ1bf9e/I48ZVWiMlzKW8UfCMZ7QVWv8z1lLhULJsLFt5v09/ujCfR33+ MTnA== MIME-Version: 1.0 X-Received: by 10.204.108.196 with SMTP id g4mr14088689bkp.26.1368729277896; Thu, 16 May 2013 11:34:37 -0700 (PDT) Sender: chmeeedalf@gmail.com Received: by 10.204.239.132 with HTTP; Thu, 16 May 2013 11:34:37 -0700 (PDT) In-Reply-To: <519369C4.6060402@FreeBSD.org> References: <51913B7D.1040801@freebsd.org> <288C9B9E-E943-4C5B-BCFB-15B721CBE94C@bsdimp.com> <519369C4.6060402@FreeBSD.org> Date: Thu, 16 May 2013 14:34:37 -0400 X-Google-Sender-Auth: W9rQDcIJCiC7CAEgITyLsTf5wXM Message-ID: Subject: Re: late suspend/early resume From: Justin Hibbits To: John Baldwin Content-Type: multipart/mixed; boundary=089e013c6200674aa504dcda1e10 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: freebsd-arch@freebsd.org X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 May 2013 18:34:39 -0000 --089e013c6200674aa504dcda1e10 Content-Type: text/plain; charset=ISO-8859-1 On Wed, May 15, 2013 at 6:56 AM, John Baldwin wrote: > On 5/14/13 1:14 PM, Justin Hibbits wrote: > > You are right that the late suspend could lead to silly proliferation, > and > > an ordered list is much better, but another API would need to be added to > > do that as well. > > > > My north bridge is first in the top list of the tree, right under the > > nexus, so to suspend it last I wrote the nexus suspend to traverse its > > children in reverse. The problem comes that the clock controller is > under a > > later PCI bus, not even the immediate following one, and the north bridge > > children are i2c devices, so suspending them after their clock head away > is > > problematic. We can discuss this more at bsdcan, where it may be easier > to > > describe. But essentially I need the north bridge and that pesky clock > > controller to be the last to suspend and the first to resume. I guess we > > can take this as the starting discussion for modeling this relationship > on > > all platforms, since you mention it is common in embedded platforms. > > I think you can do this by having a notion of passes with drivers having > a suspend pass level and doing passes over the tree suspending devices > at each pass level and then walking the passes back up in reverse during > resume. You could borrow from the multipass stuff used on probe/attach > for this. > > -- > John Baldwin Here's a (very) rough cut of what I think you're getting at. It uses the existing pass identifier to convey the current pass number, and walks the pass in reverse for suspend, and forwards for resume. However, I can't stress enough, that I only compiled it, I have no hardware here at BSDCan to test, so I have no idea if it will work as expected. The basic idea is to start at the last pass number, and any device can suspend and resume if able, or can check and return EAGAIN if it's not ready to suspend itself (it can still suspend its children if it wants). I could also add to bus_generic_resume() a check for the device's driver's pass wrt bus_current_pass, as in the probe code. Is this what you're thinking? - Justin --089e013c6200674aa504dcda1e10 Content-Type: application/octet-stream; name="suspend.diff" Content-Disposition: attachment; filename="suspend.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hgs9y82m0 SW5kZXg6IHN5cy9rZXJuL3N1YnJfYnVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2tlcm4vc3Vicl9i dXMuYwkocmV2aXNpb24gMjQ4MjU1KQorKysgc3lzL2tlcm4vc3Vicl9idXMuYwkod29ya2luZyBj b3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBACiAjZGVmaW5lCURGX0RPTkVOT01BVENICTB4MjAJCS8q IGRvbid0IGV4ZWN1dGUgREVWSUNFX05PTUFUQ0ggYWdhaW4gKi8KICNkZWZpbmUJREZfRVhURVJO QUxTT0ZUQyAweDQwCQkvKiBzb2Z0YyBub3QgYWxsb2NhdGVkIGJ5IHVzICovCiAjZGVmaW5lCURG X1JFQklECTB4ODAJCS8qIENhbiByZWJpZCBhZnRlciBhdHRhY2ggKi8KKyNkZWZpbmUgREZfU1VT UEVOREVECTB4MTAwCQkvKiBEZXZpY2UgaXMgc3VzcGVuZGVkLiAqLwogCXVfaW50CW9yZGVyOwkJ CS8qKjwgb3JkZXIgZnJvbSBkZXZpY2VfYWRkX2NoaWxkX29yZGVyZWQoKSAqLwogCXZvaWQJKml2 YXJzOwkJCS8qKjwgaW5zdGFuY2UgdmFyaWFibGVzICAqLwogCXZvaWQJKnNvZnRjOwkJCS8qKjwg Y3VycmVudCBkcml2ZXIncyB2YXJpYWJsZXMgICovCkBAIC0zNTMyLDE5ICszNTMzLDI5IEBACiBi dXNfZ2VuZXJpY19zdXNwZW5kKGRldmljZV90IGRldikKIHsKIAlpbnQJCWVycm9yOworCWludAkJ YWdhaW4gPSAwOwogCWRldmljZV90CWNoaWxkLCBjaGlsZDI7CiAKIAlUQUlMUV9GT1JFQUNIKGNo aWxkLCAmZGV2LT5jaGlsZHJlbiwgbGluaykgewotCQllcnJvciA9IERFVklDRV9TVVNQRU5EKGNo aWxkKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlmb3IgKGNoaWxkMiA9IFRBSUxRX0ZJUlNUKCZkZXYt PmNoaWxkcmVuKTsKLQkJCSAgICAgY2hpbGQyICYmIGNoaWxkMiAhPSBjaGlsZDsKLQkJCSAgICAg Y2hpbGQyID0gVEFJTFFfTkVYVChjaGlsZDIsIGxpbmspKQotCQkJCURFVklDRV9SRVNVTUUoY2hp bGQyKTsKLQkJCXJldHVybiAoZXJyb3IpOworCQlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBERl9TVVNQ RU5ERUQpKSB7CisJCQllcnJvciA9IERFVklDRV9TVVNQRU5EKGNoaWxkKTsKKwkJCWlmIChlcnJv ciAmJiBlcnJvciAhPSBFQUdBSU4pIHsKKwkJCQlmb3IgKGNoaWxkMiA9IFRBSUxRX0ZJUlNUKCZk ZXYtPmNoaWxkcmVuKTsKKwkJCQkgICAgIGNoaWxkMiAmJiBjaGlsZDIgIT0gY2hpbGQ7CisJCQkJ ICAgICBjaGlsZDIgPSBUQUlMUV9ORVhUKGNoaWxkMiwgbGluaykpIHsKKwkJCQkJREVWSUNFX1JF U1VNRShjaGlsZDIpOworCQkJCQljaGlsZDItPmZsYWdzICY9IH5ERl9TVVNQRU5ERUQ7CisJCQkJ fQorCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorCQkJaWYgKGVycm9yID09IEVBR0FJTikgewor CQkJCWFnYWluID0gRUFHQUlOOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2hpbGQtPmZsYWdz IHw9IERGX1NVU1BFTkRFRDsKIAkJfQogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAoYWdhaW4p OwogfQogCiAvKioKQEAgLTM1NTcsMTIgKzM1NjgsMTkgQEAKIGJ1c19nZW5lcmljX3Jlc3VtZShk ZXZpY2VfdCBkZXYpCiB7CiAJZGV2aWNlX3QJY2hpbGQ7CisJaW50CQllcnJvciA9IDA7CiAKIAlU QUlMUV9GT1JFQUNIKGNoaWxkLCAmZGV2LT5jaGlsZHJlbiwgbGluaykgewotCQlERVZJQ0VfUkVT VU1FKGNoaWxkKTsKLQkJLyogaWYgcmVzdW1lIGZhaWxzLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2Fu IHVzZWZ1bGx5IGRvLi4uICovCisJCWlmIChjaGlsZC0+ZmxhZ3MgJiBERl9TVVNQRU5ERUQpIHsK KwkJCWlmIChERVZJQ0VfUkVTVU1FKGNoaWxkKSA9PSBFQUdBSU4pIHsKKwkJCQllcnJvciA9IEVB R0FJTjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGlmIHJlc3VtZSBmYWlscywgdGhlcmUn cyBub3RoaW5nIHdlIGNhbiB1c2VmdWxseSBkby4uLiAqLworCQkJY2hpbGQtPmZsYWdzICY9IH5E Rl9TVVNQRU5ERUQ7CisJCX0KIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gKGVycm9yKTsKIH0K IAogLyoqCkBAIC00MzY3LDE1ICs0Mzg1LDM5IEBACiBzdGF0aWMgaW50CiByb290X3Jlc3VtZShk ZXZpY2VfdCBkZXYpCiB7Ci0JaW50IGVycm9yOworCXN0cnVjdCBkcml2ZXJsaW5rICpkbDsKKwlp bnQgZXJyb3IgPSAwOwogCi0JZXJyb3IgPSBidXNfZ2VuZXJpY19yZXN1bWUoZGV2KTsKKwlUQUlM UV9GT1JFQUNIKGRsLCAmcGFzc2VzLCBwYXNzbGluaykgeworCQlidXNfY3VycmVudF9wYXNzID0g ZGwtPnBhc3M7CisJCWVycm9yID0gYnVzX2dlbmVyaWNfcmVzdW1lKGRldik7CisKKwkJaWYgKGVy cm9yICE9IEVBR0FJTikKKwkJCWJyZWFrOworCX0KKwogCWlmIChlcnJvciA9PSAwKQogCQlkZXZj dGxfbm90aWZ5KCJrZXJuIiwgInBvd2VyIiwgInJlc3VtZSIsIE5VTEwpOwogCXJldHVybiAoZXJy b3IpOwogfQogCiBzdGF0aWMgaW50Cityb290X3N1c3BlbmQoZGV2aWNlX3QgZGV2KQoreworCXN0 cnVjdCBkcml2ZXJsaW5rICpkbDsKKwlpbnQgZXJyb3IgPSAwOworCisJVEFJTFFfRk9SRUFDSF9S RVZFUlNFKGRsLCAmcGFzc2VzLCBkcml2ZXJfbGlzdCwgcGFzc2xpbmspIHsKKwkJYnVzX2N1cnJl bnRfcGFzcyA9IGRsLT5wYXNzOworCQllcnJvciA9IGJ1c19nZW5lcmljX3Jlc3VtZShkZXYpOwor CQlpZiAoZXJyb3IgIT0gRUFHQUlOKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIChlcnJvcik7 Cit9CisKK3N0YXRpYyBpbnQKIHJvb3RfcHJpbnRfY2hpbGQoZGV2aWNlX3QgZGV2LCBkZXZpY2Vf dCBjaGlsZCkKIHsKIAlpbnQJcmV0dmFsID0gMDsKQEAgLTQ0MTIsNyArNDQ1NCw3IEBACiBzdGF0 aWMga29ial9tZXRob2RfdCByb290X21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNl ICovCiAJS09CSk1FVEhPRChkZXZpY2Vfc2h1dGRvd24sCWJ1c19nZW5lcmljX3NodXRkb3duKSwK LQlLT0JKTUVUSE9EKGRldmljZV9zdXNwZW5kLAlidXNfZ2VuZXJpY19zdXNwZW5kKSwKKwlLT0JK TUVUSE9EKGRldmljZV9zdXNwZW5kLAlyb290X3N1c3BlbmQpLAogCUtPQkpNRVRIT0QoZGV2aWNl X3Jlc3VtZSwJcm9vdF9yZXN1bWUpLAogCiAJLyogQnVzIGludGVyZmFjZSAqLwo= --089e013c6200674aa504dcda1e10--