30 Aug, 2013

1 commit


29 Aug, 2013

1 commit

  • The ECDT of ASUSTEK L4R doesn't provide correct command and data
    I/O ports. The DSDT provides the correct information instead.

    For this reason, add this machine to quirk list for ECDT validation
    and use the EC information from the DSDT.

    [rjw: Changelog]
    References: https://bugzilla.kernel.org/show_bug.cgi?id=60765
    Reported-and-tested-by: Daniele Esposti
    Signed-off-by: Lan Tianyu
    Cc: All
    Signed-off-by: Rafael J. Wysocki

    Lan Tianyu
     

27 Aug, 2013

1 commit

  • * acpi-assorted:
    ACPI / osl: Kill macro INVALID_TABLE().
    earlycpio.c: Fix the confusing comment of find_cpio_data().
    ACPI / x86: Print Hot-Pluggable Field in SRAT.
    ACPI / thermal: Use THERMAL_TRIPS_NONE macro to replace number
    ACPI / thermal: Remove unused macros in the driver/acpi/thermal.c
    ACPI / thermal: Remove the unused lock of struct acpi_thermal
    ACPI / osl: Fix osi_setup_entries[] __initdata attribute location
    ACPI / numa: Fix __init attribute location in slit_valid()
    ACPI / dock: Fix __init attribute location in find_dock_and_bay()
    ACPI / Sleep: Fix incorrect placement of __initdata
    ACPI / processor: Fix incorrect placement of __initdata
    ACPI / EC: Fix incorrect placement of __initdata
    ACPI / scan: Drop unnecessary label from acpi_create_platform_device()
    ACPI: Move acpi_bus_get_device() from bus.c to scan.c
    ACPI / scan: Allow platform device creation without any IO resources
    ACPI: Cleanup sparse warning on acpi_os_initialize1()
    platform / thinkpad: Remove deprecated hotkey_report_mode parameter
    ACPI: Remove the old /proc/acpi/event interface

    Rafael J. Wysocki
     

08 Aug, 2013

1 commit


15 Jul, 2013

1 commit


28 Jun, 2013

1 commit

  • HP Folio 13's BIOS defines CMOS RTC Operation Region and the EC's
    _REG method will access that region. To allow the CMOS RTC region
    handler to be installed before the EC _REG method is first invoked,
    add ec_skip_dsdt_scan() as HP Folio 13's callback to ec_dmi_table.

    References: https://bugzilla.kernel.org/show_bug.cgi?id=54621
    Reported-and-tested-by: Stefan Nagy
    Signed-off-by: Lan Tianyu
    Cc: 3.9+
    Signed-off-by: Rafael J. Wysocki

    Lan Tianyu
     

12 May, 2013

1 commit

  • The EC driver works abnormally with IBF flag always set.
    IBF means "The host has written a byte of data to the command
    or data port, but the embedded controller has not yet read it".
    If IBF is set in the EC status and not cleared, this will cause
    all subsequent EC requests to fail with a timeout error.

    Change the EC driver so that it doesn't refuse to restart a
    transaction if IBF is set in the status. Also increase the
    number of transaction restarts to 5, as it turns out that 2
    is not sufficient in some cases.

    This bug happens on several different machines (Asus V1S,
    Dell Latitude E6530, Samsung R719, Acer Aspire 5930G,
    Sony Vaio SR19VN and others).

    [rjw: Changelog]
    References: https://bugzilla.kernel.org/show_bug.cgi?id=14733
    References: https://bugzilla.kernel.org/show_bug.cgi?id=15560
    References: https://bugzilla.kernel.org/show_bug.cgi?id=15946
    References: https://bugzilla.kernel.org/show_bug.cgi?id=42945
    References: https://bugzilla.kernel.org/show_bug.cgi?id=48221
    Signed-off-by: Lan Tianyu
    Cc: All
    Signed-off-by: Rafael J. Wysocki

    Lan Tianyu
     

26 Jan, 2013

1 commit

  • The second argument of ACPI driver .remove() operation is only used
    by the ACPI processor driver and the value passed to that driver
    through it is always available from the given struct acpi_device
    object's removal_type field. For this reason, the second ACPI driver
    .remove() argument is in fact useless, so drop it.

    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Jiang Liu
    Acked-by: Toshi Kani
    Acked-by: Yinghai Lu

    Rafael J. Wysocki
     

15 Nov, 2012

3 commits


07 Oct, 2012

2 commits

  • By enlarging the GPE storm threshold back to 20, that laptop's
    EC works fine with interrupt mode instead of polling mode.

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

    Reported-and-Tested-by: Francesco
    Signed-off-by: Feng Tang
    Signed-off-by: Len Brown
    cc: stable@vger.kernel.org

    Feng Tang
     
  • The Linux EC driver includes a mechanism to detect GPE storms,
    and switch from interrupt-mode to polling mode. However, polling
    mode sometimes doesn't work, so the workaround is problematic.
    Also, different systems seem to need the threshold for detecting
    the GPE storm at different levels.

    ACPI_EC_STORM_THRESHOLD was initially 20 when it's created, and
    was changed to 8 in 2.6.28 commit 06cf7d3c7 "ACPI: EC: lower interrupt storm
    threshold" to fix kernel bug 11892 by forcing the laptop in that bug to
    work in polling mode. However in bug 45151, it works fine in interrupt
    mode if we lift the threshold back to 20.

    This patch makes the threshold a module parameter so that user has a
    flexible option to debug/workaround this issue.

    The default is unchanged.

    This is also a preparation patch to fix specific systems:
    https://bugzilla.kernel.org/show_bug.cgi?id=45151

    Signed-off-by: Feng Tang
    Signed-off-by: Len Brown
    cc: stable@vger.kernel.org

    Feng Tang
     

