Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp430092ybl; Thu, 5 Dec 2019 23:43:24 -0800 (PST) X-Google-Smtp-Source: APXvYqxz4ct9LVjHOA2MYGLChBxZBJLvUSkFYhW6aeRSOrlPXvIwHD0ZJ+W2Rpy2qotStsnzTQUi X-Received: by 2002:a9d:3d05:: with SMTP id a5mr10306734otc.295.1575618204819; Thu, 05 Dec 2019 23:43:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575618204; cv=none; d=google.com; s=arc-20160816; b=YNSRJj8dm0a7aL9QmHkOm8O3+qU35JzwrIGKFqw+g4Lm2IRaAMMMI6J8lD8PC6Fvbp 6KqzUlvYJZFJv+AgWopK8oxnZXU+qkZ8dUpWVHNBHTqgbj1Ey/QEPqw/g5z9LNabt3eN tqUM9xMFnJPBfoykD4eCHSKYFzk6eZjY4NkTHyw99W/JoNApZnLm7hzjDGvtiWWkPRoA xfYcTgNivqxNGgfY7c7KWtVHTHVM3f9IgAM67iXIbmYnmLN58yru/jy+4XyDnlCtUMnz 9jPSw+NUcyuF2kHeQOPaXTo+3NYoLKEa3ND0kKjaxLO6lAywSHwpcNQOdFT72etdxcoH fHow== 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=Mbz1UkEYAaouVuSC5HUpG9iX9baakJuw8eAsAaObul04LwJqbf0UBPrV5nK9PB81e4 lPkpYkSHFgiyStTR3SJzmOfoyqszz5hfm4RxCEAwGMQzuMM3c+4F3OrD/vsVSMEuZZWX a2qZOIPGmR3y4n/DLbtGYl3BttPi8CWPcNzcJl17K3DH3X8aTAK+/JlzgTywgvdP+cf1 e2NABtus3IFlw1ymGPG9EbZPsx6+M5qX0d5Ztn9AwA5Ml2xRgxlIMEpMp5K/uuUyHlbU TIZ5ZnXDY5EFl0WS0OEPDL64W2Ngf8bQWtCRid70hUHapE4Rvz6/AUrFuRZGJckFusPW i9SQ== 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 d133si2224751oif.206.2019.12.05.23.43.12; Thu, 05 Dec 2019 23:43:24 -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 S1726646AbfLFHlO (ORCPT + 99 others); Fri, 6 Dec 2019 02:41:14 -0500 Received: from mail-sz.amlogic.com ([211.162.65.117]:26913 "EHLO mail-sz.amlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725858AbfLFHlM (ORCPT ); Fri, 6 Dec 2019 02:41:12 -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, 6 Dec 2019 15:41:36 +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 v4 2/6] clk: meson: add support for A1 PLL clock ops Date: Fri, 6 Dec 2019 15:40:48 +0800 Message-ID: <20191206074052.15557-3-jian.hu@amlogic.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191206074052.15557-1-jian.hu@amlogic.com> References: <20191206074052.15557-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