From patchwork Tue Mar 6 14:33:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 130813 Delivered-To: patch@linaro.org Received: by 10.46.66.2 with SMTP id p2csp4009603lja; Tue, 6 Mar 2018 06:33:36 -0800 (PST) X-Google-Smtp-Source: AG47ELtzysQi0xEd0Mbxudfnwd0giclWyAZ6ap/6lqtjI6F1fTnJssI15BM8ed+Yf1PK5EwIep+5 X-Received: by 2002:a17:902:538f:: with SMTP id c15-v6mr16416392pli.90.1520346816489; Tue, 06 Mar 2018 06:33:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520346816; cv=none; d=google.com; s=arc-20160816; b=j3K/2Xi9imUG3CoCcA8W1JJx1kxPQT7V7BjnwlrbWGrJqiE8gP5utV1geAj22so98D MLrwLueyL3vQceVqOmXyjN2Naa6/FtM7nfFK9JXPBivvLGMhuBKm0jmIKNHKvGPqpEsa 6C8WxSbbMEpgbbwZdJSeAuiIakkX/GWrhhbdECoN3Q8L21GnlqY+nZJ6iIsQlx0G2BWw MfA41k+S7Rd/EVXrGIChCsEk/osiV0lvok8C1G3DaTL0Wv7fYCu1l9xo2VTCOCtpA4Wa mJsVmgWl2CgJvrL0sRTIimOK9gZQsIHvby1ui0CTECcSNTQq/hQk1uleLjnwy5D7hF5f CkeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:cms-type:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter :arc-authentication-results; bh=ukWQ9aJ0CCZathl9j4kQ1DL+rGdCIx6hDwTFWgXC8Pg=; b=yWTysQIqdsRwdVWjjcbyEGALJnaMF99Up6NTcnQEvFksHw0ciUExzur6S3L3ls42Do XydeJK9VLl+GwITKSIs/yfOkRllQHh5TOGR++buDn6PwsextipwCCbXPprmgvBlmZBpc jcBWxCYcG6SdcxiisRgG1wnlmh36Kq3cAHCKZ/yC63n9YNPEHLKcQgxRLJnxyMu3GDBb wOybpRWQi1SN+ojpjkR02QsCCKS0VZZej8idVboS3WsDQvnWDstATlHVnB2pJVDJ4E4U N3N+E2a+wKkTC32g3QmbdBVPTKrYYy7IfCJh5iTJNE6E9pQFAljmvUKEoZTDXODGKVDQ k+YQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@samsung.com header.s=mail20170921 header.b=ne1qN4f9; spf=pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-samsung-soc-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h33-v6si11317109plh.673.2018.03.06.06.33.36; Tue, 06 Mar 2018 06:33:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@samsung.com header.s=mail20170921 header.b=ne1qN4f9; spf=pass (google.com: best guess record for domain of linux-samsung-soc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-samsung-soc-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753512AbeCFOdf (ORCPT + 3 others); Tue, 6 Mar 2018 09:33:35 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:46332 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753768AbeCFOd1 (ORCPT ); Tue, 6 Mar 2018 09:33:27 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180306143325euoutp01ecc6f8298f071484a98a79c41bbea355~ZW11i4ceP0513005130euoutp01n; Tue, 6 Mar 2018 14:33:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180306143325euoutp01ecc6f8298f071484a98a79c41bbea355~ZW11i4ceP0513005130euoutp01n DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1520346805; bh=zzRzk6bIeUEnNYUkQz9Hq11XL22uILsmZ7LhhM50IUQ=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=ne1qN4f91Cp7sjhj1YsScnJyiTjNgyLfnGARay+8gUnnvijFEErrh7F8c+zgRa3TP 5CeHxL0vj4cvRLNZWQTud4LX+kpvypJbQRpT1ujzvbcDC9jl93SyAvSx8Ah4qAxxDe 6MKHVhWQlMz+GxLArd/eL3VTY8C+9v+63o+YSPbk= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180306143325eucas1p1bdff5515e43b09992a0ca43088b631b9~ZW11GEA303124831248eucas1p16; Tue, 6 Mar 2018 14:33:25 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id C8.0E.10409.5B6AE9A5; Tue, 6 Mar 2018 14:33:25 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180306143324eucas1p2ab3484f3e05f3bea06e0be51e0d4791c~ZW10UkEIa0471704717eucas1p2L; Tue, 6 Mar 2018 14:33:24 +0000 (GMT) X-AuditID: cbfec7f5-b45ff700000028a9-b7-5a9ea6b517b3 Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 16.91.04183.4B6AE9A5; Tue, 6 Mar 2018 14:33:24 +0000 (GMT) Received: from AMDC2765.digital.local ([106.116.147.25]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0P5600MGHB3ETD00@eusync1.samsung.com>; Tue, 06 Mar 2018 14:33:24 +0000 (GMT) From: Marek Szyprowski To: linux-clk@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Chanwoo Choi , Inki Dae , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz Subject: [PATCH v3 4/6] clk: samsung: exynos5250: Move PD-dependent clocks to Exynos5 sub-CMU driver Date: Tue, 06 Mar 2018 15:33:10 +0100 Message-id: <20180306143312.21035-5-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.15.0 In-reply-to: <20180306143312.21035-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrHIsWRmVeSWpSXmKPExsWy7djPc7pbl82LMni6ntVi4wwgcf3Lc1aL SfcnsFicP7+B3eJjzz1Wixnn9zFZrD1yl93i8Jt2VgcOj02rOtk8+rasYvT4vEkugDmKyyYl NSezLLVI3y6BK+Pn8UssBS3GFe0rlBoYX2l3MXJwSAiYSGxZ7tDFyMUhJLCCUeLe9xnsEM5n RokJfZ2sXYycYEUtm9czQySWMUo8m7kWLCEk0MAk8fGXLIjNJmAo0fW2iw3EFhFwkPj86TUj SAOzQBuTxNkD+5lA1gkLpEncuR8JUsMioCpxY0I3C4jNK2ArMWf3L3aIZfISi7/vBJvDKWAn cefSTBaQORICP1kl9qx5xQZR5CLRuuQhE4QtLPHq+BaoZhmJy5MhhkoI1Ev0fT/CBNHcwyix t2UqVIO1xOHjF8E+YBbgk5i0bTozJCx4JTrahCBKPCQubNgJ9b2jxPeJFxghvp/IKPG6q419 AqPUAkaGVYziqaXFuempxcZ5qeV6xYm5xaV56XrJ+bmbGIGxePrf8a87GPf9STrEKMDBqMTD u8FjbpQQa2JZcWXuIUYJDmYlEd4I/XlRQrwpiZVVqUX58UWlOanFhxilOViUxHnjNOqihATS E0tSs1NTC1KLYLJMHJxSDYwCe19rnVvylO+BZcYFmcOvXr7+26bZ5n481q9Y7u06sfW7DUuW zlh2vvXI0jjWQP3FLSu3H5Z3fGaynzVFvzr7ZoZRSfI85r/HeGar5s+4eCp9z8UfhaWcR49d 67D88OvFsQv+J/e/2C/T5N6lbX7WXO+U0PmkLCPHY2rOdqkfdm/I3q3SwHBKiaU4I9FQi7mo OBEAB2xrvMECAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpiluLIzCtJLcpLzFFi42I5/e/4Zd0ty+ZFGXx9KmWxccZ6VovrX56z Wky6P4HF4vz5DewWH3vusVrMOL+PyWLtkbvsFofftLM6cHhsWtXJ5tG3ZRWjx+dNcgHMUVw2 Kak5mWWpRfp2CVwZP49fYiloMa5oX6HUwPhKu4uRk0NCwESiZfN65i5GLg4hgSWMEiceT2WH cJqYJCbeW8oEUsUmYCjR9baLDcQWEXCQ+PzpNSNIEbNAB5PEnr0PwRLCAmkSz68uAGtgEVCV uDGhmwXE5hWwlZiz+xc7xDp5icXfd4LVcwrYSdy5NBOsRgio5vKE74wTGHkWMDKsYhRJLS3O Tc8tNtIrTswtLs1L10vOz93ECAyZbcd+btnB2PUu+BCjAAejEg/vBo+5UUKsiWXFlbmHGCU4 mJVEeCP050UJ8aYkVlalFuXHF5XmpBYfYpTmYFES5z1vUBklJJCeWJKanZpakFoEk2Xi4JRq YNy+8dyhf8V/o5pWCH/hEOkU31bS0cfwWEI3Ov95x67qnLdOLexzk5bO+25nOGHDghImzslN R3Xnye3LeHXCZu2CnPoqmWcr4+9vuFpSLKp2oTNORHXluhKWRw/ntctKSzMqaOWc778qYiE7 tS7yXrO06c4NF61SYw11S9kT9bhUHD7XznF5psRSnJFoqMVcVJwIAGRgwsoVAgAA X-CMS-MailID: 20180306143324eucas1p2ab3484f3e05f3bea06e0be51e0d4791c X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180306143324eucas1p2ab3484f3e05f3bea06e0be51e0d4791c X-RootMTR: 20180306143324eucas1p2ab3484f3e05f3bea06e0be51e0d4791c References: <20180306143312.21035-1-m.szyprowski@samsung.com> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Clocks related to DISP1 block require special handling for power domain turn on/off sequences. Till now this was handled by Exynos power domain driver, but that approach was limited only to some special cases. This patch moves handling of those operations to clock controller driver. This gives more flexibility and allows fine tune values of some clock-specific registers. This patch moves handling of those mentioned clocks to Exynos5 sub-CMU driver instantiated from Exynos5250 driver. Signed-off-by: Marek Szyprowski Acked-by: Krzysztof Kozlowski --- drivers/clk/samsung/Makefile | 1 + drivers/clk/samsung/clk-exynos5-subcmu.c | 1 + drivers/clk/samsung/clk-exynos5250.c | 51 ++++++++++++++++++++++---------- drivers/soc/samsung/pm_domains.c | 1 + 4 files changed, 38 insertions(+), 16 deletions(-) -- 2.15.0 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile index b23d6cfac723..513826393158 100644 --- a/drivers/clk/samsung/Makefile +++ b/drivers/clk/samsung/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_SOC_EXYNOS3250) += clk-exynos3250.o obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4412-isp.o obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o +obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5-subcmu.o obj-$(CONFIG_SOC_EXYNOS5260) += clk-exynos5260.o obj-$(CONFIG_SOC_EXYNOS5410) += clk-exynos5410.o obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o diff --git a/drivers/clk/samsung/clk-exynos5-subcmu.c b/drivers/clk/samsung/clk-exynos5-subcmu.c index bea10f4b3ee2..93306283d764 100644 --- a/drivers/clk/samsung/clk-exynos5-subcmu.c +++ b/drivers/clk/samsung/clk-exynos5-subcmu.c @@ -165,6 +165,7 @@ static int __init exynos5_clk_probe(struct platform_device *pdev) } static const struct of_device_id exynos5_clk_of_match[] = { + { .compatible = "samsung,exynos5250-clock", }, { .compatible = "samsung,exynos5420-clock", }, { .compatible = "samsung,exynos5800-clock", }, { }, diff --git a/drivers/clk/samsung/clk-exynos5250.c b/drivers/clk/samsung/clk-exynos5250.c index 1b3a8f9cd519..06e5ddcb30db 100644 --- a/drivers/clk/samsung/clk-exynos5250.c +++ b/drivers/clk/samsung/clk-exynos5250.c @@ -18,6 +18,7 @@ #include "clk.h" #include "clk-cpu.h" +#include "clk-exynos5-subcmu.h" #define APLL_LOCK 0x0 #define APLL_CON0 0x100 @@ -571,17 +572,6 @@ static const struct samsung_gate_clock exynos5250_gate_clks[] __initconst = { GATE(CLK_SMMU_GSCL3, "smmu_gscl3", "mout_aclk266_gscl_sub", GATE_IP_GSCL, 10, 0, 0), - GATE(CLK_FIMD1, "fimd1", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 0, 0, - 0), - GATE(CLK_MIE1, "mie1", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 1, 0, - 0), - GATE(CLK_DSIM0, "dsim0", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 3, 0, - 0), - GATE(CLK_DP, "dp", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 4, 0, 0), - GATE(CLK_MIXER, "mixer", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 5, 0, - 0), - GATE(CLK_HDMI, "hdmi", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 6, 0, - 0), GATE(CLK_MFC, "mfc", "mout_aclk333_sub", GATE_IP_MFC, 0, 0, 0), GATE(CLK_SMMU_MFCR, "smmu_mfcr", "mout_aclk333_sub", GATE_IP_MFC, 1, 0, @@ -671,10 +661,6 @@ static const struct samsung_gate_clock exynos5250_gate_clks[] __initconst = { GATE(CLK_WDT, "wdt", "div_aclk66", GATE_IP_PERIS, 19, 0, 0), GATE(CLK_RTC, "rtc", "div_aclk66", GATE_IP_PERIS, 20, 0, 0), GATE(CLK_TMU, "tmu", "div_aclk66", GATE_IP_PERIS, 21, 0, 0), - GATE(CLK_SMMU_TV, "smmu_tv", "mout_aclk200_disp1_sub", - GATE_IP_DISP1, 9, 0, 0), - GATE(CLK_SMMU_FIMD1, "smmu_fimd1", "mout_aclk200_disp1_sub", - GATE_IP_DISP1, 8, 0, 0), GATE(CLK_SMMU_2D, "smmu_2d", "div_aclk200", GATE_IP_ACP, 7, 0, 0), GATE(CLK_SMMU_FIMC_ISP, "smmu_fimc_isp", "mout_aclk_266_isp_sub", GATE_IP_ISP0, 8, 0, 0), @@ -698,6 +684,38 @@ static const struct samsung_gate_clock exynos5250_gate_clks[] __initconst = { GATE_IP_ISP1, 7, 0, 0), }; +static const struct samsung_gate_clock exynos5250_disp_gate_clks[] __initconst = { + GATE(CLK_FIMD1, "fimd1", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 0, 0, + 0), + GATE(CLK_MIE1, "mie1", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 1, 0, + 0), + GATE(CLK_DSIM0, "dsim0", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 3, 0, + 0), + GATE(CLK_DP, "dp", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 4, 0, 0), + GATE(CLK_MIXER, "mixer", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 5, 0, + 0), + GATE(CLK_HDMI, "hdmi", "mout_aclk200_disp1_sub", GATE_IP_DISP1, 6, 0, + 0), + GATE(CLK_SMMU_TV, "smmu_tv", "mout_aclk200_disp1_sub", + GATE_IP_DISP1, 9, 0, 0), + GATE(CLK_SMMU_FIMD1, "smmu_fimd1", "mout_aclk200_disp1_sub", + GATE_IP_DISP1, 8, 0, 0), +}; + +static struct exynos5_subcmu_reg_dump exynos5250_disp_suspend_regs[] = { + { GATE_IP_DISP1, 0xffffffff, 0xffffffff }, /* DISP1 gates */ + { SRC_TOP3, 0, BIT(4) }, /* MUX mout_aclk200_disp1_sub */ + { SRC_TOP3, 0, BIT(6) }, /* MUX mout_aclk300_disp1_sub */ +}; + +static const struct exynos5_subcmu_info exynos5250_disp_subcmu = { + .gate_clks = exynos5250_disp_gate_clks, + .nr_gate_clks = ARRAY_SIZE(exynos5250_disp_gate_clks), + .suspend_regs = exynos5250_disp_suspend_regs, + .nr_suspend_regs = ARRAY_SIZE(exynos5250_disp_suspend_regs), + .pd_name = "DISP1", +}; + static const struct samsung_pll_rate_table vpll_24mhz_tbl[] __initconst = { /* sorted in descending order */ /* PLL_36XX_RATE(rate, m, p, s, k) */ @@ -859,10 +877,11 @@ static void __init exynos5250_clk_init(struct device_node *np) __raw_writel(tmp, reg_base + PWR_CTRL2); exynos5250_clk_sleep_init(); + exynos5_subcmus_init(ctx, 1, &exynos5250_disp_subcmu); samsung_clk_of_add_provider(np, ctx); pr_info("Exynos5250: clock setup completed, armclk=%ld\n", _get_rate("div_arm2")); } -CLK_OF_DECLARE(exynos5250_clk, "samsung,exynos5250-clock", exynos5250_clk_init); +CLK_OF_DECLARE_DRIVER(exynos5250_clk, "samsung,exynos5250-clock", exynos5250_clk_init); diff --git a/drivers/soc/samsung/pm_domains.c b/drivers/soc/samsung/pm_domains.c index f2d6d7a09c16..caf45cf7aa8e 100644 --- a/drivers/soc/samsung/pm_domains.c +++ b/drivers/soc/samsung/pm_domains.c @@ -148,6 +148,7 @@ static __init const char *exynos_get_domain_name(struct device_node *node) } static const char *soc_force_no_clk[] = { + "samsung,exynos5250-clock", "samsung,exynos5420-clock", "samsung,exynos5800-clock", };