All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 6.5 01/45] spi: sun6i: add quirk for dual and quad SPI modes support
@ 2023-09-08 18:12 ` Sasha Levin
  0 siblings, 0 replies; 80+ messages in thread
From: Sasha Levin @ 2023-09-08 18:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Maksim Kiselev, Mark Brown, Sasha Levin, wens, jernej.skrabec,
	samuel, linux-spi, linux-arm-kernel, linux-sunxi

From: Maksim Kiselev <bigunclemax@gmail.com>

[ Upstream commit 0605d9fb411f3337482976842a3901d6c125d298 ]

New Allwinner's SPI controllers can support dual and quad SPI modes.
To enable one of these modes, we should set the corresponding bit in
the SUN6I_BURST_CTL_CNT_REG register. DRM (28 bits) for dual mode and
Quad_EN (29 bits) for quad transmission.

Signed-off-by: Maksim Kiselev <bigunclemax@gmail.com>
Link: https://lore.kernel.org/r/20230624131632.2972546-2-bigunclemax@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/spi/spi-sun6i.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
index 30d541612253e..cec2747235abf 100644
--- a/drivers/spi/spi-sun6i.c
+++ b/drivers/spi/spi-sun6i.c
@@ -83,6 +83,9 @@
 #define SUN6I_XMIT_CNT_REG		0x34
 
 #define SUN6I_BURST_CTL_CNT_REG		0x38
+#define SUN6I_BURST_CTL_CNT_STC_MASK		GENMASK(23, 0)
+#define SUN6I_BURST_CTL_CNT_DRM			BIT(28)
+#define SUN6I_BURST_CTL_CNT_QUAD_EN		BIT(29)
 
 #define SUN6I_TXDATA_REG		0x200
 #define SUN6I_RXDATA_REG		0x300
@@ -90,6 +93,7 @@
 struct sun6i_spi_cfg {
 	unsigned long		fifo_depth;
 	bool			has_clk_ctl;
+	u32			mode_bits;
 };
 
 struct sun6i_spi {
@@ -266,7 +270,7 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
 	unsigned int div, div_cdr1, div_cdr2, timeout;
 	unsigned int start, end, tx_time;
 	unsigned int trig_level;
-	unsigned int tx_len = 0, rx_len = 0;
+	unsigned int tx_len = 0, rx_len = 0, nbits = 0;
 	bool use_dma;
 	int ret = 0;
 	u32 reg;
@@ -418,13 +422,29 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
 	sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, reg);
 
 	/* Setup the transfer now... */
-	if (sspi->tx_buf)
+	if (sspi->tx_buf) {
 		tx_len = tfr->len;
+		nbits = tfr->tx_nbits;
+	} else if (tfr->rx_buf) {
+		nbits = tfr->rx_nbits;
+	}
+
+	switch (nbits) {
+	case SPI_NBITS_DUAL:
+		reg = SUN6I_BURST_CTL_CNT_DRM;
+		break;
+	case SPI_NBITS_QUAD:
+		reg = SUN6I_BURST_CTL_CNT_QUAD_EN;
+		break;
+	case SPI_NBITS_SINGLE:
+	default:
+		reg = FIELD_PREP(SUN6I_BURST_CTL_CNT_STC_MASK, tx_len);
+	}
 
 	/* Setup the counters */
+	sun6i_spi_write(sspi, SUN6I_BURST_CTL_CNT_REG, reg);
 	sun6i_spi_write(sspi, SUN6I_BURST_CNT_REG, tfr->len);
 	sun6i_spi_write(sspi, SUN6I_XMIT_CNT_REG, tx_len);
-	sun6i_spi_write(sspi, SUN6I_BURST_CTL_CNT_REG, tx_len);
 
 	if (!use_dma) {
 		/* Fill the TX FIFO */
@@ -623,7 +643,8 @@ static int sun6i_spi_probe(struct platform_device *pdev)
 	master->set_cs = sun6i_spi_set_cs;
 	master->transfer_one = sun6i_spi_transfer_one;
 	master->num_chipselect = 4;
-	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST;
+	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST |
+			    sspi->cfg->mode_bits;
 	master->bits_per_word_mask = SPI_BPW_MASK(8);
 	master->dev.of_node = pdev->dev.of_node;
 	master->auto_runtime_pm = true;
-- 
2.40.1


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

end of thread, other threads:[~2023-09-13 14:56 UTC | newest]

Thread overview: 80+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-08 18:12 [PATCH AUTOSEL 6.5 01/45] spi: sun6i: add quirk for dual and quad SPI modes support Sasha Levin
2023-09-08 18:12 ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 02/45] devlink: remove reload failed checks in params get/set callbacks Sasha Levin
2023-09-08 21:27   ` Jakub Kicinski
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 03/45] crypto: lrw,xts - Replace strlcpy with strscpy Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 04/45] regulator: max77857: Add ADI MAX77857/59/MAX77831 Regulator Support Sasha Levin
2023-09-08 23:16   ` Mark Brown
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 05/45] net: stmmac: use per-queue 64 bit statistics where necessary Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-13 14:43   ` Jisheng Zhang
2023-09-13 14:43     ` Jisheng Zhang
2023-09-08 18:12 ` [Intel-wired-lan] [PATCH AUTOSEL 6.5 06/45] ice: Don't tx before switchdev is fully configured Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 07/45] wifi: ath9k: fix fortify warnings Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 08/45] wifi: ath9k: fix printk specifier Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 09/45] wifi: rtw88: delete timer and free skb queue when unloading Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 10/45] wifi: mwifiex: fix fortify warning Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 11/45] mt76: mt7921: don't assume adequate headroom for SDIO headers Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 12/45] wifi: wil6210: fix fortify warnings Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 13/45] can: sun4i_can: Add acceptance register quirk Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 14/45] can: sun4i_can: Add support for the Allwinner D1 Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 15/45] net: Use sockaddr_storage for getsockopt(SO_PEERNAME) Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 16/45] wifi: ath12k: Fix a NULL pointer dereference in ath12k_mac_op_hw_scan() Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 17/45] wifi: ath12k: avoid array overflow of hw mode for preferred_hw_mode Sasha Levin
2023-09-08 18:12   ` Sasha Levin
2023-09-08 18:12 ` [PATCH AUTOSEL 6.5 18/45] net/ipv4: return the real errno instead of -EINVAL Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 19/45] net: annotate data-races around sock->ops Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 20/45] crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui() Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 21/45] Bluetooth: btusb: Add device 0489:e0f5 as MT7922 device Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 22/45] Bluetooth: btusb: Add a new VID/PID 0489/e0f6 for MT7922 Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 23/45] Bluetooth: btusb: Add new VID/PID 0489/e102 " Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 24/45] Bluetooth: btusb: Add new VID/PID 04ca/3804 " Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 25/45] Bluetooth: Fix hci_suspend_sync crash Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 26/45] Bluetooth: btusb: Add support for another MediaTek 7922 VID/PID Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 27/45] netlink: convert nlk->flags to atomic flags Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 28/45] tpm_tis: Resend command to recover from data transfer errors Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 29/45] mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450 Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 30/45] alx: fix OOB-read compiler warning Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 31/45] wifi: iwlwifi: pcie: avoid a warning in case prepare card failed Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 32/45] wifi: mac80211: check S1G action frame size Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 33/45] netfilter: ebtables: fix fortify warnings in size_entry_mwt() Sasha Levin
2023-09-08 18:13   ` [Bridge] " Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 34/45] wifi: cfg80211: reject auth/assoc to AP with our address Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 35/45] wifi: cfg80211: ocb: don't leave if not joined Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 36/45] wifi: mac80211: check for station first in client probe Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 37/45] wifi: mac80211_hwsim: drop short frames Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 38/45] Revert "wifi: mac80211_hwsim: check the return value of nla_put_u32" Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 39/45] libbpf: Free btf_vmlinux when closing bpf_object Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 40/45] wifi: ath12k: Fix memory leak in rx_desc and tx_desc Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 41/45] Bluetooth: btusb: Fix quirks table naming Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 42/45] wifi: ath12k: add check max message length while scanning with extraie Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 43/45] Fix nomenclature for USB and PCI wireless devices Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 18:13   ` Sasha Levin
2023-09-08 19:12   ` Alan Stern
2023-09-08 19:12     ` Alan Stern
2023-09-08 19:12     ` Alan Stern
2023-09-08 19:12     ` Alan Stern
2023-09-08 19:12     ` Alan Stern
2023-09-08 21:31     ` Greg Kroah-Hartman
2023-09-08 21:31       ` Greg Kroah-Hartman
2023-09-08 21:31       ` Greg Kroah-Hartman
2023-09-08 21:31       ` Greg Kroah-Hartman
2023-09-08 21:31       ` Greg Kroah-Hartman
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 44/45] bpf: Consider non-owning refs trusted Sasha Levin
2023-09-08 18:13 ` [PATCH AUTOSEL 6.5 45/45] bpf: Consider non-owning refs to refcounted nodes RCU protected Sasha Levin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.