public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Angus Clark <Angus.Clark@st.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: <linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <linus.walleij@linaro.org>,
	<dwmw2@infradead.org>, <linux-mtd@lists.infradead.org>,
	<computersforpeace@gmail.com>,
	<DCG_UPD_stlinux_kernel@list.st.com>, <olivier.clergeaud@st.com>
Subject: Re: [PATCH RESEND v4 00/37] mtd: st_spi_fsm: Add new driver
Date: Tue, 11 Feb 2014 15:00:42 +0000	[thread overview]
Message-ID: <52FA3B1A.2070304@st.com> (raw)
In-Reply-To: <1390473085-24626-1-git-send-email-lee.jones@linaro.org>

Hi Lee,

Sorry for the delay.  I have now had a quick look through the patches.  Just a
couple of points :-)

* stfsm_probe(): stfsm_fetch_platform_configs() needs to be called *before*
config() -- config() is based on platform capabilities.  Conceptually,
stfsm_fetch_platform_configs() should be called before stfsm_jedec_probe(), and
FLASH_FLAG_32BIT_ADDR should be moved out of stfsm_fetch_platform_configs(),
placed just after stfsm_jedec_probe() but before config().

* fsm_wait_busy(): logic not quite correct if we get a P_ERR or E_ERR error
after a timeout.  I am also not sure about returning (uint8_t)-EIO.  For what
its worth, this is what I did in response to Brian's comment about the race
condition:

static uint8_t fsm_wait_busy(struct stm_spi_fsm *fsm, unsigned int max_time_ms)
{
	struct fsm_seq *seq = &fsm_seq_read_status_fifo;
	unsigned long deadline;
	uint32_t status;
	int timeout = 0;

	/* Use RDRS1 */
	seq->seq_opc[0] = (SEQ_OPC_PADS_1 |
			   SEQ_OPC_CYCLES(8) |
			   SEQ_OPC_OPCODE(FLASH_CMD_RDSR));

	/* Load read_status sequence */
	fsm_load_seq(fsm, seq);

	/*
	 * Repeat until busy bit is deasserted, or timeout, or error (S25FLxxxS)
	 */
	deadline = jiffies + msecs_to_jiffies(max_time_ms);
	while (!timeout) {
		cond_resched();

		if (time_after_eq(jiffies, deadline))
			timeout = 1;

		fsm_wait_seq(fsm);

		fsm_read_fifo(fsm, &status, 4);

		if ((status & FLASH_STATUS_BUSY) == 0)
			return 0;

		if ((fsm->configuration & CFG_S25FL_CHECK_ERROR_FLAGS) &&
		    ((status & S25FL_STATUS_P_ERR) ||
		     (status & S25FL_STATUS_E_ERR)))
			return (uint8_t)(status & 0xff);

		if (!timeout)
			/* Restart */
			writel(seq->seq_cfg, fsm->base + SPI_FAST_SEQ_CFG);
	}

	dev_err(fsm->dev, "timeout on wait_busy\n");

	return FLASH_STATUS_TIMEOUT;
}

and:

static int fsm_wait_seq(struct stm_spi_fsm *fsm)
{
	unsigned long deadline = jiffies +
		msecs_to_jiffies(FSM_MAX_WAIT_SEQ_MS);
	int timeout = 0;

	while (!timeout) {
		if (time_after_eq(jiffies, deadline))
			timeout = 1;

		if (fsm_is_idle(fsm))
			return 0;

		cond_resched();
	}

	dev_err(fsm->dev, "timeout on sequence completion\n");

	return 1;
}


* "MFD" creeps into a few commit logs ;-)

Cheers,

Angus

On 01/23/2014 10:30 AM, Lee Jones wrote:
> Version 4:
>   Tended to Brian's review comments
>     - Checkpatch acceptance
>     - MODULE_DEVICE_TABLE() name slip correction
>     - Timeout issue(s) resolved
>     - Potential infinite loop mitigated
>     - Code clarity suggests heeded
>     - Duplication with MTD core code removed
>     - Upgraded to using ROUND_UP() helper
>     - Moved non-shared header code into main driver
>     - Relocated dynamic msg sequence stores into main struct
>     - Averted adaption of static (table) data
>     - Basic whitespace/spelling/data type/dev_err suggestions applied
>   
> Version 3:
>   Okay, this thing should be fully functional now. Identify a chip
>   based on it's JEDEC ID, Read, Write, Erase (all or by sector).
>   Support for various chip quirks added too.
> 
> Version 2:
>   The first bunch of these patches have been on the MLs before, but
>   didn't receive a great deal of attention for the most part. We are
>   a little more featureful this time however. We can now successfully
>   setup and configure the N25Q256. We still can't read/write/erase
>   it though. I'll start work on that next week and will provide it in
>   the next instalment.
> 
> Version 1:
>   First stab at getting this thing Mainlined. It doesn't do a great deal
>   yet, but we are able to initialise the device and dynamically set it up
>   correctly based on an extracted JEDEC ID.
> 
>  Documentation/devicetree/bindings/mtd/st-fsm.txt |   26 ++
>  arch/arm/boot/dts/stih416-b2105.dts              |   14 +
>  arch/arm/boot/dts/stih416-pinctrl.dtsi           |   12 +
>  drivers/mtd/devices/Kconfig                      |    8 +
>  drivers/mtd/devices/Makefile                     |    1 +
>  drivers/mtd/devices/serial_flash_cmds.h          |   81 ++++
>  drivers/mtd/devices/st_spi_fsm.c                 | 2124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 7 files changed, 2266 insertions(+)
> 
> 

