From patchwork Mon Mar 28 11:10:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Heiko_St=C3=BCbner?= X-Patchwork-Id: 8678971 Return-Path: X-Original-To: patchwork-linux-rockchip@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 3084EC0553 for ; Mon, 28 Mar 2016 11:11:32 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 218A220279 for ; Mon, 28 Mar 2016 11:11:31 +0000 (UTC) Received: from bombadil.infradead.org (unknown [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 276D02012D for ; Mon, 28 Mar 2016 11:11:30 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1akV4h-0007yo-GT; Mon, 28 Mar 2016 11:11:11 +0000 Received: from gloria.sntech.de ([95.129.55.99]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1akV4Q-0007sn-Mm; Mon, 28 Mar 2016 11:10:56 +0000 Received: from ip9234b7c8.dynamic.kabel-deutschland.de ([146.52.183.200] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1akV3y-0004bB-HG; Mon, 28 Mar 2016 13:10:26 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Elaine Zhang Subject: Re: [PATCH v6 3/6] rockchip: power-domain: add support for sub-power domains Date: Mon, 28 Mar 2016 13:10:25 +0200 Message-ID: <1669442.Kze2klao36@diego> User-Agent: KMail/4.14.10 (Linux/4.4.0-1-amd64; KDE/4.14.14; x86_64; ; ) In-Reply-To: <1457558578-22049-4-git-send-email-zhangqing@rock-chips.com> References: <1457558578-22049-1-git-send-email-zhangqing@rock-chips.com> <1457558578-22049-4-git-send-email-zhangqing@rock-chips.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160328_041055_023393_D3065572 X-CRM114-Status: GOOD ( 10.62 ) X-Spam-Score: -2.9 (--) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: huangtao@rock-chips.com, xf@rock-chips.com, khilman@baylibre.com, xxx@rock-chips.com, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, zyw@rock-chips.com, jay.xu@rock-chips.com, linux-arm-kernel@lists.infradead.org, wxt@rock-chips.com Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RDNS_NONE,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Am Donnerstag, 10. März 2016, 05:22:55 schrieb Elaine Zhang: > This patch adds support for making one power domain a sub-domain of > other domain. This is useful for modeling power dependences, > which needs to have more than one power domain enabled to be operational. > > Signed-off-by: Elaine Zhang applied to my armsoc/drivers branch for 4.7 [0] with some changes. Please shout if things don't look right :-) Apart from additional error outputs, I moved the of_put of parent in the error case, as we shouldn't touch of_nodes we get as parameters. Instead rockchip_pm_add_subdomain would already do that for subdomains and rockchip_pm_domain_probe now also does it itself. Also when rockchip_pm_add_subdomain for a sub-sub-domain fails (in rockchip_pm_add_subdomain), we don't need to remove the parent domain association, so I removed the return there. Heiko ------- ------- [0] https://git.kernel.org/cgit/linux/kernel/git/mmind/linux-rockchip.git/commit/?h=v4.7-armsoc/drivers&id=6be05b5ec16132f3df3f1d857ab01e30f726b542 diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c index 0181534..1fca9e5 100644 --- a/drivers/soc/rockchip/pm_domains.c +++ b/drivers/soc/rockchip/pm_domains.c @@ -380,10 +380,11 @@ static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, for_each_child_of_node(parent, np) { u32 idx; - if (of_property_read_u32(parent, "reg", &idx)) { + error = of_property_read_u32(parent, "reg", &idx); + if (error) { dev_err(pmu->dev, - "%s: failed to retrieve domain id (reg)\n", - parent->name); + "%s: failed to retrieve domain id (reg): %d\n", + parent->name, error); goto err_out; } parent_domain = pmu->genpd_data.domains[idx]; @@ -395,17 +396,19 @@ static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, goto err_out; } - if (of_property_read_u32(np, "reg", &idx)) { + error = of_property_read_u32(np, "reg", &idx); + if (error) { dev_err(pmu->dev, - "%s: failed to retrieve domain id (reg)\n", - np->name); + "%s: failed to retrieve domain id (reg): %d\n", + np->name, error); goto err_out; } child_domain = pmu->genpd_data.domains[idx]; - if (pm_genpd_add_subdomain(parent_domain, child_domain)) { - dev_err(pmu->dev, "%s failed to add subdomain: %s\n", - parent_domain->name, child_domain->name); + error = pm_genpd_add_subdomain(parent_domain, child_domain); + if (error) { + dev_err(pmu->dev, "%s failed to add subdomain %s: %d\n", + parent_domain->name, child_domain->name, error); goto err_out; } else { dev_dbg(pmu->dev, "%s add subdomain: %s\n", @@ -414,16 +417,10 @@ static int rockchip_pm_add_subdomain(struct rockchip_pmu *pmu, - error = rockchip_pm_add_subdomain(pmu, np); - if (error < 0) - goto rm_sub_domain; + rockchip_pm_add_subdomain(pmu, np); } return 0; err_out: - of_node_put(parent); of_node_put(np); - return -EINVAL; -rm_sub_domain: - pm_genpd_remove_subdomain(parent_domain, child_domain); return error; } @@ -498,6 +497,7 @@ static int rockchip_pm_domain_probe(struct platform_device *pdev) if (error < 0) { dev_err(dev, "failed to handle subdomain node %s: %d\n", node->name, error); + of_node_put(node); goto err_out; } }