From patchwork Sat Jan 24 20:28:38 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Semen Protsenko X-Patchwork-Id: 5700251 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5A527C058D for ; Sat, 24 Jan 2015 20:35:59 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 895B2201EC for ; Sat, 24 Jan 2015 20:35:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 646D6201D3 for ; Sat, 24 Jan 2015 20:35:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750956AbbAXUfx (ORCPT ); Sat, 24 Jan 2015 15:35:53 -0500 Received: from exprod5og105.obsmtp.com ([64.18.0.180]:46665 "EHLO exprod5og105.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750821AbbAXUfx (ORCPT ); Sat, 24 Jan 2015 15:35:53 -0500 X-Greylist: delayed 394 seconds by postgrey-1.27 at vger.kernel.org; Sat, 24 Jan 2015 15:35:52 EST Received: from mail-we0-f179.google.com ([74.125.82.179]) (using TLSv1) by exprod5ob105.postini.com ([64.18.4.12]) with SMTP ID DSNKVMQCKIpMNj592PFO9iGCHRMsKiHEXu+p@postini.com; Sat, 24 Jan 2015 12:35:52 PST Received: by mail-we0-f179.google.com with SMTP id q59so3052806wes.10 for ; Sat, 24 Jan 2015 12:35:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=globallogic.com; s=google; h=from:to:cc:subject:date:message-id; bh=DfSnfa74FApw8QboW5CRvNYhyinF5T2fFd8oi6Kremg=; b=MXbvO3AGLgvI2VCxvXtqXVl2Tj+zpuc2tI4H/XO81fBntFZKskiduxJjLAX6ukeegn o6CVacIhZ+esrfQO4b8YButDY/EovpfFiXMErrI2V+lczfqZ9c+/dqR65reRr7Hoc4Gs N2g/qqhq5zAE2I5DA3OBE/ZI2vCyoHkOrrnz0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=DfSnfa74FApw8QboW5CRvNYhyinF5T2fFd8oi6Kremg=; b=RErxbl/3U2UlUIeoi5I1+1k032VEU2JreIu648b/p48FSe42mCBJea8eFmVWSb2TPJ XqqehQVr5DMmSiA4cbc1uSyWi+QyscD7HPPMhY3Kdip8tr7IEk1CKGAh83d93fo8HZW/ rH//tJkjJxeGg4pQtfdzp3q9Y1oupKWU6nm43UAObbXVLlJWQCk4Hgd55vyLpM+VJ17M z+HyvnX7aRng0BB+wqpn5fQkpmZ4yJSrnVHelukfHhCmpa88bsUeBbJhAbWRpO42w5mk oOZq7tcA+xZslcrGDBxdW6mYuxFi5qdq25PQG6fHtuPjgGv4qq/ZZT7FBRfzXXWV4du3 HfRw== X-Received: by 10.194.175.39 with SMTP id bx7mr28052585wjc.22.1422131356878; Sat, 24 Jan 2015 12:29:16 -0800 (PST) X-Gm-Message-State: ALoCoQnHx9q2rBZc4j+JNU5TiSMGRQRjvJ+JulYVbQzUMO2OR+uUdJVwISHxRB9s2NCF4d+nWcbz+LRApHfkkyVMOFyDVsd+nTORpM8JiJKsuusdNop2UToi2Rl7Go5040zVbUKDbZYHrpKZAXJHBmTHKCw4VhezsQ== X-Received: by 10.194.175.39 with SMTP id bx7mr28052569wjc.22.1422131356745; Sat, 24 Jan 2015 12:29:16 -0800 (PST) Received: from localhost ([195.238.92.132]) by mx.google.com with ESMTPSA id cm7sm7154044wib.6.2015.01.24.12.29.15 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 24 Jan 2015 12:29:16 -0800 (PST) From: Semen Protsenko To: Roger Quadros , Tony Lindgren Cc: linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] ARM: OMAP2+: gpmc: Fix writing in gpmc_cs_set_memconf Date: Sat, 24 Jan 2015 22:28:38 +0200 Message-Id: <1422131320-1018-1-git-send-email-semen.protsenko@globallogic.com> X-Mailer: git-send-email 1.7.9.5 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_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 Some GPMC_CONFIG7 register bits marked as "RESERVED", means they shouldn't be overwritten. A typical approach to handle such bits called "Read-Modify-Write". Writing procedure used in gpmc_cs_set_memconf() utilizes RMW technique, but implemented incorrectly. Due to obvious typo in code read register value is being rewritten by another value, which leads to loss of read RESERVED bits. This patch fixes this. While at it, replace magic numbers with named constants to improve code readability. Signed-off-by: Semen Protsenko Acked-by: Roger Quadros Acked-by: Tony Lindgren --- drivers/memory/omap-gpmc.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c index 24696f5..10eb4ac 100644 --- a/drivers/memory/omap-gpmc.c +++ b/drivers/memory/omap-gpmc.c @@ -153,6 +153,15 @@ #define GPMC_CONFIG1_FCLK_DIV4 (GPMC_CONFIG1_FCLK_DIV(3)) #define GPMC_CONFIG7_CSVALID (1 << 6) +#define GPMC_CONFIG7_BASEADDRESS_MASK 0x3f +#define GPMC_CONFIG7_CSVALID_MASK BIT(6) +#define GPMC_CONFIG7_MASKADDRESS_OFFSET 8 +#define GPMC_CONFIG7_MASKADDRESS_MASK (0xf << GPMC_CONFIG7_MASKADDRESS_OFFSET) +/* All CONFIG7 bits except reserved bits */ +#define GPMC_CONFIG7_MASK (GPMC_CONFIG7_BASEADDRESS_MASK | \ + GPMC_CONFIG7_CSVALID_MASK | \ + GPMC_CONFIG7_MASKADDRESS_MASK) + #define GPMC_DEVICETYPE_NOR 0 #define GPMC_DEVICETYPE_NAND 2 #define GPMC_CONFIG_WRITEPROTECT 0x00000010 @@ -586,12 +595,15 @@ static int gpmc_cs_set_memconf(int cs, u32 base, u32 size) if (base & (size - 1)) return -EINVAL; + base >>= GPMC_CHUNK_SHIFT; mask = (1 << GPMC_SECTION_SHIFT) - size; + mask >>= GPMC_CHUNK_SHIFT; + mask <<= GPMC_CONFIG7_MASKADDRESS_OFFSET; + l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); - l &= ~0x3f; - l = (base >> GPMC_CHUNK_SHIFT) & 0x3f; - l &= ~(0x0f << 8); - l |= ((mask >> GPMC_CHUNK_SHIFT) & 0x0f) << 8; + l &= ~GPMC_CONFIG7_MASK; + l |= base & GPMC_CONFIG7_BASEADDRESS_MASK; + l |= mask & GPMC_CONFIG7_MASKADDRESS_MASK; l |= GPMC_CONFIG7_CSVALID; gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l);