| From 686a8279b5524d14c8db0c90e398607e4feefa36 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 24 Feb 2020 17:26:43 +0100 |
| Subject: spi/zynqmp: remove entry that causes a cs glitch |
| |
| From: Thommy Jakobsson <thommyj@gmail.com> |
| |
| [ Upstream commit 5dd8304981ecffa77bb72b1c57c4be5dfe6cfae9 ] |
| |
| In the public interface for chipselect, there is always an entry |
| commented as "Dummy generic FIFO entry" pushed down to the fifo right |
| after the activate/deactivate command. The dummy entry is 0x0, |
| irregardless if the intention was to activate or deactive the cs. This |
| causes the cs line to glitch rather than beeing activated in the case |
| when there was an activate command. |
| |
| This has been observed on oscilloscope, and have caused problems for at |
| least one specific flash device type connected to the qspi port. After |
| the change the glitch is gone and cs goes active when intended. |
| |
| The reason why this worked before (except for the glitch) was because |
| when sending the actual data, the CS bits are once again set. Since |
| most flashes uses mode 0, there is always a half clk period anyway for |
| cs to clk active setup time. If someone would rely on timing from a |
| chip_select call to a transfer_one, it would fail though. |
| |
| It is unknown why the dummy entry was there in the first place, git log |
| seems to be of no help in this case. The reference manual gives no |
| indication of the necessity of this. In fact the lower 8 bits are a |
| setup (or hold in case of deactivate) time expressed in cycles. So this |
| should not be needed to fulfill any setup/hold timings. |
| |
| Signed-off-by: Thommy Jakobsson <thommyj@gmail.com> |
| Reviewed-by: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com> |
| Link: https://lore.kernel.org/r/20200224162643.29102-1-thommyj@gmail.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/spi/spi-zynqmp-gqspi.c | 3 --- |
| 1 file changed, 3 deletions(-) |
| |
| diff --git a/drivers/spi/spi-zynqmp-gqspi.c b/drivers/spi/spi-zynqmp-gqspi.c |
| index f23f36ebaf3dc..bd3945a5660a5 100644 |
| --- a/drivers/spi/spi-zynqmp-gqspi.c |
| +++ b/drivers/spi/spi-zynqmp-gqspi.c |
| @@ -414,9 +414,6 @@ static void zynqmp_qspi_chipselect(struct spi_device *qspi, bool is_high) |
| |
| zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry); |
| |
| - /* Dummy generic FIFO entry */ |
| - zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0); |
| - |
| /* Manually start the generic FIFO command */ |
| zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, |
| zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) | |
| -- |
| 2.20.1 |
| |