15 Aug, 2010

4 commits

  • Conflicts:
    drivers/acpi/debug.c

    Signed-off-by: Len Brown

    Len Brown
     
  • Rmove deprecated ACPI procfs I/F, including
    /proc/acpi/debug_layer
    /proc/acpi/debug_level
    /proc/acpi/info
    /proc/acpi/dsdt
    /proc/acpi/fadt
    /proc/acpi/sleep

    because the sysfs I/F is already available
    and has been working well for years.

    Signed-off-by: Zhang Rui
    Signed-off-by: Len Brown

    Zhang Rui
     
  • Introduce drivers/acpi/sysfs.c.

    code for ACPI sysfs I/F, including
    #ifdef ACPI_DEBUG
    /sys/module/acpi/parameters/debug_layer
    /sys/module/acpi/parameters/debug_level
    /sys/module/acpi/parameters/trace_method_name
    /sys/module/acpi/parameters/trace_debug_layer
    /sys/module/acpi/parameters/trace_debug_level
    /sys/module/acpi/parameters/trace_state
    #endif
    /sys/module/acpi/parameters/acpica_version
    /sys/firmware/acpi/tables/
    /sys/firmware/acpi/interrupts/
    is moved to this file.

    No function change in this patch.

    Signed-off-by: Zhang Rui
    Signed-off-by: Len Brown

    Zhang Rui
     
  • Introduce drivers/acpi/debugfs.c.

    Code for ACPI debugfs I/F,
    i.e. /sys/kernel/debug/acpi/custom_method,
    is moved to this file.

    And make ACPI debugfs always built in,
    even if CONFIG_ACPI_DEBUG is cleared.

    BTW:this adds about 400bytes code to ACPI, when
    CONFIG_ACPI_DEBUG is cleared.

    [uaccess.h build fix from Andrew Morton ]

    Signed-off-by: Zhang Rui
    Signed-off-by: Len Brown

    Zhang Rui
     

03 Aug, 2010

