From patchwork Fri Oct 4 11:59:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?C=C3=A9dric_Le_Goater?= X-Patchwork-Id: 11174331 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 141E316B1 for ; Fri, 4 Oct 2019 12:07:54 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E32772070B for ; Fri, 4 Oct 2019 12:07:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="MpAAXGKD" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E32772070B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kaod.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0FCEJx9qQ19Sd5MkiEdmMvPBc2FCGGtgYJGz+9++Dns=; b=MpAAXGKDSwpi05 w6I9gOFXdjngjW4tzOAB2HQ2I6NcYIzrU8ECh/s+pIyRE/8gc6wF7I+C/55NjVfQqnlFhuJ9H95ij 7fhA6EV75vWIfdb3NDgjk1p3CtZ5eBb2z229god+raV7DgEBgmReCwtkyIhlUm7gaKYdwDkLpl9mt 3Y6Zsa7Uhq3toZPfLjflGgd4xVD208rsXH3ozgvpqZR4GiZ3JwvIibtvcAvtYZwcT3fg882qWTyY9 STnvHTk3ESNsUmoH/iA0O3AU+8uHpGSlMfblbj1MmOGAfKGI1Zche7wtRs078I4XYvStAfJ2xkB89 RCVNXQS2yGHn25zj/how==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iGMND-0005dN-RA; Fri, 04 Oct 2019 12:07:51 +0000 Received: from 16.mo5.mail-out.ovh.net ([87.98.174.144]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iGMIu-0000aL-Qe for linux-arm-kernel@lists.infradead.org; Fri, 04 Oct 2019 12:03:26 +0000 Received: from player792.ha.ovh.net (unknown [10.109.159.203]) by mo5.mail-out.ovh.net (Postfix) with ESMTP id 447F8251A4F for ; Fri, 4 Oct 2019 14:03:22 +0200 (CEST) Received: from kaod.org (lfbn-1-2229-223.w90-76.abo.wanadoo.fr [90.76.50.223]) (Authenticated sender: clg@kaod.org) by player792.ha.ovh.net (Postfix) with ESMTPSA id C8549AA664C7; Fri, 4 Oct 2019 12:03:06 +0000 (UTC) From: =?utf-8?q?C=C3=A9dric_Le_Goater?= To: linux-mtd@lists.infradead.org, Tudor Ambarus Subject: [PATCH 13/16] mtd: spi-nor: aspeed: Check for disabled segments on the AST2600 Date: Fri, 4 Oct 2019 13:59:16 +0200 Message-Id: <20191004115919.20788-14-clg@kaod.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191004115919.20788-1-clg@kaod.org> References: <20191004115919.20788-1-clg@kaod.org> MIME-Version: 1.0 X-Ovh-Tracer-Id: 3821867236165716915 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedufedrhedugdegudcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemucehtddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191004_050325_026046_08AF6AE5 X-CRM114-Status: GOOD ( 16.61 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [87.98.174.144 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Vignesh Raghavendra , linux-aspeed@lists.ozlabs.org, Andrew Jeffery , Richard Weinberger , Marek Vasut , Joel Stanley , Miquel Raynal , Brian Norris , David Woodhouse , linux-arm-kernel@lists.infradead.org, =?utf-8?q?C=C3=A9dric_Le_Goater?= Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org On the AST2600, the segment of a flash SPI device can be disabled with zero register value. By default, the CS0 AHB window is open but the other CS are not. This is closing the access to the flash device in user mode and also forbids scanning. For multiple CS, we will need firmware or a DT property to reopen the flash AHB window. Signed-off-by: Cédric Le Goater Reviewed-by: Andrew Jeffery --- drivers/mtd/spi-nor/aspeed-smc.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/mtd/spi-nor/aspeed-smc.c b/drivers/mtd/spi-nor/aspeed-smc.c index c977f8f28aef..fad08738e534 100644 --- a/drivers/mtd/spi-nor/aspeed-smc.c +++ b/drivers/mtd/spi-nor/aspeed-smc.c @@ -307,12 +307,20 @@ static u32 aspeed_smc_segment_end_ast2600(struct aspeed_smc_controller *ctlr, { u32 end_offset = reg & AST2600_SEG_ADDR_MASK; + /* segment is disabled */ + if (!end_offset) + return ctlr->ahb_base_phy; + return ctlr->ahb_base_phy + end_offset + 0x100000; } static u32 aspeed_smc_segment_reg_ast2600(struct aspeed_smc_controller *ctlr, u32 start, u32 end) { + /* disable zero size segments */ + if (start == end) + return 0; + return ((start & AST2600_SEG_ADDR_MASK) >> 16) | ((end - 1) & AST2600_SEG_ADDR_MASK); } @@ -656,8 +664,15 @@ static u32 chip_set_segment(struct aspeed_smc_chip *chip, u32 cs, u32 start, * size, but take into account the possible overlap with the * previous segment */ - if (!size) - size = info->segment_end(controller, seg_oldval) - start; + if (!size) { + end = info->segment_end(controller, seg_oldval); + + /* + * Check for disabled segment (AST2600). + */ + if (end != ahb_base_phy) + size = end - start; + } /* * The segment cannot exceed the maximum window size of the @@ -686,8 +701,8 @@ static u32 chip_set_segment(struct aspeed_smc_chip *chip, u32 cs, u32 start, size = end - start; } - dev_info(chip->nor.dev, "CE%d window [ 0x%.8x - 0x%.8x ] %dMB", - cs, start, end, size >> 20); + dev_info(chip->nor.dev, "CE%d window [ 0x%.8x - 0x%.8x ] %dMB%s", + cs, start, end, size >> 20, size ? "" : " (disabled)"); return size; }