https://bugzilla.kernel.org/show_bug.cgi?id=14824


Zhang Rui <rui.zh...@intel.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |elio.v...@gmail.com

Bjorn Helgaas <bjorn.helg...@hp.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bjorn.helg...@hp.com




--- Comment #6 from Zhang Rui <rui.zh...@intel.com>  2010-05-10 06:45:20 ---
*** Bug 15801 has been marked as a duplicate of this bug. ***

--- Comment #7 from Bjorn Helgaas <bjorn.helg...@hp.com>  2010-09-13 20:51:29 
---
I know this is fixed and closed already, but I don't like the fact that
we had to add special-case code to evaluate processor _PDC methods in
acpi_bus_init().

I doubt that Windows has a _PDC special case.  It would have to have
been there for a long time, because I'm sure there was no Windows update
just for this laptop, and I don't see anything in the spec that would
suggest such special treatment.  It'd be interesting to use qemu to
figure out whether Windows really does something special here.

I don't have time to really do anything with this now, so these are just
idle thoughts in case I can come back to this later.  If I understand
correctly, the original problem is this:

  1) The \_SB_.PCI0.LPCB.EC0_._REG method references \_PR_.CPU0._PPC
  2) The \_PR_.CPU0._PPC definition is in an SSDT loaded by the CPU0 _PDC
method
  3) Linux executes the _REG method before the _PDC method, so _PPC is
undefined

The ACPI 4.0 spec, section 6.5.4 (_REG) on p. 276 does say:

  OSPM must make Embedded Controller operation regions, accessed via the
  Embedded Controllers described in ECDT, available before executing any
  control method.

So we clearly have to do *some* EC initialization early.  But I wonder if
we're doing more than is required.  We currently call acpi_boot_ec_enable(),
which uses ec_install_handlers() -> acpi_install_address_space_handler() ->
acpi_ev_execute_reg_methods() to evaluate _REG(1).  But the surrounding
text from the spec suggests that _REG(1) is *not* required at this point:

  Except for the cases shown below, control methods must assume all
  operation regions inaccessible until the _REG(RegionSpace, 1) method
  is executed. ...

  The exceptions for this rule are:
    1. [PCI config, I/O, and memory opregions]
    2. [Embedded Controller opregions via the ECDT controller]

Maybe Windows merely happens to bind the \_PR_.CPU0 driver (and run
its _PDC method) before it binds the \_SB_.PCI0.LPCB.EC0_ driver (and
run its _REG method).  It still seems wrong to me for the BIOS to rely
on that sort of ordering, but it doesn't rely on anything special in
Windows to explain why it works.

-- 
Configure bugmail: https://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching the assignee of the bug.

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to