Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1491803imu; Sat, 8 Dec 2018 00:45:50 -0800 (PST) X-Google-Smtp-Source: AFSGD/XG33dmvyci/LZY+uvwuLhJdf3uU1K+IAmwgIglWrpkds1jGLJNgcME0Cj3pLaKc4/Ooxx0 X-Received: by 2002:a63:f111:: with SMTP id f17mr4579521pgi.236.1544258750371; Sat, 08 Dec 2018 00:45:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544258750; cv=none; d=google.com; s=arc-20160816; b=g1b/nIWYUT9pYt0XwcQO+RFuEm7SOdVUB6l2zCsa4ganjQgzIi5VQMqK5lxqOu4gNR JGBiDxRp+ghEdeoME6136hPjQ+XsOcBa1HVu191ap0jlVPKX0WazmeEsIsYGOHYcE/17 YDI/oL2cPjC3uIYBaqpuVWX2PqRBD1evvmDco3up8mLqsVdFYhkPdZ/IpGuedPt9cVuX rPLPf6uqFgKpCTMDsiwdIku+pvpysiauS68wZX4xy34gR1ZvHxssjlc+9AMhfzZzsh7R nRREyVfyUKMdCYjqHQId/CMAGBuoGKpLytdali3yqJ5am+OOGXv/WleO1ixOQBF17ABJ W0JQ== 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=IpkLbwKrFiNfG4zjJ9uxrnWprbsrXpwf+GORw8O/NS0=; b=FYPmCZvUVsAhTbRTawnksj2uQz9z3Iili0p12PhGsnM0JxTR3jMrwJxJuORbPLwr5P l1ejSfBTsgKFXSzKe59CZK1rsyZ4JMG0tUD4A1M4+LI1C57pRLOUKe74aUUhiQqSdD1c f9ShgrMMUq6jrpqwEMgurzRP+eunP2xojm4bD0/noi6TsrZsPVYOqCx5JtYXIqhmTG+G vEyJqGgzUAI4CxPsz/mfBnUiFs4IKJ8SHpBD+T003rC+2ZRk8ANL+4REf0oWkvLFs16X vLQUX3y6/kc9nm7iDimJbbDUelTFFTVIoLzf4gGlo+NV8ww1gA0sePVu2JPsknviy1jj 2f+Q== 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 go15si5013642plb.219.2018.12.08.00.45.35; Sat, 08 Dec 2018 00:45:50 -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 S1726407AbeLHInL (ORCPT + 99 others); Sat, 8 Dec 2018 03:43:11 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:20190 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726132AbeLHInL (ORCPT ); Sat, 8 Dec 2018 03:43:11 -0500 X-UUID: 32a3242e32554dbf9b91094c80a02330-20181208 X-UUID: 32a3242e32554dbf9b91094c80a02330-20181208 Received: from mtkcas09.mediatek.inc [(172.21.101.178)] by mailgw02.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 472357828; Sat, 08 Dec 2018 16:43:07 +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:43:06 +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:43:04 +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 13/18] memory: mtk-smi: Add bus_sel for mt8183 Date: Sat, 8 Dec 2018 16:39:26 +0800 Message-ID: <1544258371-4600-14-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 There are 2 mmu cells in a M4U HW. we could adjust some larbs entering mmu0 or mmu1 to balance the bandwidth via the smi-common register SMI_BUS_SEL(0x220)(Each larb occupy 2 bits). In mt8183, For better performance, we switch larb1/2/5/7 to enter mmu1 while the others still keep enter mmu0. In mt8173 and mt2712, we don't get the performance issue, Keep its default value(0x0), that means all the larbs enter mmu0. Signed-off-by: Yong Wu --- drivers/memory/mtk-smi.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/memory/mtk-smi.c b/drivers/memory/mtk-smi.c index ee6165e..88eb61a 100644 --- a/drivers/memory/mtk-smi.c +++ b/drivers/memory/mtk-smi.c @@ -49,6 +49,12 @@ #define SMI_LARB_NONSEC_CON(id) (0x380 + ((id) * 4)) #define F_MMU_EN BIT(0) +/* SMI COMMON */ +#define SMI_BUS_SEL 0x220 +#define SMI_BUS_LARB_SHIFT(larbid) ((larbid) << 1) +/* All are MMU0 defaultly. Only specialize mmu1 here. */ +#define F_MMU1_LARB(larbid) (0x1 << SMI_BUS_LARB_SHIFT(larbid)) + enum mtk_smi_gen { MTK_SMI_GEN1, MTK_SMI_GEN2 @@ -57,6 +63,7 @@ enum mtk_smi_gen { struct mtk_smi_common_plat { enum mtk_smi_gen gen; bool has_gals; + u32 bus_sel; /* Balance some larbs to enter mmu0 or mmu1 */ }; struct mtk_smi_larb_gen { @@ -72,8 +79,8 @@ struct mtk_smi { 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; - + void __iomem *smi_ao_base; /* only for gen1 */ + void __iomem *base; /* only for gen2 */ const struct mtk_smi_common_plat *plat; }; @@ -409,6 +416,8 @@ static int __maybe_unused mtk_smi_larb_suspend(struct device *dev) static const struct mtk_smi_common_plat mtk_smi_common_mt8183 = { .gen = MTK_SMI_GEN2, .has_gals = true, + .bus_sel = F_MMU1_LARB(1) | F_MMU1_LARB(2) | F_MMU1_LARB(5) | + F_MMU1_LARB(7), }; static const struct of_device_id mtk_smi_common_of_ids[] = { @@ -481,6 +490,11 @@ static int mtk_smi_common_probe(struct platform_device *pdev) ret = clk_prepare_enable(common->clk_async); if (ret) return ret; + } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + common->base = devm_ioremap_resource(dev, res); + if (IS_ERR(common->base)) + return PTR_ERR(common->base); } pm_runtime_enable(dev); platform_set_drvdata(pdev, common); @@ -496,6 +510,7 @@ static int mtk_smi_common_remove(struct platform_device *pdev) static int __maybe_unused mtk_smi_common_resume(struct device *dev) { struct mtk_smi *common = dev_get_drvdata(dev); + u32 bus_sel = common->plat->bus_sel; int ret; ret = mtk_smi_clk_enable(common); @@ -503,6 +518,9 @@ static int __maybe_unused mtk_smi_common_resume(struct device *dev) dev_err(common->dev, "Failed to enable clock(%d).\n", ret); return ret; } + + if (common->plat->gen == MTK_SMI_GEN2 && bus_sel) + writel(bus_sel, common->base + SMI_BUS_SEL); return 0; } -- 1.9.1