09 Feb, 2017

1 commit


13 Aug, 2016

1 commit

  • ACPICA commit 23a417ca406a527e7ae1710893e59a8b6db30e14

    There is a facility in Linux, developers can control the enabling/disabling
    of a GPE via /sys/firmware/acpi/interrupts/gpexx. This is mainly for
    debugging purposes.

    But many users expect to use this facility to implement quirks to mask a
    specific GPE when there is a gap in Linux causing this GPE to flood. This
    is not working correctly because currently this facility invokes
    enabling/disabling counting based GPE driver APIs:
    acpi_enable_gpe()/acpi_disable_gpe()
    and the GPE drivers can still affect the count to mess up the GPE
    masking purposes.

    However, most of the IRQ chip designs allow masking/unmasking IRQs via a
    masking bit which is different from the enabled bit to achieve the same
    purpose. But the GPE hardware doesn't contain such a feature, this brings
    the trouble.

    In this patch, we introduce a software mechanism to implement the GPE
    masking feature, and acpi_mask_gpe() are provided to the OSPMs to
    mask/unmask GPEs in the above mentioned situation instead of
    acpi_enable_gpe()/acpi_disable_gpe(). ACPICA BZ 1102. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/23a417ca
    Link: https://bugs.acpica.org/show_bug.cgi?id=1102
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

05 May, 2016

1 commit

  • ACPICA commit b2294cae776f5a66a7697414b21949d307e6856f

    This patch removes unwanted spaces for typedef. This solution doesn't cover
    function types.

    Note that the linuxize result of this commit is very giant and should have
    many conflicts against the current Linux upstream. Thus it is required to
    modify the linuxize result of this commit and the commits around it
    manually in order to have them merged to the Linux upstream. Since this is
    very costy, we should do this only once, and if we can't ensure to do this
    only once, we need to revert the Linux code to the wrong indentation result
    before merging the linuxize result of this commit. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/b2294cae
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

16 Jan, 2016

1 commit


01 Jan, 2016

2 commits

  • ACPICA commit dfa394471f6c01b2ee9433dbc143ec70cb9bca72

    Mostly indentation inconsistencies across the code. Split
    some long lines, etc.

    Link: https://github.com/acpica/acpica/commit/dfa39447
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • The patch reduces source code differences between the Linux kernel and the
    ACPICA upstream so that the linuxized ACPICA 20151218 release can be
    applied with reduced human intervention.

    The pscode.c has already been out of sync for months, and it becomes more
    and more difficult to merge pscode.c changes, so instead of update the
    affected lines of pscode.c, this patch synchronizes entire pscode.c file.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

15 Apr, 2015

1 commit

  • It is reported that ACPI interrupts do not work any more on
    Dell Latitude D600 after commit c50f13c672df (ACPICA: Save
    current masks of enabled GPEs after enable register writes).
    The problem turns out to be related to the fact that the
    enable_mask and enable_for_run GPE bit masks are not in
    sync (in the absence of any system suspend/resume events)
    for at least one GPE register on that machine.

    Address this problem by writing the enable_for_run mask into
    enable_mask as soon as enable_for_run is updated instead of
    doing that only after the subsequent register write has
    succeeded. For consistency, update acpi_hw_gpe_enable_write()
    to store the bit mask to be written into the GPE register
    in enable_mask unconditionally before the write.

    Since the ACPI_GPE_SAVE_MASK flag is not necessary any more after
    that, drop it along with the symbols depending on it.

    Reported-and-tested-by: Jim Bos
    Fixes: c50f13c672df (ACPICA: Save current masks of enabled GPEs after enable register writes)
    Cc: 3.19+ # 3.19+
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

14 Apr, 2015

