All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode
@ 2017-12-05  6:20 Goldschmidt Simon
  2017-12-07  5:49 ` Jagan Teki
  0 siblings, 1 reply; 27+ messages in thread
From: Goldschmidt Simon @ 2017-12-05  6:20 UTC (permalink / raw)
  To: u-boot

+ Lukasz (as a reviewer of my patch[1])

On Mon, Dec 4, 2017 at 8:20, Jagan Teki wrote:
> This is the patch[1] for 4-byte addressing, but I would wonder how can proceed
> operations with 4-byte if we disable during probe.
> 
> [1] http://git.denx.de/?p=u-boot-
> spi.git;a=commitdiff;h=fd0c22a90772379c4c11ba09347d36cc8ee17dca

OK, so your patch does something different than what I did.

I was trying to keep the change to U-Boot as small as possible, only
fixing this issue I was seeing:

After a soft-reboot where the SPI chip was not reset, it is left in
4-byte addressing mode (linux uses this mode, obviously). Remember
that 4-byte mode is not a permanent setting, so we can enter and
leave it any time we like by issuing a command.

U-Boot uses the Bank Address Register (BAR) for spi flash chips with
more than 16 MByte, so it impclitly assumes that the chip is in
3-byte address mode. As I see it, your patch is worth a discussion
named "should we use 4-byte addressing mode on spi flash chips?".
I do think this is a better alternative than writing BAR! But this
change probably needs discussion and testing.

Until we discussed and tested that, could we push my patch[1] into
v2018.01? This is really a rather tiny bugfix I need for soft reboot,
compared to using 4-byte address mode.

[1] https://patchwork.ozlabs.org/patch/826919/

Thanks,
Simon

^ permalink raw reply	[flat|nested] 27+ messages in thread
* [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode
@ 2017-12-07 10:00 Goldschmidt Simon
  0 siblings, 0 replies; 27+ messages in thread
From: Goldschmidt Simon @ 2017-12-07 10:00 UTC (permalink / raw)
  To: u-boot

On 2017-10-07 09:23 AM, Prabhakar Kushwaha wrote:
> Dear Jagan, Simon,
> 
> > -----Original Message-----
> > From: U-Boot [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Jagan
> > Teki
> > Sent: Thursday, December 07, 2017 11:19 AM
> > To: Goldschmidt Simon <sgoldschmidt@de.pepperl-fuchs.com>
> > Cc: u-boot at lists.denx.de
> > Subject: Re: [U-Boot] [PATCH] sf: ensure flash device is in 3-byte
> > address mode
> >
> > On Tue, Dec 5, 2017 at 11:50 AM, Goldschmidt Simon
> > <sgoldschmidt@de.pepperl-fuchs.com> wrote:
> > > + Lukasz (as a reviewer of my patch[1])
> > >
> > > On Mon, Dec 4, 2017 at 8:20, Jagan Teki wrote:
> > >> This is the patch[1] for 4-byte addressing, but I would wonder how
> > >> can
> > proceed
> > >> operations with 4-byte if we disable during probe.
> > >>
> > >> [1]
> > https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit.
> > denx
> > .de%2F%3Fp%3Du-boot-
> > &data=02%7C01%7Cprabhakar.kushwaha%40nxp.com%7Ca37e67c0f5fd431396
> > 5f08d53d3649b8%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6364
> >
> 82225771650679&sdata=CBQkKDXTE1g1mvEbYuyiBApW2NTxQFCirGeJV9uzX8E
> > %3D&reserved=0
> > >> spi.git;a=commitdiff;h=fd0c22a90772379c4c11ba09347d36cc8ee17dca
> > >
> > > OK, so your patch does something different than what I did.
> > >
> > > I was trying to keep the change to U-Boot as small as possible, only
> > > fixing this issue I was seeing:
> > >
> > > After a soft-reboot where the SPI chip was not reset, it is left in
> > > 4-byte addressing mode (linux uses this mode, obviously). Remember
> > > that 4-byte mode is not a permanent setting, so we can enter and
> > > leave it any time we like by issuing a command.
> > >
> > > U-Boot uses the Bank Address Register (BAR) for spi flash chips with
> > > more than 16 MByte, so it impclitly assumes that the chip is in
> > > 3-byte address mode. As I see it, your patch is worth a discussion
> > > named "should we use 4-byte addressing mode on spi flash chips?".
> > > I do think this is a better alternative than writing BAR! But this
> > > change probably needs discussion and testing.
> >
> > OK, will review your patch.
> >
> 
> Other solution to this problem could have been "adding support of 4byte
> addressing".
> 
> There will always be a requirement of supporting >16MB flash.

I would be very happy to have 4-byte addressing support. I just
thought it would be better to first fix the soft-reboot issue I am
having (and at least one other person on this list also had).

Plus, I haven't seen a workign patch for 4-byte addressing on this
list, yet. My patch has no side effects, works and could be merged
for 2018.01.

Thanks,
Simon

^ permalink raw reply	[flat|nested] 27+ messages in thread
* [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode
@ 2017-11-30  8:41 Goldschmidt Simon
  2017-12-04  7:20 ` Jagan Teki
  0 siblings, 1 reply; 27+ messages in thread
