Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp426773rdb; Fri, 8 Sep 2023 05:22:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFyPFFW9OWqS43N5wDBOOwPzKDSlDjtdLsyc3Tf09OaU9I2rKaPzciig6HciheJ5P9Bv5cj X-Received: by 2002:a05:6512:36c6:b0:500:9ab8:b790 with SMTP id e6-20020a05651236c600b005009ab8b790mr1478835lfs.60.1694175735622; Fri, 08 Sep 2023 05:22:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694175735; cv=none; d=google.com; s=arc-20160816; b=kUEerff2v+gsqoXbRsTwV16WnKeEzzHUwL8L9da3AnG4lLBu2D3yBjVsmCbLDaoMzI gqe4Duxf/A+YjZWJtiCmdaIuv8sdkO8LU0lDv/9GFS2cambfFUPhzK8QfTn1qc4SxolK 7FDOES468K1Pw/FFmSNqhgUff3M4RRxOj69E+2ta3WwldKiOlPP0du/WcKpXiYbRlhA4 i5CdQ2KIyrvH0X0JliLGzR/g4f5jRWqGJv6FNaC/Yb1OEyTAEO1RMJOElV+5wUNE5vzc SMDWiSwQx2PprWLodeGDIX5XfO0P4gJWcGgHEpggoNxAmoPR8x/LaYCC1VSMuSsOusWv rZcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=OFoKH4kR5XexNb50gZZIWImB//ZlTJBEi9IyvkoD4+M=; fh=LuNSX3JVG+htsysoJ/xF51pAKitwHo02H/zRZAOLqDw=; b=g4+m9Kxfn8c7o5ouw2F4ENVoA2dVs6rO7v+sbsCzIWh1JIL05bB9qOG0Y1XR74MEt5 1qxfHul89yE3s8k0CXDhoagJMw/ojV3m+Eh9eIB9xGvlt+tAxkYKem5Kz/nAqEgYoj0h Wmbm/azOBD/JtX87Epmk3g2bRld3SvWo/zJx+0GeVbQjR94Q23pq9uehaJO5Pk/0LxTu UEVJb92OKbPSYdmDtDYPBCNe97wcJ/Hx20pyNIvWCkdwjI6/2etCRNHq5bZOQCyfN6ae AetG8rLULqHCZtOJEE19+BW4CvPa2/9+wx3yZe07YFRgCIfJv1iGHHk2YyEHRFtPPJAE PE/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=JCOPQ9gc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gy19-20020a170906f25300b009a189b0bbc9si1091278ejb.568.2023.09.08.05.21.45; Fri, 08 Sep 2023 05:22:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=JCOPQ9gc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241750AbjIHKQv (ORCPT + 99 others); Fri, 8 Sep 2023 06:16:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242726AbjIHKQs (ORCPT ); Fri, 8 Sep 2023 06:16:48 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 216671FEB for ; Fri, 8 Sep 2023 03:16:39 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3269C433CC; Fri, 8 Sep 2023 10:16:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1694168199; bh=FEz+x044HaJXIEP12prthCCwYdEPCM16pe3GigXUbHQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JCOPQ9gcZMk4ozxWiA6kCSjxYrzGS/SvPIumplKcZ22KjBYEAv2wU/hzF3OLo2nZg 5faV8jVMK4l2BUAfv12wZGWCijcvYDHl5IFZuTWy/JLAl3GozLMwhyfCX2t0syw3mP CRj+IVE+IhFvHk3Du5oUMItSoJOcXpmK3EHad9CEFUDXfdmYp+A9+DFYRWAzCrOh3T zHmVsauGl7gj2qYOuSsGVtWIBKhyly0ttxKDItLCanI42P7fR6SZyBxHMHAiM7fSBW zKTHinHC9nB9ww5bF9b+cUrB2raqwNSFEt2z9UOMa0fbl/o3WSl2YbhnkGMAnOHLR4 8lRtzudFGh34A== From: Michael Walle Date: Fri, 08 Sep 2023 12:16:23 +0200 Subject: [PATCH v3 05/41] mtd: spi-nor: convert .n_sectors to .size MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20230807-mtd-flash-info-db-rework-v3-5-e60548861b10@kernel.org> References: <20230807-mtd-flash-info-db-rework-v3-0-e60548861b10@kernel.org> In-Reply-To: <20230807-mtd-flash-info-db-rework-v3-0-e60548861b10@kernel.org> To: Tudor Ambarus , Pratyush Yadav , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Michael Walle X-Mailer: b4 0.12.2 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org .n_sectors is rarely used. In fact it is only used in swp.c and to calculate the flash size in the core. The use in swp.c might be converted to use the (largest) flash erase size. For now, we just locally calculate the sector size. Simplify the flash_info database and set the size of the flash directly. This also let us use the SZ_x macros. Signed-off-by: Michael Walle --- drivers/mtd/spi-nor/core.c | 2 +- drivers/mtd/spi-nor/core.h | 8 ++++---- drivers/mtd/spi-nor/swp.c | 9 +++++---- drivers/mtd/spi-nor/xilinx.c | 4 ++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 286155002cdc..f4cc2eafcc5e 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -2999,7 +2999,7 @@ static void spi_nor_init_default_params(struct spi_nor *nor) /* Set SPI NOR sizes. */ params->writesize = 1; - params->size = (u64)info->sector_size * info->n_sectors; + params->size = info->size; params->bank_size = params->size; params->page_size = info->page_size; diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index dfc20a3296fb..12c35409493b 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -443,9 +443,9 @@ struct spi_nor_fixups { * @id: the flash's ID bytes. The first three bytes are the * JEDIC ID. JEDEC ID zero means "no ID" (mostly older chips). * @id_len: the number of bytes of ID. + * @size: the size of the flash in bytes. * @sector_size: the size listed here is what works with SPINOR_OP_SE, which * isn't necessarily called a "sector" by the vendor. - * @n_sectors: the number of sectors. * @n_banks: the number of banks. * @page_size: the flash's page size. * @addr_nbytes: number of address bytes to send. @@ -505,8 +505,8 @@ struct flash_info { char *name; u8 id[SPI_NOR_MAX_ID_LEN]; u8 id_len; + size_t size; unsigned sector_size; - u16 n_sectors; u16 page_size; u8 n_banks; u8 addr_nbytes; @@ -556,8 +556,8 @@ struct flash_info { .id_len = 6 #define SPI_NOR_GEOMETRY(_sector_size, _n_sectors, _n_banks) \ + .size = (_sector_size) * (_n_sectors), \ .sector_size = (_sector_size), \ - .n_sectors = (_n_sectors), \ .page_size = 256, \ .n_banks = (_n_banks) @@ -575,8 +575,8 @@ struct flash_info { SPI_NOR_GEOMETRY((_sector_size), (_n_sectors), 1), #define CAT25_INFO(_sector_size, _n_sectors, _page_size, _addr_nbytes) \ + .size = (_sector_size) * (_n_sectors), \ .sector_size = (_sector_size), \ - .n_sectors = (_n_sectors), \ .page_size = (_page_size), \ .n_banks = 1, \ .addr_nbytes = (_addr_nbytes), \ diff --git a/drivers/mtd/spi-nor/swp.c b/drivers/mtd/spi-nor/swp.c index 5ab9d5324860..40bf52867095 100644 --- a/drivers/mtd/spi-nor/swp.c +++ b/drivers/mtd/spi-nor/swp.c @@ -34,17 +34,18 @@ static u8 spi_nor_get_sr_tb_mask(struct spi_nor *nor) static u64 spi_nor_get_min_prot_length_sr(struct spi_nor *nor) { unsigned int bp_slots, bp_slots_needed; + unsigned int sector_size = nor->info->sector_size; + u64 n_sectors = div_u64(nor->params->size, sector_size); u8 mask = spi_nor_get_sr_bp_mask(nor); /* Reserved one for "protect none" and one for "protect all". */ bp_slots = (1 << hweight8(mask)) - 2; - bp_slots_needed = ilog2(nor->info->n_sectors); + bp_slots_needed = ilog2(n_sectors); if (bp_slots_needed > bp_slots) - return nor->info->sector_size << - (bp_slots_needed - bp_slots); + return sector_size << (bp_slots_needed - bp_slots); else - return nor->info->sector_size; + return sector_size; } static void spi_nor_get_locked_range_sr(struct spi_nor *nor, u8 sr, loff_t *ofs, diff --git a/drivers/mtd/spi-nor/xilinx.c b/drivers/mtd/spi-nor/xilinx.c index 34267591282c..284e2e4970ab 100644 --- a/drivers/mtd/spi-nor/xilinx.c +++ b/drivers/mtd/spi-nor/xilinx.c @@ -23,8 +23,8 @@ #define S3AN_INFO(_jedec_id, _n_sectors, _page_size) \ SPI_NOR_ID(_jedec_id, 0), \ + .size = 8 * (_page_size) * (_n_sectors), \ .sector_size = (8 * (_page_size)), \ - .n_sectors = (_n_sectors), \ .page_size = (_page_size), \ .n_banks = 1, \ .flags = SPI_NOR_NO_FR @@ -138,7 +138,7 @@ static int xilinx_nor_setup(struct spi_nor *nor, page_size = (nor->params->page_size == 264) ? 256 : 512; nor->params->page_size = page_size; nor->mtd.writebufsize = page_size; - nor->params->size = 8 * page_size * nor->info->n_sectors; + nor->params->size = nor->info->size; nor->mtd.erasesize = 8 * page_size; } else { /* Flash in Default addressing mode */ -- 2.39.2