ksummit.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: ksummit-discuss@lists.linuxfoundation.org
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	"dvhart@dvhart.com" <dvhart@dvhart.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [Ksummit-discuss] [TECH TOPIC] Driver model/resources, ACPI, DT, etc (sigh)
Date: Mon, 19 May 2014 22:53:37 +0200	[thread overview]
Message-ID: <1630071.qiO1i5p1Zy@vostro.rjw.lan> (raw)
In-Reply-To: <1400429541.10267.22.camel@wasp-deb.dvhart.com>

On Sunday, May 18, 2014 09:12:21 AM Darren Vincent Hart wrote:
> On Sun, 2014-05-18 at 22:28 +0200, Linus Walleij wrote:
> > On Sun, May 18, 2014 at 1:03 AM, Benjamin Herrenschmidt
> > <benh@kernel.crashing.org> wrote:
> > > On Fri, 2014-05-16 at 18:54 -0700, Darren Vincent Hart wrote:
> > >
> > >> In my opinion, the common dev_get_property() interface which calls the
> > >> appropriate firmware accessor function makes the most sense. Creating
> > >> another intermediate format which we then have to make into something
> > >> useful (like pdata) strikes me as unnecessary and likely limiting.
> > >
> > > So in the end it will really depend on whether people are good enough to
> > > use the same property/value "names" and format accross the
> > > representations.
> > >
> > > So yes, maybe something like dev_get_property() would work fine for
> > > most cases, which would be great. And for the always necessary quirks
> > > where for example the ACPI variant used a wrong spelling or the DT
> > > variant used a different size or something, the driver can either
> > > openly call different of and acpi variants or we could have quirks in
> > > the driver itself... ie, a pointer in struct device to a quirk table,
> > > possibly based on hash of the name for fast lookup. But let's wait
> > > for some real implementations to see how necessary that really is.
> > 
> > This has already happened with GPIO as DT had named GPIOs
> > and ACPI yet had not, but could get GPIOs from a certain
> > index, which DT also could.
> > 
> > So:
> > 
> > gpios = <a, b>;
> > 
> > or:
> > 
> > foo-gpio = <a>;
> > bar-gpio = <b>;
> > 
> > Whereas in ACPI it would only be the former representation.
> > So the prototype had to be something like:
> > 
> > GPIO = gpiod_get_index(device, name, index);
> > 
> > So we first look for a named GPIO and if that doesn't work
> > we look for an indexed GPIO. All fine.
> > 
> > Anyway, then ACPI said they are going to introduce named
> > GPIOs so all is good. Or is it?
> > 
> > No, they can still choose a totally different name from what
> > DT is using. So we end up with code like this:
> > 
> > if (gpio = gpiod_get_index(device, "foo", index))
> > ...
> > else if (gpio = giod_get_index(device, "bar", index))
> > ...
> > 
> > That is however not enough since they can also disagree
> > with indexed values so that whereas the two GPIO pins
> > may be gpios = <a, b>; in DT nothing stops the ACPI
> > guys from putting it in order <b, a> and we get code to
> > compensate for that instead.
> 
> I see two distinct problems being raised. One on equivalent mechanisms,
> and one on parameterization.
> 
> With respect to mechanism, it is my understanding that ACPI 5.0 does
> provide for GpioIO pin lists, but for some reason, those are rarely used
> (and not implemented in the Linux ACPICA). However, it seems to me those
> could be used in the same way as <function>-gpios in DT land.
> 
> While independent from the ACPI Device Properties work we have been
> working on, I wonder if we could address this in some of the
> documentation we're preparing as well - as it is intended to document
> best practice, and the properties need to interact with the already
> defined resource types, such as GPIO.
> 
> Rafael - what do you think?

That depends on what part of the spec you're referring to in particular.
Care to be more specific?

> As for parameterization like the function name ("foo" or "bar"), or
> which "index", that is what the DT and ACPI Device Properties are meant
> to abstract, so I don't see this as a problem. Rather than if/else
> blocks in the code as you've described above, those names and indexes
> should be read from the device properties.

Well, gpiod_get() takes a *name* and that's the preferred interface if
my understanding is correct.  There's no mechanism in ACPI I'm aware of that
can allow a name to be associated with a GPIO pin (or a list of pins for
that matter).

> > So there are, with the simple example of GPIO, already
> > a multitude of ways of shooting oneself in the foot, defining
> > bindings for the same hardware in incompatible ways and
> > generally screwing up.
> > 
> > And this almost already happened for RFkill but luckily
> > eventually we stayed clear of some of it by managing
> > to DEFINE that the RESET GPIO comes at index 0 and
> > SHUTDOWN GPIO comes at index 1, in BOTH
> > representations UNLESS they are named, and in that
> > case the name takes precedence and this file:
> > net/rfkill/rfkill-gpio.c

Well, yeah.

> > Is actually a good example of how things should look.
> > 
> > Looking at that file, do we all think this looks good?
> 
> Thanks, concrete examples are usually helpful.
> 
> It is a good example I think. The only bit I don't like is that
> acpi_find_gpio ignores con_id.

Precisely.  And it can't do anything else ATM.

> I'm sure there is a lot of context here
> as to why - probably mostly surrounding the fact that while ACPI *CAN*

Or can it?  How exactly?

> do this, there hasn't been a standard way of doing it and therefor
> nothing we could reliably abstract... I'd like to see if we can improve
> that.

Well, me too. :-)