-- 
-------------------------------------
Angus Clark
ST Microelectronics (R&D) Ltd.
1000 Aztec West, Bristol, BS32 4SQ
email: angus.clark@st.com
tel: +44 (0) 1454 462389
st-tina: 065 2389
-------------------------------------

  parent reply	other threads:[~2014-02-11 15:01 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-23 10:30 [PATCH RESEND v4 00/37] mtd: st_spi_fsm: Add new driver Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 01/37] mtd: st_spi_fsm: Allocate resources and register with MTD framework Lee Jones
2014-01-23 14:16   ` Ludovic Barre
2014-01-23 15:55     ` Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 02/37] mtd: st_spi_fsm: Supply all register address and bit logic defines Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 03/37] mtd: st_spi_fsm: Initialise and configure the FSM for normal working conditions Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 04/37] mtd: st_spi_fsm: Supply framework for device requests Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 05/37] mtd: st_spi_fsm: Supply a method to read from the FSM's FIFO Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 06/37] mtd: st_spi_fsm: Supply defines for the possible flash command opcodes Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 07/37] mtd: st_spi_fsm: Add support for JEDEC ID extraction Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 08/37] mtd: devices: Provide header for shared OPCODEs and SFDP commands Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 09/37] mtd: st_spi_fsm: Provide device look-up table Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 10/37] mtd: st_spi_fsm: Dynamically setup flash device based on JEDEC ID Lee Jones
2014-01-23 10:30 ` [PATCH RESEND v4 11/37] mtd: st_spi_fsm: Search for preferred FSM message sequence configurations Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 12/37] mtd: st_spi_fsm: Fetch platform specific configurations Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 13/37] mtd: st_spi_fsm: Prepare the read/write FSM message sequence(s) Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 14/37] mtd: st_spi_fsm: Add device-tree binding documentation Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 15/37] mtd: st_spi_fsm: Fetch boot-device from mode pins Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 16/37] mtd: st_spi_fsm: Provide the erase one sector sequence Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 17/37] mtd: st_spi_fsm: Provide the sequence for enabling 32bit addressing mode Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 18/37] mtd: st_spi_fsm: Prepare read/write sequences according to configuration Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 19/37] mtd: st_spi_fsm: Add a check to if the chip can handle an SoC reset Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 20/37] mtd: st_spi_fsm: Provide a method to put the chip into 32bit addressing mode Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 21/37] mtd: st_spi_fsm: Update the flash Volatile Configuration Register Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 22/37] mtd: st_spi_fsm: Provide the default read/write configurations Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 23/37] mtd: st_spi_fsm: Supply the N25Qxxx specific read configurations Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 24/37] mtd: st_spi_fsm: Supply the N25Qxxx chip specific configuration call-back Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 25/37] mtd: st_spi_fsm: Prepare default sequences for read/write/erase Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 26/37] mtd: st_spi_fsm: Add the ability to read from a Serial Flash device Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 27/37] mtd: st_spi_fsm: Write to Flash via the FSM FIFO Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 28/37] mtd: st_spi_fsm: Supply a busy wait for post-write status Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 29/37] mtd: st_spi_fsm: Add the ability to write to a Serial Flash device Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 30/37] mtd: st_spi_fsm: Erase partly or as a whole " Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 31/37] mtd: st_spi_fsm: Add the ability to read the FSM's status Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 32/37] mtd: st_spi_fsm: Add the ability to write to FSM's status register Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 33/37] mtd: st_spi_fsm: Supply the MX25xxx chip specific configuration call-back Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 34/37] mtd: st_spi_fsm: Supply the S25FLxxx " Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 35/37] mtd: st_spi_fsm: Supply the W25Qxxx " Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 36/37] mtd: st_spi_fsm: Move runtime configurable msg sequences into device's struct Lee Jones
2014-01-23 10:31 ` [PATCH RESEND v4 37/37] ARM: STi: Add support for the FSM Serial Flash Controller Lee Jones
2014-02-11 15:00 ` Angus Clark [this message]
2014-02-14 10:46   ` [PATCH RESEND v4 00/37] mtd: st_spi_fsm: Add new driver Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52FA3B1A.2070304@st.com \
    --to=angus.clark@st.com \
    --cc=DCG_UPD_stlinux_kernel@list.st.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=lee.jones@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=olivier.clergeaud@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox