Devicetree
 help / color / mirror / Atom feed
From: Marek Vasut <marek.vasut@mailbox.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-gpio@vger.kernel.org, Bartosz Golaszewski <brgl@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Linus Walleij <linusw@kernel.org>, Rob Herring <robh@kernel.org>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 2/2] gpio: rcar: Add R-Car X5H (R8A78000) support
Date: Sat, 5 Sep 2026 23:57:51 +0200	[thread overview]
Message-ID: <b516bf77-fb15-41f2-80ac-b80c621fedd1@mailbox.org> (raw)
In-Reply-To: <CAMuHMdUapaP-8kkWT5cXtEO1h58aAzzm34XqO_mcrgbVSyXEwg@mail.gmail.com>

On 9/4/26 1:15 PM, Geert Uytterhoeven wrote:

Hello Geert,

>> +++ b/drivers/gpio/gpio-rcar.c
> 
>> @@ -65,14 +66,59 @@ struct gpio_rcar_priv {
>>
>>   #define RCAR_MAX_GPIO_PER_BANK         32
>>
>> +static inline int gpio_rcar_remap_offset(struct gpio_rcar_priv *p, int *offs)
> 
> IMO passing a pointer to offs complicates the code.  Perhaps pass offs
> by value, and return the adjusted offset or a negative error code?

I want to avoid that, since if I only return error value, I can then do 
simple:

ret = gpio_rcar_remap_offset(...);
if (ret)
   return ret;

in gpio_rcar_read() and gpio_rcar_write(), which are the only two call 
sites of this function.

>> +{
>> +       /* R-Car Gen4 and older do not need any offset remap. */
>> +       if (!p->info.has_layout_gen5)
>> +               return 0;
>> +
>> +       /*
>> +        * R-Car Gen5 register layout is slightly different and the offsets
>> +        * that have to be added to or subtracted from each register offset
>> +        * can be divided into five groups, listed below.
>> +        */
>> +       switch (*offs) {
>> +       case IOINTSEL...OUTDT:
>> +               return 0;
>> +       case INDT:
>> +               *offs += 0x10;
>> +               return 0;
>> +       case INTDT...EDGLEVEL:
>> +               fallthrough;
>> +       case BOTHEDGE:
>> +               *offs += 0x70;
>> +               return 0;
>> +       case OUTDTSEL:
>> +               *offs -= 0x34;
>> +               return 0;
>> +       case INEN:
>> +               *offs -= 0x38;
>> +               return 0;
>> +       default:
>> +               /*
>> +                * This here must never be reached, if this is reached, that
>> +                * means there is a catastrophic failure in the driver. Skip
>> +                * any IO read/write to prevent further damage.
>> +                */
>> +               WARN_ON(1);
> 
> A build-time failure would be better.  I tried BUILD_BUG() instead,
> but unfortunately gcc is not smart enough to notice this case is
> never reached.  __always_inline doesn't seem to help either.
I had one more idea -- how about we convert the driver to mmio regmap, 
use opaque register numbers throughout the driver to identify registers 
to the regmap (maybe not a great idea), and then implement .read/.write 
callbacks in the regmap_config which instead of doing plain 
readl()/writel() for register IO would instead do this remapping ? 
Regmap could validate that the opaque register numbers are only the 
expected register numbers and reject all the others. Maybe the opaque 
register numbers could instead of Gen4 register offsets. What do you think ?

  reply	other threads:[~2026-09-05 21:57 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-04 15:13 [PATCH 1/2] dt-bindings: gpio: renesas,rcar-gpio: Document R-Car X5H (R8A78000) support Marek Vasut
2026-07-04 15:13 ` [PATCH 2/2] gpio: rcar: Add " Marek Vasut
2026-07-06  9:19   ` Bartosz Golaszewski
2026-07-06 13:06     ` Marek Vasut
2026-07-07  6:52       ` Geert Uytterhoeven
2026-07-08 22:31         ` Marek Vasut
2026-07-07 13:48       ` Bartosz Golaszewski
2026-07-07 13:53         ` Geert Uytterhoeven
2026-09-04 11:15   ` Geert Uytterhoeven
2026-09-05 21:57     ` Marek Vasut [this message]
2026-09-07  7:53       ` Geert Uytterhoeven
2026-09-07 12:10         ` Marek Vasut
2026-09-08  7:49           ` Geert Uytterhoeven
2026-09-09  1:34             ` Marek Vasut
2026-09-09  7:09               ` Geert Uytterhoeven
2026-07-05 14:40 ` [PATCH 1/2] dt-bindings: gpio: renesas,rcar-gpio: Document " Conor Dooley
2026-09-04 11:11 ` Geert Uytterhoeven

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=b516bf77-fb15-41f2-80ac-b80c621fedd1@mailbox.org \
    --to=marek.vasut@mailbox.org \
    --cc=brgl@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=geert@linux-m68k.org \
    --cc=krzk+dt@kernel.org \
    --cc=linusw@kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=robh@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