On Tue, Apr 10, 2012 at 04:07:41PM -0600, Alex Williamson wrote: > > Some points I remember > > - power on is better called slot enabled > > - guests dont actually call _PSX like you want them to > > (PS3 for sure, in my testing PS0 too), and _EJ0 must > > remove power > > - populated slots after reset must be auto-enabled > > Ok, none of that was in this thread or even on-list though. I figured > we'd start from the ground floor here and re-derive your comments > instead of having them materialize from thin air. I apologize for > splitting the discussion, so let me paraphrase what you previously > stated off-list and add my responses so we can continue here:
Ah, this was off-list, I see. Thanks very much for the summary. > MST> Can the new registers be in vendor specific config space instead of > burning ioports? > AW> Good idea, I'll look into it > > MST> Is "power" really write-only? > AW> No, the power state is read to construct the _STA value and > differentiates 0xa from 0xf. > > MST> Suggest changing "power" to "enabled". > AW> When is a slot "enabled" by the OSPM? Does that just mean the _Lxx > method sent a Notify? As noted above, we could change it to > "actual" (pretty much the same as "enabled"), but that just introduces a > translation if it's controlled via _PSx. I figure call it what it is, > but I'm open for debate if we're going to drop _PSx and trigger the > state change some other way. Very briefly and not really correct (see real spec for details if you are curious), in the hotplug spec you give a slot minimal power to be able to detect device presence, but you must enable it to be able to enumerate devices behind it. I thought using the hardware terms makes it clearer what we emulate and makes it possible to check the hotplug spec to verify behaviour, but this is not really critical I can translate in my head. > MST> We still need hotpluggable mask, right? > AW> Yes, this serves the same purpose as it does today, allowing seabios > init code to dynamically remove _EJ0 from the SSDT for non-hotplug > slots. IIRC, there is no additional usage of it for this hotplug scheme > (we could also use it to remove additional methods from non-hotplug > slots). OK, probably a good idea to list it for completeness. > MST> Tried implementing _PSx, wasn't invoked as expected, but also > didn't implement _STA. > AW> We'll obviously need to validate that the proposed scheme works, but > the OSPM has no reason to gratuitously call _PS0 on a slot if there's no > _STA pr _PSC to tell it the device is powered off. This register scheme > could also support _PSC. > > MST> What does _EJ0 do vs _PS3? Doesn't eject also clear power? Since > these are effectively the same, how do we know what the guest wants to > do? Perhaps we need an "ok to remove" flag set by eject. Suggest this > is actually the "slot power" flag. > AW> Qemu does nothing on _PSx changes. This could be an internal > variable for AML, but I think we want access to it for debugging and to > pre-populate it for reset, thus it's a register. At run time, the OSPM > owns it. If a guest tries to eject a powered slot, that seems more like > a compatibility question, where we can have the _EJ0 method set the > power state before eject. > As Gleb noted (also internally), the ACPI > spec doesn't seem to link _PSx to the eject process, but the above > document clearly does. The ACPI spec does recommend that device is powered off by _EJ0. > The Linux kernel had long ago decided that in > the case of Windows implementation vs ACPI spec, implementation wins. I > assume we'd take the same tactic. So depending on how we write the AML, > eject called on a powered slot can be an unreachable state that we don't > need to worry about. My testing showed _PS3 not called before _EJ0. Probably easiest to implement and try. > Any time eject is called on a slot, that > translates to "ok to remove", but also gives us the option to not remove > it if not requested by qemu. Yes but will _STA return "present" and will it reappear if you do a manual scan? > MST> Also need register to enable/disable native hotplug. > AW> Ok, we can define that it exists via a feature bit once we have a > bridge that includes native hotplug. Isn't there already an ACPI way to > do this, so this is just some AML checks to make sure we're in the right > mode before interacting with these registers? > > MST> Need to define reset state for registers. Think we should enable > all existing devices on reset. > AW> Yes, my thought was that any cold plugged device will be "present", > "powered", and "requested" on reset. > > MST> [Some thoughts on handling buses behind bridges] > AW> I would assume we'd emulate a hotplug capable bridge, can't we drop > all this ACPI hotplug support in that case? Unfortunately windows doesn't seem to support SHPC, only native express hotplug. If true we are stuck with supporting ACPI as well. > Just say "no" to non-root > ACPI PCI hotplug ;) Not sure what non-root has to do with it. > Let's discuss. > > Thanks, > Alex