1 commit

  • ACPICA commit e25d791e4b3d5b9f4ead298269610cb05f89749a

    There is a facility in Linux, developers can obtain GPE and fixed event
    status via /sys/firmware/interrupts/. This is implemented using
    acpi_get_event_status() and acpi_get_gpe_status(). Recently while debugging some
    GPE race issues, it is found that the facility is lacking in the ability to
    obtain real hardware register values, the confusing information makes
    debugging difficult.

    This patch modifies acpi_get_gpe_status() to return EN register values to fix
    this gap. Then flags returned from acpi_get_event_status() and
    acpi_get_gpe_status() are also cleaned up to reflect this change.

    The old ACPI_EVENT_FLAG_SET is carefully kept to avoid regressions. It can
    be deleted after we can make sure all its references are removed from OSPM
    code. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/e25d791e
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

05 Feb, 2015

4 commits

  • ACPICA commit 8990e73ab2aa15d6a0068b860ab54feff25bee36

    Link: https://github.com/acpica/acpica/commit/8990e73a
    Signed-off-by: David E. Box
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    David E. Box
     
  • ACPICA commit 490ec7f7839bf7ee5e8710a34d1d1a78d54a49b6

    In function acpi_hw_low_set_gpe(), cast enable_mask to u8 before
    storing. The mask was read from a 32 bit register but is an 8 bit
    value. Fixes Visual Studio compiler warning.

    Link: https://github.com/acpica/acpica/commit/490ec7f7
    Signed-off-by: David E. Box
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    David E. Box
     
  • ACPICA commit 7926d5ca9452c87f866938dcea8f12e1efb58f89

    There is an issue in acpi_install_gpe_handler() and acpi_remove_gpe_handler().
    The code to obtain the GPE dispatcher type from the Handler->original_flags
    is wrong:
    if (((Handler->original_flags & ACPI_GPE_DISPATCH_METHOD) ||
    (Handler->original_flags & ACPI_GPE_DISPATCH_NOTIFY)) &&
    ACPI_GPE_DISPATCH_NOTIFY is 0x03 and ACPI_GPE_DISPATCH_METHOD is 0x02, thus
    this statement is TRUE for the following dispatcher types:
    0x01 (ACPI_GPE_DISPATCH_HANDLER): not expected
    0x02 (ACPI_GPE_DISPATCH_METHOD): expected
    0x03 (ACPI_GPE_DISPATCH_NOTIFY): expected

    There is no functional issue due to this because Handler->original_flags is
    only set in acpi_install_gpe_handler(), and an earlier checker has excluded
    the ACPI_GPE_DISPATCH_HANDLER:
    if ((gpe_event_info->Flags & ACPI_GPE_DISPATCH_MASK) ==
    ACPI_GPE_DISPATCH_HANDLER)
    {
    Status = AE_ALREADY_EXISTS;
    goto free_and_exit;
    }
    ...
    Handler->original_flags = (u8) (gpe_event_info->Flags &
    (ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK));

    We need to clean this up before modifying the GPE dispatcher type values.

    In order to prevent such issue from happening in the future, this patch
    introduces ACPI_GPE_DISPATCH_TYPE() macro to be used to obtain the GPE
    dispatcher types. Lv Zheng.

    Link: https://github.com/acpica/acpica/commit/7926d5ca
    Signed-off-by: Lv Zheng
    Signed-off-by: David E. Box
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This is a back port result of the Linux commit:
    Commit c50f13c672df758b59e026c15b9118f3ed46edc4
    Subject: ACPICA: Save current masks of enabled GPEs after enable register writes

    Besides of the indent divergences, only a missing prototype added due to
    the ACPICA internal coding style.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

02 Dec, 2014

1 commit

  • There is a race condition between acpi_hw_disable_all_gpes() or
    acpi_enable_all_wakeup_gpes() and acpi_ev_asynch_enable_gpe() such
    that if the latter wins the race, it may mistakenly enable a GPE
    disabled by the former. This may lead to premature system wakeups
    during system suspend and potentially to more serious consequences.

    The source of the problem is how acpi_hw_low_set_gpe() works when
    passed ACPI_GPE_CONDITIONAL_ENABLE as the second argument. In that
    case, the GPE will be enabled if the corresponding bit is set in the
    enable_for_run mask of the GPE enable register containing that bit.
    However, acpi_hw_disable_all_gpes() and acpi_enable_all_wakeup_gpes()
    don't modify the enable_for_run masks of GPE registers when writing
    to them. In consequence, if acpi_ev_asynch_enable_gpe(), which
    eventually calls acpi_hw_low_set_gpe() with the second argument
    equal to ACPI_GPE_CONDITIONAL_ENABLE, is executed in parallel with
    one of these functions, it may reverse changes made by them.

    To fix the problem, introduce a new enable_mask field in struct
    acpi_gpe_register_info in which to store the current mask of
    enabled GPEs and modify acpi_hw_low_set_gpe() to take this
    mask into account instead of enable_for_run when its second
    argument is equal to ACPI_GPE_CONDITIONAL_ENABLE. Also modify
    the low-level routines called by acpi_hw_disable_all_gpes(),
    acpi_enable_all_wakeup_gpes() and acpi_enable_all_runtime_gpes()
    to update the enable_mask masks of GPE registers after all
    (successful) writes to those registers.

    Acked-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

21 Oct, 2014

3 commits

  • This patch is partial linuxized result of the following ACPICA commit:
    ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
    Subject: Add "has handler" flag to event/gpe status interfaces.
    This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the
    acpi_get_event_status and acpi_get_gpe_status external interfaces. It
    is set if the event/gpe currently has a handler associated with it.
    This patch contains the code to rename ACPI_EVENT_FLAG_HANDLE to
    ACPI_EVENT_FLAG_HAS_HANDLER, and the corresponding updates of its usages.

    Link: https://github.com/acpica/acpica/commit/a73b66c6
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This patch is a partial linuxized result of the following ACPICA commit:
    ACPICA commit: a73b66c6aa1846d055bb6390d9c9b9902f7d804d
    Subject: Add "has handler" flag to event/gpe status interfaces.
    This change adds a new flag, ACPI_EVENT_FLAGS_HAS_HANDLER to the
    acpi_get_event_status and acpi_get_gpe_status external interfaces. It
    is set if the event/gpe currently has a handler associated with it.
    This commit back ports ACPI_EVENT_FLAG_HANDLE from Linux upstream to
    ACPICA, the flag along with its support code currently can only be found
    in the Linux upstream and is used by the ACPI sysfs GPE interfaces and
    the ACPI bus scanning support.

    Link: https://github.com/acpica/acpica/commit/a73b66c6
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     
  • This patch reduces indent divergences first in order to reduce human
    intervention work for the follow-up linuxized event patches.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

01 Oct, 2014

1 commit

  • Since acpi_hw_enable_wakeup_gpe_block() is currently always called
    after disabling all GPEs, it can actually write zeros to all
    non-wakeup enable bits unconditionally.

    That will be useful going forward for disabling runtime GPEs and
    enabling wakeup GPEs in one go instead of doing that in two steps
    (disable runtime and enable wakeup) which in theory may lead to a
    loss of a wakeup event.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

11 Feb, 2014

1 commit


16 Jun, 2013

1 commit

  • After many years, different formatting for switch() has crept in.
    This change makes every switch block identical. Chao Guan.
    ACPICA bugzilla 997.

    References: https://bugs.acpica.org/show_bug.cgi?id=997
    Signed-off-by: Chao Guan
    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Chao Guan
     

25 Jan, 2013

2 commits


10 Jan, 2013

1 commit

  • This is a cosmetic patch only. Comparison of the resulting binary showed
    only line number differences.

    This patch does not affect the generation of the Linux binary.
    This patch decreases 314 lines of 20121018 divergence.diff.

    ACPICA core uses ()'s on return statements. This is a known and committed
    differences from Linux standard coding style.

    This patch cleans up the Linux side ACPICA code to use this codying style
    in order to reduce the source code differences between Linux and ACPICA.

    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

15 Nov, 2012

2 commits

  • Maintenance for source code consistency.

    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • New version of "indent" program will generate different outputs that
    will lead to the divergences between the Linux and the ACPICA.
    This patch fixes such divergences caused by the "indent" program.
    The version of the "indent" used for this patch is "GNU indent 2.2.11".

    This patch will not affect the generated vmlinux binary.
    This will decrease 581 lines of 20120913 divergence.diff.

    Signed-off-by: Robert Moore
    Signed-off-by: Lv Zheng
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

21 Sep, 2012

1 commit


22 Mar, 2012

1 commit


17 Jan, 2012

1 commit


19 Jan, 2011

1 commit


12 Jan, 2011

2 commits

  • Modify/add some comments to minimize ACPICA/linux GPE code divergence.

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

    Lin Ming
     
  • Some function and variable names are renamed to be consistent with
    ACPICA code base.

    acpi_raw_enable_gpe -> acpi_ev_add_gpe_reference
    acpi_raw_disable_gpe -> acpi_ev_remove_gpe_reference
    acpi_gpe_can_wake -> acpi_setup_gpe_for_wake
    acpi_gpe_wakeup -> acpi_set_gpe_wake_mask
    acpi_update_gpes -> acpi_update_all_gpes
    acpi_all_gpes_initialized -> acpi_gbl_all_gpes_initialized
    acpi_handler_info -> acpi_gpe_handler_info
    ...

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

    Lin Ming
     

07 Jul, 2010

2 commits


12 Jun, 2010

3 commits

  • ACPICA uses acpi_hw_write_gpe_enable_reg() to re-enable a GPE after
    an event signaled by it has been handled. However, this function
    writes the entire GPE enable mask to the GPE's enable register which
    may not be correct. Namely, if one of the other GPEs in the same
    register was previously enabled by acpi_enable_gpe() and subsequently
    disabled using acpi_set_gpe(), acpi_hw_write_gpe_enable_reg() will
    re-enable it along with the target GPE.

    To fix this issue rework acpi_hw_write_gpe_enable_reg() so that it
    calls acpi_hw_low_set_gpe() with a special action value,
    ACPI_GPE_COND_ENABLE, that will make it only enable the GPE if the
    corresponding bit in its register's enable_for_run mask is set.

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

    Rafael J. Wysocki
     
  • ACPICA uses acpi_ev_enable_gpe() for enabling GPEs at the low level,
    which is incorrect, because this function only enables the GPE if the
    corresponding bit in its enable register's enable_for_run mask is set.
    This causes acpi_set_gpe() to work incorrectly if used for enabling
    GPEs that were not previously enabled with acpi_enable_gpe(). As a
    result, among other things, wakeup-only GPEs are never enabled by
    acpi_enable_wakeup_device(), so the devices that use them are unable
    to wake up the system.

    To fix this issue remove acpi_ev_enable_gpe() and its counterpart
    acpi_ev_disable_gpe() and replace acpi_hw_low_disable_gpe() with
    acpi_hw_low_set_gpe() that will be used instead to manipulate GPE
    enable bits at the low level. Make the users of acpi_ev_enable_gpe()
    and acpi_ev_disable_gpe() call acpi_hw_low_set_gpe() instead and
    make sure that GPE enable masks are only updated by acpi_enable_gpe()
    and acpi_disable_gpe() when GPE reference counters change from 0
    to 1 and from 1 to 0, respectively.

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

    Rafael J. Wysocki
     
  • In quite a few places ACPICA needs to compute a GPE enable mask with
    only one bit, corresponding to a given GPE, set. Currently, that
    computation is always open coded which leads to unnecessary code
    duplication. Fix this by introducing a helper function for computing
    one-bit GPE enable masks and using it where appropriate.

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

    Rafael J. Wysocki
     

23 Jan, 2010

2 commits

  • Add 2010 copyright to all module headers and signons, including
    the Linux header. This affects virtually every file in the ACPICA
    core subsystem, iASL compiler, and all utilities.

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

    Bob Moore
     
  • Added several new options for the gcc-4 generation, and updated
    the source accordingly. This includes some code restructuring to
    eliminate unreachable code, elimination of some gotos, elimination
    of unused return values, and some additional casting.

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

    Bob Moore
     

27 Aug, 2009

1 commit


28 Mar, 2009

1 commit


09 Jan, 2009

1 commit