aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/devices
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2014-03-20 05:20:37 -0400
committerBrian Norris <computersforpeace@gmail.com>2014-03-20 07:17:14 -0400
commit030e82dc6386f23bcd05876b452d2618dd8046b4 (patch)
tree8412fe7b0fce3ab9aa06615fd72544d63e81a67d /drivers/mtd/devices
parent3c8b85b340c7a6b47d50c12c03661c23a5858b88 (diff)
mtd: st_spi_fsm: Supply a method to read from the FSM's FIFO
When invoked the driver will attempt to read any available data from the FSM's data register. Any data collected from this FIFO would have originated from the flash chip. Acked-by Angus Clark <angus.clark@st.com> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd/devices')
-rw-r--r--drivers/mtd/devices/st_spi_fsm.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/mtd/devices/st_spi_fsm.c b/drivers/mtd/devices/st_spi_fsm.c
index 5e22c8688197..73e0f2731bcb 100644
--- a/drivers/mtd/devices/st_spi_fsm.c
+++ b/drivers/mtd/devices/st_spi_fsm.c
@@ -281,6 +281,32 @@ static void stfsm_wait_seq(struct stfsm *fsm)
281 dev_err(fsm->dev, "timeout on sequence completion\n"); 281 dev_err(fsm->dev, "timeout on sequence completion\n");
282} 282}
283 283
284static void stfsm_read_fifo(struct stfsm *fsm, uint32_t *buf,
285 const uint32_t size)
286{
287 uint32_t remaining = size >> 2;
288 uint32_t avail;
289 uint32_t words;
290
291 dev_dbg(fsm->dev, "Reading %d bytes from FIFO\n", size);
292
293 BUG_ON((((uint32_t)buf) & 0x3) || (size & 0x3));
294
295 while (remaining) {
296 for (;;) {
297 avail = stfsm_fifo_available(fsm);
298 if (avail)
299 break;
300 udelay(1);
301 }
302 words = min(avail, remaining);
303 remaining -= words;
304
305 readsl(fsm->base + SPI_FAST_SEQ_DATA_REG, buf, words);
306 buf += words;
307 }
308}
309
284static int stfsm_set_mode(struct stfsm *fsm, uint32_t mode) 310static int stfsm_set_mode(struct stfsm *fsm, uint32_t mode)
285{ 311{
286 int ret, timeout = 10; 312 int ret, timeout = 10;