stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 5.18 01/53] spi: spi-cadence: Fix SPI CS gets toggling sporadically
@ 2022-06-28  2:17 Sasha Levin
  2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 02/53] spi: cadence: Detect transmit FIFO depth Sasha Levin
                   ` (50 more replies)
  0 siblings, 51 replies; 54+ messages in thread
From: Sasha Levin @ 2022-06-28  2:17 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Sai Krishna Potthuri, Amit Kumar Mahapatra, Mark Brown,
	Sasha Levin, linux-spi

From: Sai Krishna Potthuri <lakshmi.sai.krishna.potthuri@xilinx.com>

[ Upstream commit 21b511ddee09a78909035ec47a6a594349fe3296 ]

As part of unprepare_transfer_hardware, SPI controller will be disabled
which will indirectly deassert the CS line. This will create a problem
in some of the devices where message will be transferred with
cs_change flag set(CS should not be deasserted).
As per SPI controller implementation, if SPI controller is disabled then
all output enables are inactive and all pins are set to input mode which
means CS will go to default state high(deassert). This leads to an issue
when core explicitly ask not to deassert the CS (cs_change = 1). This
patch fix the above issue by checking the Slave select status bits from
configuration register before disabling the SPI.

Signed-off-by: Sai Krishna Potthuri <lakshmi.sai.krishna.potthuri@xilinx.com>
Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@xilinx.com>
Link: https://lore.kernel.org/r/20220606062525.18447-1-amit.kumar-mahapatra@xilinx.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/spi/spi-cadence.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index ceb16e70d235..90b18c32f859 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -69,6 +69,7 @@
 #define CDNS_SPI_BAUD_DIV_SHIFT		3 /* Baud rate divisor shift in CR */
 #define CDNS_SPI_SS_SHIFT		10 /* Slave Select field shift in CR */
 #define CDNS_SPI_SS0			0x1 /* Slave Select zero */
+#define CDNS_SPI_NOSS			0x3C /* No Slave select */
 
 /*
  * SPI Interrupt Registers bit Masks
@@ -449,15 +450,20 @@ static int cdns_prepare_transfer_hardware(struct spi_master *master)
  * @master:	Pointer to the spi_master structure which provides
  *		information about the controller.
  *
- * This function disables the SPI master controller.
+ * This function disables the SPI master controller when no slave selected.
  *
  * Return:	0 always
  */
 static int cdns_unprepare_transfer_hardware(struct spi_master *master)
 {
 	struct cdns_spi *xspi = spi_master_get_devdata(master);
+	u32 ctrl_reg;
 
-	cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
+	/* Disable the SPI if slave is deselected */
+	ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
+	ctrl_reg = (ctrl_reg & CDNS_SPI_CR_SSCTRL) >>  CDNS_SPI_SS_SHIFT;
+	if (ctrl_reg == CDNS_SPI_NOSS)
+		cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
 
 	return 0;
 }
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2022-06-28 13:12 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-28  2:17 [PATCH AUTOSEL 5.18 01/53] spi: spi-cadence: Fix SPI CS gets toggling sporadically Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 02/53] spi: cadence: Detect transmit FIFO depth Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 03/53] spi: spi-mem: Fix spi_mem_poll_status() Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 04/53] arm64: s32g2: Pass unit name to soc node Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 05/53] regulator: qcom_smd: correct MP5496 ranges Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 06/53] ALSA: usb-audio: US16x08: Move overflow check before array access Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 07/53] bus: bt1-apb: Don't print error on -EPROBE_DEFER Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 08/53] bus: bt1-axi: " Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 09/53] selftests: Fix clang cross compilation Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 10/53] drm/vc4: plane: Prevent async update if we don't have a dlist Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 11/53] drm/vc4: crtc: Use an union to store the page flip callback Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 12/53] drm/vc4: crtc: Move the BO handling out of common page-flip callback Sasha Levin
2022-06-28  2:17 ` [PATCH AUTOSEL 5.18 13/53] selftests: vm: Fix resource leak when return error Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 14/53] scsi: ufs: Simplify ufshcd_clear_cmd() Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 15/53] scsi: ufs: Support clearing multiple commands at once Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 16/53] scsi: ufs: Fix a race between the interrupt handler and the reset handler Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 17/53] selftests/bpf: Shuffle cookies symbols in kprobe multi test Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 18/53] ALSA: x86: intel_hdmi_audio: enable pm_runtime and set autosuspend delay Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 19/53] ALSA: x86: intel_hdmi_audio: use pm_runtime_resume_and_get() Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 20/53] hamradio: 6pack: fix array-index-out-of-bounds in decode_std_command() Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 21/53] block: serialize all debugfs operations using q->debugfs_mutex Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 22/53] block: remove per-disk debugfs files in blk_unregister_queue Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 23/53] block: freeze the queue earlier in del_gendisk Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 24/53] drivers/net/ethernet/neterion/vxge: Fix a use-after-free bug in vxge-main.c Sasha Levin
2022-06-28  4:38   ` Jakub Kicinski
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 25/53] powerpc/prom_init: Fix build failure with GCC_PLUGIN_STRUCTLEAK_BYREF_ALL and KASAN Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 26/53] libperf evsel: Open shouldn't leak fd on failure Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 27/53] drm: panel-orientation-quirks: Add quirk for Aya Neo Next Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 28/53] iio: freq: admv1014: Fix warning about dubious x & !y and improve readability Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 29/53] spi: rockchip: Unmask IRQ at the final to avoid preemption Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 30/53] video: fbdev: skeletonfb: Fix syntax errors in comments Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 31/53] video: fbdev: intelfb: Use aperture size from pci_resource_len Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 32/53] io_uring: mark reissue requests with REQ_F_PARTIAL_IO Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 33/53] video: fbdev: pxa3xx-gcu: Fix integer overflow in pxa3xx_gcu_write Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 34/53] video: fbdev: simplefb: Check before clk_put() not needed Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 35/53] btrfs: add missing inode updates on each iteration when replacing extents Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 36/53] btrfs: do not BUG_ON() on failure to migrate space " Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 37/53] io_uring: fix merge error in checking send/recv addr2 flags Sasha Levin
2022-06-28 13:12   ` Jens Axboe
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 38/53] drm/xen: Add missing VM_DONTEXPAND flag in mmap callback Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 39/53] arch: mips: generic: Add missing of_node_put() in board-ranchu.c Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 40/53] mips: mti-malta: Fix refcount leak in malta-time.c Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 41/53] mips: ralink: Fix refcount leak in of.c Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 42/53] mips: lantiq: falcon: Fix refcount leak bug in sysctrl Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 43/53] mips: lantiq: xway: " Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 44/53] mips/pic32/pic32mzda: Fix refcount leak bugs Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 45/53] mips: dts: ingenic: Add TCU clock to x1000/x1830 tcu device node Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 46/53] mips: lantiq: Add missing of_node_put() in irq.c Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 47/53] drm/sun4i: Add DMA mask and segment size Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 48/53] drm/sun4i: Return if frontend is not present Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 49/53] hinic: Replace memcpy() with direct assignment Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 50/53] drm/amdgpu: Adjust logic around GTT size (v3) Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 51/53] nvme: add a bogus subsystem NQN quirk for Micron MTFDKBA2T0TFH Sasha Levin
2022-06-28  2:18 ` [PATCH AUTOSEL 5.18 52/53] gpio: grgpio: Fix device removing Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).