Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp5738541imm; Mon, 27 Aug 2018 03:28:15 -0700 (PDT) X-Google-Smtp-Source: ANB0VdadT12wUaDnrXbIThiFH0UdAAUgcbbPzPRyJQJQBNODkqMZbllatT3pR0blTiJs5GQlgp1M X-Received: by 2002:a17:902:8bcc:: with SMTP id r12-v6mr12605266plo.113.1535365695493; Mon, 27 Aug 2018 03:28:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535365695; cv=none; d=google.com; s=arc-20160816; b=vzwHwn/afMrXNBLffhuM4zVDh6m+zPEn8QxJ3l68BSJwMCcWCC3ypfmfbf9Aq1Z2CW 4QvNiQauW3MDFJtvE3NaLm+0ZjyFgbpF2WKW91xTlWHkGd9F3goPdHzekElE/h3HpBXO ucCZJtm+tRljmShtcJzibOElkelCOjveodJT5NdSj+IsgA4Z2uAyKg7yQGaV2sf3BEg7 LlaZt7HudtMyNkvcIcNgIsBkTP1XnONnwmrbtuNXsl4zZCBA9eW0yjo0RcUkzObydRsW HlYSaBDS5b6B0UYo4wsQrwxUZR8GmaOA9gKEEdEjU/NS+v1ol3upcAc2YGGllhQJFbEl 1kjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from:arc-authentication-results; bh=XULcYL5+klbnhJwxhUKBPVruPhn+wA4sB9njFBSDlTM=; b=o5ZAlcTuCQuwiFGmj0gOZJpLzjkh7ApQ/6azIP9BgkzH6Rz24slSDdMi9WdYSTlDb2 1Dv9Fp24mJPtDymYDgzGSZtQaPOy6KfZmZ119Rz5q5TyDiKaZcIhf5fvKV/0uyxJAOwu 2yqPWHuJ+v5M8KJyxsmsnFih0iGzN9ArNP+oFcmXguX5awBHFG+rIMFdmrhGMdwFxGae QI1DMoRfyVArgIvhfqgsQgRGNMbtoL8TvkH7JkS5eoNqLFoHrsTBmQmuTaiIBAmu3vEc ChcKAgep175VRIJFeihZK1kakG4HCam1DlXFaVGd0il3/PH3BxrD/9kIqqPTevD15P3Y Wglw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x37-v6si14519583pgl.544.2018.08.27.03.28.00; Mon, 27 Aug 2018 03:28:15 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726971AbeH0OMz (ORCPT + 99 others); Mon, 27 Aug 2018 10:12:55 -0400 Received: from esa6.microchip.iphmx.com ([216.71.154.253]:25223 "EHLO esa6.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726868AbeH0OMz (ORCPT ); Mon, 27 Aug 2018 10:12:55 -0400 X-IronPort-AV: E=Sophos;i="5.53,294,1531810800"; d="scan'208";a="16021296" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 27 Aug 2018 03:26:50 -0700 Received: from localhost.localdomain.com (10.10.76.4) by chn-sv-exch04.mchp-main.com (10.10.76.105) with Microsoft SMTP Server id 14.3.352.0; Mon, 27 Aug 2018 03:26:49 -0700 From: Tudor Ambarus To: , , , , , CC: , , , , , Tudor Ambarus Subject: [RESEND PATCH v2 0/3] add support to non-uniform SFDP SPI NOR flash memories Date: Mon, 27 Aug 2018 13:26:41 +0300 Message-ID: <20180827102644.7323-1-tudor.ambarus@microchip.com> X-Mailer: git-send-email 2.9.4 MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rebased on spi-nor/next. Backward compatibility test done on mx25l3273fm2i-08g. Non-uniform erase test done on sst26vf064b-104i/sn. Note that in order to do the non-uniform test you'll have to force the spi_nor_has_uniform_erase() to return false, because the erase map is tuned to come back to the uniform case. Also, for the SST flashes, you'll have to unlock the global protection (see https://www.spinics.net/lists/arm-kernel/msg666350.html). Changes in v2: - add JESD216B SFDP optional parsers: Sector Map Parameter Table parser and 4-byte Address Instruction Table parser (patch 2/3 and patch 3/3). - save the Erase Types from bfpt to determine the Erase Type sizes. Sort all the map's Erase Types in ascending order with the smallest erase size being the first member in the erase_type array. Sort in the same way the Erase Type mask in regions in order to have a 1-to-1 correspondence with the Erase Types defined in the map. We sort the Erase Type by size, at init, in order to speed up the process of finding the best erase command at run-time. - remove setting of mtd->erasesize and nor->erase_opcode when parsing the Basic Flash Parameter Table. mtd->erasesize was set to the maximum supported Erase Type size, without verifying if that Erase Type can erase the entire flash. mtd->erasesize is now set just in spi_nor_select_erase(), after we find which Erase Types are supported in the uniform case. - spi_nor_select_erase(): pass directly info->sector_size instead of the whole flash_info structure in order to simplify the code. - fix condition on finding erase regions: while (addr < region_start || addr >= region_end) { - fix the list command adding: list_add_tail() instead of list_add() - write_enable(nor); before erasing the sectors - As Boris suggested, remove likely() because it doesn't make any difference given the time it takes to actually erase the block. - bool return value for spi_nor_has_uniform_erase(). Changes in v1 or what I've done on top of Cyrille's work (https://lkml.org/lkml/2017/4/15/70): - minimize the amount of erase() calls by using the best sequence of erase type commands depending on alignment. - build the list of best fitted erase commands to be executed once we validate that the erase can be performed. - add improvements on how the erase map is handled. The regions are consecutive in the address space, walk through the regions incrementally. - speed up finding the best erase type command. Order erase types by size, iterate them from the biggest to the smallest and stop when best fitted command is found. - determine at init if there are erase types that can erase the entire memory - fix support for overlaid regions. Cyrille Pitchen (1): mtd: spi-nor: parse SFDP 4-byte Address Instruction Table Tudor Ambarus (2): mtd: spi-nor: add support to non-uniform SFDP SPI NOR flash memories mtd: spi-nor: parse SFDP Sector Map Parameter Table drivers/mtd/spi-nor/spi-nor.c | 892 +++++++++++++++++++++++++++++++++++++++--- include/linux/mtd/spi-nor.h | 120 ++++++ 2 files changed, 954 insertions(+), 58 deletions(-) -- 2.9.4