From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>, Lee Jones <lee@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Alyssa Rosenzweig <alyssa@rosenzweig.io>,
asahi@lists.linux.dev, Bartosz Golaszewski <brgl@bgdev.pl>,
Hector Martin <marcan@marcan.st>,
linux-arm Mailing List <linux-arm-kernel@lists.infradead.org>,
"open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>,
Sven Peter <sven@svenpeter.dev>
Subject: Re: [PATCH 5/6] gpio: Add new gpio-macsmc driver for Apple Macs
Date: Mon, 5 Sep 2022 14:10:06 +0100 [thread overview]
Message-ID: <YxX1Lp7ClRSBhbno@shell.armlinux.org.uk> (raw)
In-Reply-To: <CAHp75Vcq4LVRmgELvLJ8fNk3xdSfGikyLDL_7LGvKg4a4L4J=A@mail.gmail.com>
On Mon, Sep 05, 2022 at 01:32:29PM +0300, Andy Shevchenko wrote:
> On Mon, Sep 5, 2022 at 1:20 PM Russell King (Oracle)
> <linux@armlinux.org.uk> wrote:
> > On Fri, Sep 02, 2022 at 06:43:36PM +0300, Andy Shevchenko wrote:
> > > On Fri, Sep 2, 2022 at 6:34 PM Russell King (Oracle)
> > > <linux@armlinux.org.uk> wrote:
> > > > On Fri, Sep 02, 2022 at 05:53:25PM +0300, Andy Shevchenko wrote:
>
> ...
>
> > > > static int macsmc_gpio_nr(smc_key key)
> > > > {
> > > > __le16 foo = cpu_to_le16(key);
> > > > u8 result;
> > > > int ret;
> > > >
> > > > ret = hex2bin(&result, (char *)&foo, 1);
> > > > if (ret < 0)
> > > > return ret;
> > > >
> > > > return result;
> > > > }
> > > >
> > > > which you also didn't like,
> > >
> > > ...based on the wrong suggestion below. That said, the above is fine to me.
> >
> > To be honest, using the endian conversion macro there doesn't feel
> > right and is more prone to programming errors. I can't tell just by
> > looking at it that either cpu_to_le16() or cpu_to_le32() would be the
> > right thing here - and if it's not obvious then it's a bug waiting to
> > happen.
> >
> > As if to prove the point, the above suggestions turn out to *all* be
> > buggy.
> >
> > The initial suggestion gets the k[0] and k[1] assignment round the
> > wrong way. The second, le16() is definitely not the right conversion.
> > If we start using the endian conversion macros, then this is going to
> > screw up if someone runs a BE kernel against the SMC (since the
> > _SMC_KEY() macro will still be doing its conversion.)
> >
> > This seems utterly counter-productive, and I've spent quite a long
> > time trying to work out what would be correct.
> >
> > At this point, I'm not sure that changing what has already been
> > established in the Asahi Linux tree for something entirely different
> > in mainline is going to be practical - it's a recipe for repeated
> > mistakes converting keys from the Asahi kernel to the mainline
> > kernel.
> >
> > It's not _just_ the GPIO driver. There are multiple other drivers
> > that will be impacted by changing the scheme here.
> >
> > Any change to the scheme for these SMC keys needs to happen in the
> > Asahi kernel tree by the Asahi Linux maintainers, not by someone
> > pushing the code upstream - doing so would be a recipe for repeated
> > trainwrecks.
> >
> > So, I'm going with my first suggestion for the hex2bin() conversion
> > above, and adding a comment thusly:
> >
> > /*
> > * The most significant nibble comes from k[0] and key bits 15..8
> > * The least significant nibble comes from k[1] and key bits 7..0
> > */
> > k[0] = key >> 8;
> > k[1] = key;
> >
> > because I needed the comment to prove to myself that I wasn't breaking
> > this code. Maybe it's obvious to you, but it isn't obvious to everyone.
>
> And how is it different to the key being __be16 and all operations
> against it be correct with the endianness helpers?
First, the key is not 16-bit, it's 32-bit.
Secondly, the "key" returned from the SMC is always swab()'d before
we use it - and before we pass it back to the SMC.
There's a big open question right now about whether it's the Asahi
developers choice to arrange the four character key in big-endian form
on LE platforms, and whether this is application processor endian
dependent or not.
It's packed into a 64-bit integer:
msg = (FIELD_PREP(SMC_MSG, SMC_MSG_WRITE_KEY) |
FIELD_PREP(SMC_SIZE, size) |
FIELD_PREP(SMC_ID, smc->msg_id) |
FIELD_PREP(SMC_DATA, key));
in bits 32..63, which is then written using writeq_relaxed() to the
mailbox registers. However, the keys returned from the SMC are the
opposite endian-ness:
static int apple_smc_rtkit_get_key_by_index(void *cookie, int index, smc_key *key)
{
struct apple_smc_rtkit *smc = cookie;
int ret;
ret = apple_smc_cmd(smc, SMC_MSG_GET_KEY_BY_INDEX, index, 0, 0, key);
*key = swab32(*key);
return ret;
}
where apple_smc_cmd() does this to get the returned data:
if (ret_data)
*ret_data = FIELD_GET(SMC_DATA, smc->cmd_ret);
which comes from apple_smc_rtkit_recv_early(..., u64 message):
smc->cmd_ret = message;
which comes from apple_rtkit_rx():
if (ep >= APPLE_RTKIT_APP_ENDPOINT_START &&
rtk->ops->recv_message_early &&
rtk->ops->recv_message_early(rtk->cookie, ep, msg->msg0))
return;
which ultimately comes from apple_mbox_hw_recv();
msg->msg0 = readq_relaxed(apple_mbox->regs + apple_mbox->hw->i2a_recv0);
So what _is_ the right endian for the keys? I've no idea.
> Adding redundant
> comments when the bitwise type exists seems just like being afraid of
> the unknown. Ah, I see that in one of your long letters the proposal
> somehow switched from (implicit) be16 to (explicit) le16... Still to
> me it's not enough justification for the comment, but since it has no
> effect on the code generation, add it if you think it would be better.
If you have a clear picture what this should be throughout multiple
drivers (it seems you do) then please explain it to me, and make
proposals to the Asahi Linux people how the SMC key stuff can be
more understandable, because quite honestly, I don't think I'm
qualified to touch what they have without introducing a shit-load
of bugs.
And in that circumstance, simple obviously correct code is better than
a pile of steaming crap that no longer works. Even worse is when
there's a fundamental incompatibility between what we have in mainline
and what Asahi folk are using. Even worse is if this breaks on other
Apple application-processor architectures.
Let me say again: I am not changing this. That's for Asahi people to
do if they wish. I am the just middle-man here.
And yes, we need to do something about the %p4ch stuff. I have _no_
idea how to properly solve that right now - and how to properly
solve that depends on what comes out of the discussion about what
endianness this "smc_key" thing should be.
Unless I get some input from the Asahi folk, I won't be posting a v2,
because I can't address stuff like %p4ch without that. And I'm not
going to mess about with endian conversions in silly places when it's
not obvious that it's the right thing to be doing.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2022-09-05 13:10 UTC|newest]
Thread overview: 171+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-01 13:54 [PATCH 0/6] Add Apple Mac System Management Controller GPIOs Russell King (Oracle)
2022-09-01 13:54 ` [PATCH 1/6] dt-bindings: mfd: add binding for Apple Mac System Management Controller Russell King (Oracle)
2022-09-01 15:06 ` Krzysztof Kozlowski
2022-09-01 15:12 ` Russell King (Oracle)
2022-09-01 15:15 ` Krzysztof Kozlowski
2022-09-01 15:24 ` Russell King (Oracle)
2022-09-01 15:45 ` Krzysztof Kozlowski
2022-09-01 15:56 ` Russell King (Oracle)
2022-09-01 16:25 ` Krzysztof Kozlowski
2022-09-01 16:47 ` Russell King (Oracle)
2022-09-01 22:33 ` Rob Herring
2022-09-02 15:06 ` Mark Kettenis
2022-09-02 17:28 ` Rob Herring
2022-09-05 10:24 ` Russell King (Oracle)
2022-09-06 9:04 ` Russell King (Oracle)
2022-09-06 9:31 ` Mark Kettenis
2022-09-06 11:22 ` Linus Walleij
2022-09-06 11:36 ` Hector Martin
2022-09-06 11:57 ` Linus Walleij
2022-09-06 13:28 ` Hector Martin
2022-09-06 13:43 ` Russell King (Oracle)
2022-09-06 13:53 ` Hector Martin
2022-09-06 14:25 ` Mark Kettenis
2022-09-06 14:54 ` Russell King (Oracle)
2022-09-06 15:38 ` Mark Kettenis
2022-09-06 15:55 ` Rob Herring
2022-09-06 13:46 ` Linus Walleij
2022-09-06 15:34 ` Rob Herring
2022-09-06 16:10 ` Rob Herring
2022-09-06 17:00 ` Hector Martin
2022-09-06 17:35 ` Rob Herring
2022-09-06 17:40 ` Sven Peter
2022-09-06 18:38 ` Hector Martin
2022-09-07 9:39 ` Mark Kettenis
2022-09-01 22:26 ` Rob Herring
2022-09-02 14:49 ` Mark Kettenis
2022-09-02 17:04 ` Rob Herring
2022-09-01 19:14 ` Rob Herring
2022-09-01 13:54 ` [PATCH 2/6] dt-bindings: gpio: add binding for the GPIO block for Apple Mac SMC Russell King (Oracle)
2022-09-01 15:11 ` Krzysztof Kozlowski
2022-09-01 15:14 ` Russell King (Oracle)
2022-09-01 13:54 ` [PATCH 3/6] soc: apple: rtkit: Add apple_rtkit_poll Russell King
2022-09-01 17:00 ` Sven Peter
2022-09-01 17:25 ` Eric Curtin
2022-09-01 13:54 ` [PATCH 4/6] platform/apple: Add new Apple Mac SMC driver Russell King
2022-09-01 17:50 ` Sven Peter
2022-09-05 10:55 ` Russell King (Oracle)
2022-09-05 16:53 ` Hector Martin
2022-09-01 19:26 ` Andy Shevchenko
2022-09-02 6:45 ` Sven Peter
2022-09-05 14:45 ` Hector Martin
2022-09-05 15:00 ` Andy Shevchenko
2022-09-08 10:58 ` Lee Jones
2022-09-08 11:28 ` Hector Martin
2022-09-08 12:31 ` Lee Jones
2022-09-08 12:58 ` Hector Martin
2022-09-08 13:29 ` Linus Walleij
2022-09-08 13:36 ` Lee Jones
2022-09-08 13:58 ` Hector Martin
2022-09-09 7:50 ` Lee Jones
2022-09-12 10:03 ` Russell King (Oracle)
2022-09-12 10:55 ` Lee Jones
2022-10-28 15:36 ` Russell King (Oracle)
2022-10-31 8:46 ` Lee Jones
2022-10-31 9:03 ` Hector Martin
2022-10-31 9:44 ` Russell King (Oracle)
2022-10-31 17:24 ` Lee Jones
2022-10-31 19:47 ` Russell King (Oracle)
2022-11-01 9:59 ` Lee Jones
2022-10-29 6:40 ` Hector Martin
2022-10-31 8:48 ` Lee Jones
2022-10-31 8:58 ` Hector Martin
2022-10-31 9:29 ` Lee Jones
2022-10-31 9:44 ` Hector Martin
2022-10-31 17:23 ` Lee Jones
2022-10-31 19:34 ` Russell King (Oracle)
2022-11-02 13:12 ` Lee Jones
2022-11-02 15:54 ` Russell King (Oracle)
2022-09-01 13:54 ` [PATCH 5/6] gpio: Add new gpio-macsmc driver for Apple Macs Russell King
2022-09-01 18:55 ` Andy Shevchenko
2022-09-01 21:51 ` Martin Povišer
2022-09-02 6:31 ` Andy Shevchenko
[not found] ` <3B649A66-8116-432D-B88A-B5CE493EF930@cutebit.org>
[not found] ` <CAHp75VeB3_sZ2vsSxMSsLeJSkyemDh9iOPHXJCN1mhodA13LNQ@mail.gmail.com>
2022-09-02 11:12 ` Martin Povišer
2022-09-02 13:33 ` Andy Shevchenko
2022-09-02 13:36 ` Andy Shevchenko
2022-09-02 13:37 ` Martin Povišer
2022-09-02 14:41 ` Andy Shevchenko
2022-09-02 14:45 ` Russell King (Oracle)
2022-09-02 10:05 ` Russell King (Oracle)
2022-09-02 10:37 ` Andy Shevchenko
2022-09-02 11:32 ` Russell King (Oracle)
2022-09-02 13:39 ` Andy Shevchenko
2022-09-02 14:46 ` Russell King (Oracle)
2022-09-02 14:53 ` Andy Shevchenko
2022-09-02 15:34 ` Russell King (Oracle)
2022-09-02 15:43 ` Andy Shevchenko
2022-09-05 10:20 ` Russell King (Oracle)
2022-09-05 10:32 ` Andy Shevchenko
2022-09-05 13:10 ` Russell King (Oracle) [this message]
2022-09-05 13:16 ` Andy Shevchenko
2022-09-05 14:01 ` Russell King (Oracle)
2022-09-05 14:02 ` Russell King (Oracle)
2022-09-05 14:42 ` Andy Shevchenko
2022-09-05 14:53 ` Russell King (Oracle)
2022-09-05 14:50 ` Andy Shevchenko
2022-09-05 15:52 ` Hector Martin
2022-09-05 15:56 ` Russell King (Oracle)
2022-09-05 15:32 ` Russell King (Oracle)
2022-09-05 15:44 ` Martin Povišer
2022-09-05 15:58 ` Hector Martin
2022-09-05 16:13 ` Russell King (Oracle)
2022-09-05 19:10 ` Linus Walleij
2022-09-06 6:51 ` Hector Martin
2022-09-05 15:47 ` Hector Martin
2022-09-05 15:39 ` Hector Martin
2022-09-05 15:16 ` Hector Martin
2022-09-05 15:04 ` Hector Martin
2022-09-02 9:42 ` Linus Walleij
2022-09-01 13:54 ` [PATCH 6/6] gpio: macsmc: Add IRQ support Russell King
2022-09-01 18:03 ` Andy Shevchenko
2022-09-05 11:54 ` Russell King (Oracle)
[not found] ` <CAHp75VeDGCp8J6wnmCqGpV++vs2Zur9Mfp71Dk8dVXcuHFnCrQ@mail.gmail.com>
2022-09-05 13:21 ` Andy Shevchenko
2022-09-02 13:21 ` Linus Walleij
2022-09-05 12:47 ` Russell King (Oracle)
2022-09-05 13:19 ` Fwd: " Andy Shevchenko
2022-09-05 21:43 ` Russell King (Oracle)
2022-09-05 13:27 ` Linus Walleij
2022-09-06 7:00 ` Hector Martin
2022-09-06 7:47 ` Russell King (Oracle)
2022-09-06 8:00 ` Hector Martin
2022-09-01 15:12 ` [PATCH 0/6] Add Apple Mac System Management Controller GPIOs Krzysztof Kozlowski
2022-10-27 15:35 ` Russell King (Oracle)
2022-11-08 16:32 ` [PATCH v3 0/7] " Russell King (Oracle)
2022-11-08 16:33 ` [PATCH v3 1/7] mfd: Add core Apple Mac SMC driver Russell King
2022-11-14 9:52 ` Lee Jones
2022-11-14 10:35 ` Andy Shevchenko
2022-11-08 16:33 ` [PATCH v3 2/7] lib/vsprintf: Add support for generic FOURCCs by extending %p4cc Russell King
2022-11-14 15:34 ` Petr Mladek
2022-11-14 15:46 ` Andy Shevchenko
2022-11-14 16:18 ` Petr Mladek
2022-11-14 16:15 ` Russell King (Oracle)
2022-11-14 16:46 ` Russell King (Oracle)
2022-11-22 12:43 ` Petr Mladek
2022-11-22 14:49 ` Petr Mladek
2022-11-08 16:33 ` [PATCH v3 3/7] dt-bindings: mfd: add binding for Apple Mac System Management Controller Russell King (Oracle)
2022-11-08 20:42 ` Linus Walleij
2022-11-08 20:55 ` Krzysztof Kozlowski
2022-11-08 22:22 ` Russell King (Oracle)
2022-11-09 8:35 ` Krzysztof Kozlowski
2022-11-09 22:17 ` Rob Herring
2022-11-10 11:35 ` Hector Martin
2022-11-10 11:48 ` Russell King (Oracle)
2022-11-10 14:00 ` Krzysztof Kozlowski
2022-11-10 14:14 ` Russell King (Oracle)
2022-11-10 14:21 ` Krzysztof Kozlowski
2022-11-10 14:23 ` Russell King (Oracle)
2022-11-10 14:36 ` Krzysztof Kozlowski
2022-11-10 14:43 ` Russell King (Oracle)
2022-11-14 10:05 ` Lee Jones
2022-11-08 22:30 ` Rob Herring
2022-11-08 16:33 ` [PATCH v3 4/7] platform/apple: Add new Apple Mac SMC driver Russell King
2022-11-08 16:33 ` [PATCH v3 5/7] arm64: dts: apple: Add SMC node to t8103 devicetrees Russell King
2022-11-08 16:33 ` [PATCH v3 6/7] dt-bindings: gpio: add binding for the GPIO block for Apple Mac SMC Russell King (Oracle)
2022-11-08 20:56 ` Krzysztof Kozlowski
2022-11-08 22:09 ` Russell King (Oracle)
2022-11-09 7:31 ` Hector Martin
2022-11-09 8:36 ` Krzysztof Kozlowski
2022-11-09 9:12 ` Russell King (Oracle)
2022-11-09 9:19 ` Krzysztof Kozlowski
2022-11-08 22:30 ` Rob Herring
2022-11-08 16:33 ` [PATCH v3 7/7] gpio: Add new gpio-macsmc driver for Apple Macs Russell King
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=YxX1Lp7ClRSBhbno@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=alyssa@rosenzweig.io \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=asahi@lists.linux.dev \
--cc=brgl@bgdev.pl \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=marcan@marcan.st \
--cc=sven@svenpeter.dev \
/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).