linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for
@ 2023-06-15  7:07 Praveen Talari
  2023-06-15  7:07 ` [PATCH v2 1/3] soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3 Praveen Talari
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Praveen Talari @ 2023-06-15  7:07 UTC (permalink / raw)
  To: agross, andersson, konrad.dybcio, broonie, robh+dt,
	krzysztof.kozlowski+dt, conor+dt, linux-arm-msm, linux-spi,
	linux-kernel
  Cc: quic_msavaliy, quic_vtanuku, quic_vnivarth, quic_arandive,
	Praveen Talari

This series adds spi slave mode functionality to geni based Qupv3.
The common header file contains spi slave related registers and masks.

Praveen Talari (3):
  soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3
  spi: dt-bindings: qcom,spi-geni-qcom: Add SPI SLAVE mode support for
    GENI based QuPv3
  spi: spi-geni-qcom: Add SPI SLAVE mode support for GENI based QuPv3
---
v1 -> v2:
- Added dt-binding change for spi slave
- Modified commit message
- Addressed review comments in driver
 .../bindings/spi/qcom,spi-geni-qcom.yaml      |  2 +
 drivers/spi/spi-geni-qcom.c                   | 57 +++++++++++++++++--
 include/linux/soc/qcom/geni-se.h              |  9 +++
 3 files changed, 62 insertions(+), 6 deletions(-)

-- 
2.17.1


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

* [PATCH v2 1/3] soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3
  2023-06-15  7:07 [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Praveen Talari
@ 2023-06-15  7:07 ` Praveen Talari
  2023-06-15  7:07 ` [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: " Praveen Talari
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Praveen Talari @ 2023-06-15  7:07 UTC (permalink / raw)
  To: agross, andersson, konrad.dybcio, broonie, robh+dt,
	krzysztof.kozlowski+dt, conor+dt, linux-arm-msm, linux-spi,
	linux-kernel
  Cc: quic_msavaliy, quic_vtanuku, quic_vnivarth, quic_arandive,
	Praveen Talari

Add slave mode support related registers and masks.

Signed-off-by: Praveen Talari <quic_ptalari@quicinc.com>
---
v1 -> v2:
- modified commit message
---
---
 include/linux/soc/qcom/geni-se.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/linux/soc/qcom/geni-se.h b/include/linux/soc/qcom/geni-se.h
index 821a19135bb6..29e06905bc1f 100644
--- a/include/linux/soc/qcom/geni-se.h
+++ b/include/linux/soc/qcom/geni-se.h
@@ -35,6 +35,7 @@ enum geni_se_protocol_type {
 	GENI_SE_UART,
 	GENI_SE_I2C,
 	GENI_SE_I3C,
+	GENI_SE_SPI_SLAVE,
 };
 
 struct geni_wrapper;
@@ -73,12 +74,14 @@ struct geni_se {
 
 /* Common SE registers */
 #define GENI_FORCE_DEFAULT_REG		0x20
+#define GENI_OUTPUT_CTRL		0x24
 #define SE_GENI_STATUS			0x40
 #define GENI_SER_M_CLK_CFG		0x48
 #define GENI_SER_S_CLK_CFG		0x4c
 #define GENI_IF_DISABLE_RO		0x64
 #define GENI_FW_REVISION_RO		0x68
 #define SE_GENI_CLK_SEL			0x7c
+#define SE_GENI_CFG_SEQ_START		0x84
 #define SE_GENI_DMA_MODE_EN		0x258
 #define SE_GENI_M_CMD0			0x600
 #define SE_GENI_M_CMD_CTRL_REG		0x604
@@ -111,6 +114,9 @@ struct geni_se {
 /* GENI_FORCE_DEFAULT_REG fields */
 #define FORCE_DEFAULT	BIT(0)
 
+/* GENI_OUTPUT_CTRL fields */
+#define GENI_IO_MUX_0_EN		BIT(0)
+
 /* GENI_STATUS fields */
 #define M_GENI_CMD_ACTIVE		BIT(0)
 #define S_GENI_CMD_ACTIVE		BIT(12)
@@ -130,6 +136,9 @@ struct geni_se {
 /* GENI_CLK_SEL fields */
 #define CLK_SEL_MSK			GENMASK(2, 0)
 
+/* SE_GENI_CFG_SEQ_START fields */
+#define START_TRIGGER			BIT(0)
+
 /* SE_GENI_DMA_MODE_EN */
 #define GENI_DMA_MODE_EN		BIT(0)
 
-- 
2.17.1


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

* [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: Add SPI SLAVE mode support for GENI based QuPv3
  2023-06-15  7:07 [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Praveen Talari
  2023-06-15  7:07 ` [PATCH v2 1/3] soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3 Praveen Talari