31 Mar, 2012

1 commit

  • Pull ACPI & Power Management changes from Len Brown:
    - ACPI 5.0 after-ripples, ACPICA/Linux divergence cleanup
    - cpuidle evolving, more ARM use
    - thermal sub-system evolving, ditto
    - assorted other PM bits

    Fix up conflicts in various cpuidle implementations due to ARM cpuidle
    cleanups (ARM at91 self-refresh and cpu idle code rewritten into
    "standby" in asm conflicting with the consolidation of cpuidle time
    keeping), trivial SH include file context conflict and RCU tracing fixes
    in generic code.

    * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux: (77 commits)
    ACPI throttling: fix endian bug in acpi_read_throttling_status()
    Disable MCP limit exceeded messages from Intel IPS driver
    ACPI video: Don't start video device until its associated input device has been allocated
    ACPI video: Harden video bus adding.
    ACPI: Add support for exposing BGRT data
    ACPI: export acpi_kobj
    ACPI: Fix logic for removing mappings in 'acpi_unmap'
    CPER failed to handle generic error records with multiple sections
    ACPI: Clean redundant codes in scan.c
    ACPI: Fix unprotected smp_processor_id() in acpi_processor_cst_has_changed()
    ACPI: consistently use should_use_kmap()
    PNPACPI: Fix device ref leaking in acpi_pnp_match
    ACPI: Fix use-after-free in acpi_map_lsapic
    ACPI: processor_driver: add missing kfree
    ACPI, APEI: Fix incorrect APEI register bit width check and usage
    Update documentation for parameter *notrigger* in einj.txt
    ACPI, APEI, EINJ, new parameter to control trigger action
    ACPI, APEI, EINJ, limit the range of einj_param
    ACPI, APEI, Fix ERST header length check
    cpuidle: power_usage should be declared signed integer
    ...

    Linus Torvalds
     

30 Mar, 2012

1 commit


21 Mar, 2012

1 commit

  • toshiba_acpi needs to execute an AML method within the EC namespace
    to make hotkeys work on some platforms. Provide an interface to
    allow it to easily get a handle to the EC namespace for this purpose.

    Signed-off-by: Seth Forshee
    Signed-off-by: Matthew Garrett

    Seth Forshee
     

29 May, 2011

4 commits


26 Apr, 2011

1 commit

  • Commit 0adf3c746a73684b3f8c2821a584e1db998f61e9 introduced a regression
    by making the ECDT validation test for ASUS hardware more restrictive.
    The previous test used the dmi_name_in_vendors function which searches
    a number of DMI fields, while the new test checked only the BIOS
    vendor, which is known to not match on an ASUS F5GL laptop which
    requires ECDT validation.

    Add a rule to ec_dmi_table based on an alternative DMI pattern for
    ASUS hardware as found elsewhere in the kernel.

    Signed-off-by: Peter Collingbourne
    Signed-off-by: Len Brown

    Peter Collingbourne
     

01 Apr, 2011

1 commit

  • static void acpi_ec_gpe_query(void *ec_cxt);
    -> The function is right above this declaration -> not needed.

    poll_force is also not used, cleaned up in ec.c and its users:
    compal-laptop and msi-laptop.

    Signed-off-by: Thomas Renninger
    Signed-off-by: Len Brown

    Thomas Renninger
     

12 Jan, 2011

2 commits

  • This feature provides an automatic device notification for wake devices
    when a wakeup GPE occurs and there is no corresponding GPE method or
    handler. Rather than ignoring such a GPE, an implicit AML Notify
    operation is performed on the parent device object.
    This feature is not part of the ACPI specification and is provided for
    Windows compatibility only.

    Signed-off-by: Lin Ming
    Signed-off-by: Len Brown

    Lin Ming
     
  • The new GPE handler callback has 2 additional parameters, gpe_device and
    gpe_number.

    typedef
    u32 (*acpi_gpe_handler) (acpi_handle gpe_device, u32 gpe_number, void *context);

    Signed-off-by: Lin Ming
    Signed-off-by: Len Brown

    Lin Ming
     

10 Dec, 2010

1 commit


22 Oct, 2010