1 commit

  • This patch provides the same information through debugfs, which previously was
    provided through /proc/acpi/embedded_controller/*/info

    This is the gpe the EC is connected to and whether the global lock
    gets used.
    The io ports used are added to /proc/ioports in another patch.
    Beside the fact that /proc/acpi is deprecated for quite some time,
    this info is not needed for applications and thus can be moved
    to debugfs instead of a public interface like /sys.

    Signed-off-by: Thomas Renninger

    CC: Alexey Starikovskiy
    CC: Len Brown
    CC: linux-kernel@vger.kernel.org
    CC: linux-acpi@vger.kernel.org
    CC: Bjorn Helgaas
    CC: platform-driver-x86@vger.kernel.org
    Signed-off-by: Matthew Garrett

    Thomas Renninger
     

29 May, 2010

2 commits

  • The names of the functions used for blocking/unblocking EC
    transactions during suspend/hibernation suggest that the transactions
    are suspended and resumed by them, while in fact they are disabled
    and enabled. Rename the functions (and the flag used by them) to
    better reflect what they really do.

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Len Brown

    Rafael J. Wysocki
     
  • There still is a race that may result in suspending the system in
    the middle of an EC transaction in progress, which leads to problems
    (like the kernel thinking that the ACPI global lock is held during
    resume while in fact it's not).

    To remove the race condition, modify the ACPI platform suspend and
    hibernate callbacks so that EC transactions are blocked right after
    executing the _PTS global control method and are allowed to happen
    again right after the low-level wakeup.

    Introduce acpi_pm_freeze() that will disable GPEs, wait until the
    event queues are empty and block EC transactions. Use it wherever
    GPEs are disabled in preparation for switching local interrupts off.
    Introduce acpi_pm_thaw() that will allow EC transactions to happen
    again and enable runtime GPEs. Use it to balance acpi_pm_freeze()
    wherever necessary.

    In addition to that use acpi_ec_resume_transactions_early() to
    unblock EC transactions as early as reasonably possible during
    resume. Also unblock EC transactions in acpi_hibernation_finish()
    and in the analogous suspend routine to make sure that the EC
    transactions are enabled in all error paths.

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

    Signed-off-by: Rafael J. Wysocki
    Reported-and-tested-by: Maxim Levitsky
    Signed-off-by: Len Brown

    Rafael J. Wysocki
     

15 Mar, 2010

1 commit


09 Mar, 2010

1 commit

  • There is a race between resume from hibernation and the EC driver
    that may result in restoring the hibernation image in the middle of
    an EC transaction in progress, which in turn may lead to
    unpredictable behavior of the platform.

    To remove that race condition, add a helpers for suspending and
    resuming EC transactions in a safe way to be executed by the ACPI
    platform hibernate pre-restore and restore cleanup callbacks.

    http://bugzilla.kernel.org/show_bug.cgi?id=14668

    Signed-off-by: Rafael J. Wysocki
    Reported-and-tested-by: Maxim Levitsky
    Signed-off-by: Len Brown

    Rafael J. Wysocki
     

23 Feb, 2010

1 commit

  • Although the majority of PCI devices can generate PMEs that in
    principle may be used to wake up devices suspended at run time,
    platform support is generally necessary to convert PMEs into wake-up
    events that can be delivered to the kernel. If ACPI is used for this
    purpose, PME signals generated by a PCI device will trigger the ACPI
    GPE associated with the device to generate an ACPI wake-up event that
    we can set up a handler for, provided that everything is configured
    correctly.

    Unfortunately, the subset of PCI devices that have GPEs associated
    with them is quite limited. The devices without dedicated GPEs have
    to rely on the GPEs associated with other devices (in the majority of
    cases their upstream bridges and, possibly, the root bridge) to
    generate ACPI wake-up events in response to PME signals from them.

    Add ACPI platform support for PCI PME wake-up:
    o Add a framework making is possible to use ACPI system notify
    handlers for run-time PM.
    o Add new PCI platform callback ->run_wake() to struct
    pci_platform_pm_ops allowing us to enable/disable the platform to
    generate wake-up events for given device. Implemet this callback
    for the ACPI platform.
    o Define ACPI wake-up handlers for PCI devices and PCI root buses and
    make the PCI-ACPI binding code register wake-up notifiers for all
    PCI devices present in the ACPI tables.
    o Add function pci_dev_run_wake() which can be used by PCI drivers to
    check if given device is capable of generating wake-up events at
    run time.

    Developed in cooperation with Matthew Garrett .

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     

22 Dec, 2009

1 commit

  • We discovered that at least one machine (HP Envy), methods in the DSDT
    attempt to call external methods defined in a dynamically loaded SSDT.

    Unfortunately, the DSDT methods we are trying to call are part of the
    EC initialization, which happens very early, and the the dynamic SSDT
    is only loaded when a processor _PDC method runs much later.

    This results in namespace lookup errors for the (as of yet) undefined
    methods.

    Since Windows doesn't have any issues with this machine, we take it
    as a hint that they must be evaluating _PDC much earlier than we are.

    Thus, the proper thing for Linux to do should be to match the Windows
    implementation more closely.

    Provide a mechanism to call _PDC before we enable the EC. Doing so loads
    the dynamic tables, and allows the EC to be enabled correctly.

    The ACPI processor driver will still evaluate _PDC in its .add() method
    to cover the hotplug case.

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

    Cc: ming.m.lin@intel.com
    Signed-off-by: Alex Chiang
    Signed-off-by: Len Brown

    Alex Chiang
     

29 Aug, 2009

1 commit

  • Linux/ACPI core files using internal.h all PREFIX "ACPI: ",
    however, not all ACPI drivers use/want it -- and they
    should not have to #undef PREFIX to define their own.

    Add GPL commment to internal.h while we are there.

    This does not change any actual console output,
    asside from a whitespace fix.

    Signed-off-by: Len Brown

    Len Brown
     

28 Mar, 2009

8 commits

  • This patch makes acpi_init() call acpi_wakeup_device_init() directly.
    Previously, acpi_wakeup_device_init() was a late_initcall (sequence 7).

    acpi_wakeup_device_init() depends on acpi_wakeup_device_list, which
    is populated when ACPI devices are enumerated by acpi_init() ->
    acpi_scan_init(). Using late_initcall is certainly enough to make
    sure acpi_wakeup_device_list is populated, but it is more than
    necessary. We can just as easily call acpi_wakeup_device_init()
    directly from acpi_init(), which avoids the initcall magic.

    Signed-off-by: Bjorn Helgaas
    CC: Li Shaohua
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_sleep_proc_init() directly.
    Previously, acpi_sleep_proc_init() was a late_initcall (sequence 7),
    apparently to make sure that the /proc hierarchy already exists:

    2003/02/13 12:38:03-06:00 mochel
    acpi sleep: demote sleep proc file creation.

    - Make acpi_sleep_proc_init() a late_initcall(), and not called from
    acpi_sleep_init(). This guarantees that the acpi proc hierarchy is at
    least there when we create the dang file.

    This should no longer be an issue because acpi_bus_init() (called early
    in acpi_init()) creates acpi_root_dir (/proc/acpi).

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call init_acpi_device_notify() directly.
    Previously, init_acpi_device_notify() was an arch_initcall (sequence 3),
    so it was called before acpi_init() (a subsys_initcall at sequence 4).

    init_acpi_device_notify() sets the platform_notify and
    platform_notify_remove function pointers. These pointers
    are not used until acpi_init() enumerates ACPI devices in
    this path:

    acpi_init()
    acpi_scan_init()
    acpi_bus_scan()
    acpi_add_single_object()
    acpi_device_register()
    device_add()

    So it is sufficient to have acpi_init() call init_acpi_device_notify()
    directly before it enumerates devices.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_debug_init() directly.
    Previously, both were subsys_initcalls. acpi_debug_init()
    must happen after acpi_init(), and it's better to call it
    explicitly rather than rely on link ordering.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_system_init() directly.
    Previously, both were subsys_initcalls. acpi_system_init()
    must happen after acpi_init(), and it's better to call it
    explicitly rather than rely on link ordering.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_power_init() directly.
    Previously, both were subsys_initcalls. acpi_power_init()
    must happen after acpi_init(), and it's better to call it
    explicitly rather than rely on link ordering.

    Signed-off-by: Bjorn Helgaas
    CC: Zhao Yakui
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_ec_init() directly.
    Previously, both were subsys_initcalls. acpi_ec_init()
    must happen after acpi_init(), and it's better to call it
    explicitly rather than rely on link ordering.

    Signed-off-by: Bjorn Helgaas
    CC: Alexey Starikovskiy
    Signed-off-by: Len Brown

    Bjorn Helgaas
     
  • This patch makes acpi_init() call acpi_scan_init() directly.

    Previously, both acpi_init() and acpi_scan_init() were subsys_initcalls,
    and acpi_init() was called first based on the link order from the
    makefile (bus.o before scan.o).

    acpi_scan_init() registers the ACPI bus type, creates the root device,
    and enumerates fixed-feature and namespace devices. All of this must
    be done after acpi_init(), and it's better to call acpi_scan_init()
    explicitly rather than rely on the link ordering.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas
     

17 Mar, 2009

1 commit

  • A number of things that shouldn't be exposed outside the ACPI core
    were declared in include/acpi/acpi_drivers.h, where anybody can
    see them. This patch moves those declarations to a new "internal.h"
    inside drivers/acpi.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Len Brown

    Bjorn Helgaas