From patchwork Tue Sep 6 17:31:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 9317727 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CD2E7607D3 for ; Tue, 6 Sep 2016 17:26:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C661E28DA1 for ; Tue, 6 Sep 2016 17:26:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB10828E29; Tue, 6 Sep 2016 17:26:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4871B28DA1 for ; Tue, 6 Sep 2016 17:26:37 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bhK7W-0000wY-5E; Tue, 06 Sep 2016 17:25:14 +0000 Received: from mail-lf0-x22a.google.com ([2a00:1450:4010:c07::22a]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bhK6y-0000OE-PW for linux-arm-kernel@lists.infradead.org; Tue, 06 Sep 2016 17:24:42 +0000 Received: by mail-lf0-x22a.google.com with SMTP id u14so28705047lfd.1 for ; Tue, 06 Sep 2016 10:24:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bL1PTLYiRjf3PssrrMhVP/46GDvRBiH7v7Xntm1bp64=; b=Dsj/GDc6lyFGqy/r8BqdADKHLrdpptK7tUx8NEo8bZBM8haLWNzCbtC70D52QOHSBH 1TCdIdHFI4DIm4YM3KUqDHZdA4aCoNmFDjqGqGDGztyEtSi7howGpECqV/wKxhbLfWe7 Ds1zGuUgSqUje1RcBtiyXG94npKKY6RKTExigJmBWj4iuwxUg01rIwQGKuya2JqHJFuF UeTBASWoQwbZInzIp/BC8hxI+Gx85uJa8xNq/jWRLoCejF13liDHF+rPfjhaRnNABO9o MWq5AXIooXBsxyP5E1h9UMJ01dp5bLXzWn9OEoTYmJACVAV3KO3PDavHcm8vOjRBvajF VgSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bL1PTLYiRjf3PssrrMhVP/46GDvRBiH7v7Xntm1bp64=; b=ZA758nfYXwZWzp5MNSPgIIb+O01WRUcW+aiNEUeProIv73+jCnx4wEj/hVePbFdcTi B+zvnxtX7utAZO5l6L+Qj1vSf3HxEvrzh7ZNlwutlhSslV/pcbJH7RRAXs3l/hfHaOoD AXnswyTblPXhlQDc79ehd7OOIE0Wn+A0nu1HHj/3wsqkehzmotJIoLr6Dfuc6paDf1Bh +5am4WAA3CXQy65LzdOLee/PhnVT3D9hj4m7vypvgCxzRIuZij/WmpxWG6qNHU6/pAqh IBanz7MU5w5+X1Y0CCSlGzptZtWZg9oFHzJF7qGhjoLBkaCNE/ecCuku00DhC7DgRH5e +EWA== X-Gm-Message-State: AE9vXwOzgNJofVIeoQZfBFxViHZ73G3VhiW3q4rcLubji+LSKCvcWkSzFkn+YhXr9vOG4A== X-Received: by 10.46.9.76 with SMTP id 73mr11205522ljj.61.1473182658782; Tue, 06 Sep 2016 10:24:18 -0700 (PDT) Received: from enkidu.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id 4sm5398990ljf.33.2016.09.06.10.24.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 06 Sep 2016 10:24:18 -0700 (PDT) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, sboyd@codeaurora.org, mturquette@baylibre.com Subject: [PATCH v2 2/3] clk: mvebu: dynamically allocate resources in Armada CP110 system controller Date: Tue, 6 Sep 2016 19:31:56 +0200 Message-Id: <1473183117-11889-3-git-send-email-mw@semihalf.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1473183117-11889-1-git-send-email-mw@semihalf.com> References: <1473183117-11889-1-git-send-email-mw@semihalf.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160906_102441_089300_9C91C3CD X-CRM114-Status: GOOD ( 14.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thomas.petazzoni@free-electrons.com, andrew@lunn.ch, jason@lakedaemon.net, tn@semihalf.com, stable@vger.kernel.org, nadavh@marvell.com, alior@marvell.com, jaz@semihalf.com, gregory.clement@free-electrons.com, Marcin Wojtas , sebastian.hesselbarth@gmail.com MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Original commit, which added support for Armada CP110 system controller used global variables for storing all clock information. It worked fine for Armada 7k SoC, with single CP110 block. After dual-CP110 Armada 8k was introduced, the data got overwritten and corrupted. This patch fixes the issue by allocating resources dynamically in the driver probe and storing it as platform drvdata. Fixes: d3da3eaef7f4 ("clk: mvebu: new driver for Armada CP110 system ...") Signed-off-by: Marcin Wojtas Reviewed-by: Thomas Petazzoni CC: --- drivers/clk/mvebu/cp110-system-controller.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/clk/mvebu/cp110-system-controller.c b/drivers/clk/mvebu/cp110-system-controller.c index 59fe76e..5e68d24 100644 --- a/drivers/clk/mvebu/cp110-system-controller.c +++ b/drivers/clk/mvebu/cp110-system-controller.c @@ -81,13 +81,6 @@ enum { #define CP110_GATE_EIP150 25 #define CP110_GATE_EIP197 26 -static struct clk *cp110_clks[CP110_CLK_NUM]; - -static struct clk_onecell_data cp110_clk_data = { - .clks = cp110_clks, - .clk_num = CP110_CLK_NUM, -}; - struct cp110_gate_clk { struct clk_hw hw; struct regmap *regmap; @@ -196,7 +189,8 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev) struct regmap *regmap; struct device_node *np = pdev->dev.of_node; const char *ppv2_name, *apll_name, *core_name, *eip_name, *nand_name; - struct clk *clk; + struct clk_onecell_data *cp110_clk_data; + struct clk *clk, **cp110_clks; u32 nand_clk_ctrl; int i, ret; @@ -209,6 +203,20 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev) if (ret) return ret; + cp110_clks = devm_kcalloc(&pdev->dev, sizeof(struct clk *), + CP110_CLK_NUM, GFP_KERNEL); + if (!cp110_clks) + return PTR_ERR(cp110_clks); + + cp110_clk_data = devm_kzalloc(&pdev->dev, + sizeof(*cp110_clk_data), + GFP_KERNEL); + if (!cp110_clk_data) + return PTR_ERR(cp110_clk_data); + + cp110_clk_data->clks = cp110_clks; + cp110_clk_data->clk_num = CP110_CLK_NUM; + /* Register the APLL which is the root of the clk tree */ of_property_read_string_index(np, "core-clock-output-names", CP110_CORE_APLL, &apll_name); @@ -336,10 +344,12 @@ static int cp110_syscon_clk_probe(struct platform_device *pdev) cp110_clks[CP110_MAX_CORE_CLOCKS + i] = clk; } - ret = of_clk_add_provider(np, cp110_of_clk_get, &cp110_clk_data); + ret = of_clk_add_provider(np, cp110_of_clk_get, cp110_clk_data); if (ret) goto fail_clk_add; + platform_set_drvdata(pdev, cp110_clks); + return 0; fail_clk_add: @@ -366,6 +376,7 @@ fail0: static int cp110_syscon_clk_remove(struct platform_device *pdev) { + struct clk **cp110_clks = platform_get_drvdata(pdev); int i; of_clk_del_provider(pdev->dev.of_node);