linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Russell King <rmk+kernel@armlinux.org.uk>
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 4/6] platform/apple: Add new Apple Mac SMC driver
Date: Thu, 1 Sep 2022 22:26:15 +0300	[thread overview]
Message-ID: <CAHp75Ve1ackTCOAkVar00OyDW-+BOPbRmsJRH3-z1bdNaukC+Q@mail.gmail.com> (raw)
In-Reply-To: <E1oTkeW-003t9Y-Ey@rmk-PC.armlinux.org.uk>

On Thu, Sep 1, 2022 at 5:18 PM Russell King <rmk+kernel@armlinux.org.uk> wrote:
>
> From: Hector Martin <marcan@marcan.st>
>
> This driver implements support for the SMC (System Management
> Controller) in Apple Macs. In contrast to the existing applesmc driver,
> it uses pluggable backends that allow it to support different SMC
> implementations, and uses the MFD subsystem to expose the core SMC
> functionality so that specific features (gpio, hwmon, battery, etc.) can
> be implemented by separate drivers in their respective downstream
> subsystems.
>
> The initial RTKit backend adds support for Apple Silicon Macs (M1 et
> al). We hope a backend for T2 Macs will be written in the future
> (since those are not supported by applesmc), and eventually an x86
> backend would allow us to fully deprecate applesmc in favor of this
> driver.

...

>  drivers/platform/Kconfig           |   2 +
>  drivers/platform/Makefile          |   1 +
>  drivers/platform/apple/Kconfig     |  49 ++++
>  drivers/platform/apple/Makefile    |  11 +

Are you going to collect the code from, e.g., PDx86 which supports
some apple devices here?

...


> +EXPORT_SYMBOL(apple_smc_read);

Can you from day 1 make it a namespaced variant? Ditto for the rest of
the exported stuff.

...

> +#include <asm/unaligned.h>

