Received: by 2002:a05:6a10:87d6:0:0:0:0 with SMTP id g22csp1068118pxr; Mon, 11 Apr 2022 14:22:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzBaS/NDuccHigFSfLKH8xq+e6cRW9ciLAJQNP8U0x2WPNBhBFn31vMLBlzgLhF3F+b1TWV X-Received: by 2002:a17:907:1b21:b0:6e7:f3ec:c920 with SMTP id mp33-20020a1709071b2100b006e7f3ecc920mr31872471ejc.341.1649712144730; Mon, 11 Apr 2022 14:22:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649712144; cv=none; d=google.com; s=arc-20160816; b=UMpCoFwZzpsZqkQfHv58F+VeXi0Un6yuJjb1EMg15U5WqhktKJh9jRgC3ZOT2cfo0b fYhO88iVICSvWnlLcb+DE1tqaAwG1vADzED78tkuNEC1C0Gg3lV0iXisACj5PDH8uNH2 rh5CbeoefkHz6CBhu/bGV/7Osnxnq/2XGbt41fN3rKonrPk5af15J+8CAiVt/xLGc0Sw yadihO1drOUpIAKOiH0xDzXIGTlh0uoRx3f0MNBqZrStEUi9o2EV0KC0Ij8L/CwQhaLh +PzfkEStTMQlCcRG0hAes3kLcXoVtx2OM0cfW7SUEfFhs1IXCE8jSsnvi4E5MlvmrsuW btbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ZQGUF6GkcIygctPk7xeF7IksCvru4H7qiPWnePZLl8w=; b=cDjOS8RY0j4+1wqi+xfNqEAaFoNR/bgLLyuwpd53miYXubDiNHblHpAzVjOcidkXLB hs1jPyXqMc+NXYJKXyEVsyJVLengb2jPyq8M0hD3rbdEvIZqScubGecXZBKtrYe3TB+a 7pkzMHJXiHTm4R4buu1nzEz9nhBF7XBXblsPhoT21qR4gsFPRhIT/xaal0kYKWEH7w+T zuDj4nfKzBlqkjmJmQ4aMOtrKVddbmC9K2fpG0zRakmDzjne6fZg0obaIwdPQECG1BZ4 EatEvwiAEFDmroUxDi3BK265bxjb7tc5Umwsu4dGK35Yr7gAQzzeXdkUII2VadZ0lo6f 3sMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@microchip.com header.s=mchp header.b=HlEwBigJ; 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=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o15-20020a170906974f00b006e8035bb2f1si9255162ejy.548.2022.04.11.14.22.00; Mon, 11 Apr 2022 14:22:24 -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=fail header.i=@microchip.com header.s=mchp header.b=HlEwBigJ; 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=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344259AbiDKJNR (ORCPT + 99 others); Mon, 11 Apr 2022 05:13:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344237AbiDKJNJ (ORCPT ); Mon, 11 Apr 2022 05:13:09 -0400 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.154.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5FB4F3F890 for ; Mon, 11 Apr 2022 02:10:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1649668255; x=1681204255; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h2crEZi5xB2G5eqgtuWh6WJpu41rEMS1+taspgX96r0=; b=HlEwBigJgj188snbpEabBOzPOU1B8kfrFkg5JWbiITUK/ZvtZbBnXdWh Uzw//9363b3KUqfnj4XwliZ+WEp9t06AdO//U9akicmrlL/h6UvjyOGdE abNFDLRIcPf3UVa64O74vqvGUVut73/SPDa67TbCkUrEOXjz/Urrq+HaW yQnmLs2qazM3GQppeV2KYkaGu720oR7VskShMIm1a4TNFzwXdU3/1TV4A 5ca5Qz9VTpIIoxuFkOtpRQSGMykIjbgQfG7OP2CuZw8TXEBhKEa3IOEGH WgH/mW/EmAXmB4YV+HavDJPnPX/04E+Esu4rCWTTgaKHpBc1S5EJpeFnN A==; X-IronPort-AV: E=Sophos;i="5.90,251,1643698800"; d="scan'208";a="91957972" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 11 Apr 2022 02:10:54 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.17; Mon, 11 Apr 2022 02:10:54 -0700 Received: from ROB-ULT-M18064N.mchp-main.com (10.10.115.15) by chn-vm-ex04.mchp-main.com (10.10.85.152) with Microsoft SMTP Server id 15.1.2375.17 via Frontend Transport; Mon, 11 Apr 2022 02:10:51 -0700 From: Tudor Ambarus To: , CC: , , , , , , Tudor Ambarus , Takahiro Kuwano Subject: [PATCH v3 6/9] mtd: spi-nor: core: Add helpers to read/write any register Date: Mon, 11 Apr 2022 12:10:30 +0300 Message-ID: <20220411091033.98754-7-tudor.ambarus@microchip.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220411091033.98754-1-tudor.ambarus@microchip.com> References: <20220411091033.98754-1-tudor.ambarus@microchip.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain 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, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE 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 There are manufacturers that use registers indexed by address. Some of them support "read/write any register" opcodes. Provide core methods that can be used by all manufacturers. SPI NOR controller ops are intentionally not supported as we intend to move all the SPI NOR controller drivers under the SPI subsystem. Signed-off-by: Tudor Ambarus Tested-by: Takahiro Kuwano Reviewed-by: Pratyush Yadav --- v3: no changes drivers/mtd/spi-nor/core.c | 41 ++++++++++++++++++++++++++++++++++++++ drivers/mtd/spi-nor/core.h | 4 ++++ 2 files changed, 45 insertions(+) diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c index 6165dc7bfd17..42794328d3b6 100644 --- a/drivers/mtd/spi-nor/core.c +++ b/drivers/mtd/spi-nor/core.c @@ -307,6 +307,47 @@ ssize_t spi_nor_write_data(struct spi_nor *nor, loff_t to, size_t len, return nor->controller_ops->write(nor, to, len, buf); } +/** + * spi_nor_read_reg() - read register to flash memory + * @nor: pointer to 'struct spi_nor'. + * @op: SPI memory operation. op->data.buf must be DMA-able. + * @proto: SPI protocol to use for the register operation. + * + * Return: zero on success, -errno otherwise + */ +int spi_nor_read_reg(struct spi_nor *nor, struct spi_mem_op *op, + enum spi_nor_protocol proto) +{ + if (!nor->spimem) + return -EOPNOTSUPP; + + spi_nor_spimem_setup_op(nor, op, proto); + return spi_nor_spimem_exec_op(nor, op); +} + +/** + * spi_nor_write_reg() - write register to flash memory + * @nor: pointer to 'struct spi_nor' + * @op: SPI memory operation. op->data.buf must be DMA-able. + * @proto: SPI protocol to use for the register operation. + * + * Return: zero on success, -errno otherwise + */ +int spi_nor_write_reg(struct spi_nor *nor, struct spi_mem_op *op, + enum spi_nor_protocol proto) +{ + int ret; + + if (!nor->spimem) + return -EOPNOTSUPP; + + ret = spi_nor_write_enable(nor); + if (ret) + return ret; + spi_nor_spimem_setup_op(nor, op, proto); + return spi_nor_spimem_exec_op(nor, op); +} + /** * spi_nor_write_enable() - Set write enable latch with Write Enable command. * @nor: pointer to 'struct spi_nor'. diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h index f952061d5c24..7c704475946d 100644 --- a/drivers/mtd/spi-nor/core.h +++ b/drivers/mtd/spi-nor/core.h @@ -554,6 +554,10 @@ ssize_t spi_nor_read_data(struct spi_nor *nor, loff_t from, size_t len, u8 *buf); ssize_t spi_nor_write_data(struct spi_nor *nor, loff_t to, size_t len, const u8 *buf); +int spi_nor_read_reg(struct spi_nor *nor, struct spi_mem_op *op, + enum spi_nor_protocol proto); +int spi_nor_write_reg(struct spi_nor *nor, struct spi_mem_op *op, + enum spi_nor_protocol proto); int spi_nor_erase_sector(struct spi_nor *nor, u32 addr); int spi_nor_otp_read_secr(struct spi_nor *nor, loff_t addr, size_t len, u8 *buf); -- 2.25.1