From: "Jonathan Neuschäfer" <j.neuschaefer@gmx.net>
To: Mark Brown <broonie@kernel.org>
Cc: "Jonathan Neuschäfer" <j.neuschaefer@gmx.net>,
linux-spi@vger.kernel.org, openbmc@lists.ozlabs.org,
"Rob Herring" <robh+dt@kernel.org>,
"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/3] spi: wpcm-fiu: Add driver for Nuvoton WPCM450 Flash Interface Unit (FIU)
Date: Fri, 25 Nov 2022 17:33:31 +0100 [thread overview]
Message-ID: <Y4DuW6Rai0urvrEI@probook> (raw)
In-Reply-To: <Y4C9druicCm0m3wi@sirena.org.uk>
[-- Attachment #1: Type: text/plain, Size: 3112 bytes --]
Hello,
On Fri, Nov 25, 2022 at 01:04:54PM +0000, Mark Brown wrote:
> On Thu, Nov 24, 2022 at 08:13:59PM +0100, Jonathan Neuschäfer wrote:
>
> > The Flash Interface Unit (FIU) is the SPI flash controller in the
> > Nuvoton WPCM450 BMC SoC. It supports four chip selects, and direct
> > (memory-mapped) access to 16 MiB per chip. Larger flash chips can be
> > accessed by software-defined SPI transfers.
>
> Those software defined SPI transfers seem to be most of the way to
> supporting normal SPI controller operations, they just need wiring up.
> That would both support people hooking other SPI chips up to the board
> and might help support future flash stuff without needing custom code in
> the driver like you've got now.
I'm not so sure. The hardware mechanism allowing "software defined" SPI
transfers is strongly oriented towards SPI flash, and it already felt
like a stretch to implement all the features that Linux expects of a
SPI MEM controller.
As to connecting non-memory chips: There is also a second, completely
different SPI controller in this SoC, which is used on some boards (in
factory configuration) to drive a little status LCD. I think it would be
easiest to use that one for custom hardware extensions.
>
> > +static int wpcm_fiu_do_uma(struct wpcm_fiu_spi *fiu, unsigned int cs,
> > + bool use_addr, bool write, int data_bytes)
> > +{
>
> This appears to only support half duplex access but the driver doesn't
> flag itself as SPI_CONTROLLER_HALF_DUPLEX.
Ok, I'll add it.
>
> > + cts |= FIU_UMA_CTS_D_SIZE(data_bytes);
>
> I'm guessing there's a limit on data_bytes that should be enforced. The
> driver should probably also flag a max transfer size, though that might
> cause issues if the limit is different between spi-mem and regular
> transfers.
For the existing spi-mem case, the transfer size is limited through
wpcm_fiu_adjust_op_size. I *think* this is enough, but please correct me
if I'm wrong.
> > +/*
> > + * RDID (Read Identification) needs special handling because Linux expects to
> > + * be able to read 6 ID bytes and FIU can only read up to 4 at once.
> > + *
> > + * We're lucky in this case, because executing the RDID instruction twice will
> > + * result in the same result.
> > + *
> > + * What we do is as follows (C: write command/opcode byte, D: read data byte,
> > + * A: write address byte):
> > + *
> > + * 1. C D D D
> > + * 2. C A A A D D D
> > + */
>
> If the driver were implementing regular SPI operations and advertising
> a maximum transfer length this should just work without having to jump
> through hoops. The core can split transfers up into sections that fit
> within the controller limits transparently.
As far as I'm aware, the controller is not capable of performing a pure
read transfer, because the command byte (a byte that is written, in
half-duplex) is always included at the start. I think this limitation
would break your idea.
IOW, the hoops aren't nice, but I think they're necessary.
Thanks for your review,
Jonathan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2022-11-25 16:33 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-24 19:13 [PATCH v2 0/3] Nuvoton WPCM450 FIU SPI flash controller Jonathan Neuschäfer
2022-11-24 19:13 ` [PATCH v2 1/3] dt-bindings: spi: Add Nuvoton WPCM450 Flash Interface Unit (FIU) Jonathan Neuschäfer
2022-11-25 8:33 ` Krzysztof Kozlowski
2022-11-25 13:13 ` Mark Brown
2022-11-25 14:33 ` Jonathan Neuschäfer
2022-11-26 22:25 ` Rob Herring
2022-11-28 11:05 ` Conor Dooley
2022-11-28 13:58 ` Jonathan Neuschäfer
2022-11-28 14:09 ` Conor Dooley
2022-11-28 17:57 ` Mark Brown
2022-11-24 19:13 ` [PATCH v2 2/3] spi: wpcm-fiu: Add driver for " Jonathan Neuschäfer
2022-11-25 13:04 ` Mark Brown
2022-11-25 16:33 ` Jonathan Neuschäfer [this message]
2022-11-25 16:48 ` Mark Brown
2022-11-24 19:14 ` [PATCH v2 3/3] spi: wpcm-fiu: Add direct map support Jonathan Neuschäfer
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=Y4DuW6Rai0urvrEI@probook \
--to=j.neuschaefer@gmx.net \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=openbmc@lists.ozlabs.org \
--cc=robh+dt@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).