Usually we put asm/* after linux/*.

Missed bits.h.

> +#include <linux/delay.h>
> +#include <linux/device.h>
> +#include <linux/io.h>
> +#include <linux/ioport.h>
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> +#include <linux/soc/apple/rtkit.h>

...

> +       smc->msg_id = (smc->msg_id + 1) & 0xf;

% 16 will tell much cleaner of the purpose, no?

...

> +       while (smc->atomic_pending) {
> +               ret = apple_rtkit_poll(smc->rtk);
> +               if (ret < 0) {
> +                       dev_err(smc->dev, "RTKit poll failed (%llx)", msg);
> +                       return ret;
> +               }
> +               udelay(100);
> +       }

Something from iopoll.h to be utilised?

...

> +       if (FIELD_GET(SMC_ID, smc->cmd_ret) != smc->msg_id) {
> +               dev_err(smc->dev, "Command sequence mismatch (expected %d, got %d)\n",
> +                       smc->msg_id, (unsigned int)FIELD_GET(SMC_ID, smc->cmd_ret));

Why casting?

> +               return -EIO;
> +       }

...

> +       result = FIELD_GET(SMC_RESULT, smc->cmd_ret);
> +       if (result != 0)
> +               return -result;

And this is in Linux error numbering space?!

...

> +       smc->msg_id = (smc->msg_id + 1) & 0xf;

See above. Perhaps you need a macro / inline helper for this to avoid dups.

...

> +       do {
> +               if (wait_for_completion_timeout(&smc->cmd_done,
> +                                               msecs_to_jiffies(SMC_RECV_TIMEOUT)) == 0) {
> +                       dev_err(smc->dev, "Command timed out (%llx)", msg);
> +                       return -ETIMEDOUT;
> +               }
> +               if (FIELD_GET(SMC_ID, smc->cmd_ret) == smc->msg_id)
> +                       break;

> +               dev_err(smc->dev, "Command sequence mismatch (expected %d, got %d)\n",
> +                       smc->msg_id, (unsigned int)FIELD_GET(SMC_ID, smc->cmd_ret));

Guaranteed to flood the logs...

> +       } while(1);

...with such a conditional.

...

> +       result = FIELD_GET(SMC_RESULT, smc->cmd_ret);
> +       if (result != 0)
> +               return -result;

Linux error numbering space?

...

> +       if (size <= 4)
> +               memcpy(buf, &rdata, size);
> +       else
> +               memcpy_fromio(buf, smc->shmem.iomem, size);

This is unclear why plain memcpy() for the small size and what are the
side effects of the memory. Maybe you wanted memremap() instead of
ioremap() to begin with?

...

> +       *key = swab32(*key);

swab32s()

...

> +       if (res.end < res.start || !resource_contains(smc->sram, &res)) {

Is it a reimplementation of something like resource_intersect() and Co?

> +               dev_err(smc->dev,
> +                       "RTKit buffer request outside SRAM region: %pR", &res);
> +               return -EFAULT;
> +       }

...

> +       bfr->iomem = smc->sram_base + (res.start - smc->sram->start);

Isn't it better to write as

  res.start + (base - start)

?

...

> +               if (smc->atomic_pending) {
> +                       smc->atomic_pending = false;
> +               } else {
> +                       complete(&smc->cmd_done);
> +               }

Redundant {} in both cases.

...

> +       smc->sram = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sram");

> +       if (!smc->sram)
> +               return dev_err_probe(dev, EIO,
> +                                    "No SRAM region");

Dup, the below does this message for you.

> +       smc->sram_base = devm_ioremap_resource(dev, smc->sram);
> +       if (IS_ERR(smc->sram_base))
> +               return dev_err_probe(dev, PTR_ERR(smc->sram_base),
> +                                    "Failed to map SRAM region");

Don't we have devm_platform_ioremap_resource_byname() ?

...

> +       ret = apple_rtkit_wake(smc->rtk);
> +       if (ret != 0)

Drop all these ' != 0'

> +               return dev_err_probe(dev, ret,
> +                                    "Failed to wake up SMC");

Why not on one line?

...

> +static const struct of_device_id apple_smc_rtkit_of_match[] = {
> +       { .compatible = "apple,smc" },

> +       {},

No comma for the terminator entry.

> +};

...

> +static struct platform_driver apple_smc_rtkit_driver = {
> +       .driver = {
> +               .name = "macsmc-rtkit",

> +               .owner = THIS_MODULE,

Unneeded dup.

> +               .of_match_table = apple_smc_rtkit_of_match,
> +       },
> +       .probe = apple_smc_rtkit_probe,
> +       .remove = apple_smc_rtkit_remove,
> +};

...

> +typedef u32 smc_key;

Why?!

...

> +#define _SMC_KEY(s) (((s)[0] << 24) | ((s)[1] << 16) | ((s)[2] << 8) | (s)[3])

If s is a byte buffer, the above is NIH get_unaligned_be32(). Or in
case of alignment be32_to_cpu() with respective type (__be32) to be
used.

...

> +static inline int apple_smc_read_flag(struct apple_smc *smc, smc_key key)
> +{
> +       u8 val;
> +       int ret = apple_smc_read_u8(smc, key, &val);

Split assignment and definition.

> +       if (ret < 0)
> +               return ret;
> +       return val ? 1 : 0;
> +}

...

> +#define apple_smc_write_flag apple_smc_write_u8

Why is it needed?

-- 
With Best Regards,
Andy Shevchenko

  parent reply	other threads:[~2022-09-01 19:27 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 [this message]
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)
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=CAHp75Ve1ackTCOAkVar00OyDW-+BOPbRmsJRH3-z1bdNaukC+Q@mail.gmail.com \
    --to=andy.shevchenko@gmail.com \
    --cc=alyssa@rosenzweig.io \
    --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=rmk+kernel@armlinux.org.uk \
    --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).