On Sat, 29 Nov 2014 23:27:52 +0100 , "Rafael J. Wysocki" rjw@rjwysocki.net wrote:
On Saturday, November 29, 2014 11:52:09 AM Mark Brown wrote:
--9GYGtdBumnmR69ER Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable
On Sat, Nov 29, 2014 at 12:51:59AM +0100, Rafael J. Wysocki wrote:
On Friday, November 28, 2014 04:00:36 PM Mark Brown wrote:
OK, we probably should have one to aid discoverability since as far as I can tell what's happening is that people (hi Intel!) are allocating their own identifiers for devices produced by other vendors that turn up on their boards. If people can find the set of IDs in use there's more chance they'll use the same ones as other people.
There's the PRP0001 ID that can be use to in combination with the "compatible" property which then works the same way as for DT.
That should be sufficient if the properties are going to be the same for ACPI (_DSD) and DT.
We've got people making BIOSs right now for systems you can actually buy=20 that are intended to run Windows which we need to support; right now the pressing problem I'm seeing is that we've got BIOS vendors not using properties at all and we're going to be ending up with configuration coming from big DMI tables instead which is miserable, Windows is perfectly happy to have custom drivers installed per machine. Do we know if Windows supports PRP0001 as it currently stands?
No, it doesn't.
Separate device IDs are necessary for Windows compatibility AFAICS.
But that also means any device ID registered by us won't be suitable in that case, because Windows won't use it.
There are two different problems here, though. The first one is a way to provide the existing Linux drivers with the information expected by them via ACPI and that's what _DSD (plus PRP0001 optionally) is. The second one is to be able to handle systems with ACPI tables from a random vendor who only cares about Windows and that's more difficult to address, because our ecosystem is different from theirs.
It is a problem if the expected binding method is different between Linux and Windows. This is a problem we've hit before where the platform /may/ try to get both right, but in reality only one works, or even implemented.
I predict that PRP0001 is only going to be practical when the hardware is only ever going to be driven by Linux or other PRP0001 aware OS. ie. A Minnowboard Max with a custom expansion board attached. When the hardware is supported under both Windows and Linux then it will probably be best for Linux to attempt to bind using the device id before attempting to use PRP0001.
There basically are two ways around that. The first one is to have all knowledge related to device IDs in drivers (which effectively is what Windows does and which implies "board files" of sorts) and the second one is to make it possible to use overlays on top of the existing ACPI tables that will allow people to provide the properties expected by a more generic driver (this way, if the vendor didn't care to provide _DSD, for example, in the original ACPI tables, the system integrator would be able to use an overlay in an initramfs or boot partition to amend them).
Either approach amounts to pretty much the same thing. The kernel/distribution needs to carry around device specific driver data which is exactly how we've supported x86 hardware. Whether the data is in-kernel or in-userspace is kind of an implementation detail. :-)
_DSD support is a different situation though. Even if Windows doesn't care to directly support _DSD, drivers are free to use _DSD properties. This is the scenario where the shared binding repository will be important.
g.