spi: armada-3700: Fix failing commands with quad-SPI
authorMiquel Raynal <miquel.raynal@free-electrons.com>
Wed, 13 Sep 2017 16:21:38 +0000 (18:21 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 13 Sep 2017 16:37:26 +0000 (09:37 -0700)
commit747e1f60470b975363cbbfcde0c41a3166391be5
treeda72b6a88c3f84b6bbbffddaeb987fdf14e88062
parentecb478bf866b8450c724958815e8d46b97c1b113
spi: armada-3700: Fix failing commands with quad-SPI

A3700 SPI controller datasheet states that only the first line (IO0) is
used to receive and send instructions, addresses and dummy bytes,
unless for addresses during an RX operation in a quad SPI configuration
(see p.821 of the Armada-3720-DB datasheet). Otherwise, some commands
such as SPI NOR commands like READ_FROM_CACHE_DUAL_IO(0xeb) and
READ_FROM_CACHE_DUAL_IO(0xbb) will fail because these commands must send
address bytes through the four pins. Data transfer always use the four
bytes with this setup.

Thus, in quad SPI configuration, the A3700_SPI_ADDR_PIN bit must be set
only in this case to inform the controller that it must use the number
of pins indicated in the {A3700_SPI_DATA_PIN1,A3700_SPI_DATA_PIN0} field
during the address cycles of an RX operation.

Suggested-by: Ken Ma <make@marvell.com>
Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
drivers/spi/spi-armada-3700.c