@ 2023-06-15  7:07 ` Praveen Talari
  2023-06-15 13:23   ` Krzysztof Kozlowski
  2023-06-15  7:07 ` [PATCH v2 3/3] spi: spi-geni-qcom: " Praveen Talari
  2023-06-15 17:54 ` [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Mark Brown
  3 siblings, 1 reply; 6+ messages in thread
From: Praveen Talari @ 2023-06-15  7:07 UTC (permalink / raw)
  To: agross, andersson, konrad.dybcio, broonie, robh+dt,
	krzysztof.kozlowski+dt, conor+dt, linux-arm-msm, linux-spi,
	linux-kernel
  Cc: quic_msavaliy, quic_vtanuku, quic_vnivarth, quic_arandive,
	Praveen Talari

Set this property to configure QUPV3 as SPI slave controller.

Signed-off-by: Praveen Talari <quic_ptalari@quicinc.com>
---
 Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
index 2e20ca313ec1..cdd6d19876d3 100644
--- a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
+++ b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
@@ -66,6 +66,8 @@ properties:
   reg:
     maxItems: 1
 
+  qcom,slv-ctrl:
+
 required:
   - compatible
   - clocks
-- 
2.17.1


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

* [PATCH v2 3/3] spi: spi-geni-qcom: Add SPI SLAVE mode support for GENI based QuPv3
  2023-06-15  7:07 [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Praveen Talari
  2023-06-15  7:07 ` [PATCH v2 1/3] soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3 Praveen Talari
  2023-06-15  7:07 ` [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: " Praveen Talari
@ 2023-06-15  7:07 ` Praveen Talari
  2023-06-15 17:54 ` [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Mark Brown
  3 siblings, 0 replies; 6+ messages in thread
From: Praveen Talari @ 2023-06-15  7:07 UTC (permalink / raw)
  To: agross, andersson, konrad.dybcio, broonie, robh+dt,
	krzysztof.kozlowski+dt, conor+dt, linux-arm-msm, linux-spi,
	linux-kernel
  Cc: quic_msavaliy, quic_vtanuku, quic_vnivarth, quic_arandive,
	Praveen Talari

Currently spi geni driver supports only master mode operation.

Add slave mode support to GENI based QuPv3.

Signed-off-by: Praveen Talari <quic_ptalari@quicinc.com>
---
v1 -> v2
- modified the commit message
- added the code changes for code comments
---
---
 drivers/spi/spi-geni-qcom.c | 57 +++++++++++++++++++++++++++++++++----
 1 file changed, 51 insertions(+), 6 deletions(-)

diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index 206cc04bb1ed..2170bd6b7eef 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -12,6 +12,7 @@
 #include <linux/platform_device.h>
 #include <linux/pm_opp.h>
 #include <linux/pm_runtime.h>
+#include <linux/property.h>
 #include <linux/soc/qcom/geni-se.h>
 #include <linux/spi/spi.h>
 #include <linux/spinlock.h>
@@ -52,6 +53,9 @@
 #define SPI_CS_CLK_DELAY_MSK		GENMASK(19, 10)
 #define SPI_CS_CLK_DELAY_SHFT		10
 
+#define SE_SPI_SLAVE_EN				(0x2BC)
+#define SPI_SLAVE_EN				BIT(0)
+
 /* M_CMD OP codes for SPI */
 #define SPI_TX_ONLY		1
 #define SPI_RX_ONLY		2
@@ -99,6 +103,24 @@ struct spi_geni_master {
 	int cur_xfer_mode;
 };
 
+static struct spi_master *get_spi_master(struct device *dev)
+{
+	struct platform_device *pdev = to_platform_device(dev);
+	struct spi_master *spi = platform_get_drvdata(pdev);
+
+	return spi;
+}
+
+static void spi_slv_setup(struct spi_geni_master *mas)
+{
+	struct geni_se *se = &mas->se;
+
+	writel(SPI_SLAVE_EN, se->base + SE_SPI_SLAVE_EN);
+	writel(GENI_IO_MUX_0_EN, se->base + GENI_OUTPUT_CTRL);
+	writel(START_TRIGGER, se->base + SE_GENI_CFG_SEQ_START);
+	dev_dbg(mas->dev, "spi slave setup done\n");
+}
+
 static int get_spi_clk_cfg(unsigned int speed_hz,
 			struct spi_geni_master *mas,
 			unsigned int *clk_idx,
@@ -140,12 +162,18 @@ static void handle_se_timeout(struct spi_master *spi,
 	const struct spi_transfer *xfer;
 
 	spin_lock_irq(&mas->lock);
-	reinit_completion(&mas->cancel_done);
 	if (mas->cur_xfer_mode == GENI_SE_FIFO)
 		writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
 
 	xfer = mas->cur_xfer;
 	mas->cur_xfer = NULL;
+
+	if (spi->slave) {
+		spin_unlock_irq(&mas->lock);
+		goto unmap_if_dma;
+	}
+
+	reinit_completion(&mas->cancel_done);
 	geni_se_cancel_m_cmd(se);
 	spin_unlock_irq(&mas->lock);
 
@@ -542,6 +570,10 @@ static bool geni_can_dma(struct spi_controller *ctlr,
 	if (mas->cur_xfer_mode == GENI_GPI_DMA)
 		return true;
 
+	/* Set DMA mode for SPI slave. */
+	if (ctlr->slave)
+		return true;
+
 	len = get_xfer_len_in_words(xfer, mas);
 	fifo_size = mas->tx_fifo_depth * mas->fifo_width_bits / mas->cur_bits_per_word;
 
@@ -619,6 +651,7 @@ static void spi_geni_release_dma_chan(struct spi_geni_master *mas)
 
 static int spi_geni_init(struct spi_geni_master *mas)
 {
+	struct spi_master *spi = get_spi_master(mas->dev);
 	struct geni_se *se = &mas->se;
 	unsigned int proto, major, minor, ver;
 	u32 spi_tx_cfg, fifo_disable;
@@ -627,7 +660,14 @@ static int spi_geni_init(struct spi_geni_master *mas)
 	pm_runtime_get_sync(mas->dev);
 
 	proto = geni_se_read_proto(se);
-	if (proto != GENI_SE_SPI) {
+
+	if (spi->slave) {
+		if (proto != GENI_SE_SPI_SLAVE) {
+			dev_err(mas->dev, "Invalid proto %d\n", proto);
+			goto out_pm;
+		}
+		spi_slv_setup(mas);
+	} else if (proto != GENI_SE_SPI) {
 		dev_err(mas->dev, "Invalid proto %d\n", proto);
 		goto out_pm;
 	}
@@ -677,9 +717,11 @@ static int spi_geni_init(struct spi_geni_master *mas)
 	}
 
 	/* We always control CS manually */
-	spi_tx_cfg = readl(se->base + SE_SPI_TRANS_CFG);
-	spi_tx_cfg &= ~CS_TOGGLE;
-	writel(spi_tx_cfg, se->base + SE_SPI_TRANS_CFG);
+	if (!spi->slave) {
+		spi_tx_cfg = readl(se->base + SE_SPI_TRANS_CFG);
+		spi_tx_cfg &= ~CS_TOGGLE;
+		writel(spi_tx_cfg, se->base + SE_SPI_TRANS_CFG);
+	}
 
 out_pm:
 	pm_runtime_put(mas->dev);
@@ -1072,6 +1114,9 @@ static int spi_geni_probe(struct platform_device *pdev)
 	pm_runtime_set_autosuspend_delay(&pdev->dev, 250);
 	pm_runtime_enable(dev);
 
+	if (device_property_read_bool(&pdev->dev, "qcom,slv-ctrl"))
+		spi->slave = true;
+
 	ret = geni_icc_get(&mas->se, NULL);
 	if (ret)
 		goto spi_geni_probe_runtime_disable;
@@ -1092,7 +1137,7 @@ static int spi_geni_probe(struct platform_device *pdev)
 	 * for dma (gsi) mode, the gsi will set cs based on params passed in
 	 * TRE
 	 */
-	if (mas->cur_xfer_mode == GENI_SE_FIFO)
+	if (!spi->slave && mas->cur_xfer_mode == GENI_SE_FIFO)
 		spi->set_cs = spi_geni_set_cs;
 
 	ret = request_irq(mas->irq, geni_spi_isr, 0, dev_name(dev), spi);
-- 
2.17.1


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

* Re: [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: Add SPI SLAVE mode support for GENI based QuPv3
  2023-06-15  7:07 ` [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: " Praveen Talari
@ 2023-06-15 13:23   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2023-06-15 13:23 UTC (permalink / raw)
  To: Praveen Talari, agross, andersson, konrad.dybcio, broonie,
	robh+dt, krzysztof.kozlowski+dt, conor+dt, linux-arm-msm,
	linux-spi, linux-kernel
  Cc: quic_msavaliy, quic_vtanuku, quic_vnivarth, quic_arandive

On 15/06/2023 09:07, Praveen Talari wrote:
> Set this property to configure QUPV3 as SPI slave controller.

1. Please use subject prefixes matching the subsystem. You can get them
for example with `git log --oneline -- DIRECTORY_OR_FILE` on the
directory your patch is touching.

2. Please use scripts/get_maintainers.pl to get a list of necessary
people and lists to CC.  It might happen, that command when run on an
older kernel, gives you outdated entries.  Therefore please be sure you
base your patches on recent Linux kernel.

You missed at least DT list (maybe more), so this won't be tested by our
tools. Performing review on untested code might be a waste of time, thus
I will skip this patch entirely till you follow the process allowing the
patch to be tested.

Please kindly resend and include all necessary To/Cc entries.

3. Commit msg: Don't explain what you are doing, but explain why you are
doing and why this is needed.

> 
> Signed-off-by: Praveen Talari <quic_ptalari@quicinc.com>
> ---
>  Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
> index 2e20ca313ec1..cdd6d19876d3 100644
> --- a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
> +++ b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml
> @@ -66,6 +66,8 @@ properties:
>    reg:
>      maxItems: 1
>  
> +  qcom,slv-ctrl:

It does not look like you tested the bindings, at least after quick
look. Please run `make dt_binding_check` (see
Documentation/devicetree/bindings/writing-schema.rst for instructions).
Maybe you need to update your dtschema and yamllint.

Awesome, so you send untested, broken code skipping necessary mailing
lists so even automation won't test it. :(

Best regards,
Krzysztof


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

* Re: [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for
  2023-06-15  7:07 [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Praveen Talari
                   ` (2 preceding siblings ...)
  2023-06-15  7:07 ` [PATCH v2 3/3] spi: spi-geni-qcom: " Praveen Talari
@ 2023-06-15 17:54 ` Mark Brown
  3 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2023-06-15 17:54 UTC (permalink / raw)
  To: Praveen Talari
  Cc: agross, andersson, konrad.dybcio, robh+dt, krzysztof.kozlowski+dt,
	conor+dt, linux-arm-msm, linux-spi, linux-kernel, quic_msavaliy,
	quic_vtanuku, quic_vnivarth, quic_arandive

[-- Attachment #1: Type: text/plain, Size: 298 bytes --]

On Thu, Jun 15, 2023 at 12:37:03PM +0530, Praveen Talari wrote:
> This series adds spi slave mode functionality to geni based Qupv3.
> The common header file contains spi slave related registers and masks.

The more modern terminology here is device mode, pleaae prefer to use
that where possible.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2023-06-15 17:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-15  7:07 [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Praveen Talari
2023-06-15  7:07 ` [PATCH v2 1/3] soc: qcom: geni-se: Add SPI SLAVE mode support for GENI based QuPv3 Praveen Talari
2023-06-15  7:07 ` [PATCH v2 2/3] spi: dt-bindings: qcom,spi-geni-qcom: " Praveen Talari
2023-06-15 13:23   ` Krzysztof Kozlowski
2023-06-15  7:07 ` [PATCH v2 3/3] spi: spi-geni-qcom: " Praveen Talari
2023-06-15 17:54 ` [PATCH v2 0/3] spi-geni-qcom: Add SPI SLAVE mode support for Mark Brown

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).