Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1448855ybl; Fri, 23 Aug 2019 20:44:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqwQhN58t490fb90P4X4qGhqjCJOI2UgrnIugiP7TeOjhd6YWJIvhsnSpw8uh1iX6B/7Lxwa X-Received: by 2002:a63:8f55:: with SMTP id r21mr6678967pgn.318.1566618288043; Fri, 23 Aug 2019 20:44:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566618288; cv=none; d=google.com; s=arc-20160816; b=Xfq6z9CUSOO4duwjL9FAdef8wVPK9UN6mF0p2itMEv20j7yJgDd7SxZ2JdY45arJJS 1PseWQzTsIEVtPa5r3K208/hrrM/go7GzzQ22aYeRWtMfvVB5YmTMbkozA80e8gFKRWw xcZDJe+Khs6g9msMWLXuvP0RJqhcAZsaP6LQ9LdJbBd6W/xeid9AHBtgdy4SbZFWUhRm 0VcUlV7qRHrwLnwMCiIF/5oKs3B82ijnsKTm5E2mN0cxOB8b0eL3iujIuDr2+YsmcIg9 6a2W9Psey4liXHeRtuGd6LPmsGTLaP1I8emg6Gx0CHIsKqXn4ZWU3Qiu5oxVrB2lryj7 0zxA== 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=Gii2UTg+mrQXuD7ZlqLBdabeqM2SEW/xcdT7jR74ioY=; b=Tk21+97HMAGqvwGs0MBFbRTQ/HHDl401r48vgF/SULvzfF9eGqYNvVVDPiP2fdkXTf ysS7h0zWAwI6GQoHzzUpg7ysh2jVrgguy9imya/eAlppMSxa5p5OBoGJEOw4kF6SkOiI 1MHYK+nh0qzE6fc66XCRCGEcFR0eq6CWljVgITJ/IQf5w2LmdZqEkasKzdSabP13tqoM FBOGbb4ZLSy8hj7Sh0grbhlt55Hg422laeXxEXBX3WRyJv2MvyjPxEqqJykg+WU1ai4R xFYoeohrOb7GiVOJsjJF2UQW5glGHDR2RWW8S4vwzU7JipkhROS88SCmXNb66s/3VA3U r6zg== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r23si4490864pfg.124.2019.08.23.20.44.33; Fri, 23 Aug 2019 20:44:48 -0700 (PDT) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726983AbfHXDnq (ORCPT + 99 others); Fri, 23 Aug 2019 23:43:46 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:47399 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726793AbfHXDno (ORCPT ); Fri, 23 Aug 2019 23:43:44 -0400 X-UUID: 94847ecf790d458e8eb21d4e003c3ac6-20190824 X-UUID: 94847ecf790d458e8eb21d4e003c3ac6-20190824 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0707 with TLS) with ESMTP id 2038650983; Sat, 24 Aug 2019 11:06:42 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 24 Aug 2019 11:06:34 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Sat, 24 Aug 2019 11:06:33 +0800 From: Yong Wu To: Joerg Roedel , Matthias Brugger , Robin Murphy , Will Deacon CC: Rob Herring , Evan Green , Tomasz Figa , , , , , , , , , Nicolas Boichat , , Matthias Kaehlcke , , , Subject: [PATCH v11 20/23] memory: mtk-smi: Add bus_sel for mt8183 Date: Sat, 24 Aug 2019 11:02:05 +0800 Message-ID: <1566615728-26388-21-git-send-email-yong.wu@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1566615728-26388-1-git-send-email-yong.wu@mediatek.com> References: <1566615728-26388-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. Note: smi gen1(mt2701/mt7623) don't have this bus_sel. And, the base of smi-common is completely different with smi_ao_base of gen1, thus I add new variable for that. CC: Matthias Brugger Signed-off-by: Yong Wu Reviewed-by: Evan Green Reviewed-by: Matthias Brugger --- drivers/memory/mtk-smi.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/memory/mtk-smi.c b/drivers/memory/mtk-smi.c index 2bb55b86..289e595 100644 --- a/drivers/memory/mtk-smi.c +++ b/drivers/memory/mtk-smi.c @@ -41,6 +41,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 @@ -49,6 +55,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 { @@ -64,8 +71,10 @@ 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; - + union { + void __iomem *smi_ao_base; /* only for gen1 */ + void __iomem *base; /* only for gen2 */ + }; const struct mtk_smi_common_plat *plat; }; @@ -402,6 +411,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[] = { @@ -474,6 +485,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); @@ -489,6 +505,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); @@ -496,6 +513,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