From patchwork Fri Nov 7 08:45:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aisheng Dong X-Patchwork-Id: 5251231 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B593E9F3ED for ; Fri, 7 Nov 2014 09:54:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id F018720131 for ; Fri, 7 Nov 2014 09:54:11 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1DEF92010C for ; Fri, 7 Nov 2014 09:54:11 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1XmgDR-000081-Sp; Fri, 07 Nov 2014 09:52:25 +0000 Received: from mail-bn1on0131.outbound.protection.outlook.com ([157.56.110.131] helo=na01-bn1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XmgDB-0008P0-AF for linux-arm-kernel@lists.infradead.org; Fri, 07 Nov 2014 09:52:09 +0000 Received: from BN3PR0301CA0036.namprd03.prod.outlook.com (25.160.180.174) by BLUPR03MB327.namprd03.prod.outlook.com (10.141.48.18) with Microsoft SMTP Server (TLS) id 15.1.11.9; Fri, 7 Nov 2014 09:51:46 +0000 Received: from BN1BFFO11FD031.protection.gbl (2a01:111:f400:7c10::1:185) by BN3PR0301CA0036.outlook.office365.com (2a01:111:e400:4000::46) with Microsoft SMTP Server (TLS) id 15.1.16.15 via Frontend Transport; Fri, 7 Nov 2014 09:51:46 +0000 Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD031.mail.protection.outlook.com (10.58.144.94) with Microsoft SMTP Server (TLS) id 15.1.6.13 via Frontend Transport; Fri, 7 Nov 2014 09:51:46 +0000 Received: from shlinux2.ap.freescale.net (shlinux2.ap.freescale.net [10.192.224.44]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id sA79pY4r011332; Fri, 7 Nov 2014 02:51:43 -0700 From: Dong Aisheng To: Subject: [PATCH V4 3/3] can: m_can: add missing message RAM initialization Date: Fri, 7 Nov 2014 16:45:14 +0800 Message-ID: <1415349914-9145-3-git-send-email-b29396@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1415349914-9145-1-git-send-email-b29396@freescale.com> References: <1415349914-9145-1-git-send-email-b29396@freescale.com> X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(189002)(54534003)(199003)(48376002)(19580405001)(33646002)(92726001)(87936001)(87286001)(104016003)(84676001)(104166001)(77156002)(88136002)(93916002)(50466002)(44976005)(89996001)(19580395003)(6806004)(68736004)(21056001)(120916001)(99396003)(102836001)(64706001)(47776003)(76176999)(50986999)(31966008)(105606002)(92566001)(229853001)(36756003)(20776003)(110136001)(106466001)(2351001)(46102003)(95666004)(4396001)(62966003)(97736003)(107046002)(50226001)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB327; H:tx30smr01.am.freescale.net; FPR:; MLV:sfv; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Antispam: UriScan:; X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB327; X-Exchange-Antispam-Report-Test: UriScan:; X-Forefront-PRVS: 03883BD916 Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=Aisheng.Dong@freescale.com; X-OriginatorOrg: freescale.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20141107_015209_514468_73777C19 X-CRM114-Status: UNSURE ( 8.97 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -0.0 (/) Cc: netdev@vger.kernel.org, varkabhadram@gmail.com, mkl@pengutronix.de, linux-arm-kernel@lists.infradead.org, socketcan@hartkopp.net, b29396@freescale.com, wg@grandegger.com X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The M_CAN message RAM is usually equipped with a parity or ECC functionality. But RAM cells suffer a hardware reset and can therefore hold arbitrary content at startup - including parity and/or ECC bits. To prevent the M_CAN controller detecting checksum errors when reading potentially uninitialized TX message RAM content to transmit CAN frames the TX message RAM has to be written with (any kind of) initial data. Signed-off-by: Dong Aisheng --- ChangeLog: v3-v4: * initialize the entire Message RAM in use instead of only 8 bytes since this is a valid and needed initialization process. Patch title also changed. --- drivers/net/can/m_can/m_can.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index eee1533..de742d0 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1114,7 +1114,7 @@ static int m_can_of_parse_mram(struct platform_device *pdev, struct resource *res; void __iomem *addr; u32 out_val[MRAM_CFG_LEN]; - int ret; + int i, start, end, ret; /* message ram could be shared */ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "message_ram"); @@ -1165,6 +1165,15 @@ static int m_can_of_parse_mram(struct platform_device *pdev, priv->mcfg[MRAM_TXE].off, priv->mcfg[MRAM_TXE].num, priv->mcfg[MRAM_TXB].off, priv->mcfg[MRAM_TXB].num); + /* initialize the entire Message RAM in use to avoid possible + * ECC/parity checksum errors when reading an uninitialized buffer + */ + start = priv->mcfg[MRAM_SIDF].off; + end = priv->mcfg[MRAM_TXB].off + + priv->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE; + for (i = start; i < end; i += 4) + writel(0x0, priv->mram_base + i); + return 0; }