Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp8190586ybc; Fri, 29 Nov 2019 06:50:04 -0800 (PST) X-Google-Smtp-Source: APXvYqy+iBwigRFpYB3nq+cMfRPctJTZ7vp+JQEpB15M3iCueGXGySeyefIv8fca+Cz648nwiUpC X-Received: by 2002:a17:906:2898:: with SMTP id o24mr38012986ejd.102.1575039004548; Fri, 29 Nov 2019 06:50:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575039004; cv=none; d=google.com; s=arc-20160816; b=Di0ntPW7DNaAzQNFJU8T3cYJDFSpGt1e39QgSukjUm0aGVmlsq3p6J2RaNwC2yAwN2 BRD0viqEsInH3L5z3x/fYarqxLqgeDMpVSCMJ/yFV5Cztk8NbJEdAR9igdukgcVtRV5v sYOx13+9nXfpSqBgHvuLT4ilw/SD9Z3kc+Na8+0qZH1PaPbD3JR8jlbTlZ1ThHVdQWbk cMHXwwo3RCVqdgvBTHRpcbb2wj5eDPSLtD9bmNr+mYtDNFsJW2S+j5a+yuT5HcFeZ/ZI yHCmPbrnHEbER6E6ne0knCPvFMXBW8UKR7nLekINwzE4ch1vXomIXLF7irmDcuSqjBw4 akgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iFogicBDXB2Ml7fd8j2H9rXE9nwNX9Aniwq+1awkd5M=; b=OBMOHyJEEeiwbyAd9NC59rY4I3fZpRc943U2QKD70EAcdWPOpL+6Os1opy3A75dMBk hdjxmxq/ej6nfEuVYozBSrXx14fIGMBFUWtTJPS9tAJUolEg48QmAwBpSRF3KXA7L7Nd QdUnvroLVt+bhUFZFALUtM6lOTDZsY0Ly7T+d6m0UusNcfFx8HM0KGdIGr+5h5sh9hHC US+0wOrAwwvopR94ttYsAQHxaDyMnm+RW/Ylb0UYzl6rrdJSYLJwcdxo/5Ue1tBbmTep gXxTYpaIa7aEiZdoBaboJCvW9KTT8FupVX5rxNvpzZnUro70fwTXye8RtlRt0AdUH5Aw 3w3g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g19si8120770eds.282.2019.11.29.06.49.40; Fri, 29 Nov 2019 06:50:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727084AbfK2Oqc (ORCPT + 99 others); Fri, 29 Nov 2019 09:46:32 -0500 Received: from mail-sz.amlogic.com ([211.162.65.117]:43435 "EHLO mail-sz.amlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727040AbfK2Oqb (ORCPT ); Fri, 29 Nov 2019 09:46:31 -0500 Received: from droid15-sz.amlogic.com (10.28.8.25) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server id 15.1.1591.10; Fri, 29 Nov 2019 22:46:37 +0800 From: Jian Hu To: Jerome Brunet , Neil Armstrong CC: Jian Hu , Kevin Hilman , Rob Herring , Martin Blumenstingl , Michael Turquette , Stephen Boyd , Qiufang Dai , Jianxin Pan , Victor Wan , Chandle Zou , , , , , Subject: [PATCH v3 2/7] clk: meson: add support for A1 PLL clock ops Date: Fri, 29 Nov 2019 22:46:00 +0800 Message-ID: <20191129144605.182774-3-jian.hu@amlogic.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191129144605.182774-1-jian.hu@amlogic.com> References: <20191129144605.182774-1-jian.hu@amlogic.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.28.8.25] Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The A1 PLL design is different with previous SoCs. The PLL internal analog modules Power-on sequence is different with previous, and thus requires a strict register sequence to enable the PLL. Signed-off-by: Jian Hu --- drivers/clk/meson/clk-pll.c | 21 +++++++++++++++++++++ drivers/clk/meson/clk-pll.h | 1 + drivers/clk/meson/parm.h | 1 + 3 files changed, 23 insertions(+) diff --git a/drivers/clk/meson/clk-pll.c b/drivers/clk/meson/clk-pll.c index ddb1e5634739..4aff31a51589 100644 --- a/drivers/clk/meson/clk-pll.c +++ b/drivers/clk/meson/clk-pll.c @@ -318,6 +318,23 @@ static int meson_clk_pll_enable(struct clk_hw *hw) struct clk_regmap *clk = to_clk_regmap(hw); struct meson_clk_pll_data *pll = meson_clk_pll_data(clk); + /* + * The A1 design is different with previous SoCs.The PLL + * internal analog modules Power-on sequence is different with + * previous, and thus requires a strict register sequence to + * enable the PLL. + */ + if (MESON_PARM_APPLICABLE(&pll->current_en)) { + /* Enable the pll */ + meson_parm_write(clk->map, &pll->en, 1); + udelay(10); + /* Enable the pll self-adaption module current */ + meson_parm_write(clk->map, &pll->current_en, 1); + udelay(40); + meson_parm_write(clk->map, &pll->rst, 1); + meson_parm_write(clk->map, &pll->rst, 0); + } + /* do nothing if the PLL is already enabled */ if (clk_hw_is_enabled(hw)) return 0; @@ -347,6 +364,10 @@ static void meson_clk_pll_disable(struct clk_hw *hw) /* Disable the pll */ meson_parm_write(clk->map, &pll->en, 0); + + /* Disable PLL internal self-adaption module current */ + if (MESON_PARM_APPLICABLE(&pll->current_en)) + meson_parm_write(clk->map, &pll->current_en, 0); } static int meson_clk_pll_set_rate(struct clk_hw *hw, unsigned long rate, diff --git a/drivers/clk/meson/clk-pll.h b/drivers/clk/meson/clk-pll.h index 367efd0f6410..30f039242a65 100644 --- a/drivers/clk/meson/clk-pll.h +++ b/drivers/clk/meson/clk-pll.h @@ -36,6 +36,7 @@ struct meson_clk_pll_data { struct parm frac; struct parm l; struct parm rst; + struct parm current_en; const struct reg_sequence *init_regs; unsigned int init_count; const struct pll_params_table *table; diff --git a/drivers/clk/meson/parm.h b/drivers/clk/meson/parm.h index 3c9ef1b505ce..c53fb26577e3 100644 --- a/drivers/clk/meson/parm.h +++ b/drivers/clk/meson/parm.h @@ -20,6 +20,7 @@ (((reg) & CLRPMASK(width, shift)) | ((val) << (shift))) #define MESON_PARM_APPLICABLE(p) (!!((p)->width)) +#define MESON_PARM_CURRENT(p) (!!((p)->width)) struct parm { u16 reg_off; -- 2.24.0