From: Goldschmidt Simon @ 2017-11-30  8:41 UTC (permalink / raw)
  To: u-boot

Hi Jagan,

On Fri, Nov 10, 2017 08:04, Jagan Teki wrote:
>>> I've similar change on my patchwork, since no-one tested Will CC you by re-
> basing it please have test?
>>
>> Yes, of course I'd like to test this. Where do I find your patch?
> 
> Will rebase and send to ML soon.

Any progress here? Any chance that this one and the other fixes
needed for cadence_qspi to work correctly get included in 2018.01?

The following patches would be required for this in addition to the
3-byte mode switch you wanted to submit:

"spi: cadence_spi: Adopt Linux DT bindings":
https://patchwork.ozlabs.org/project/uboot/list/?series=13864

Revert "spi: cadence_qspi_apb: Use 32 bit indirect read transaction
when possible" (this one goes on top of the above)
https://patchwork.ozlabs.org/patch/838871/

BTW: the series "spi: cadence_spi_apb: fix using bouncebuf with
writeback dcache" can be closed when the reverting patch above is
applied.

I already sent reviewed-by and tested-by for the first series
above but I can't see them in patchwork.

Please let me know if there's anything missing or anything I can
do to get this pushed.

Thanks,
Simon

^ permalink raw reply	[flat|nested] 27+ messages in thread
* [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode
@ 2017-11-10  6:41 Goldschmidt Simon
  2017-11-10  7:03 ` Jagan Teki
  0 siblings, 1 reply; 27+ messages in thread
From: Goldschmidt Simon @ 2017-11-10  6:41 UTC (permalink / raw)
  To: u-boot

On Mon, Oct 30, 2017 at 7:26 AM, Jagan Teki <jagannadh.teki@gmail.com> wrote:
> I've similar change on my patchwork, since no-one tested Will CC you by re-basing it please have test?

Yes, of course I'd like to test this. Where do I find your patch?

Simon

^ permalink raw reply	[flat|nested] 27+ messages in thread
* [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode
@ 2017-10-17 11:47 Goldschmidt Simon
  2017-10-18 20:42 ` Lukasz Majewski
  2017-10-30  6:26 ` Jagan Teki
  0 siblings, 2 replies; 27+ messages in thread
From: Goldschmidt Simon @ 2017-10-17 11:47 UTC (permalink / raw)
  To: u-boot

On some boards where the spi flash is not reset during warm reboot,
the chip has to be manually set into 3-byte address mode.

Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
---
 drivers/mtd/spi/sf_internal.h |  2 ++
 drivers/mtd/spi/spi_flash.c   | 53 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 839cdbe1b0..06dee0a4ea 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -62,6 +62,8 @@ enum spi_nor_option_flags {
 #define CMD_READ_STATUS1		0x35
 #define CMD_READ_CONFIG			0x35
 #define CMD_FLAG_STATUS			0x70
+#define CMD_EN4B				0xB7
+#define CMD_EX4B				0xE9
 
 /* Bank addr access commands */
 #ifdef CONFIG_SPI_FLASH_BAR
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index 34f68881ed..8db2882075 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -165,6 +165,55 @@ bar_end:
 }
 #endif
 
+static int set_4byte(struct spi_flash *flash, const struct spi_flash_info *info,
+		u8 enable)
+{
+	int ret;
+	bool need_wren = false;
+	u8 cmd;
+
+	if (flash->size <= SPI_FLASH_16MB_BOUN)
+		return 0;
+
+	switch (JEDEC_MFR(info)) {
+	case SPI_FLASH_CFI_MFR_STMICRO:
+		/* Some Micron need WREN command; all will accept it */
+		need_wren = true;
+	case SPI_FLASH_CFI_MFR_MACRONIX:
+	case SPI_FLASH_CFI_MFR_WINBOND:
+		ret = spi_claim_bus(flash->spi);
+		if (ret) {
+			debug("SF: Unable to claim SPI bus\n");
+			return ret;
+		}
+
+		if (need_wren) {
+			ret = spi_flash_cmd_write_enable(flash);
+			if (ret < 0) {
+				debug("SF: enabling write failed\n");
+				spi_release_bus(flash->spi);
+				return ret;
+			}
+		}
+
+		cmd = enable ? CMD_EN4B : CMD_EX4B;
+		ret = spi_flash_cmd_write(flash->spi, &cmd, 1, NULL, 0);
+		if (ret) {
+			debug("SF: fail to %s 4-byte address mode\n",
+				enable ? "enter" : "exit");
+		}
+		if (need_wren)
+			if (spi_flash_cmd_write_disable(flash) < 0)
+				debug("SF: disabling write failed\n");
+		spi_release_bus(flash->spi);
+		return ret;
+	default:
+		/* Spansion style handled by bar_write  */
+		break;
+	}
+	return 0;
+}
+
 #ifdef CONFIG_SF_DUAL_FLASH
 static void spi_flash_dual(struct spi_flash *flash, u32 *addr)
 {
@@ -1086,6 +1135,10 @@ int spi_flash_scan(struct spi_flash *flash)
 		flash->flags |= SNOR_F_USE_FSR;
 #endif
 
+	/* disable 4-byte addressing if the device exceeds 16MiB */
+	if (flash->size > SPI_FLASH_16MB_BOUN)
+		set_4byte(flash, info, 0);
+
 	/* Configure the BAR - discover bank cmds and read current bank */
 #ifdef CONFIG_SPI_FLASH_BAR
 	ret = read_bar(flash, info);
-- 
2.12.2.windows.2

^ permalink raw reply related	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2018-06-02 11:58 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-05  6:20 [U-Boot] [PATCH] sf: ensure flash device is in 3-byte address mode Goldschmidt Simon
2017-12-07  5:49 ` Jagan Teki
2017-12-07  8:23   ` Prabhakar Kushwaha
2018-05-14  7:04   ` Simon Goldschmidt
2018-05-14  7:22     ` Jagan Teki
2018-05-14  7:47       ` Simon Goldschmidt
2018-05-18  7:18         ` Simon Goldschmidt
2018-05-21 15:09           ` Jagan Teki
2018-05-22  4:29             ` Simon Goldschmidt
2018-05-30  5:10               ` Jagan Teki
2018-05-30  8:12                 ` Simon Goldschmidt
2018-05-30 11:25                   ` Jagan Teki
2018-05-30 11:27                     ` Marek Vasut
2018-05-30 11:54                       ` Simon Goldschmidt
2018-05-30 11:41                     ` Simon Goldschmidt
2018-05-30  9:56                 ` Marek Vasut
2018-05-30 11:18                   ` Simon Goldschmidt
2018-05-30 11:23                     ` Marek Vasut
2018-06-02 11:58                       ` Prabhakar Kushwaha
  -- strict thread matches above, loose matches on Subject: below --
2017-12-07 10:00 Goldschmidt Simon
2017-11-30  8:41 Goldschmidt Simon
2017-12-04  7:20 ` Jagan Teki
2017-11-10  6:41 Goldschmidt Simon
2017-11-10  7:03 ` Jagan Teki
2017-10-17 11:47 Goldschmidt Simon
2017-10-18 20:42 ` Lukasz Majewski
2017-10-30  6:26 ` Jagan Teki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.