From: Luca Ceresoli <luca@lucaceresoli.net>
To: Tom Rix <trix@redhat.com>, linux-fpga@vger.kernel.org
Cc: Moritz Fischer <mdf@kernel.org>,
Michal Simek <michal.simek@xilinx.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Anatolij Gustschin <agust@denx.de>,
linux-gpio@vger.kernel.org,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>
Subject: Re: [PATCH 2/3] fpga manager: xilinx-spi: provide better diagnostics on programming failure
Date: Tue, 18 Aug 2020 12:20:46 +0200 [thread overview]
Message-ID: <51694865-2a05-ac67-43a0-dbcb9989cbab@lucaceresoli.net> (raw)
In-Reply-To: <b1a1a9d9-d36b-40f0-24e3-f793e55db929@redhat.com>
[a question for GPIO maintainers below]
Hi Tom,
thanks for your review!
On 17/08/20 20:15, Tom Rix wrote:
> The other two patches are fine.
>
> On 8/17/20 9:59 AM, Luca Ceresoli wrote:
>> When the DONE pin does not go high after programming to confirm programming
>> success, the INIT_B pin provides some info on the reason. Use it if
>> available to provide a more explanatory error message.
>>
>> Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
>> ---
>> drivers/fpga/xilinx-spi.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/fpga/xilinx-spi.c b/drivers/fpga/xilinx-spi.c
>> index 502fae0d1d85..2aa942bb1114 100644
>> --- a/drivers/fpga/xilinx-spi.c
>> +++ b/drivers/fpga/xilinx-spi.c
>> @@ -169,7 +169,16 @@ static int xilinx_spi_write_complete(struct fpga_manager *mgr,
>> return xilinx_spi_apply_cclk_cycles(conf);
>> }
>>
>> - dev_err(&mgr->dev, "Timeout after config data transfer.\n");
>> + if (conf->init_b) {
>> + int init_b_asserted = gpiod_get_value(conf->init_b);
>
> gpiod_get_value can fail. So maybe need split the first statement.
>
> init_b_asserted < 0 ? "invalid device"
>
> As the if-else statement is getting complicated, embedding the ? : makes this hard to read. 'if,else if, else' would be better.
Thanks for the heads up. However I'm not sure which is the best thing to
do here.
First, I've been reading the libgpiod code after your email and yes, the
libgpiod code _could_ return runtime errors received from the gpiochip
driver, even though the docs state:
> The get/set calls do not return errors because “invalid GPIO”> should have been reported earlier from gpiod_direction_*().
(https://www.kernel.org/doc/html/latest/driver-api/gpio/consumer.html)
On the other hand there are plenty of calls to gpiod_get/set_value in
the kernel that don't check for error values. I guess this is because
failures getting/setting a GPIO are very uncommon (perhaps impossible
with platform GPIO).
When still a GPIO get/set operation fails I'm not sure adding thousands
of error-checking code lines in hundreds of drivers is the best way to
go. I feel like we should have a unique, noisy dev_err() in the error
path in libgpio but I was surprised in not finding any [1].
Linus, Bartosz, what's your opinion? Should all drivers check for errors
after every gpiod_[sg]et_value*() call?
>> + dev_err(&mgr->dev,
>> + init_b_asserted ? "CRC error or invalid device\n"
>> + : "Missing sync word or incomplete bitstream\n");
>> + } else {
>> + dev_err(&mgr->dev, "Timeout after config data transfer.\n");
> patch 3 removes '.' s , and you just added one back in ?
Here I'm only changing indentation of this line. But OK, this is
misleading, so I'll swap patches 2 and 3 in the next patch iteration to
avoid confusion.
[1]
https://elixir.bootlin.com/linux/v5.8/source/drivers/gpio/gpiolib.c#L3646
--
Luca
next prev parent reply other threads:[~2020-08-18 10:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-17 16:59 [PATCH 1/3] fpga manager: xilinx-spi: remove stray comment Luca Ceresoli
2020-08-17 16:59 ` [PATCH 2/3] fpga manager: xilinx-spi: provide better diagnostics on programming failure Luca Ceresoli
2020-08-17 18:15 ` Tom Rix
2020-08-18 10:20 ` Luca Ceresoli [this message]
2020-08-18 14:21 ` Tom Rix
2020-08-19 16:32 ` Luca Ceresoli
2020-08-27 14:30 ` Luca Ceresoli
2020-08-17 16:59 ` [PATCH 3/3] fpga manager: xilinx-spi: remove final dot from dev_err() strings Luca Ceresoli
2020-08-20 4:11 ` [PATCH 1/3] fpga manager: xilinx-spi: remove stray comment Moritz Fischer
2020-08-27 14:28 ` Luca Ceresoli
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=51694865-2a05-ac67-43a0-dbcb9989cbab@lucaceresoli.net \
--to=luca@lucaceresoli.net \
--cc=agust@denx.de \
--cc=bgolaszewski@baylibre.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-fpga@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mdf@kernel.org \
--cc=michal.simek@xilinx.com \
--cc=trix@redhat.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;
as well as URLs for NNTP newsgroup(s).