public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Udit Kumar <udit.kumar@nxp.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>,
	 "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Varun Sethi <V.Sethi@nxp.com>,
	 Daniel Thompson <daniel.thompson@linaro.org>,
	Graeme Gregory <graeme.gregory@linaro.org>
Subject: Re: [RFC] ACPI table HID/CID allocation
Date: Tue, 21 Nov 2017 12:29:14 +0000	[thread overview]
Message-ID: <CAKv+Gu8Rfx7A2Xc4rOe7TErZh5ukw3RKrc45jd8f6PezuWunJg@mail.gmail.com> (raw)
In-Reply-To: <AM6PR0402MB333426686BCD40B796CB3C4191230@AM6PR0402MB3334.eurprd04.prod.outlook.com>

On 21 November 2017 at 11:32, Udit Kumar <udit.kumar@nxp.com> wrote:
>
>> On 21 November 2017 at 09:59, Udit Kumar <udit.kumar@nxp.com> wrote:
>> > Thanks Ard.
>> > Below table was for example. I am not converting whole DT to ACPI
>> > tables :) My idea is to reduce Linux patches for probing as possible.
>> > Also keeping firmware and OS separately then Let firmware expose both
>> > way (HID and PRP00001) and Linux to decide binding
>>
>> No.
>>
>> You are still assuming ACPI and DT device drivers bind at the same level, and
>> they don't.
>
> No, my above comments was just limited to binding.

Yes, but if you leave it to the OS to decide which binding it uses,
you will have to support all of them into eternity. And the more
detailed binding you need to support may limit you in the available
choices when it comes to making hardware changes, something ACPI
allows you to do.

> Right, here device driver should know that device is present in system,
> I see probe function (device-driver binding) is way to know this.
> Then driver can execute AML methods exposed by firmware.
>

Yes, declaring the presence of the device is the main purpose of
describing it both in ACPI and in DT.

>> An ACPI device has AML methods to manage power state and perform other
>> device related low-level tasks. The device driver has no knowledge of the
>> hardware beyond what it needs to invoke those abstract methods.
>
> You meant, If we need to update driver for AML methods then why not to update binding as well . ?
>

No. What I am saying is that you should not expose two different
bindings, and let the OS choose.

> On side track,
>  With limited search,  I got many each driver is having (acpi_id and of_id),
> looks, acpi support is added on the top of DT flavored drivers.
> and therefore acpi tables are following the same.
> Sorry to say, reference I am looking at (edk2-platform) JunoPkg and VExpressPkg,
> Has following devices has description similar to Device tree
>     Device (NET0) {
>     Device (SREG) {
>     Device (VIRT) {

These were taken from the ACPI tables for an emulator

>    Device(KMI0) {

I have no clue what kind of device this is

>    Device(ETH0) {

This one uses _DSD as intended, to set device properties in a DT
compatible fashion, but note that this does *not* include the
'compatible' property, nor anything else that ACPI defines itself
(status, dma-coherent, etc)

> Where no AML method is exposed. Then I expect OS driver to manage this device.
> While grepping over few other edk2-platforms.  Looks some of methods
> are abstracted, not whole device.
>

So what is your point? Why does this argue in favor of allowing
PRP0001 + compatible?

>> A DT device describes everything in detail, and requires clock and regulator
>> drivers and other bits and pieces that are tightly coupled to details of the
>> hardware.
>>
>> So now, you have the worst of both worlds:
>>
>> - you need to implement all of this in firmware so ACPI can support it,
>> - you have to expose the internals to the OS so DT can support it.
>
> Yes, for time being or may be longer, DT support needs to be there
> along with ACPI introduction.
>
> Are you suggesting here to abstract whole device details from
> OS and expose AML methods to be used by device driver.
> And maintain two drivers instead of fitting DT style driver into ACPI world ?
>

No. You should update the driver so it can support both ACPI and DT
bindings. That way, the driver can use the abstractions offered by
ACPI when it can, and can invoke the clock and regulator frameworks
and other low level infrastructure only when it needs to.

Let me try to illustrate this a bit better: imagine a NXP customer
that runs a datacenter that has 10,000 NXP servers, and is using RHEL
x.y. The business is going well, and at some point, he wants to order
another 2,000 servers. Unfortunately, the vendor cannot supply the
exact same revision of the hardware, and the latest revision uses some
component that is not supported in RHEL x.y.

You now have made your customer very unhappy. He invested in RHEL and
ACPI based servers precisely to avoid this situation. The cost of
adding 2,000 servers now includes the cost of upgrading the other
10,000 servers to a new OS version or the cost of supporting two
different OS versions at the same time, for a reason that is not
justifiable.


  reply	other threads:[~2017-11-21 12:25 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-21  9:19 [RFC] ACPI table HID/CID allocation Udit Kumar
2017-11-21  9:38 ` Ard Biesheuvel
2017-11-21  9:59   ` Udit Kumar
2017-11-21 10:13     ` Ard Biesheuvel
2017-11-21 11:32       ` Udit Kumar
2017-11-21 12:29         ` Ard Biesheuvel [this message]
2017-11-21 13:24           ` Udit Kumar
2017-11-21 14:03             ` Ard Biesheuvel
2017-11-21 18:10               ` Udit Kumar
2017-11-22 11:30                 ` Daniel Thompson
2017-11-22 13:39                   ` Udit Kumar
2017-11-22 17:34                     ` Andrew Fish
2017-11-25 12:40                       ` Udit Kumar
2017-11-22 19:39                   ` Ard Biesheuvel
2017-11-22 20:11                     ` Daniel Thompson
2017-11-25 12:56                       ` Udit Kumar
2017-11-25 19:41                         ` Andrew Fish
2017-11-26  8:35                           ` Udit Kumar
2017-11-27 12:13                         ` Daniel Thompson
2017-11-27 13:31                           ` Udit Kumar
2017-11-25 12:47                     ` Udit Kumar

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-list 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=CAKv+Gu8Rfx7A2Xc4rOe7TErZh5ukw3RKrc45jd8f6PezuWunJg@mail.gmail.com \
    --to=devel@edk2.groups.io \
    /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