From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH 6/9] ARM: domain: Add platform handlers for CPU PM domains Date: Wed, 5 Aug 2015 09:45:22 -0500 Message-ID: References: <1438731339-58317-1-git-send-email-lina.iyer@linaro.org> <1438731339-58317-7-git-send-email-lina.iyer@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: Received: from mail-yk0-f171.google.com ([209.85.160.171]:32961 "EHLO mail-yk0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750968AbbHEOpn (ORCPT ); Wed, 5 Aug 2015 10:45:43 -0400 Received: by ykoo205 with SMTP id o205so37118534yko.0 for ; Wed, 05 Aug 2015 07:45:42 -0700 (PDT) In-Reply-To: <1438731339-58317-7-git-send-email-lina.iyer@linaro.org> Sender: linux-pm-owner@vger.kernel.org List-Id: linux-pm@vger.kernel.org To: Lina Iyer Cc: Rafael Wysocki , Ulf Hansson , Kevin Hilman , Geert Uytterhoeven , =?UTF-8?Q?Krzysztof_Koz=C5=82owski?= , "linux-pm@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , msivasub@codeaurora.org, Andy Gross , Stephen Boyd , Catalin Marinas , Mark Rutland , Lorenzo Pieralisi On Tue, Aug 4, 2015 at 6:35 PM, Lina Iyer wrote: > In addition to the common power up/down actions of CPU PM domain core, > platforms may have additional configuration before the CPU domain can be > powered off or considered active. Allow platform drivers to register > handlers for CPU PM domains. > > Platform drivers may register their callbacks against a compatible > string defined by their PM domain provider device node in the DT. At > domain init, the platform driver can initialize the platform specific > genpd attributes. The init callback would need to return successfully, > for the platform power_on/off handlers to be registered with the CPU PM > domain. > > The code uses __init section to reduce memory needed for platform > handlers and therefore can be freed after the driver is initialized, a > desirable outcome for single kernel image. [...] > diff --git a/arch/arm/include/asm/arm-pd.h b/arch/arm/include/asm/arm-pd.h > new file mode 100644 > index 0000000..fc44abf > --- /dev/null > +++ b/arch/arm/include/asm/arm-pd.h > @@ -0,0 +1,30 @@ > +/* > + * linux/arch/arm/include/asm/arm-pd.h > + * > + * Copyright (C) 2015 Linaro Ltd. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#ifndef __ARM_PD_H__ > +#define __ARM_PD_H__ > + > +struct of_arm_pd_ops { > + int (*init)(struct device_node *dn, struct generic_pm_domain *d); > + int (*power_on)(struct generic_pm_domain *d); > + int (*power_off)(struct generic_pm_domain *d); > +}; > + > +struct of_arm_pd_method { > + const char *handle; > + struct of_arm_pd_ops *ops; > +}; > + > +#define ARM_PD_METHOD_OF_DECLARE(_name, _handle, _ops) \ > + static const struct of_arm_pd_method __arm_pd_method_of_table_##_name \ > + __used __section(__arm_pd_method_of_table) \ > + = { .handle = _handle, .ops = _ops } AFAICT, you are not using this in this series. You should add it when you have a user. Ideally, we keep some amount of uniformity across various *_OF_DECLARE which is why we have OF_DECLARE_1 and OF_DECLARE_2. This makes all the sections just arrays of struct of_device_id. Not all users follow this, but most do. So instead of putting the ops in here, platforms can provide a function callback which can then set the ops. Then you also don't need the .init() ops function as the callback function can do any initialization too. Rob