Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp4328962pxb; Wed, 20 Apr 2022 00:17:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyRJaoyuFEVfN7ojXCCzKUrgx6yZmpZjnoUbEf2oO75/yJa9KzNRyARCc8qiYaylZCKu3R6 X-Received: by 2002:a17:902:c451:b0:158:7729:f235 with SMTP id m17-20020a170902c45100b001587729f235mr19528406plm.63.1650439029066; Wed, 20 Apr 2022 00:17:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650439029; cv=none; d=google.com; s=arc-20160816; b=fxI9JROPlfXVoaROCk6w6QVpvqokxM2IEaosF0B3O1vymqN19U8P3abFDrk5/fJiv0 0Es7Dtrb+9AdzIlRUqWFv0TkpBuMVKDCPnkXBH600s7vTeFSQx6rq8J4uOJKCmZEuQ14 s2SLZ2GOd3miVSOMwEjKXcZnAohTmA9oOKk5Ys76j1ucvD0vBwBSyKr0RrJlweZrsNF6 q8nsA78rlI9dwltzg0TGSqDB6azxYGlhGs7kSm9yJ0xk1YMNIeFHGj3cCslAQHob/JIi pBeSj0za7JjizAgQlQHGs2+ciX3C78AEV43Q2RQeCqUB7pawgGEKeWFb9/wQTcqdLHbT hJGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:user-agent:references:in-reply-to :subject:cc:to:from:date:content-transfer-encoding:mime-version :dkim-signature; bh=zlmjPkUMYoXM1brnmw5UZyknS4jpSubyz4QQX5Xc3BM=; b=Oz17iclVSyK6vgWlT8CM1wLCK+bHnDzfyvNL8ZM1LozEgpitlpAAhJnTdHn5ujBdJp mHnfkTp7aqW2QtuMxrKvB8JUf4sCY8+ZDCyB2SKj2g91aE0KqvAAqfN0ACJO63QcH3BE 9o8yCeesZq1ebIyF+HAyI3b8hk9rR2us0INqOYxPBlgaA4gWLtyK5CkGL5G09lc1at5I L5kZilwZyB6sEt517TryXaaxyyS6qUCepai1FhGLoHnEtDvmb0OHEQs1znpRTThgIb9h Dc/te/qc4/5rwwH0KfH7FzRMFYTRtWqNthlbC49JMxr30QFxxAMCbFwcxQy6J1rxk/qm TMEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@walle.cc header.s=mail2016061301 header.b=H7ALRsy4; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c16-20020a634e10000000b003aa5635a205si1521653pgb.167.2022.04.20.00.16.55; Wed, 20 Apr 2022 00:17:09 -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=@walle.cc header.s=mail2016061301 header.b=H7ALRsy4; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351147AbiDSLX3 (ORCPT + 99 others); Tue, 19 Apr 2022 07:23:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351054AbiDSLWz (ORCPT ); Tue, 19 Apr 2022 07:22:55 -0400 Received: from ssl.serverraum.org (ssl.serverraum.org [176.9.125.105]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0660B344D3 for ; Tue, 19 Apr 2022 04:19:43 -0700 (PDT) Received: from ssl.serverraum.org (web.serverraum.org [172.16.0.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id 0B4972223A; Tue, 19 Apr 2022 13:19:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1650367182; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zlmjPkUMYoXM1brnmw5UZyknS4jpSubyz4QQX5Xc3BM=; b=H7ALRsy44i6Sq0O2AwH2yQr/24FOFje6dM/9XAvhEvwc7s5bwLty0+RTm+Hfo8GtBuL5YO fbDgvfTWsYG7586d3RXnYN6z+7OVZXOGnb5cD/j3nV+Z9CRkF2p5ljUkVxAzV+1rax0WNd J92Oz9sBaS9mKRrixDoQUL923IG7Exc= MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Tue, 19 Apr 2022 13:19:41 +0200 From: Michael Walle To: Tudor Ambarus Cc: p.yadav@ti.com, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, nicolas.ferre@microchip.com, Takahiro Kuwano Subject: Re: [PATCH v3 6/9] mtd: spi-nor: core: Add helpers to read/write any register In-Reply-To: <20220411091033.98754-7-tudor.ambarus@microchip.com> References: <20220411091033.98754-1-tudor.ambarus@microchip.com> <20220411091033.98754-7-tudor.ambarus@microchip.com> User-Agent: Roundcube Webmail/1.4.13 Message-ID: <0e4ec58c21490dcd9cf82ab89bd8c34c@walle.cc> X-Sender: michael@walle.cc X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, 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 Am 2022-04-11 11:10, schrieb Tudor Ambarus: > 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 I still don't like it because the function doesn't do anything what the function name might suggest. The read just executes an op, the write executes an op with a write enable before. All the behavior is determined by the 'op' argument. Anyway, Reviewed-by: Michael Walle > --- > 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); -- -michael