Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp2950869imm; Thu, 24 May 2018 19:44:47 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoQoauNFDQKxj2GPYmijNUeFYh2nGZZlWltZdtZtBy5LooekWpCkKTL/zLzl0KExfS8neWx X-Received: by 2002:a63:8ec8:: with SMTP id k191-v6mr449844pge.435.1527216287144; Thu, 24 May 2018 19:44:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527216287; cv=none; d=google.com; s=arc-20160816; b=IzVs/3I4ib1NLwh6HudG133u+pWRpmCD0j79dgQGIGwm4LA5a+S5XvyGSwbM0MM3ip PJeOeb9ITNsevVhJt76ja5W/kHHRviR5x6Fmvyuw8vBL0LmavjmHL6X8P3VgR2YvpxC2 orCI1P1lKDefUbHLL8CStIQ7a7JkJdCBWMLs1GFU2kz90/ZoI4Ao56damJ9rVzjQV4lT HJb7gY6o7LAHJhDAX2QFf2ta1ljC/8nx3SYn6yPUWwhjD1tzx5/tJWVXLV3a5z1b3BQ4 fXAR9Wf36Y1pJJDGVf4njcqEhCokWGxRnZibMAKyV5uX80ALnqp1cu+KErDN7oUdN9ds OuDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=M6Qa8aCDgRhPzFmjl42BGSSSbzp1swZCB+cexoSLnrI=; b=gdfEFIywTjQzjOasOtJ63qEzgei2cqkeyF/sC8TgSDDHg+xWPitr51cXAklfE3KyKk 9buurwkyQ0ssWSSCepCxDYz4owRvaxI3mQlgC+Li/hIOIeDSVR88dhnoiUsbJbffD0IP JO02SE/VWuIrdZYJn7LmK4gNzS4exyY1V0qU5jEjH34oFC4SzBKrC5cHmuQLgpvG77Wo oHwrVByMexgP9AjCElYTSKadQH2U+BkS/EVD1xXqX1IXAC5QIxVBhc6qaKOtCnjsuBx0 fEjtNYf5rxNgU33U+VWUj/ZFpFqZQxMHirXzywxSwNFux4UXs2WOhM/dTnzW9iPRKM58 RB4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CU0O3Pkd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s71-v6si22681616pfi.74.2018.05.24.19.44.32; Thu, 24 May 2018 19:44:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CU0O3Pkd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S971551AbeEXVLu (ORCPT + 99 others); Thu, 24 May 2018 17:11:50 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:37721 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967133AbeEXVLq (ORCPT ); Thu, 24 May 2018 17:11:46 -0400 Received: by mail-it0-f65.google.com with SMTP id 70-v6so4262633ity.2 for ; Thu, 24 May 2018 14:11:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=M6Qa8aCDgRhPzFmjl42BGSSSbzp1swZCB+cexoSLnrI=; b=CU0O3Pkdbepq6J1WFPRS6+UCERpp+dRSNbLFVp8cM19pBW0COoVU3Dul+yA0E0LaK9 17oiGTeg7m9Oev9Ct45uHUcaMDLcIWLa8FH3qwEhyLLoQMf/6KO1F1+6ibZ4Wa/icgKa ZuWdlMDnpWETQ3dctV0YslKZnUu3nTvnU0VAg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=M6Qa8aCDgRhPzFmjl42BGSSSbzp1swZCB+cexoSLnrI=; b=Z225Nv0l5nRyqx12JjFYUt5gfvR38WJ/WyNRqscPB31K8paYk4R4oxE5+QO+Um1JvC K5C+lzCgAY6OdFoI46h7Ys0RvVz9yi97Vb/MK0f5M5PJtEQrfSnAfPx5xKH1Zp4jrFfy U+Ja+Hfq9B2A7EvbSt3JUrjC/8qJ47NxFWBrkVHxaWNHCSFCiQ7GloxWfPczPY/GrP5r ASoyHqlU5+UswMteEPCuPBqsXFDywKG+AqqsJHoYttcDalQuvY9ISRtxKIKjIkKtizBX R2EUgwc0I1mYWgZFxCcaohKuNrvwvAql5Ulnv69Kte5di8DGlqNtVUV0mfdYUxezDBu7 i4mQ== X-Gm-Message-State: ALKqPwcPxnNjC88DxYhH+DAFoJ641Y7aBkT+X8FFeLNESdW9+2S9Xz4R ek+QkFcuU2aC7RIl2oc/e//LmPArdJ02ZbFB4K30pg== X-Received: by 2002:a24:7842:: with SMTP id p63-v6mr11450906itc.97.1527196305379; Thu, 24 May 2018 14:11:45 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:7353:0:0:0:0:0 with HTTP; Thu, 24 May 2018 14:11:44 -0700 (PDT) In-Reply-To: <1c21d18e-954a-f3a8-9817-0117b7cb7e4f@nvidia.com> References: <1526639490-12167-1-git-send-email-ulf.hansson@linaro.org> <1526639490-12167-10-git-send-email-ulf.hansson@linaro.org> <1c21d18e-954a-f3a8-9817-0117b7cb7e4f@nvidia.com> From: Ulf Hansson Date: Thu, 24 May 2018 23:11:44 +0200 Message-ID: Subject: Re: [PATCH 9/9] PM / Domains: Add dev_pm_domain_attach_by_id() to manage multi PM domains To: Jon Hunter Cc: "Rafael J . Wysocki" , Linux PM , Greg Kroah-Hartman , Geert Uytterhoeven , Todor Tomov , Rajendra Nayak , Viresh Kumar , Vincent Guittot , Kevin Hilman , Linux Kernel Mailing List , Linux ARM , linux-tegra@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24 May 2018 at 17:48, Jon Hunter wrote: > > On 18/05/18 11:31, Ulf Hansson wrote: >> >> The existing dev_pm_domain_attach() function, allows a single PM domain to >> be attached per device. To be able to support devices that are partitioned >> across multiple PM domains, let's introduce a new interface, >> dev_pm_domain_attach_by_id(). >> >> The dev_pm_domain_attach_by_id() returns a new allocated struct device >> with >> the corresponding attached PM domain. This enables for example a driver to >> operate on the new device from a power management point of view. The >> driver >> may then also benefit from using the received device, to set up so called >> device-links towards its original device. Depending on the situation, >> these >> links may then be dynamically changed. >> >> The new interface is typically called by drivers during their probe phase, >> in case they manages devices which uses multiple PM domains. If that is >> the >> case, the driver also becomes responsible of managing the detaching of the >> PM domains, which typically should be done at the remove phase. Detaching >> is done by calling the existing dev_pm_domain_detach() function and for >> each of the received devices from dev_pm_domain_attach_by_id(). >> >> Note, currently its only genpd that supports multiple PM domains per >> device, but dev_pm_domain_attach_by_id() can easily by extended to cover >> other PM domain types, if/when needed. >> >> Signed-off-by: Ulf Hansson >> --- >> drivers/base/power/common.c | 33 ++++++++++++++++++++++++++++++++- >> include/linux/pm_domain.h | 7 +++++++ >> 2 files changed, 39 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c >> index 7ae62b6..d3db974 100644 >> --- a/drivers/base/power/common.c >> +++ b/drivers/base/power/common.c >> @@ -117,13 +117,44 @@ int dev_pm_domain_attach(struct device *dev, bool >> power_on) >> EXPORT_SYMBOL_GPL(dev_pm_domain_attach); >> /** >> + * dev_pm_domain_attach_by_id - Attach a device to one of its PM domains. > > > Isn't this more of a 'get'? I don't think so, at least according to the common understanding of how we use get and put APIs. For example, clk_get() returns a cookie to a clk, which you then can do a hole bunch of different clk specific operations on. This is different, there are no specific PM domain operations the caller can or should do. Instead the idea is to keep drivers more or less transparent, still using runtime PM as before. The only care the caller need to take is to use device links, which BTW isn't a PM domain specific thing. > >> + * @index: The index of the PM domain. >> + * @dev: Device to attach. > > > Isn't this just the device associated with the PM domain we are getting? Correct, but please note, as stated above, I don't think it's a good idea to return a special PM domain cookie, because we don't want the caller to run special PM domain operations. > >> + * >> + * As @dev may only be attached to a single PM domain, the backend PM >> domain >> + * provider should create a virtual device to attach instead. As >> attachment >> + * succeeds, the ->detach() callback in the struct dev_pm_domain should >> be >> + * assigned by the corresponding backend attach function. >> + * >> + * This function should typically be invoked from drivers during probe >> phase. >> + * Especially for those that manages devices which requires power >> management >> + * through more than one PM domain. >> + * >> + * Callers must ensure proper synchronization of this function with power >> + * management callbacks. >> + * >> + * Returns the virtual attached device in case successfully attached PM >> domain, >> + * NULL in case @dev don't need a PM domain, else a PTR_ERR(). > > > Should this be 'NULL in the case where the @dev already has a power-domain'? Yes, I think so. The intent is to be consistent with how dev_pm_domain_attach() works and according to the latest changes I did for it. It's queued for 4.18, please have a look in Rafael's tree and you will see. > >> + */ >> +struct device *dev_pm_domain_attach_by_id(struct device *dev, >> + unsigned int index) >> +{ >> + if (dev->pm_domain) > > > I wonder if this is worthy of a ... > > if (WARN_ON(dev->pm_domain)) > >> + return NULL; > > > Don't we consider this an error case? I wonder why not return PTR_ERR here > as well? This would be consistent with dev_pm_domain_attach(). Please see above comment. Kind regards Uffe