From: Brad Larson <blarson@amd.com>
To: <andy.shevchenko@gmail.com>
Cc: <adrian.hunter@intel.com>, <alcooperx@gmail.com>, <arnd@arndb.de>,
<blarson@amd.com>, <brad@pensando.io>,
<brendan.higgins@linux.dev>, <briannorris@chromium.org>,
<brijeshkumar.singh@amd.com>, <broonie@kernel.org>,
<catalin.marinas@arm.com>, <davidgow@google.com>,
<devicetree@vger.kernel.org>, <fancer.lancer@gmail.com>,
<gerg@linux-m68k.org>, <gsomlo@gmail.com>, <krzk@kernel.org>,
<krzysztof.kozlowski+dt@linaro.org>, <lee.jones@linaro.org>,
<lee@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-mmc@vger.kernel.org>,
<linux-spi@vger.kernel.org>, <p.yadav@ti.com>,
<p.zabel@pengutronix.de>, <piotrs@cadence.com>,
<rdunlap@infradead.org>, <robh+dt@kernel.org>,
<samuel@sholland.org>, <skhan@linuxfoundation.org>,
<suravee.suthikulpanit@amd.com>, <thomas.lendacky@amd.com>,
<tonyhuang.sunplus@gmail.com>, <ulf.hansson@linaro.org>,
<vaishnav.a@ti.com>, <will@kernel.org>,
<yamada.masahiro@socionext.com>
Subject: Re: [PATCH v9 11/15] spi: dw: Add support for AMD Pensando Elba SoC
Date: Mon, 23 Jan 2023 18:59:35 -0800 [thread overview]
Message-ID: <20230124025935.42081-1-blarson@amd.com> (raw)
In-Reply-To: <CAHp75VfurZMfRbqDt7WRY368uu4NM3r2a6SDCogOukBZN5J8yQ@mail.gmail.com>
On 19/01/2023 9:58 UTC, Andy Shevchenko wrote:
>On Thu, Jan 19, 2023 at 5:52 AM Brad Larson <blarson@amd.com> wrote:
>>
>> 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.
>
...
>
>> +struct dw_spi_elba {
>> + struct regmap *syscon;
>> +};
>
>Why can't struct regmap be used directly?
Yes it can, all that is needed is regmap. See result below.
...
>
>> +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));
>
>> +
>
>Redundant blank line.
Removed
...
>
>> + dev_err(&pdev->dev, "failed to find %s\n", syscon_name);
>> + return -ENODEV;
>
>return dev_err_probe();
Changed in both places.
...
>
>> + dev_err(&pdev->dev, "syscon regmap lookup failed\n");
>> + return PTR_ERR(regmap);
>
>Ditto.
Smaller diff with the above change and looks like this:
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -53,6 +53,20 @@ struct dw_spi_mscc {
void __iomem *spi_mst; /* Not sparx5 */
};
+/*
+ * 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_OFFSET(cs) ((cs) << 1)
+#define ELBA_SPICS_MASK(cs) (GENMASK(1, 0) << ELBA_SPICS_OFFSET(cs))
+#define ELBA_SPICS_SET(cs, val) \
+ ((((val) << 1) | BIT(0)) << ELBA_SPICS_OFFSET(cs))
+
/*
* The Designware SPI controller (referred to as master in the documentation)
* automatically deasserts chip select when the tx fifo is empty. The chip
@@ -237,6 +251,56 @@ static int dw_spi_canaan_k210_init(struct platform_device *pdev,
return 0;
}
+static void dw_spi_elba_override_cs(struct regmap *syscon, int cs, int enable)
+{
+ regmap_update_bits(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 regmap *syscon = dwsmmio->priv;
+ u8 cs;
+
+ cs = spi->chip_select;
+ if (cs < 2)
+ dw_spi_elba_override_cs(syscon, 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)
+{
+ const char *syscon_name = "amd,pensando-elba-syscon";
+ struct device_node *np = pdev->dev.of_node;
+ struct device_node *node;
+ struct regmap *syscon;
+
+ node = of_parse_phandle(np, syscon_name, 0);
+ if (!node)
+ return dev_err_probe(&pdev->dev, -ENODEV, "failed to find %s\n",
+ syscon_name);
+
+ syscon = syscon_node_to_regmap(node);
+ if (IS_ERR(syscon))
+ return dev_err_probe(&pdev->dev, PTR_ERR(syscon),
+ "syscon regmap lookup failed\n");
+
+ dwsmmio->priv = syscon;
+ 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 +416,7 @@ static const struct of_device_id dw_spi_mmio_of_match[] = {
{ .compatible = "intel,thunderbay-ssi", .data = dw_spi_intel_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);
Regards,
Brad
WARNING: multiple messages have this Message-ID (diff)
From: Brad Larson <blarson@amd.com>
To: <andy.shevchenko@gmail.com>
Cc: <adrian.hunter@intel.com>, <alcooperx@gmail.com>, <arnd@arndb.de>,
<blarson@amd.com>, <brad@pensando.io>,
<brendan.higgins@linux.dev>, <briannorris@chromium.org>,
<brijeshkumar.singh@amd.com>, <broonie@kernel.org>,
<catalin.marinas@arm.com>, <davidgow@google.com>,
<devicetree@vger.kernel.org>, <fancer.lancer@gmail.com>,
<gerg@linux-m68k.org>, <gsomlo@gmail.com>, <krzk@kernel.org>,
<krzysztof.kozlowski+dt@linaro.org>, <lee.jones@linaro.org>,
<lee@kernel.org>, <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-mmc@vger.kernel.org>,
<linux-spi@vger.kernel.org>, <p.yadav@ti.com>,
<p.zabel@pengutronix.de>, <piotrs@cadence.com>,
<rdunlap@infradead.org>, <robh+dt@kernel.org>,
<samuel@sholland.org>, <skhan@linuxfoundation.org>,
<suravee.suthikulpanit@amd.com>, <thomas.lendacky@amd.com>,
<tonyhuang.sunplus@gmail.com>, <ulf.hansson@linaro.org>,
<vaishnav.a@ti.com>, <will@kernel.org>,
<yamada.masahiro@socionext.com>
Subject: Re: [PATCH v9 11/15] spi: dw: Add support for AMD Pensando Elba SoC
Date: Mon, 23 Jan 2023 18:59:35 -0800 [thread overview]
Message-ID: <20230124025935.42081-1-blarson@amd.com> (raw)
In-Reply-To: <CAHp75VfurZMfRbqDt7WRY368uu4NM3r2a6SDCogOukBZN5J8yQ@mail.gmail.com>
On 19/01/2023 9:58 UTC, Andy Shevchenko wrote:
>On Thu, Jan 19, 2023 at 5:52 AM Brad Larson <blarson@amd.com> wrote:
>>
>> 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.
>
...
>
>> +struct dw_spi_elba {
>> + struct regmap *syscon;
>> +};
>
>Why can't struct regmap be used directly?
Yes it can, all that is needed is regmap. See result below.
...
>
>> +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));
>
>> +
>
>Redundant blank line.
Removed
...
>
>> + dev_err(&pdev->dev, "failed to find %s\n", syscon_name);
>> + return -ENODEV;
>
>return dev_err_probe();
Changed in both places.
...
>
>> + dev_err(&pdev->dev, "syscon regmap lookup failed\n");
>> + return PTR_ERR(regmap);
>
>Ditto.
Smaller diff with the above change and looks like this:
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -53,6 +53,20 @@ struct dw_spi_mscc {
void __iomem *spi_mst; /* Not sparx5 */
};
+/*
+ * 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_OFFSET(cs) ((cs) << 1)
+#define ELBA_SPICS_MASK(cs) (GENMASK(1, 0) << ELBA_SPICS_OFFSET(cs))
+#define ELBA_SPICS_SET(cs, val) \
+ ((((val) << 1) | BIT(0)) << ELBA_SPICS_OFFSET(cs))
+
/*
* The Designware SPI controller (referred to as master in the documentation)
* automatically deasserts chip select when the tx fifo is empty. The chip
@@ -237,6 +251,56 @@ static int dw_spi_canaan_k210_init(struct platform_device *pdev,
return 0;
}
+static void dw_spi_elba_override_cs(struct regmap *syscon, int cs, int enable)
+{
+ regmap_update_bits(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 regmap *syscon = dwsmmio->priv;
+ u8 cs;
+
+ cs = spi->chip_select;
+ if (cs < 2)
+ dw_spi_elba_override_cs(syscon, 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)
+{
+ const char *syscon_name = "amd,pensando-elba-syscon";
+ struct device_node *np = pdev->dev.of_node;
+ struct device_node *node;
+ struct regmap *syscon;
+
+ node = of_parse_phandle(np, syscon_name, 0);
+ if (!node)
+ return dev_err_probe(&pdev->dev, -ENODEV, "failed to find %s\n",
+ syscon_name);
+
+ syscon = syscon_node_to_regmap(node);
+ if (IS_ERR(syscon))
+ return dev_err_probe(&pdev->dev, PTR_ERR(syscon),
+ "syscon regmap lookup failed\n");
+
+ dwsmmio->priv = syscon;
+ 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 +416,7 @@ static const struct of_device_id dw_spi_mmio_of_match[] = {
{ .compatible = "intel,thunderbay-ssi", .data = dw_spi_intel_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);
Regards,
Brad
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-01-24 2:59 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-19 3:51 [PATCH v9 00/15] Support AMD Pensando Elba SoC Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 01/15] dt-bindings: arm: add AMD Pensando boards Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 02/15] dt-bindings: mmc: cdns: Add AMD Pensando Elba SoC Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 7:47 ` Krzysztof Kozlowski
2023-01-19 7:47 ` Krzysztof Kozlowski
2023-01-21 1:10 ` Brad Larson
2023-01-21 1:10 ` Brad Larson
2023-01-21 18:57 ` Krzysztof Kozlowski
2023-01-21 18:57 ` Krzysztof Kozlowski
2023-01-19 7:48 ` Krzysztof Kozlowski
2023-01-19 7:48 ` Krzysztof Kozlowski
2023-01-19 3:51 ` [PATCH v9 03/15] dt-bindings: spi: cdns: Add compatible for " Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 7:53 ` Krzysztof Kozlowski
2023-01-19 7:53 ` Krzysztof Kozlowski
2023-01-24 1:16 ` Brad Larson
2023-01-24 1:16 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 04/15] dt-bindings: spi: dw: Add AMD Pensando Elba SoC SPI Controller bindings Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 7:55 ` Krzysztof Kozlowski
2023-01-19 7:55 ` Krzysztof Kozlowski
2023-01-24 1:57 ` Brad Larson
2023-01-24 1:57 ` Brad Larson
2023-01-24 7:22 ` Krzysztof Kozlowski
2023-01-24 7:22 ` Krzysztof Kozlowski
2023-01-24 21:26 ` Brad Larson
2023-01-24 21:26 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 05/15] dt-bindings: mfd: syscon: Add amd,pensando-elba-syscon compatible Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 14:19 ` Lee Jones
2023-01-19 14:19 ` Lee Jones
2023-01-19 3:51 ` [PATCH v9 06/15] dt-bindings: mfd: amd,pensando-elbasr: Add AMD Pensando System Resource chip Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 7:58 ` Krzysztof Kozlowski
2023-01-19 7:58 ` Krzysztof Kozlowski
2023-01-26 2:59 ` Brad Larson
2023-01-26 2:59 ` Brad Larson
2023-01-19 14:17 ` Lee Jones
2023-01-19 14:17 ` Lee Jones
2023-01-19 3:51 ` [PATCH v9 07/15] MAINTAINERS: Add entry for AMD PENSANDO Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 08/15] arm64: Add config for AMD Pensando SoC platforms Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 09/15] arm64: dts: Add AMD Pensando Elba SoC support Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 10/15] spi: cadence-quadspi: Add compatible for AMD Pensando Elba SoC Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 11/15] spi: dw: Add support " Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 9:58 ` Andy Shevchenko
2023-01-19 9:58 ` Andy Shevchenko
2023-01-24 2:59 ` Brad Larson [this message]
2023-01-24 2:59 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 12/15] mmc: sdhci-cadence: Enable device specific override of writel() Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 13/15] mmc: sdhci-cadence: Add AMD Pensando Elba SoC support Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-02-02 9:43 ` Adrian Hunter
2023-02-02 9:43 ` Adrian Hunter
2023-01-19 3:51 ` [PATCH v9 14/15] mmc: sdhci-cadence: Support mmc hardware reset Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 9:34 ` Philipp Zabel
2023-01-19 9:34 ` Philipp Zabel
2023-02-07 20:53 ` Brad Larson
2023-02-07 20:53 ` Brad Larson
2023-01-19 3:51 ` [PATCH v9 15/15] spi: pensando-sr: Add AMD Pensando SoC System Resource Brad Larson
2023-01-19 3:51 ` Brad Larson
2023-01-19 13:57 ` Mark Brown
2023-01-19 13:57 ` Mark Brown
2023-02-07 2:12 ` Brad Larson
2023-02-07 2:12 ` Brad Larson
2023-01-19 12:57 ` [PATCH v9 00/15] Support AMD Pensando Elba SoC Mark Brown
2023-01-19 12:57 ` Mark Brown
2023-01-24 3:21 ` Brad Larson
2023-01-24 3:21 ` Brad Larson
-- strict thread matches above, loose matches on Subject: below --
2023-01-19 3:39 Brad Larson
2023-01-19 3:39 ` [PATCH v9 11/15] spi: dw: Add support for " Brad Larson
2023-01-19 3:39 ` 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=20230124025935.42081-1-blarson@amd.com \
--to=blarson@amd.com \
--cc=adrian.hunter@intel.com \
--cc=alcooperx@gmail.com \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=brad@pensando.io \
--cc=brendan.higgins@linux.dev \
--cc=briannorris@chromium.org \
--cc=brijeshkumar.singh@amd.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=davidgow@google.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=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-spi@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=skhan@linuxfoundation.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=thomas.lendacky@amd.com \
--cc=tonyhuang.sunplus@gmail.com \
--cc=ulf.hansson@linaro.org \
--cc=vaishnav.a@ti.com \
--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 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.