1 commit

  • Here and then there show up machines which need higher timeout values.
    Finding this on affected machines can be cumbersome, because
    ACPI_EC_DELAY is a compile option -> make it configurable via boot param.

    This can even be provided writable at runtime via:
    /sys/modules/acpi/parameters/ec_delay

    Known machines where this helps:
    Some HP machines where for whatever reasons specific EC accesses take
    very long at resume from S3 (in _WAK function).
    The AE_TIME error is passed upwards and the ACPI interpreter will
    not execute the rest of the _WAK function which results in not properly
    initialized devices/variables with different side-effects.

    Afaik, on some MSI machines this helped as well.

    If this param is needed there probably are underlying problems like:
    - EC firmware bug
    - A kernel EC driver bug
    - An ACPI interpreter behavior (e.g. timings when specific
    EC accesses happen and how) which the EC does not like
    - ...
    which should get evaluated further, but often are nasty or
    impossible to fix from OS side.

    Signed-off-by: Thomas Renninger
    Signed-off-by: Len Brown

    Thomas Renninger
     

08 Aug, 2010

1 commit

  • * 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (27 commits)
    ACPI / ACPICA: Simplify acpi_ev_initialize_gpe_block()
    ACPI / ACPICA: Fail acpi_gpe_wakeup() if ACPI_GPE_CAN_WAKE is unset
    ACPI / ACPICA: Do not execute _PRW methods during initialization
    ACPI: Fix bogus GPE test in acpi_bus_set_run_wake_flags()
    ACPICA: Update version to 20100702
    ACPICA: Fix for Alias references within Package objects
    ACPICA: Fix lint warning for 64-bit constant
    ACPICA: Remove obsolete GPE function
    ACPICA: Update debug output components
    ACPICA: Add support for WDDT - Watchdog Descriptor Table
    ACPICA: Drop acpi_set_gpe
    ACPICA: Use low-level GPE enable during GPE block initialization
    ACPI / EC: Do not use acpi_set_gpe
    ACPI / EC: Drop suspend and resume routines
    ACPICA: Remove wakeup GPE reference counting which is not used
    ACPICA: Introduce acpi_gpe_wakeup()
    ACPICA: Rename acpi_hw_gpe_register_bit
    ACPICA: Update version to 20100528
    ACPICA: Add signatures for undefined tables: ATKG, GSCI, IEIT
    ACPICA: Optimization: Reduce the number of namespace walks
    ...

    Linus Torvalds
     

03 Aug, 2010

4 commits

  • which will result in a harmless but ugly WARN message on
    some machines.

    Signed-off-by: Thomas Renninger
    CC: mjg59@srcf.ucam.org
    CC: platform-driver-x86@vger.kernel.org
    CC: linux-acpi@vger.kernel.org
    CC: astarikovskiy@suse.de
    CC: akpm@linux-foundation.org
    Signed-off-by: Matthew Garrett

    Thomas Renninger
     
  • Formerly these have been exposed through /proc/..
    Better register them where all IO ports should get registered
    and scream loud if someone else claims to use them.

    EC data and command port typically should show up like this
    then:
    ...
    0060-0060 : keyboard
    0062-0062 : EC data
    0064-0064 : keyboard
    0066-0066 : EC command
    0070-0071 : rtc0
    ...

    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
     
  • 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
     
  • Other patches in this series add the same info to /sys/... and
    /proc/ioports.

    The info removed should never have been used in an application,
    eventually someone read it manually.
    /proc/acpi is deprecated for more than a year anyway...

    Signed-off-by: Thomas Renninger

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

    Thomas Renninger
     

07 Jul, 2010

3 commits

  • The EC driver is the last user of acpi_set_gpe() and since it is
    guaranteed that the EC GPE will not be shared, acpi_disable_gpe()
    and acpi_enable_gpe() may be used for disabling the GPE temporarilty
    if a GPE storm is detected and re-enabling it during EC transactions.

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

    Rafael J. Wysocki
     
  • The suspend and resume routines provided by the EC driver are not
    really necessary, because the handler of the GPE disabled by them
    is not going to be executed after suspend_device_irqs() and before
    resume_device_irqs() anyway.

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

    Rafael J. Wysocki
     
  • After the previous patch that introduced acpi_gpe_wakeup() and
    modified the ACPI suspend and wakeup code to use it, the third
    argument of acpi_{enable|disable}_gpe() and the GPE wakeup
    reference counter are not necessary any more. Remove them and
    modify all of the users of acpi_{enable|disable}_gpe()
    accordingly. Also drop GPE type constants that aren't used
    any more.

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Len Brown
    Signed-off-by: Bob Moore
    Signed-off-by: Lin Ming
    Signed-off-by: Len Brown

    Rafael J. Wysocki
     

02 Jun, 2010

1 commit


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
     

20 May, 2010

1 commit

  • Use kmemdup when some other buffer is immediately copied into the
    allocated region.

    A simplified version of the semantic patch that makes this change is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @@
    expression from,to,size,flag;
    statement S;
    @@

    - to = \(kmalloc\|kzalloc\)(size,flag);
    + to = kmemdup(from,size,flag);
    if (to==NULL || ...) S
    - memcpy(to, from, size);
    //

    Signed-off-by: Julia Lawall
    Acked-by: Alexey Starikovskiy
    Signed-off-by: Len Brown

    Julia Lawall
     

07 Apr, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo