Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1491315imu; Sat, 8 Dec 2018 00:45:01 -0800 (PST) X-Google-Smtp-Source: AFSGD/WhEYZ/NmVjh3CCVefWSSJ3gfvLEGVPjTG7wGxBrnfAkM+mh1FdTnqKHufqJW5lJaGh3PpR X-Received: by 2002:a63:3703:: with SMTP id e3mr4502353pga.348.1544258701921; Sat, 08 Dec 2018 00:45:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544258701; cv=none; d=google.com; s=arc-20160816; b=x2DjRxLHfWSBPc006hokzOqLB+hYUcIudTW9U03kpVfv4oRRtJ2tZN1p+uQqIxsRT6 NDUqiu08e3ccURRESAu4HoLiq2ziJoLqmUBFz6Xjn/67gl02cV5ZGztE4Om5ZYdmb5E6 Qfio6ehyLIiTyp03HBqMihiWRc19zOyS9qx/1MMMFUls1iRhEuGhc1UZMszWKV0jT1ag RwJJxQN+pU4laq7omfKiWlG+3sEw8F/Kc56dGYvAHpKhiP9vHXmtevW4uQ+Bo5/zwFiK dIWjMIckmoAP6t2yDqBcerqMVHtyfvlTTLzQCyhOU4HGv6BY84MGp8lLoSa1oZTktIAS 8hGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=JraThview/nkRfQBDuxDLoybp/qMrDW7cL2gmi40Rkw=; b=s+ZdojZ2c9q7gWQnbjZDVFQBcZtAxQkm4AdYX6O1+fgnxHf1c2HmryYVZgkzvpqH+H /+2rysxy8aoyRBxzziJrGhU7V749YS9hB/v66IVgyJQNsOzIV6pr/UAzbiwLtLTPsigN 7C6M/FDCW0TDBKV8zFeK3DcheAIYSDCQkTMKjC4BeY6AwLP1dqClAplbPUTUcJEbRQ0h 2PsHToKhYbi4Iz+kIC19u/IFTqt6iTpE+CP82bYhss0d/KOvhVRqaljcpcLb51y2wmkv D4SZ01fOAOWl0NiENF3hfLk5DThmT0leQOqJTtOiSpxr2BGpBtv2Yfdtvga9SIzh3o7Z roEA== 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 v10si4610424pgg.510.2018.12.08.00.44.46; Sat, 08 Dec 2018 00:45:01 -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 S1726295AbeLHImj (ORCPT + 99 others); Sat, 8 Dec 2018 03:42:39 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:11674 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726121AbeLHImi (ORCPT ); Sat, 8 Dec 2018 03:42:38 -0500 X-UUID: 9ed2caadf0ae4676a6554c075d5731f5-20181208 X-UUID: 9ed2caadf0ae4676a6554c075d5731f5-20181208 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 66778583; Sat, 08 Dec 2018 16:42:32 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs03n1.mediatek.inc (172.21.101.181) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 8 Dec 2018 16:42:14 +0800 Received: from localhost.localdomain (10.17.3.153) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Sat, 8 Dec 2018 16:42:13 +0800 From: Yong Wu To: Joerg Roedel , Matthias Brugger , Robin Murphy , Rob Herring CC: Tomasz Figa , Will Deacon , , , , , , , , , , , Nicolas Boichat , Arvind Yadav Subject: [PATCH v4 09/18] memory: mtk-smi: Add gals support Date: Sat, 8 Dec 2018 16:39:22 +0800 Message-ID: <1544258371-4600-10-git-send-email-yong.wu@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1544258371-4600-1-git-send-email-yong.wu@mediatek.com> References: <1544258371-4600-1-git-send-email-yong.wu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In some SoCs like mt8183, SMI add GALS(Global Async Local Sync) module which can help synchronize for the modules in different clock frequency. It can be seen as a "asynchronous fifo". This is a example diagram: M4U | ---------- | | gals0-rx gals1-rx | | | | gals0-tx gals1-tx | | ------------ SMI Common ------------ | +-----+--------+-----+- ... | | | | | gals-rx gals-rx | | | | | | | | | | gals-tx gals-tx | | | | | larb1 larb2 larb3 larb4 GALS only help transfer the command/data while it doesn't have the configuring register, thus it has the special "smi" clock and doesn't have the "apb" clock. From the diagram above, we add "gals0" and "gals1" clocks for smi-common and add a "gals" clock for smi-larb. This patch adds gals clock supporting in the SMI. Note that some larbs may still don't have the "gals" clock like larb1 and larb4 above. This is also a preparing patch for mt8183 which has GALS. Signed-off-by: Yong Wu --- drivers/memory/mtk-smi.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/memory/mtk-smi.c b/drivers/memory/mtk-smi.c index a5ddd42..3720c77 100644 --- a/drivers/memory/mtk-smi.c +++ b/drivers/memory/mtk-smi.c @@ -56,6 +56,7 @@ enum mtk_smi_gen { struct mtk_smi_common_plat { enum mtk_smi_gen gen; + bool has_gals; }; struct mtk_smi_larb_gen { @@ -63,11 +64,13 @@ struct mtk_smi_larb_gen { int port_in_larb[MTK_LARB_NR_MAX + 1]; void (*config_port)(struct device *); unsigned int larb_special_mask; /* The special larbs mask. */ + bool has_gals; }; struct mtk_smi { struct device *dev; struct clk *clk_apb, *clk_smi; + struct clk *clk_gals0, *clk_gals1; struct clk *clk_async; /*only needed by mt2701*/ void __iomem *smi_ao_base; @@ -99,8 +102,20 @@ static int mtk_smi_enable(const struct mtk_smi *smi) if (ret) goto err_disable_apb; + ret = clk_prepare_enable(smi->clk_gals0); + if (ret) + goto err_disable_smi; + + ret = clk_prepare_enable(smi->clk_gals1); + if (ret) + goto err_disable_gals0; + return 0; +err_disable_gals0: + clk_disable_unprepare(smi->clk_gals0); +err_disable_smi: + clk_disable_unprepare(smi->clk_smi); err_disable_apb: clk_disable_unprepare(smi->clk_apb); err_put_pm: @@ -110,6 +125,8 @@ static int mtk_smi_enable(const struct mtk_smi *smi) static void mtk_smi_disable(const struct mtk_smi *smi) { + clk_disable_unprepare(smi->clk_gals1); + clk_disable_unprepare(smi->clk_gals0); clk_disable_unprepare(smi->clk_smi); clk_disable_unprepare(smi->clk_apb); pm_runtime_put_sync(smi->dev); @@ -310,6 +327,15 @@ static int mtk_smi_larb_probe(struct platform_device *pdev) larb->smi.clk_smi = devm_clk_get(dev, "smi"); if (IS_ERR(larb->smi.clk_smi)) return PTR_ERR(larb->smi.clk_smi); + + if (larb->larb_gen->has_gals) { + /* The larbs may still haven't gals even if the SoC support.*/ + larb->smi.clk_gals0 = devm_clk_get(dev, "gals"); + if (PTR_ERR(larb->smi.clk_gals0) == -ENOENT) + larb->smi.clk_gals0 = NULL; + else if (IS_ERR(larb->smi.clk_gals0)) + return PTR_ERR(larb->smi.clk_gals0); + } larb->smi.dev = dev; if (larb->larb_gen->need_larbid) { @@ -402,6 +428,16 @@ static int mtk_smi_common_probe(struct platform_device *pdev) if (IS_ERR(common->clk_smi)) return PTR_ERR(common->clk_smi); + if (common->plat->has_gals) { + common->clk_gals0 = devm_clk_get(dev, "gals0"); + if (IS_ERR(common->clk_gals0)) + return PTR_ERR(common->clk_gals0); + + common->clk_gals1 = devm_clk_get(dev, "gals1"); + if (IS_ERR(common->clk_gals1)) + return PTR_ERR(common->clk_gals1); + } + /* * for mtk smi gen 1, we need to get the ao(always on) base to config * m4u port, and we need to enable the aync clock for transform the smi -- 1.9.1