From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Kevin Groeneveld <kgroeneveld@lenbrook.com>,
Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org>,
shawnguo@kernel.org, linux-spi@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH AUTOSEL 6.2 10/20] spi: spi-imx: fix MX51_ECSPI_* macros when cs > 3
Date: Sat, 6 May 2023 20:32:25 -0400 [thread overview]
Message-ID: <20230507003237.4074305-10-sashal@kernel.org> (raw)
In-Reply-To: <20230507003237.4074305-1-sashal@kernel.org>
From: Kevin Groeneveld <kgroeneveld@lenbrook.com>
[ Upstream commit 87c614175bbf28d3fd076dc2d166bac759e41427 ]
When using gpio based chip select the cs value can go outside the range
0 – 3. The various MX51_ECSPI_* macros did not take this into consideration
resulting in possible corruption of the configuration.
For example for any cs value over 3 the SCLKPHA bits would not be set and
other values in the register possibly corrupted.
One way to fix this is to just mask the cs bits to 2 bits. This still
allows all 4 native chip selects to work as well as gpio chip selects
(which can use any of the 4 chip select configurations).
Signed-off-by: Kevin Groeneveld <kgroeneveld@lenbrook.com>
Link: https://lore.kernel.org/r/20230318222132.3373-1-kgroeneveld@lenbrook.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/spi/spi-imx.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index e4ccd0c329d06..c61c7ac4c70c4 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -252,6 +252,18 @@ static bool spi_imx_can_dma(struct spi_controller *controller, struct spi_device
return true;
}
+/*
+ * Note the number of natively supported chip selects for MX51 is 4. Some
+ * devices may have less actual SS pins but the register map supports 4. When
+ * using gpio chip selects the cs values passed into the macros below can go
+ * outside the range 0 - 3. We therefore need to limit the cs value to avoid
+ * corrupting bits outside the allocated locations.
+ *
+ * The simplest way to do this is to just mask the cs bits to 2 bits. This
+ * still allows all 4 native chip selects to work as well as gpio chip selects
+ * (which can use any of the 4 chip select configurations).
+ */
+
#define MX51_ECSPI_CTRL 0x08
#define MX51_ECSPI_CTRL_ENABLE (1 << 0)
#define MX51_ECSPI_CTRL_XCH (1 << 2)
@@ -260,16 +272,16 @@ static bool spi_imx_can_dma(struct spi_controller *controller, struct spi_device
#define MX51_ECSPI_CTRL_DRCTL(drctl) ((drctl) << 16)
#define MX51_ECSPI_CTRL_POSTDIV_OFFSET 8
#define MX51_ECSPI_CTRL_PREDIV_OFFSET 12
-#define MX51_ECSPI_CTRL_CS(cs) ((cs) << 18)
+#define MX51_ECSPI_CTRL_CS(cs) ((cs & 3) << 18)
#define MX51_ECSPI_CTRL_BL_OFFSET 20
#define MX51_ECSPI_CTRL_BL_MASK (0xfff << 20)
#define MX51_ECSPI_CONFIG 0x0c
-#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs) + 0))
-#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs) + 4))
-#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs) + 8))
-#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs) + 12))
-#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs) + 20))
+#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs & 3) + 0))
+#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs & 3) + 4))
+#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs & 3) + 8))
+#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs & 3) + 12))
+#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs & 3) + 20))
#define MX51_ECSPI_INT 0x10
#define MX51_ECSPI_INT_TEEN (1 << 0)
--
2.39.2
next prev parent reply other threads:[~2023-05-07 0:34 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-07 0:32 [PATCH AUTOSEL 6.2 01/20] ASoC: jack: allow multiple interrupt per gpio Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 02/20] staging: rtl8192e: Replace macro RTL_PCI_DEVICE with PCI_DEVICE Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 03/20] HID: apple: Set the tilde quirk flag on the Geyser 4 and later Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 04/20] iio: imu: st_lsm6dsx: discard samples during filters settling time Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 05/20] staging: axis-fifo: initialize timeouts in init only Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 06/20] ASoC: tegra: Support coupled mic-hp detection Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 07/20] ASoC: amd: yc: Add DMI entries to support HP OMEN 16-n0xxx (8A42) Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 08/20] HID: logitech-hidpp: Don't use the USB serial for USB devices Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 09/20] HID: logitech-hidpp: Reconcile USB and Unifying serials Sasha Levin
2023-05-07 0:32 ` Sasha Levin [this message]
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 11/20] usb: typec: ucsi: acpi: add quirk for ASUS Zenbook UM325 Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 12/20] ALSA: hda: LNL: add HD Audio PCI ID Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 13/20] ASoC: amd: Add Dell G15 5525 to quirks list Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 14/20] ASoC: amd: yc: Add ThinkBook 14 G5+ ARP to quirks list for acp6x Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 15/20] HID: apple: Set the tilde quirk flag on the Geyser 3 Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 16/20] HID: Ignore battery for ELAN touchscreen on ROG Flow X13 GV301RA Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 17/20] HID: wacom: generic: Set battery quirk only when we see battery data Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 18/20] usb: typec: tcpm: fix multiple times discover svids error Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 19/20] serial: 8250: Reinit port->pm on port specific driver unbind Sasha Levin
2023-05-07 0:32 ` [PATCH AUTOSEL 6.2 20/20] mcb-pci: Reallocate memory region to avoid memory overlapping Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230507003237.4074305-10-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=broonie@kernel.org \
--cc=kgroeneveld@lenbrook.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=shawnguo@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox