* [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data @ 2025-02-13 20:40 Denzeel Oliva 2025-02-13 20:40 ` [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible Denzeel Oliva ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Denzeel Oliva @ 2025-02-13 20:40 UTC (permalink / raw) To: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel Cc: Denzeel Oliva Exynos990 uses the same version of USI SPI (v2.1) as the GS101. Removed fifo_lvl_mask and rx_lvl_offset, and changed to the new data configuration port. The difference from other new port configuration data is that fifo_depth is only specified in fifo-depth in DT. Exynos 990 data for SPI: - The depth of the FIFO is not the same size on all nodes. A depth of 64 bytes is used on most nodes, while a depth of 256 bytes is used on 3 specific nodes (SPI 8/9/10). - The Exynos 990 only allows access to 32-bit registers. If access is attempted with a different size, an error interrupt is generated. Therefore, it is necessary to perform write accesses to registers in 32-bit blocks. Changes in v2: - Added a default "fifo_depth = 64" to prevent crashes when "fifo-depth" is missing in the device tree (avoids divide-by-zero issues). - No other functional changes. Denzeel Oliva (2): spi: dt-bindings: samsung: add samsung,exynos990-spi compatible spi: s3c64xx: add support exynos990-spi to new port config data .../devicetree/bindings/spi/samsung,spi.yaml | 1 + drivers/spi/spi-s3c64xx.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) -- 2.48.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible 2025-02-13 20:40 [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva @ 2025-02-13 20:40 ` Denzeel Oliva 2025-02-14 0:09 ` Sam Protsenko 2025-02-13 20:40 ` [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva 2025-02-14 6:31 ` [PATCH v2 0/2] " Tudor Ambarus 2 siblings, 1 reply; 8+ messages in thread From: Denzeel Oliva @ 2025-02-13 20:40 UTC (permalink / raw) To: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel Cc: Denzeel Oliva Add "samsung,exynos990-spi" dedicated compatible for the SPI controller on Exynos990 SoC. This ensures proper representation of the hardware in the device tree. Signed-off-by: Denzeel Oliva <wachiturroxd150@gmail.com> --- Documentation/devicetree/bindings/spi/samsung,spi.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/spi/samsung,spi.yaml b/Documentation/devicetree/bindings/spi/samsung,spi.yaml index 3c206a64d..1d3c95bd2 100644 --- a/Documentation/devicetree/bindings/spi/samsung,spi.yaml +++ b/Documentation/devicetree/bindings/spi/samsung,spi.yaml @@ -24,6 +24,7 @@ properties: - samsung,exynos4210-spi - samsung,exynos5433-spi - samsung,exynos850-spi + - samsung,exynos990-spi - samsung,exynosautov9-spi - tesla,fsd-spi - items: -- 2.48.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible 2025-02-13 20:40 ` [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible Denzeel Oliva @ 2025-02-14 0:09 ` Sam Protsenko 0 siblings, 0 replies; 8+ messages in thread From: Sam Protsenko @ 2025-02-14 0:09 UTC (permalink / raw) To: Denzeel Oliva Cc: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel On Thu, Feb 13, 2025 at 2:41 PM Denzeel Oliva <wachiturroxd150@gmail.com> wrote: > > Add "samsung,exynos990-spi" dedicated compatible for the SPI controller > on Exynos990 SoC. This ensures proper representation of the hardware > in the device tree. > > Signed-off-by: Denzeel Oliva <wachiturroxd150@gmail.com> > --- Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org> > Documentation/devicetree/bindings/spi/samsung,spi.yaml | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/Documentation/devicetree/bindings/spi/samsung,spi.yaml b/Documentation/devicetree/bindings/spi/samsung,spi.yaml > index 3c206a64d..1d3c95bd2 100644 > --- a/Documentation/devicetree/bindings/spi/samsung,spi.yaml > +++ b/Documentation/devicetree/bindings/spi/samsung,spi.yaml > @@ -24,6 +24,7 @@ properties: > - samsung,exynos4210-spi > - samsung,exynos5433-spi > - samsung,exynos850-spi > + - samsung,exynos990-spi > - samsung,exynosautov9-spi > - tesla,fsd-spi > - items: > -- > 2.48.1 > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data 2025-02-13 20:40 [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva 2025-02-13 20:40 ` [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible Denzeel Oliva @ 2025-02-13 20:40 ` Denzeel Oliva 2025-02-14 0:08 ` Sam Protsenko 2025-02-14 6:31 ` [PATCH v2 0/2] " Tudor Ambarus 2 siblings, 1 reply; 8+ messages in thread From: Denzeel Oliva @ 2025-02-13 20:40 UTC (permalink / raw) To: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel Cc: Denzeel Oliva Exynos990 uses the same version of USI SPI (v2.1) as the GS101. Removed fifo_lvl_mask and rx_lvl_offset, and changed to the new data configuration port. The difference from other new port configuration data is that fifo_depth is only specified in fifo-depth in DT. Exynos 990 data for SPI: - The depth of the FIFO is not the same size on all nodes. A depth of 64 bytes is used on most nodes, while a depth of 256 bytes is used on 3 specific nodes (SPI 8/9/10). - The Exynos 990 only allows access to 32-bit registers. If access is attempted with a different size, an error interrupt is generated. Therefore, it is necessary to perform write accesses to registers in 32-bit blocks. - To prevent potential issues when fifo-depth is not explicitly set in DT, a default value of 64 is assigned to ensure stable operation. Signed-off-by: Denzeel Oliva <wachiturroxd150@gmail.com> --- drivers/spi/spi-s3c64xx.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c index 389275dbc..5f55763f9 100644 --- a/drivers/spi/spi-s3c64xx.c +++ b/drivers/spi/spi-s3c64xx.c @@ -1586,6 +1586,20 @@ static const struct s3c64xx_spi_port_config exynos850_spi_port_config = { .quirks = S3C64XX_SPI_QUIRK_CS_AUTO, }; +static const struct s3c64xx_spi_port_config exynos990_spi_port_config = { + /* If not specified in DT, defaults to 64 */ + .fifo_depth = 64, + .rx_fifomask = S3C64XX_SPI_ST_RX_FIFO_RDY_V2, + .tx_fifomask = S3C64XX_SPI_ST_TX_FIFO_RDY_V2, + .tx_st_done = 25, + .clk_div = 4, + .high_speed = true, + .clk_from_cmu = true, + .has_loopback = true, + .use_32bit_io = true, + .quirks = S3C64XX_SPI_QUIRK_CS_AUTO, +}; + static const struct s3c64xx_spi_port_config exynosautov9_spi_port_config = { /* fifo_lvl_mask is deprecated. Use {rx, tx}_fifomask instead. */ .fifo_lvl_mask = { 0x1ff, 0x1ff, 0x7f, 0x7f, 0x7f, 0x7f, 0x1ff, 0x7f, @@ -1664,6 +1678,9 @@ static const struct of_device_id s3c64xx_spi_dt_match[] = { { .compatible = "samsung,exynos850-spi", .data = &exynos850_spi_port_config, }, + { .compatible = "samsung,exynos990-spi", + .data = &exynos990_spi_port_config, + }, { .compatible = "samsung,exynosautov9-spi", .data = &exynosautov9_spi_port_config, }, -- 2.48.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data 2025-02-13 20:40 ` [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva @ 2025-02-14 0:08 ` Sam Protsenko 2025-02-14 6:39 ` Tudor Ambarus 0 siblings, 1 reply; 8+ messages in thread From: Sam Protsenko @ 2025-02-14 0:08 UTC (permalink / raw) To: Denzeel Oliva Cc: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel On Thu, Feb 13, 2025 at 2:41 PM Denzeel Oliva <wachiturroxd150@gmail.com> wrote: > > Exynos990 uses the same version of USI SPI (v2.1) as the GS101. > Removed fifo_lvl_mask and rx_lvl_offset, and changed to the new data > configuration port. > > The difference from other new port configuration data is that fifo_depth > is only specified in fifo-depth in DT. > In the code below I can see this bit: /* If not specified in DT, defaults to 64 */ .fifo_depth = 64, Is that intentional or is it some leftover that was meant to be removed before the submission? From s3c64xx_spi_probe() it looks like the "fifo-depth" DT property is ignored if .fifo_depth is set in the port_config: if (sdd->port_conf->fifo_depth) sdd->fifo_depth = sdd->port_conf->fifo_depth; else if (of_property_read_u32(pdev->dev.of_node, "fifo-depth", &sdd->fifo_depth)) sdd->fifo_depth = FIFO_DEPTH(sdd); Btw, wouldn't it be reasonable to flip this probe() code the other way around? So that the fact that the DT property is available is prioritized, not its port_config counterpart. That would make it possible to provide a sensible default in the port_config structure and at the same time be able to override it by specifying the DT property for nodes where it's needed. Just a thought, not strictly related to this patch. > Exynos 990 data for SPI: > - The depth of the FIFO is not the same size on all nodes. > A depth of 64 bytes is used on most nodes, > while a depth of 256 bytes is used on 3 specific nodes (SPI 8/9/10). > - The Exynos 990 only allows access to 32-bit registers. > If access is attempted with a different size, an error interrupt > is generated. Therefore, it is necessary to perform write accesses to > registers in 32-bit blocks. > - To prevent potential issues when fifo-depth is not explicitly set in > DT, a default value of 64 is assigned to ensure stable operation. > > Signed-off-by: Denzeel Oliva <wachiturroxd150@gmail.com> > --- > drivers/spi/spi-s3c64xx.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c > index 389275dbc..5f55763f9 100644 > --- a/drivers/spi/spi-s3c64xx.c > +++ b/drivers/spi/spi-s3c64xx.c > @@ -1586,6 +1586,20 @@ static const struct s3c64xx_spi_port_config exynos850_spi_port_config = { > .quirks = S3C64XX_SPI_QUIRK_CS_AUTO, > }; > > +static const struct s3c64xx_spi_port_config exynos990_spi_port_config = { > + /* If not specified in DT, defaults to 64 */ > + .fifo_depth = 64, Talking about this line here. > + .rx_fifomask = S3C64XX_SPI_ST_RX_FIFO_RDY_V2, > + .tx_fifomask = S3C64XX_SPI_ST_TX_FIFO_RDY_V2, > + .tx_st_done = 25, > + .clk_div = 4, > + .high_speed = true, > + .clk_from_cmu = true, > + .has_loopback = true, > + .use_32bit_io = true, > + .quirks = S3C64XX_SPI_QUIRK_CS_AUTO, > +}; > + > static const struct s3c64xx_spi_port_config exynosautov9_spi_port_config = { > /* fifo_lvl_mask is deprecated. Use {rx, tx}_fifomask instead. */ > .fifo_lvl_mask = { 0x1ff, 0x1ff, 0x7f, 0x7f, 0x7f, 0x7f, 0x1ff, 0x7f, > @@ -1664,6 +1678,9 @@ static const struct of_device_id s3c64xx_spi_dt_match[] = { > { .compatible = "samsung,exynos850-spi", > .data = &exynos850_spi_port_config, > }, > + { .compatible = "samsung,exynos990-spi", > + .data = &exynos990_spi_port_config, > + }, > { .compatible = "samsung,exynosautov9-spi", > .data = &exynosautov9_spi_port_config, > }, > -- > 2.48.1 > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data 2025-02-14 0:08 ` Sam Protsenko @ 2025-02-14 6:39 ` Tudor Ambarus 2025-02-14 15:18 ` Sam Protsenko 0 siblings, 1 reply; 8+ messages in thread From: Tudor Ambarus @ 2025-02-14 6:39 UTC (permalink / raw) To: Sam Protsenko, Denzeel Oliva Cc: andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel Hi, Sam, On 2/14/25 12:08 AM, Sam Protsenko wrote: > On Thu, Feb 13, 2025 at 2:41 PM Denzeel Oliva <wachiturroxd150@gmail.com> wrote: >> >> Exynos990 uses the same version of USI SPI (v2.1) as the GS101. >> Removed fifo_lvl_mask and rx_lvl_offset, and changed to the new data >> configuration port. >> >> The difference from other new port configuration data is that fifo_depth >> is only specified in fifo-depth in DT. >> > > In the code below I can see this bit: > > /* If not specified in DT, defaults to 64 */ > .fifo_depth = 64, > > Is that intentional or is it some leftover that was meant to be > removed before the submission? From s3c64xx_spi_probe() it looks like > the "fifo-depth" DT property is ignored if .fifo_depth is set in the > port_config: fifo-depth in port config is intended for IPs where all their instances use the same FIFO depth. fifo-depth from DT is ignored because the compatible knows better than what developers may in DT in this case, it is intentional. > > if (sdd->port_conf->fifo_depth) > sdd->fifo_depth = sdd->port_conf->fifo_depth; > else if (of_property_read_u32(pdev->dev.of_node, "fifo-depth", > &sdd->fifo_depth)) > sdd->fifo_depth = FIFO_DEPTH(sdd); > > Btw, wouldn't it be reasonable to flip this probe() code the other way No, please. IPs that have instances with different FIFO depths shall rely only on DT to specify their FIFO depths. Cheers, ta ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data 2025-02-14 6:39 ` Tudor Ambarus @ 2025-02-14 15:18 ` Sam Protsenko 0 siblings, 0 replies; 8+ messages in thread From: Sam Protsenko @ 2025-02-14 15:18 UTC (permalink / raw) To: Tudor Ambarus Cc: Denzeel Oliva, andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel On Fri, Feb 14, 2025 at 12:39 AM Tudor Ambarus <tudor.ambarus@linaro.org> wrote: > > Hi, Sam, > > On 2/14/25 12:08 AM, Sam Protsenko wrote: > > On Thu, Feb 13, 2025 at 2:41 PM Denzeel Oliva <wachiturroxd150@gmail.com> wrote: > >> > >> Exynos990 uses the same version of USI SPI (v2.1) as the GS101. > >> Removed fifo_lvl_mask and rx_lvl_offset, and changed to the new data > >> configuration port. > >> > >> The difference from other new port configuration data is that fifo_depth > >> is only specified in fifo-depth in DT. > >> > > > > In the code below I can see this bit: > > > > /* If not specified in DT, defaults to 64 */ > > .fifo_depth = 64, > > > > Is that intentional or is it some leftover that was meant to be > > removed before the submission? From s3c64xx_spi_probe() it looks like > > the "fifo-depth" DT property is ignored if .fifo_depth is set in the > > port_config: > > fifo-depth in port config is intended for IPs where all their instances > use the same FIFO depth. fifo-depth from DT is ignored because the > compatible knows better than what developers may in DT in this case, it > is intentional. > > > > > if (sdd->port_conf->fifo_depth) > > sdd->fifo_depth = sdd->port_conf->fifo_depth; > > else if (of_property_read_u32(pdev->dev.of_node, "fifo-depth", > > &sdd->fifo_depth)) > > sdd->fifo_depth = FIFO_DEPTH(sdd); > > > > Btw, wouldn't it be reasonable to flip this probe() code the other way > > No, please. IPs that have instances with different FIFO depths shall > rely only on DT to specify their FIFO depths. > Fair enough. Does it mean the port_config.fifo_depth should be made obsolete? Or it makes sense for older SoCs where FIFO depth is fixed, or something like that? > Cheers, > ta ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data 2025-02-13 20:40 [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva 2025-02-13 20:40 ` [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible Denzeel Oliva 2025-02-13 20:40 ` [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva @ 2025-02-14 6:31 ` Tudor Ambarus 2 siblings, 0 replies; 8+ messages in thread From: Tudor Ambarus @ 2025-02-14 6:31 UTC (permalink / raw) To: Denzeel Oliva, andi.shyti, broonie, robh, krzk+dt, conor+dt, alim.akhtar, linux-spi, linux-samsung-soc, devicetree, linux-kernel, linux-arm-kernel On 2/13/25 8:40 PM, Denzeel Oliva wrote: > - Added a default "fifo_depth = 64" to prevent crashes when "fifo-depth" > is missing in the device tree (avoids divide-by-zero issues). no, you shouldn't use fifo_depth as a fallback, it's misleading. fifo_depth shall be used only if all your SPI instances use the same FIFO size. If that's not the case, as in yours, you specify the FIFO depth via DT. You need to determine whether your IP works with 0 sized FIFOs and if not, make the the DT fifo-depth mandatory and check that its value is > 0. If the IP works with 0 sized FIFOs, you need to update the driver to allow that and let the fifo-depth property optional in DT. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-02-14 15:18 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-02-13 20:40 [PATCH v2 0/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva 2025-02-13 20:40 ` [PATCH v2 1/2] spi: dt-bindings: samsung: add samsung,exynos990-spi compatible Denzeel Oliva 2025-02-14 0:09 ` Sam Protsenko 2025-02-13 20:40 ` [PATCH v2 2/2] spi: s3c64xx: add support exynos990-spi to new port config data Denzeel Oliva 2025-02-14 0:08 ` Sam Protsenko 2025-02-14 6:39 ` Tudor Ambarus 2025-02-14 15:18 ` Sam Protsenko 2025-02-14 6:31 ` [PATCH v2 0/2] " Tudor Ambarus
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).