From: Brad Larson <brad@pensando.io>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
adrian.hunter@intel.com, alcooperx@gmail.com,
andy.shevchenko@gmail.com, arnd@arndb.de, brad@pensando.io,
blarson@amd.com, brijeshkumar.singh@amd.com,
catalin.marinas@arm.com, gsomlo@gmail.com, gerg@linux-m68k.org,
krzk@kernel.org, krzysztof.kozlowski+dt@linaro.org,
lee.jones@linaro.org, broonie@kernel.org,
yamada.masahiro@socionext.com, p.zabel@pengutronix.de,
piotrs@cadence.com, p.yadav@ti.com, rdunlap@infradead.org,
robh+dt@kernel.org, samuel@sholland.org, fancer.lancer@gmail.com,
suravee.suthikulpanit@amd.com, thomas.lendacky@amd.com,
ulf.hansson@linaro.org, will@kernel.org,
devicetree@vger.kernel.org
Subject: [PATCH v5 12/15] spi: dw: Add support for AMD Pensando Elba SoC
Date: Mon, 13 Jun 2022 12:56:55 -0700 [thread overview]
Message-ID: <20220613195658.5607-13-brad@pensando.io> (raw)
In-Reply-To: <20220613195658.5607-1-brad@pensando.io>
From: Brad Larson <blarson@amd.com>
The AMD Pensando Elba SoC includes a DW apb_ssi v4 controller
with device specific chip-select control. The Elba SoC
provides four chip-selects where the native DW IP supports
two chip-selects. The Elba DW_SPI instance has two native
CS signals that are always overridden.
Signed-off-by: Brad Larson <blarson@amd.com>
---
drivers/spi/spi-dw-mmio.c | 66 +++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c
index 5101c4c6017b..6b7a557759bd 100644
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -53,6 +53,24 @@ struct dw_spi_mscc {
void __iomem *spi_mst; /* Not sparx5 */
};
+struct dw_spi_elba {
+ struct regmap *syscon;
+};
+
+/*
+ * Elba SoC does not use ssi, pin override is used for cs 0,1 and
+ * gpios for cs 2,3 as defined in the device tree.
+ *
+ * cs: | 1 0
+ * bit: |---3-------2-------1-------0
+ * | cs1 cs1_ovr cs0 cs0_ovr
+ */
+#define ELBA_SPICS_REG 0x2468
+#define ELBA_SPICS_SHIFT(cs) (2 * (cs))
+#define ELBA_SPICS_MASK(cs) (0x3 << ELBA_SPICS_SHIFT(cs))
+#define ELBA_SPICS_SET(cs, val) \
+ ((((val) << 1) | 0x1) << ELBA_SPICS_SHIFT(cs))
+
/*
* The Designware SPI controller (referred to as master in the documentation)
* automatically deasserts chip select when the tx fifo is empty. The chip
@@ -238,6 +256,53 @@ static int dw_spi_canaan_k210_init(struct platform_device *pdev,
return 0;
}
+static void dw_spi_elba_override_cs(struct dw_spi_elba *dwselba, int cs, int enable)
+{
+ regmap_update_bits(dwselba->syscon, ELBA_SPICS_REG, ELBA_SPICS_MASK(cs),
+ ELBA_SPICS_SET(cs, enable));
+}
+
+static void dw_spi_elba_set_cs(struct spi_device *spi, bool enable)
+{
+ struct dw_spi *dws = spi_master_get_devdata(spi->master);
+ struct dw_spi_mmio *dwsmmio = container_of(dws, struct dw_spi_mmio, dws);
+ struct dw_spi_elba *dwselba = dwsmmio->priv;
+ u8 cs;
+
+ cs = spi->chip_select;
+ if (cs < 2)
+ dw_spi_elba_override_cs(dwselba, spi->chip_select, enable);
+
+ /*
+ * The DW SPI controller needs a native CS bit selected to start
+ * the serial engine.
+ */
+ spi->chip_select = 0;
+ dw_spi_set_cs(spi, enable);
+ spi->chip_select = cs;
+}
+
+static int dw_spi_elba_init(struct platform_device *pdev,
+ struct dw_spi_mmio *dwsmmio)
+{
+ struct dw_spi_elba *dwselba;
+ struct regmap *regmap;
+
+ regmap = syscon_regmap_lookup_by_compatible("amd,pensando-elba-syscon");
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ dwselba = devm_kzalloc(&pdev->dev, sizeof(*dwselba), GFP_KERNEL);
+ if (!dwselba)
+ return -ENOMEM;
+ dwselba->syscon = regmap;
+
+ dwsmmio->priv = dwselba;
+ dwsmmio->dws.set_cs = dw_spi_elba_set_cs;
+
+ return 0;
+}
+
static int dw_spi_mmio_probe(struct platform_device *pdev)
{
int (*init_func)(struct platform_device *pdev,
@@ -352,6 +417,7 @@ static const struct of_device_id dw_spi_mmio_of_match[] = {
{ .compatible = "intel,keembay-ssi", .data = dw_spi_keembay_init},
{ .compatible = "microchip,sparx5-spi", dw_spi_mscc_sparx5_init},
{ .compatible = "canaan,k210-spi", dw_spi_canaan_k210_init},
+ { .compatible = "amd,pensando-elba-spi", .data = dw_spi_elba_init},
{ /* end of table */}
};
MODULE_DEVICE_TABLE(of, dw_spi_mmio_of_match);
--
2.17.1
next prev parent reply other threads:[~2022-06-13 20:48 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-13 19:56 [PATCH v5 00/15] Support " Brad Larson
2022-06-13 19:56 ` [PATCH v5 01/15] dt-bindings: arm: add AMD Pensando boards Brad Larson
2022-06-14 21:16 ` Rob Herring
2022-06-20 12:48 ` Krzysztof Kozlowski
2022-06-13 19:56 ` [PATCH v5 02/15] dt-bindings: mmc: cdns: Add AMD Pensando Elba SoC binding Brad Larson
2022-06-14 21:22 ` Rob Herring
2022-07-03 23:08 ` Brad Larson
2022-06-20 12:50 ` Krzysztof Kozlowski
2022-07-03 23:11 ` Brad Larson
2022-06-13 19:56 ` [PATCH v5 03/15] dt-bindings: spi: cdns: Add compatible for AMD Pensando Elba SoC Brad Larson
2022-06-14 21:23 ` Rob Herring
2022-06-20 12:51 ` Krzysztof Kozlowski
2022-06-13 19:56 ` [PATCH v5 04/15] dt-bindings: spi: dw: Add AMD Pensando Elba SoC SPI Controller bindings Brad Larson
2022-06-14 21:23 ` Rob Herring
2022-06-20 19:30 ` Serge Semin
2022-06-20 19:46 ` Krzysztof Kozlowski
2022-06-20 20:04 ` Serge Semin
2022-06-21 7:00 ` Krzysztof Kozlowski
2022-06-21 10:11 ` Serge Semin
2022-07-03 23:58 ` Brad Larson
2022-07-04 13:18 ` Serge Semin
2022-06-13 19:56 ` [PATCH v5 05/15] dt-bindings: mfd: syscon: Add amd,pensando-elba-syscon compatible Brad Larson
2022-06-14 21:24 ` Rob Herring
2022-06-13 19:56 ` [PATCH v5 06/15] dt-bindings: mfd: amd,pensando-elbasr: Add AMD Pensando Elba System Resource chip Brad Larson
2022-06-14 21:30 ` Rob Herring
2022-07-03 23:30 ` Brad Larson
2022-06-20 12:56 ` Krzysztof Kozlowski
2022-07-03 23:41 ` Brad Larson
2022-07-05 9:46 ` Krzysztof Kozlowski
2022-06-13 19:56 ` [PATCH v5 07/15] dt-bindings: reset: amd,pensando-elbasr-reset: Add AMD Pensando SR Reset Controller bindings Brad Larson
2022-06-14 21:32 ` Rob Herring
2022-07-03 23:34 ` Brad Larson
2022-06-20 13:00 ` Krzysztof Kozlowski
2022-07-03 23:50 ` Brad Larson
2022-07-04 6:41 ` Krzysztof Kozlowski
2022-07-05 18:28 ` Brad Larson
2022-07-05 18:30 ` Krzysztof Kozlowski
2022-06-13 19:56 ` [PATCH v5 08/15] MAINTAINERS: Add entry for AMD PENSANDO Brad Larson
2022-06-13 19:56 ` [PATCH v5 09/15] arm64: Add config for AMD Pensando SoC platforms Brad Larson
2022-06-13 19:56 ` [PATCH v5 10/15] arm64: dts: Add AMD Pensando Elba SoC support Brad Larson
2022-06-14 22:44 ` Krzysztof Kozlowski
2022-07-03 23:15 ` Brad Larson
2022-06-13 19:56 ` [PATCH v5 11/15] spi: cadence-quadspi: Add compatible for AMD Pensando Elba SoC Brad Larson
2022-06-14 8:48 ` Pratyush Yadav
2022-07-03 21:05 ` Brad Larson
2022-06-14 12:01 ` Mark Brown
2022-07-03 21:09 ` Brad Larson
2022-06-13 19:56 ` Brad Larson [this message]
2022-06-14 11:10 ` [PATCH v5 12/15] spi: dw: Add support " Andy Shevchenko
2022-07-03 21:14 ` Brad Larson
2022-06-13 19:56 ` [PATCH v5 13/15] mmc: sdhci-cadence: Add AMD Pensando Elba SoC support Brad Larson
2022-06-14 11:19 ` Andy Shevchenko
2022-07-03 21:42 ` Brad Larson
2022-06-13 19:56 ` [PATCH v5 14/15] mfd: pensando-elbasr: Add AMD Pensando Elba System Resource chip Brad Larson
2022-06-14 11:42 ` Andy Shevchenko
2022-07-03 21:56 ` Brad Larson
2022-06-13 19:56 ` [PATCH v5 15/15] reset: elbasr: Add AMD Pensando Elba SR Reset Controller Brad Larson
2022-06-14 11:46 ` Andy Shevchenko
2022-07-03 22:06 ` Brad Larson
2022-06-14 14:49 ` Philipp Zabel
2022-07-03 22:03 ` Brad Larson
2022-06-14 21:34 ` Rob Herring
2022-07-03 23:24 ` Brad Larson
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=20220613195658.5607-13-brad@pensando.io \
--to=brad@pensando.io \
--cc=adrian.hunter@intel.com \
--cc=alcooperx@gmail.com \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=blarson@amd.com \
--cc=brijeshkumar.singh@amd.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=devicetree@vger.kernel.org \
--cc=fancer.lancer@gmail.com \
--cc=gerg@linux-m68k.org \
--cc=gsomlo@gmail.com \
--cc=krzk@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=p.yadav@ti.com \
--cc=p.zabel@pengutronix.de \
--cc=piotrs@cadence.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=samuel@sholland.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=thomas.lendacky@amd.com \
--cc=ulf.hansson@linaro.org \
--cc=will@kernel.org \
--cc=yamada.masahiro@socionext.com \
/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
all inboxes | Powered by JetHome®