1. 02 7月, 2015 2 次提交
    • L
      ACPICA: Tables: Enable both 32-bit and 64-bit FACS · c04e1fb4
      Lv Zheng 提交于
      ACPICA commit f7b86f35416e3d1f71c3d816ff5075ddd33ed486
      
      The following commit is reported to have broken s2ram on some platforms:
       Commit: 0249ed24
       ACPICA: Add option to favor 32-bit FADT addresses.
      The platform reports 2 FACS tables (which is not allowed by ACPI
      specification) and the new 32-bit address favor rule forces OSPMs to use
      the FACS table reported via FADT's X_FIRMWARE_CTRL field.
      
      The root cause of the reported bug might be one of the followings:
      1. BIOS may favor the 64-bit firmware waking vector address when the
         version of the FACS is greater than 0 and Linux currently only supports
         resuming from the real mode, so the 64-bit firmware waking vector has
         never been set and might be invalid to BIOS while the commit enables
         higher version FACS.
      2. BIOS may favor the FACS reported via the "FIRMWARE_CTRL" field in the
         FADT while the commit doesn't set the firmware waking vector address of
         the FACS reported by "FIRMWARE_CTRL", it only sets the firware waking
         vector address of the FACS reported by "X_FIRMWARE_CTRL".
      
      This patch excludes the cases that can trigger the bugs caused by the root
      cause 2.
      
      There is no handshaking mechanism can be used by OSPM to tell BIOS which
      FACS is currently used. Thus the FACS reported by "FIRMWARE_CTRL" may still
      be used by BIOS and the 0 value of the 32-bit firmware waking vector might
      trigger such failure.
      
      This patch tries to favor 32bit FACS address in another way where both the
      FACS reported by "FIRMWARE_CTRL" and the FACS reported by "X_FIRMWARE_CTRL"
      are loaded so that further commit can set firmware waking vector in the
      both tables to ensure we can exclude the cases that trigger the bugs caused
      by the root cause 2. The exclusion is split into 2 commits as this commit
      is also useful for dumping more ACPI tables, it won't get reverted when
      such exclusion is no longer necessary. Lv Zheng.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=74021
      Link: https://github.com/acpica/acpica/commit/f7b86f35
      Cc: 3.14.1+ <stable@vger.kernel.org> # 3.14.1+
      Reported-and-tested-by: NOswald Buddenhagen <ossi@kde.org>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      c04e1fb4
    • L
      ACPICA: Hardware: Enable 64-bit firmware waking vector for selected FACS · aca2a5d3
      Lv Zheng 提交于
      ACPICA commit 7aa598d711644ab0de5f70ad88f1e2de253115e4
      
      The following commit is reported to have broken s2ram on some platforms:
       Commit: 0249ed24
       ACPICA: Add option to favor 32-bit FADT addresses.
      The platform reports 2 FACS tables (which is not allowed by ACPI
      specification) and the new 32-bit address favor rule forces OSPMs to use
      the FACS table reported via FADT's X_FIRMWARE_CTRL field.
      
      The root cause of the reported bug might be one of the followings:
      1. BIOS may favor the 64-bit firmware waking vector address when the
         version of the FACS is greater than 0 and Linux currently only supports
         resuming from the real mode, so the 64-bit firmware waking vector has
         never been set and might be invalid to BIOS while the commit enables
         higher version FACS.
      2. BIOS may favor the FACS reported via the "FIRMWARE_CTRL" field in the
         FADT while the commit doesn't set the firmware waking vector address of
         the FACS reported by "FIRMWARE_CTRL", it only sets the firware waking
         vector address of the FACS reported by "X_FIRMWARE_CTRL".
      
      This patch excludes the cases that can trigger the bugs caused by the root
      cause 1.
      
      ACPI specification says:
      A. 32-bit FACS address (FIRMWARE_CTRL field in FADT):
         Physical memory address of the FACS, where OSPM and firmware exchange
         control information.
         If the X_FIRMWARE_CTRL field contains a non zero value then this field
         must be zero.
         A zero value indicates that no FACS is specified by this field.
      B. 64-bit FACS address (X_FIRMWARE_CTRL field in FADT):
         64bit physical memory address of the FACS.
         This field is used when the physical address of the FACS is above 4GB.
         If the FIRMWARE_CTRL field contains a non zero value then this field
         must be zero.
         A zero value indicates that no FACS is specified by this field.
      Thus the 32bit and 64bit firmware waking vector should indicate completely
      different resuming environment - real mode (1MB addressable) and non real
      mode (4GB+ addressable) and currently Linux only supports resuming from
      real mode.
      
      This patch enables 64-bit firmware waking vector for selected FACS via new
      acpi_set_firmware_waking_vectors() API so that it's up to OSPMs to
      determine which resuming mode should be used by BIOS and ACPICA changes
      won't trigger the bugs caused by the root cause 1. Lv Zheng.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=74021
      Link: https://github.com/acpica/acpica/commit/7aa598d7Reported-and-tested-by: NOswald Buddenhagen <ossi@kde.org>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      aca2a5d3
  2. 22 5月, 2015 1 次提交
  3. 14 4月, 2015 2 次提交
  4. 05 2月, 2015 3 次提交
    • L
      ACPICA: Events: Introduce ACPI_GPE_DISPATCH_RAW_HANDLER to fix 2 issues for the current GPE APIs · 0d0988af
      Lv Zheng 提交于
      ACPICA commit 199cad16530a45aea2bec98e528866e20c5927e1
      
      Since whether the GPE should be disabled/enabled/cleared should only be
      determined by the GPE driver's state machine:
      1. GPE should be disabled if the driver wants to switch to the GPE polling
         mode when a GPE storm condition is indicated and should be enabled if
         the driver wants to switch back to the GPE interrupt mode when all of
         the storm conditions are cleared. The conditions should be protected by
         the driver's specific lock.
      2. GPE should be enabled if the driver has accepted more than one request
         and should be disabled if the driver has completed all of the requests.
         The request count should be protected by the driver's specific lock.
      3. GPE should be cleared either when the driver is about to handle an edge
         triggered GPE or when the driver has completed to handle a level
         triggered GPE. The handling code should be protected by the driver's
         specific lock.
      Thus the GPE enabling/disabling/clearing operations are likely to be
      performed with the driver's specific lock held while we currently cannot do
      this. This is because:
      1. We have the acpi_gbl_gpe_lock held before invoking the GPE driver's
         handler. Driver's specific lock is likely to be held inside of the
         handler, thus we can see some dead lock issues due to the reversed
         locking order or recursive locking. In order to solve such dead lock
         issues, we need to unlock the acpi_gbl_gpe_lock before invoking the
         handler. BZ 1100.
      2. Since GPE disabling/enabling/clearing should be determined by the GPE
         driver's state machine, we shouldn't perform such operations inside of
         ACPICA for a GPE handler to mess up the driver's state machine. BZ 1101.
      
      Originally this patch includes a logic to flush GPE handlers, it is dropped
      due to the following reasons:
      1. This is a different issue;
      2. Linux OSL has fixed this by flushing SCI in acpi_os_wait_events_complete().
      We will pick up this topic when the Linux OSL fix turns out to be not
      sufficient.
      
      Note that currently the internal operations and the acpi_gbl_gpe_lock are
      also used by ACPI_GPE_DISPATCH_METHOD and ACPI_GPE_DISPATCH_NOTIFY. In
      order not to introduce regressions, we add one
      ACPI_GPE_DISPATCH_RAW_HANDLER type to be distiguished from
      ACPI_GPE_DISPATCH_HANDLER. For which the acpi_gbl_gpe_lock is unlocked before
      invoking the GPE handler and the internal enabling/disabling operations are
      bypassed to allow drivers to perform them at a proper position using the
      GPE APIs and ACPI_GPE_DISPATCH_RAW_HANDLER users should invoke acpi_set_gpe()
      instead of acpi_enable_gpe()/acpi_disable_gpe() to bypass the internal GPE
      clearing code in acpi_enable_gpe(). Lv Zheng.
      
      Known issues:
      1. Edge-triggered GPE lost for frequent enablings
         On some buggy silicon platforms, GPE enable line may not be directly
         wired to the GPE trigger line. In that case, when GPE enabling is
         frequently performed for edge-triggered GPEs, GPE status may stay set
         without being triggered.
         This patch may maginify this problem as it allows GPE enabling to be
         parallel performed during the process the GPEs are handled.
         This is an existing issue, because:
         1. For task context:
            Current ACPI_GPE_DISPATCH_METHOD practices have proven that this
            isn't a real issue - we can re-enable edge-triggered GPE in a work
            queue where the GPE status bit might already be set.
         2. For IRQ context:
            This can even happen when the GPE enabling occurs before returning
            from the GPE handler and after unlocking the GPE lock.
         Thus currently no code is included to protect this.
      
      Link: https://github.com/acpica/acpica/commit/199cad16Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      0d0988af
    • D
      ACPICA: Update version to 20150204 · 121b7d91
      David E. Box 提交于
      ACPICA commit e06b1624b02dc8317d144e9a6fe9d684c5fa2f90
      
      Version 20150204.
      
      Link: https://github.com/acpica/acpica/commit/e06b1624Signed-off-by: NDavid E. Box <david.e.box@linux.intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      121b7d91
    • D
      ACPICA: Update Copyright headers to 2015 · 82a80941
      David E. Box 提交于
      ACPICA commit 8990e73ab2aa15d6a0068b860ab54feff25bee36
      
      Link: https://github.com/acpica/acpica/commit/8990e73aSigned-off-by: NDavid E. Box <david.e.box@linux.intel.com>
      Signed-off-by: NBob Moore <robert.moore@intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      82a80941
  5. 26 1月, 2015 1 次提交
  6. 28 11月, 2014 1 次提交
  7. 21 10月, 2014 1 次提交
  8. 01 10月, 2014 1 次提交
  9. 03 9月, 2014 1 次提交
  10. 31 7月, 2014 1 次提交
  11. 24 7月, 2014 1 次提交
  12. 20 7月, 2014 1 次提交
  13. 08 7月, 2014 2 次提交
  14. 01 6月, 2014 1 次提交
    • L
      ACPICA: Tables: Add mechanism to control early table checksum verification. · 47d68c7f
      Lv Zheng 提交于
      It is reported that Linux x86 kernel cannot map large tables. The following
      large SSDT table on such platform fails to pass checksum verification and
      cannot be installed:
       ACPI: SSDT 0x00000000B9638018 07A0C4 (v02 INTEL  S2600CP  00004000 INTL 20100331)
      
      It sounds strange that in the 64-bit virtual memory address space, we
      cannot map a single ACPI table to do checksum verification. The root cause
      is:
       1. ACPICA doesn't split IO memory mapping and table mapping;
       2. Linux x86 OSL implements acpi_os_map_memory() using a size limited fix-map
          mechanism during early boot stage, which is more suitable for only IO
          mappings.
      
      ACPICA originally only mapped table header for signature validation, and
      this header mapping is required by OSL override mechanism. There was no
      checksum verification because we could not map the whole table using this
      OSL. While the following ACPICA commit enforces checksum verification by
      mapping the whole table during Linux boot stage and it finally triggers
      this issue on some platforms:
       Commit: 86dfc6f3
       Subject: ACPICA: Tables: Fix table checksums verification before installation.
      
      Before doing further cleanups for the OSL table mapping and override
      implementation, this patch introduces an option for such OSPMs to
      temporarily discard the checksum verification feature. It then can be
      re-enabled easily when the ACPICA and the underlying OSL is ready.
      
      This patch also deletes a comment around the limitation of mappings because
      it is not correct. The limitation is not how many times we can map in the
      early stage, but the OSL mapping facility may not be suitable for mapping
      the ACPI tables and thus may complain us the size limitation.
      
      The acpi_tb_verify_table() is renamed to acpi_tb_verify_temp_table() due to the
      work around added, it now only applies to the table descriptor that hasn't
      been installed and cannot be used in other cases. Lv Zheng.
      Tested-by: NYuanhan Liu <yuanhan.liu@linux.intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      47d68c7f
  15. 07 5月, 2014 9 次提交
  16. 21 4月, 2014 3 次提交
  17. 26 3月, 2014 2 次提交
  18. 18 3月, 2014 2 次提交
  19. 27 2月, 2014 1 次提交
  20. 11 2月, 2014 2 次提交
  21. 06 2月, 2014 1 次提交
  22. 28 1月, 2014 1 次提交