Rafael

  reply	other threads:[~2014-05-19 20:36 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-02 21:42 Olof Johansson
2014-05-03  0:05 ` Rafael J. Wysocki
2014-05-03  2:02   ` Mark Brown
2014-05-04 12:28     ` Rafael J. Wysocki
2014-05-05  8:45       ` Benjamin Herrenschmidt
2014-05-05 19:06         ` Mark Brown
2014-05-06 12:22         ` Rafael J. Wysocki
2014-05-12 21:59           ` Mark Brown
2014-05-12 22:03             ` Rafael J. Wysocki
2014-05-13  7:34               ` Arnd Bergmann
2014-05-13 10:47                 ` Rafael J. Wysocki
2014-05-13 12:11                 ` Mark Brown
2014-05-13 13:08                   ` Arnd Bergmann
2014-05-13 19:31                     ` Mark Brown
2014-05-13 19:53                       ` Arnd Bergmann
2014-05-13 21:19                       ` Rafael J. Wysocki
2014-05-14 13:04                         ` Mark Brown
2014-05-15 12:05                           ` Rafael J. Wysocki
2014-05-17  1:11                             ` Darren Vincent Hart
2014-05-19  0:02                               ` Rafael J. Wysocki
2014-05-17 13:24                             ` Mark Brown
2014-05-18 23:56                               ` Rafael J. Wysocki
2014-05-23 17:33                                 ` Mark Brown
2014-05-26 21:19                                 ` Linus Walleij
2014-05-26 21:55                                   ` Rafael J. Wysocki
2014-05-13 20:02                     ` Olof Johansson
2014-05-17  3:57                   ` Darren Vincent Hart
2014-05-17 13:09                     ` Mark Brown
2014-05-17  6:52                       ` Darren Vincent Hart
2014-05-23 17:21                         ` Mark Brown
2014-05-03 15:14   ` Arnd Bergmann
2014-05-04 11:14     ` Catalin Marinas
2014-05-04 17:18       ` Olof Johansson
2014-05-04 17:27         ` Guenter Roeck
2014-05-04 22:02           ` Rafael J. Wysocki
2014-05-05  2:44             ` Pantelis Antoniou
2014-05-05 11:22               ` Rafael J. Wysocki
2014-05-05  2:52           ` Pantelis Antoniou
2014-05-05  4:21             ` Guenter Roeck
2014-05-05 23:05               ` Pantelis Antoniou
2014-05-04 21:33         ` Rafael J. Wysocki
2014-05-05  8:43           ` Benjamin Herrenschmidt
2014-05-05 11:32             ` Rafael J. Wysocki
2014-05-05 11:31               ` Benjamin Herrenschmidt
2014-05-06 12:18                 ` Rafael J. Wysocki
2014-05-06 13:35                   ` Arnd Bergmann
2014-05-08  0:16                     ` Rafael J. Wysocki
2014-05-12  6:21                     ` Benjamin Herrenschmidt
2014-05-13 21:14                     ` Olof Johansson
2014-05-13 21:40                       ` Rafael J. Wysocki
2014-05-13 21:28                         ` Olof Johansson
2014-05-13 21:51                           ` Rafael J. Wysocki
2014-05-17  3:22                             ` Darren Vincent Hart
2014-05-14 12:06                       ` Arnd Bergmann
2014-05-14 12:25                         ` Mark Brown
2014-05-18 16:34                           ` Linus Walleij
2014-05-14 12:31                         ` Rafael J. Wysocki
2014-05-17  3:02                         ` Darren Vincent Hart
2014-05-17  2:57                       ` Darren Vincent Hart
2014-05-18 16:31                       ` Linus Walleij
2014-05-05 15:09             ` Rob Herring
2014-05-05 16:02               ` Jason Cooper
2014-05-05 16:41                 ` Thomas Petazzoni
2014-05-05 22:55               ` Benjamin Herrenschmidt
2014-05-17  2:32             ` Darren Vincent Hart
2014-05-05  8:39         ` Benjamin Herrenschmidt
2014-05-05 11:37           ` Rafael J. Wysocki
2014-05-07 11:05           ` David Woodhouse
2014-05-07 13:06             ` Rafael J. Wysocki
2014-05-08  3:27             ` Benjamin Herrenschmidt
2014-05-17  2:05               ` Darren Vincent Hart
2014-05-17  1:54         ` Darren Vincent Hart
2014-05-17 23:03           ` Benjamin Herrenschmidt
2014-05-18 20:28             ` Linus Walleij
2014-05-18 16:12               ` Darren Vincent Hart
2014-05-19 20:53                 ` Rafael J. Wysocki [this message]
2014-05-04 10:56   ` Catalin Marinas
2014-05-04 12:19     ` Rafael J. Wysocki
2014-05-04 17:23       ` Olof Johansson
2014-05-04 21:58         ` Rafael J. Wysocki
2014-05-06  2:41           ` Linus Walleij
2014-05-06 11:41             ` Rafael J. Wysocki
2014-05-08 11:36               ` Linus Walleij
2014-05-08 12:08                 ` Rafael J. Wysocki
2014-05-17  4:39             ` Darren Vincent Hart
2014-05-17  4:33           ` Darren Vincent Hart
2014-05-03  0:23 ` Darren Hart
2014-05-05 16:58 ` Linus Walleij
2014-05-06  5:02   ` Darren Hart
2014-05-17  0:32 ` Darren Vincent Hart

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=1630071.qiO1i5p1Zy@vostro.rjw.lan \
    --to=rjw@rjwysocki.net \
    --cc=dvhart@dvhart.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=ksummit-discuss@lists.linuxfoundation.org \
    --cc=rafael.j.wysocki@intel.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