From: Vladimir Oltean <olteanv@gmail.com>
To: Peng Fan <peng.fan@nxp.com>
Cc: Frank Li <frank.li@nxp.com>, Mark Brown <broonie@kernel.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Shawn Guo <shawnguo@kernel.org>,
"linux-spi@vger.kernel.org" <linux-spi@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"imx@lists.linux.dev" <imx@lists.linux.dev>
Subject: Re: [PATCH v3 1/3] spi: fsl-dspi: use common proptery 'spi-cs-setup(hold)-delay-ns'
Date: Fri, 21 Jun 2024 13:22:50 +0300 [thread overview]
Message-ID: <20240621102250.oc2cck26tpoqsywz@skbuf> (raw)
In-Reply-To: <AM6PR04MB5941CD3048D65DABD19256A488C92@AM6PR04MB5941.eurprd04.prod.outlook.com>
On Fri, Jun 21, 2024 at 01:28:28AM +0000, Peng Fan wrote:
> > + cs_sck_delay = spi_delay_to_ns(&spi->cs_setup, NULL);
> > + if (!cs_sck_delay)
>
> `if (cs_sck_delay <= 0)` ?
spi_delay_to_ns() returns error only for SPI_DELAY_UNIT_SCK and for
unknown units.
The first case never appears to be set by the core. Only spi-dw-core.c
and spi-dw-dma.c set SPI_DELAY_UNIT_SCK.
The latter case seems to be mostly avoidable defensive programming.
spi_alloc_device() gives you zero-initialized memory, which means
spi->cs_hold.unit is by default SPI_DELAY_UNIT_USECS (0) and so is
spi->cs_setup.unit. Nothing seems to set the unit to an invalid value,
so the default case appears dead code. If "u8 unit" from within
struct spi_delay was an enum type, it would have likely been fine to
even omit the default case altogether.
There's also the curious case of integer type (signedness) mismatch
between:
- the u32 type of "delay" processed and returned by spi_delay_to_ns()
- the int return type of spi_delay_to_ns()
- the u32 type of the "cs_sck_delay" and "sck_cs_delay" variables used
by Frank to store the output from spi_delay_to_ns() inside the dspi
driver
The interaction between these data types means that:
- The "if (cs_sck_delay <= 0)" snippet you suggest will simply not work,
because the spi_delay_to_ns() function output is assigned to an
unsigned variable, which is never negative.
- There is a theoretical possibility that a large u32 delay returned by
spi_delay_to_ns() is misinterpreted as an error by a caller which does
make an attempt to check for negative values. However, simply casting
the value back to unsigned as Frank does eliminates that possibility.
Given that ultimately, the setup and hold times come from u32 device
tree properties which aren't range-checked, it might just well happen
for someone who does check for < 0 to trip over this. It might be
worth somebody having a closer look at this situation.
I don't think that your suggestion will produce better code.
next prev parent reply other threads:[~2024-06-21 10:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-20 16:58 [PATCH v3 0/3] spi: fsl-dspi: Convert to yaml format and use common SPI property Frank Li
2024-06-20 16:58 ` [PATCH v3 1/3] spi: fsl-dspi: use common proptery 'spi-cs-setup(hold)-delay-ns' Frank Li
2024-06-21 1:28 ` Peng Fan
2024-06-21 10:22 ` Vladimir Oltean [this message]
2024-06-21 11:26 ` Vladimir Oltean
2024-06-20 16:58 ` [PATCH v3 2/3] spi: dt-bindings: fsl-dspi: Convert to yaml format Frank Li
2024-06-21 12:42 ` Vladimir Oltean
2024-06-21 14:39 ` Frank Li
2024-06-21 14:47 ` Vladimir Oltean
2024-06-20 16:58 ` [PATCH v3 3/3] arm64: dts: fsl-ls1043a-rdb: use common spi-cs-setup(hold)-delay-ns Frank Li
2024-06-21 12:54 ` Vladimir Oltean
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=20240621102250.oc2cck26tpoqsywz@skbuf \
--to=olteanv@gmail.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=frank.li@nxp.com \
--cc=imx@lists.linux.dev \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=peng.fan@nxp.com \
--cc=robh@kernel.org \
--cc=shawnguo@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;
as well as URLs for NNTP newsgroup(s).