public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 6.6 01/10] dmaengine: apple-admac: Keep upper bits of REG_BUS_WIDTH
@ 2024-01-29 18:35 Sasha Levin
  2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 02/10] scsi: smartpqi: Add new controller PCI IDs Sasha Levin
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Sasha Levin @ 2024-01-29 18:35 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Hector Martin, Martin Povišer, Vinod Koul, Sasha Levin, sven,
	asahi, linux-arm-kernel, dmaengine

From: Hector Martin <marcan@marcan.st>

[ Upstream commit 306f5df81fcc89b462fbeb9dbe26d9a8ad7c7582 ]

For RX channels, REG_BUS_WIDTH seems to default to a value of 0xf00, and
macOS preserves the upper bits when setting the configuration in the
lower ones. If we reset the upper bits to 0, this causes framing errors
on suspend/resume (the data stream "tears" and channels get swapped
around). Keeping the upper bits untouched, like the macOS driver does,
fixes this issue.

Signed-off-by: Hector Martin <marcan@marcan.st>
Reviewed-by: Martin Povišer <povik+lin@cutebit.org>
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
Link: https://lore.kernel.org/r/20231029170704.82238-1-povik+lin@cutebit.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/dma/apple-admac.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c
index 3af795635c5c..356298e4dd22 100644
--- a/drivers/dma/apple-admac.c
+++ b/drivers/dma/apple-admac.c
@@ -57,6 +57,8 @@
 
 #define REG_BUS_WIDTH(ch)	(0x8040 + (ch) * 0x200)
 
+#define BUS_WIDTH_WORD_SIZE	GENMASK(3, 0)
+#define BUS_WIDTH_FRAME_SIZE	GENMASK(7, 4)
 #define BUS_WIDTH_8BIT		0x00
 #define BUS_WIDTH_16BIT		0x01
 #define BUS_WIDTH_32BIT		0x02
@@ -740,7 +742,8 @@ static int admac_device_config(struct dma_chan *chan,
 	struct admac_data *ad = adchan->host;
 	bool is_tx = admac_chan_direction(adchan->no) == DMA_MEM_TO_DEV;
 	int wordsize = 0;
-	u32 bus_width = 0;
+	u32 bus_width = readl_relaxed(ad->base + REG_BUS_WIDTH(adchan->no)) &
+		~(BUS_WIDTH_WORD_SIZE | BUS_WIDTH_FRAME_SIZE);
 
 	switch (is_tx ? config->dst_addr_width : config->src_addr_width) {
 	case DMA_SLAVE_BUSWIDTH_1_BYTE:
-- 
2.43.0


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

end of thread, other threads:[~2024-01-29 18:35 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-29 18:35 [PATCH AUTOSEL 6.6 01/10] dmaengine: apple-admac: Keep upper bits of REG_BUS_WIDTH Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 02/10] scsi: smartpqi: Add new controller PCI IDs Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 03/10] scsi: smartpqi: Fix logical volume rescan race condition Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 04/10] tools: selftests: riscv: Fix compile warnings in vector tests Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 05/10] tools: selftests: riscv: Fix compile warnings in mm tests Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 06/10] scsi: target: core: Add TMF to tmr_list handling Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 07/10] cifs: open_cached_dir should not rely on primary channel Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 08/10] dmaengine: shdma: increase size of 'dev_id' Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 09/10] dmaengine: fsl-qdma: increase size of 'irq_name' Sasha Levin
2024-01-29 18:35 ` [PATCH AUTOSEL 6.6 10/10] dmaengine: dw-edma: increase size of 'name' in debugfs code Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox