- Aug 23, 2017
-
-
Arvind Yadav authored
- clk_prepare_enable() can fail here and we must check its return value. - stfsm_probe() can fail here and we must disable clock. Signed-off-by:
Arvind Yadav <arvind.yadav.cs@gmail.com> Signed-off-by:
Boris Brezillon <boris.brezillon@free-electrons.com>
-
- Jun 28, 2017
-
-
Cyrille Pitchen authored
The 35h instruction op code has two aliases/macro definitions: - SPINOR_OP_RDCR from include/linux/mtd/spi-nor.h - SPINOR_OP_RDSR2 from drivers/mtd/devices/serial_flash_cmds.h Actually, some manufacturers name the associated internal register Status Register 2 whereas other manufacturers name it Configuration Register hence the two different macros for the very same instruction op code. Since the spi-nor.h file is the reference file for all SPI NOR instruction op codes, this patch removes the definition of the SPINOR_OP_RDSR2 macro. Also the SPINOR_OP_RDSR2 macro will be associated to another instruction op code in a further patch so we need to avoid a conflict defining this macro twice. Indeed the JESD216 rev B specification, defining the SFDP tables, also refers to the 3Eh and 3Fh instruction op codes to write/read the Status Register 2 on some SPI NOR flash memories, the 35h op code still being used to read the Configuration Regi...
-
- Feb 10, 2017
-
-
Cyrille Pitchen authored
This patch renames the SPINOR_OP_* macros of the 4-byte address instruction set so the new names all share a common pattern: the 4-byte address name is built from the 3-byte address name appending the "_4B" suffix. The patch also introduces new op codes to support other SPI protocols such as SPI 1-4-4 and SPI 1-2-2. This is a transitional patch and will help a later patch of spi-nor.c to automate the translation from the 3-byte address op codes into their 4-byte address version. Signed-off-by:
Cyrille Pitchen <cyrille.pitchen@atmel.com> Acked-by:
Mark Brown <broonie@kernel.org> Acked-by:
Marek Vasut <marek.vasut@gmail.com>
-
- Nov 12, 2015
-
-
Brian Norris authored
We should assign the MTD dev.of_node instead of the parser data field. This gets us the equivalent partition parser behavior with fewer special fields and parameter passing. Also convert several of these to mtd_device_register(), since we don't need the 2nd and 3rd parameters anymore. Signed-off-by:
Brian Norris <computersforpeace@gmail.com> Reviewed-by:
Marek Vasut <marex@denx.de> Reviewed-by:
Boris Brezillon <boris.brezillon@free-electrons.com>
-
- Jan 13, 2015
-
-
Lee Jones authored
drivers/mtd/devices/st_spi_fsm.c:1647:17: warning: comparison between signed and unsigned integer expressions Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
ST's Common Clk Framework is now available. This patch ensures the FSM makes use of it by obtaining and enabling the EMI clock. If system fails to provide the EMI clock, we bomb out. Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Under certain conditions, the SPI-FSM Controller can be left in a state where the data FIFO is not entirely empty. This can lead to problems where subsequent data transfers appear to have been shifted by a number of unidentified bytes. One simple example would be an errant FSM sequence which loaded more data to the FIFO than was read by the host. Another more interesting case results from an obscure artefact in the FSM Controller. When switching from data transfers in x4 or x2 mode to data transfers in x1 mode, extraneous bytes will appear in the FIFO, unless the previous data transfer was a multiple of 32 cycles (i.e. 8 bytes for x2, and 16 bytes for x4). This applies equally whether FSM is being operated directly by a S/W driver, or by the SPI boot-controller in FSM-Boot mode. Furthermore, data in the FIFO not only survive a transition between FSM-Boot and FSM, but also a S/W reset of IP block [1]. By taking certain precautions, it is possible to prevent the driver from causing this type of problem (e.g. ensuring that the host and programmed sequence agree on the transfer size, and restricting transfer sizes to multiples of 32-cycles [2]). However, at the point the driver is loaded, no assumptions can be made regarding the state of the FIFO. Even if previous S/W drivers have behaved correctly, it is impossible to control the number of transactions serviced by the controller operating in FSM-Boot. To address this problem, we ensure the FIFO is cleared during initialisation, before performing any FSM operations. Previously, the fsm_clear_fifo() code was capable of detecting and clearing any unwanted 32-bit words from the FIFO. This patch extends the capability to handle an arbitrary number of bytes present in the FIFO [3]. Now that the issue is better understood, we also remove the calls to fsm_clear_fifo() following the fsm_read() and fsm_write() operations. The process of actually clearing the FIFO deserves a mention. While the FIFO may contain any number of bytes, the SPI_FAST_SEQ_STA register only reports the number of complete 32-bit words present. Furthermore, data can only be drained from the FIFO by reading complete 32-bit words. With this in mind, a two stage process is used to the clear the FIFO: 1. Read any complete 32-bit words from the FIFO, as reported by the SPI_FAST_SEQ_STA register. 2. Mop up any remaining bytes. At this point, it is not known if there are 0, 1, 2, or 3 bytes in the FIFO. To handle all cases, a dummy FSM sequence is used to load one byte at a time, until a complete 32-bit word is formed; at most, 4 bytes will need to be loaded. [1] Although this issue has existed since early versions of the SPI-FSM controller, its full extent only emerged recently as a consequence of the targetpacks starting to use FSM-Boot(x4) as the default configuration. [2] The requirement to restrict transfers to multiples of 32 cycles was found empirically back when DUAL and QUAD mode support was added. The current analysis now gives a satisfactory explanation for this requirement. [3] Theoretically, it is possible for the FIFO to contain an arbitrary number of bits. However, since there are no known use-cases that leave incomplete bytes in the FIFO, only words and bytes are considered here. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
- Oct 20, 2014
-
-
Wolfram Sang authored
A platform_driver does not need to set an owner, it will be populated by the driver core. Signed-off-by:
Wolfram Sang <wsa@the-dreams.de>
-
- May 21, 2014
-
-
Jingoo Han authored
Make of_device_id array const, because all OF functions handle it as const. Signed-off-by:
Jingoo Han <jg1.han@samsung.com> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
- Apr 17, 2014
-
-
Brian Norris authored
Compile-testing for a 64-bit arch uncovers several bad casts: In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from drivers/mtd/devices/st_spi_fsm.c:15: drivers/mtd/devices/st_spi_fsm.c: In function ‘stfsm_read_fifo’: drivers/mtd/devices/st_spi_fsm.c:758:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] BUG_ON((((uint32_t)buf) & 0x3) || (size & 0x3)); ... Use uintptr_t instead of uint32_t, since it's guaranteed to be pointer-sized. We also see this warning, if size_t is not 32 bits wide: In file included from drivers/mtd/devices/st_spi_fsm.c:15:0: drivers/mtd/devices/st_spi_fsm.c: In function ‘stfsm_mtd_write’: include/linux/kernel.h:712:17: warning: comparison of distinct pointer types lacks a cast [enabled by default] (void) (&_min1 == &_min2); \ ^ drivers/mtd/devices/st_spi_fsm.c:1704:11: note: in expansion of macro ‘min’ bytes = min(FLASH_PAGESIZE - page_offs, len); ^ Just use min_t() to force the type conversion, since we don't really want to upgrade 'page_offs' and 'bytes' to size_t; they only should be handling <= 256 byte offsets. Signed-off-by:
Brian Norris <computersforpeace@gmail.com> Acked-by:
Lee Jones <lee.jones@linaro.org>
-
- Apr 15, 2014
-
-
Brian Norris authored
Many of the serial_flash_cmds.h opcodes are duplicated with spi-nor.h. Let's begin to unify them. Signed-off-by:
Brian Norris <computersforpeace@gmail.com> Acked-by:
Lee Jones <lee.jones@linaro.org> Reviewed-by:
Marek Vasut <marex@denx.de>
-
Brian Norris authored
Begin to unify the differences between serial_flash_cmds.h and spi-nor.h. Signed-off-by:
Brian Norris <computersforpeace@gmail.com> Acked-by:
Lee Jones <lee.jones@linaro.org> Reviewed-by:
Marek Vasut <marex@denx.de>
-
Brian Norris authored
These are also in serial_flash_cmds.h. (FWIW, I didn't know the C preprocessor allowed redefinitions without warning like this.) Signed-off-by:
Brian Norris <computersforpeace@gmail.com> Acked-by:
Lee Jones <lee.jones@linaro.org> Reviewed-by:
Marek Vasut <marex@denx.de>
-
Angus Clark authored
This patch adds support for the Macronix MX25L3255E device. Unlike the other Macronix devices we have seen, this device supports WRITE_1_4_4 at reasonable frequencies. Rather than masking out WRITE_1_4_4 support altogether, we now rely on the table parameters to indicate whether or not WRITE_1_4_4 should be used. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Angus Clark authored
Add Spansion S25FL032P to the list of known devices. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Angus Clark authored
This patch refactors the fsm_read_status() and fsm_write_status() code to support 1 or 2 byte operations, with a specified command. This allows us to remove device/register specific code, such as the N25Q fsm_wrvcr() function. The 'QE' configuration code is updated accordingly, with minor tweaks to ensure the register values are only written if actually required. One notable change in this area is that the 'W25Q_STATUS_QE' bit-field is now defined with respect to the 'SR2' register, rather than the combined 'SR1+SR2' register which is only used for write operations. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Angus Clark authored
Update the configuration of the Macronix 'QE' bit, such that we only set or clear the bit if required. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Angus Clark authored
Support for the Macronix 32-bit addressing scheme was originally developed using the MX25L25635E device. As is often the case, it was found that the presence of a "WAIT" instruction was required for the "EN4B/EX4B" FSM Sequence to complete. (It is known that the SPI FSM Controller makes certain undocumented assumptions regarding what constitutes a valid sequence.) However, further testing suggested that a small delay was required after issuing the "EX4B" command; without this delay, data corruptions were observed, consistent with the device not being ready to retrieve data. Although the issue was not fully understood, the workaround of adding a small delay was implemented, while awaiting clarification from Macronix. The same behaviour has now been found with a second Macronix device, the MX25L25655E. However, with this device, it seems that the delay is also required after the 'EN4B' commands. This discovery has prompted us to revisit the issue. Although still not conclusive, further tests have suggested that the issue is down to the SPI FSM Controller, rather than the Macronix devices. Furthermore, an alternative workaround has emerged which is to set the WAIT time to 0x00000001, rather then 0x00000000. (Note, the WAIT instruction is used purely for the purpose of achieving "sequence validity", rather than actually implementing a delay!) The issue is now being investigated by the Design and Validation teams. In the meantime, we implement the alternative workaround, which reduces the effective delay from 1us to 1ns. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Angus Clark authored
Add Macronix MX25L25655E to the list of known devices. Signed-off-by:
Angus Clark <angus.clark@st.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
- Mar 20, 2014
-
-
Lee Jones authored
Reported-by:
Brian Norris <computersforpeace@gmail.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Reported-by:
Brian Norris <computersforpeace@gmail.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Reported-by:
Brian Norris <computersforpeace@gmail.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Reported-by:
Brian Norris <computersforpeace@gmail.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Reported-by:
Brian Norris <computersforpeace@gmail.com> Signed-off-by:
Lee Jones <lee.jones@linaro.org> [Brian: tweaked a bit] Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
The old API expected a "partitions" property provided a phandle to a separate partitions node, which itself contained yet more nodes each representing one partition. The new API rids the requirement for the superfluous intermediary partitions node. This patch provides the added information required for automatic parsing by the core. Signed-off-by:
Lee Jones <lee.jones@linaro.org> Signed-off-by:
Brian Norris <computersforpeace@gmail.com>
-
Lee Jones authored
Until now the dynamically configurable message sequences for read, write and enable 32bit addressing have been global. Brian makes a good point why this should not be the case. If there are ever two FSM's located on the same platform, we could be potentially introducing a race condition on "needlessly shared data". Suggested-by:
Brian Norris <computersforpeace@gmail.com> 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>
-
Lee Jones authored
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>
-
Lee Jones authored
This patch allows us to prepare some of the message sequences which will be required to talk to the S25FLxxx family of Serial Flash devices. It also allows us to do some required extra operations after any busy wait failures. 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>
-
Lee Jones authored
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>
-
Lee Jones authored
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>
-
Lee Jones authored
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>
-
Lee Jones authored
When an erase is requested by userspace the MTD framework calls back into the driver to conduct the actual command issue. Here we provide the routines which do exactly that. We can choose to either do an entire chip erase or by sector. 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>
-
Lee Jones authored
When we write data to the Serial Flash chip we'll wait a predetermined period of time before giving up. During that period of time we poll the status register until completion. 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>
-
Lee Jones authored
When we write data to the FIFO the FSM Controller subsequently writes that data out to the Serial 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>
-
Lee Jones authored
When a read is issued by userspace the MTD framework calls back into the driver to conduct the actual command issue and data extraction. Here we provide the routines which do exactly that. 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>
-
Lee Jones authored
Most chips require a predefined set of FSM message sequences for read, write and erase operations. This patch provides a way to set them up, which it will do so if a chip specific initialisation routine isn't been provided. 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>
-
Lee Jones authored
In the FSM driver we handle chip differences by providing the possibility of calling back into a chip specific initialisation routine. In this patch we provide one for the N25Qxxx series, which endeavours to setup things like the read, write and erase sequences, as they differ from the default. We also configure 32bit support and the amount of dummy cycles to use. 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>
-
Lee Jones authored
The N25Qxxx Serial Flash devices required different sequence configurations depending on whether they're running in 24bit (3Byte) or 32bit (4Byte) mode. We provide those here. 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>
-
Lee Jones authored
Message sequences can vary depending on how many pads (lines) are required to address the chip (mode & dummy), how many data pads (lines) are required to write out to the chip which will determine speed amongst other things which are detailed by the SFDP specification. We are able to use multiple configurations for each chip, but they need to me matched to a device's capabilities. These configurations are listed in preference order - most preferred first. 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>
-
Lee Jones authored
The FSM Serial Flash Controller is driven by issuing a standard set of register writes we call a message sequence. This patch supplies a method to prepare the message sequence responsible for updating a chip's VCR. 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>
-