From patchwork Wed Apr 22 20:49:44 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 6258331 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 22ACA9F1BE for ; Wed, 22 Apr 2015 20:56:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DAA31202F2 for ; Wed, 22 Apr 2015 20:56:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5BAB1202EC for ; Wed, 22 Apr 2015 20:56:41 +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 1Yl1dq-0000kG-9K; Wed, 22 Apr 2015 20:53:06 +0000 Received: from mail-bn1bn0108.outbound.protection.outlook.com ([157.56.110.108] helo=na01-bn1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Yl1dl-0000iH-Cg for linux-arm-kernel@lists.infradead.org; Wed, 22 Apr 2015 20:53:03 +0000 Received: from BN3PR0301CA0065.namprd03.prod.outlook.com (25.160.152.161) by BLUPR03MB1347.namprd03.prod.outlook.com (25.163.80.25) with Microsoft SMTP Server (TLS) id 15.1.136.25; Wed, 22 Apr 2015 20:52:37 +0000 Received: from BL2FFO11FD028.protection.gbl (2a01:111:f400:7c09::152) by BN3PR0301CA0065.outlook.office365.com (2a01:111:e400:401e::33) with Microsoft SMTP Server (TLS) id 15.1.148.16 via Frontend Transport; Wed, 22 Apr 2015 20:52:37 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD028.mail.protection.outlook.com (10.173.161.107) with Microsoft SMTP Server (TLS) id 15.1.148.11 via Frontend Transport; Wed, 22 Apr 2015 20:52:37 +0000 Received: from shlinux2.ap.freescale.net (shlinux2.ap.freescale.net [10.192.224.44]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t3MKqXU9004805; Wed, 22 Apr 2015 13:52:34 -0700 From: To: , Subject: [PATCH 1/1] arm: imx: move clk common part to driver/clk/imx Date: Thu, 23 Apr 2015 04:49:44 +0800 Message-ID: <1429735784-32492-1-git-send-email-Frank.Li@freescale.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; BMV:1; SFV:NSPM; SFS:(10019020)(6009001)(339900001)(189002)(199003)(46102003)(92566002)(77096005)(62966003)(77156002)(36756003)(86362001)(50986999)(104016003)(47776003)(6806004)(48376002)(50466002)(87936001)(105606002)(106466001)(50226001)(19580395003)(19580405001)(229853001)(5001770100001)(86152002)(85426001)(21314002)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB1347; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:sfv; MX:1; A:1; LANG:; MIME-Version: 1.0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1347; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5002010)(5005006); SRVR:BLUPR03MB1347; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB1347; X-Forefront-PRVS: 0554B1F54F X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Apr 2015 20:52:37.2139 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1347 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150422_135301_690699_5C0C3784 X-CRM114-Status: GOOD ( 10.41 ) X-Spam-Score: -0.3 (/) Cc: Frank Li , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, 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 From: Frank Li move clock common part to driver/clk/imx except clk-pllv1.c because it use cpu_is_xxx() Signed-off-by: Frank Li --- arch/arm/mach-imx/Makefile | 5 +- drivers/clk/Makefile | 1 + drivers/clk/imx/Makefile | 4 + {arch/arm/mach-imx => drivers/clk/imx}/clk-busy.c | 0 .../mach-imx => drivers/clk/imx}/clk-fixup-div.c | 0 .../mach-imx => drivers/clk/imx}/clk-fixup-mux.c | 0 .../clk/imx}/clk-gate-exclusive.c | 0 {arch/arm/mach-imx => drivers/clk/imx}/clk-gate2.c | 0 {arch/arm/mach-imx => drivers/clk/imx}/clk-pfd.c | 0 {arch/arm/mach-imx => drivers/clk/imx}/clk-pllv2.c | 0 {arch/arm/mach-imx => drivers/clk/imx}/clk-pllv3.c | 0 {arch/arm/mach-imx => drivers/clk/imx}/clk.c | 0 drivers/clk/imx/clk.h | 139 +++++++++++++++++++++ 13 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 drivers/clk/imx/Makefile rename {arch/arm/mach-imx => drivers/clk/imx}/clk-busy.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-fixup-div.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-fixup-mux.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-gate-exclusive.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-gate2.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-pfd.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-pllv2.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk-pllv3.c (100%) rename {arch/arm/mach-imx => drivers/clk/imx}/clk.c (100%) create mode 100644 drivers/clk/imx/clk.h diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 8d1b101..91c3fda 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -14,10 +14,7 @@ obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clk-imx35.o ehci-imx35.o pm-imx imx5-pm-$(CONFIG_PM) += pm-imx5.o obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o clk-imx51-imx53.o clk-cpu.o $(imx5-pm-y) -obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \ - clk-pfd.o clk-busy.o clk.o \ - clk-fixup-div.o clk-fixup-mux.o \ - clk-gate-exclusive.o +obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index d478ceb..ebe86b3 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -70,3 +70,4 @@ obj-$(CONFIG_ARCH_U8500) += ux500/ obj-$(CONFIG_COMMON_CLK_VERSATILE) += versatile/ obj-$(CONFIG_X86) += x86/ obj-$(CONFIG_ARCH_ZYNQ) += zynq/ +obj-$(CONFIG_ARCH_MXC) += imx/ diff --git a/drivers/clk/imx/Makefile b/drivers/clk/imx/Makefile new file mode 100644 index 0000000..b45ff25 --- /dev/null +++ b/drivers/clk/imx/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_COMMON_CLK) += clk-pllv2.o clk-pllv3.o clk-gate2.o \ + clk-pfd.o clk-busy.o clk.o \ + clk-fixup-div.o clk-fixup-mux.o \ + clk-gate-exclusive.o diff --git a/arch/arm/mach-imx/clk-busy.c b/drivers/clk/imx/clk-busy.c similarity index 100% rename from arch/arm/mach-imx/clk-busy.c rename to drivers/clk/imx/clk-busy.c diff --git a/arch/arm/mach-imx/clk-fixup-div.c b/drivers/clk/imx/clk-fixup-div.c similarity index 100% rename from arch/arm/mach-imx/clk-fixup-div.c rename to drivers/clk/imx/clk-fixup-div.c diff --git a/arch/arm/mach-imx/clk-fixup-mux.c b/drivers/clk/imx/clk-fixup-mux.c similarity index 100% rename from arch/arm/mach-imx/clk-fixup-mux.c rename to drivers/clk/imx/clk-fixup-mux.c diff --git a/arch/arm/mach-imx/clk-gate-exclusive.c b/drivers/clk/imx/clk-gate-exclusive.c similarity index 100% rename from arch/arm/mach-imx/clk-gate-exclusive.c rename to drivers/clk/imx/clk-gate-exclusive.c diff --git a/arch/arm/mach-imx/clk-gate2.c b/drivers/clk/imx/clk-gate2.c similarity index 100% rename from arch/arm/mach-imx/clk-gate2.c rename to drivers/clk/imx/clk-gate2.c diff --git a/arch/arm/mach-imx/clk-pfd.c b/drivers/clk/imx/clk-pfd.c similarity index 100% rename from arch/arm/mach-imx/clk-pfd.c rename to drivers/clk/imx/clk-pfd.c diff --git a/arch/arm/mach-imx/clk-pllv2.c b/drivers/clk/imx/clk-pllv2.c similarity index 100% rename from arch/arm/mach-imx/clk-pllv2.c rename to drivers/clk/imx/clk-pllv2.c diff --git a/arch/arm/mach-imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c similarity index 100% rename from arch/arm/mach-imx/clk-pllv3.c rename to drivers/clk/imx/clk-pllv3.c diff --git a/arch/arm/mach-imx/clk.c b/drivers/clk/imx/clk.c similarity index 100% rename from arch/arm/mach-imx/clk.c rename to drivers/clk/imx/clk.c diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h new file mode 100644 index 0000000..6a07903 --- /dev/null +++ b/drivers/clk/imx/clk.h @@ -0,0 +1,139 @@ +#ifndef __MACH_IMX_CLK_H +#define __MACH_IMX_CLK_H + +#include +#include + +extern spinlock_t imx_ccm_lock; + +void imx_check_clocks(struct clk *clks[], unsigned int count); + +extern void imx_cscmr1_fixup(u32 *val); + +struct clk *imx_clk_pllv1(const char *name, const char *parent, + void __iomem *base); + +struct clk *imx_clk_pllv2(const char *name, const char *parent, + void __iomem *base); + +enum imx_pllv3_type { + IMX_PLLV3_GENERIC, + IMX_PLLV3_SYS, + IMX_PLLV3_USB, + IMX_PLLV3_USB_VF610, + IMX_PLLV3_AV, + IMX_PLLV3_ENET, +}; + +struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name, + const char *parent_name, void __iomem *base, u32 div_mask); + +struct clk *clk_register_gate2(struct device *dev, const char *name, + const char *parent_name, unsigned long flags, + void __iomem *reg, u8 bit_idx, + u8 clk_gate_flags, spinlock_t *lock, + unsigned int *share_count); + +struct clk * imx_obtain_fixed_clock( + const char *name, unsigned long rate); + +struct clk *imx_clk_gate_exclusive(const char *name, const char *parent, + void __iomem *reg, u8 shift, u32 exclusive_mask); + +static inline struct clk *imx_clk_gate2(const char *name, const char *parent, + void __iomem *reg, u8 shift) +{ + return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg, + shift, 0, &imx_ccm_lock, NULL); +} + +static inline struct clk *imx_clk_gate2_shared(const char *name, + const char *parent, void __iomem *reg, u8 shift, + unsigned int *share_count) +{ + return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg, + shift, 0, &imx_ccm_lock, share_count); +} + +struct clk *imx_clk_pfd(const char *name, const char *parent_name, + void __iomem *reg, u8 idx); + +struct clk *imx_clk_busy_divider(const char *name, const char *parent_name, + void __iomem *reg, u8 shift, u8 width, + void __iomem *busy_reg, u8 busy_shift); + +struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift, + u8 width, void __iomem *busy_reg, u8 busy_shift, + const char **parent_names, int num_parents); + +struct clk *imx_clk_fixup_divider(const char *name, const char *parent, + void __iomem *reg, u8 shift, u8 width, + void (*fixup)(u32 *val)); + +struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg, + u8 shift, u8 width, const char **parents, + int num_parents, void (*fixup)(u32 *val)); + +static inline struct clk *imx_clk_fixed(const char *name, int rate) +{ + return clk_register_fixed_rate(NULL, name, NULL, CLK_IS_ROOT, rate); +} + +static inline struct clk *imx_clk_divider(const char *name, const char *parent, + void __iomem *reg, u8 shift, u8 width) +{ + return clk_register_divider(NULL, name, parent, CLK_SET_RATE_PARENT, + reg, shift, width, 0, &imx_ccm_lock); +} + +static inline struct clk *imx_clk_divider_flags(const char *name, + const char *parent, void __iomem *reg, u8 shift, u8 width, + unsigned long flags) +{ + return clk_register_divider(NULL, name, parent, flags, + reg, shift, width, 0, &imx_ccm_lock); +} + +static inline struct clk *imx_clk_gate(const char *name, const char *parent, + void __iomem *reg, u8 shift) +{ + return clk_register_gate(NULL, name, parent, CLK_SET_RATE_PARENT, reg, + shift, 0, &imx_ccm_lock); +} + +static inline struct clk *imx_clk_gate_dis(const char *name, const char *parent, + void __iomem *reg, u8 shift) +{ + return clk_register_gate(NULL, name, parent, CLK_SET_RATE_PARENT, reg, + shift, CLK_GATE_SET_TO_DISABLE, &imx_ccm_lock); +} + +static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg, + u8 shift, u8 width, const char **parents, int num_parents) +{ + return clk_register_mux(NULL, name, parents, num_parents, + CLK_SET_RATE_NO_REPARENT, reg, shift, + width, 0, &imx_ccm_lock); +} + +static inline struct clk *imx_clk_mux_flags(const char *name, + void __iomem *reg, u8 shift, u8 width, const char **parents, + int num_parents, unsigned long flags) +{ + return clk_register_mux(NULL, name, parents, num_parents, + flags | CLK_SET_RATE_NO_REPARENT, reg, shift, width, 0, + &imx_ccm_lock); +} + +static inline struct clk *imx_clk_fixed_factor(const char *name, + const char *parent, unsigned int mult, unsigned int div) +{ + return clk_register_fixed_factor(NULL, name, parent, + CLK_SET_RATE_PARENT, mult, div); +} + +struct clk *imx_clk_cpu(const char *name, const char *parent_name, + struct clk *div, struct clk *mux, struct clk *pll, + struct clk *step); + +#endif