1. 18 8月, 2016 1 次提交
  2. 09 7月, 2016 1 次提交
  3. 07 6月, 2016 1 次提交
    • L
      ACPI / EC: Fix a boot EC regresion by restoring boot EC support for the DSDT EC · dcf15cbd
      Lv Zheng 提交于
      According to the Windows probing result, during the table loading, the EC
      device described in the ECDT should be used. And the ECDT EC is also
      effective during the period the namespace objects are initialized (we can
      see a separate process executing _STA/_INI on Windows before executing
      other device specific control methods, for example, EC._REG). During the
      device enumration, the EC device described in the DSDT should be used. But
      there are differences between Linux and Windows around the device probing
      order. Thus in Linux, we should enable the DSDT EC as early as possible
      before enumerating devices in order not to trigger issues related to the
      device enumeration order differences.
      
      This patch thus converts acpi_boot_ec_enable() into acpi_ec_dsdt_probe() to
      fix the gap. This also fixes a user reported regression triggered after we
      switched the "table loading"/"ECDT support" to be ACPI spec 2.0 compliant.
      
      Fixes: 59f0aa94 (ACPI 2.0 / ECDT: Remove early namespace reference from EC)
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=119261Reported-and-tested-by: NGabriele Mazzotta <gabriele.mzt@gmail.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      dcf15cbd
  4. 05 5月, 2016 1 次提交
    • L
      ACPI / osi: Collect _OSI handling into one single file · e5f660eb
      Lv Zheng 提交于
      _OSI handling code grows giant and it's time to move them into one file.
      
      This patch collects all _OSI handling code into one single file.
      So that we only have the following functions to be used externally:
      
       early_acpi_osi_init(): Used by DMI detections;
       acpi_osi_init(): Used to initialize OSI command line settings and install
                        Linux specific _OSI handler;
       acpi_osi_setup(): The API that should be used by the external quirks.
       acpi_osi_is_win8(): The API is used by the external drivers to determine
                           if BIOS supports Win8.
      
      CONFIG_DMI is not useful as stub dmi_check_system() can make everything
      stub because of strip.
      
      No functional changes.
      Tested-by: NLukas Wunner <lukas@wunner.de>
      Tested-by: NChen Yu <yu.c.chen@intel.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      e5f660eb
  5. 19 4月, 2016 1 次提交
    • L
      ACPI / tables: Move table override mechanisms to tables.c · 5ae74f2c
      Lv Zheng 提交于
      This patch moves acpi_os_table_override() and
      acpi_os_physical_table_override() to tables.c.
      
      Along with the mechanisms, acpi_initrd_initialize_tables() is also moved to
      tables.c to form a static function. The following functions are renamed
      according to this change:
       1. acpi_initrd_override() -> renamed to early_acpi_table_init(), which
          invokes acpi_table_initrd_init()
       2. acpi_os_physical_table_override() -> which invokes
          acpi_table_initrd_override()
       3. acpi_initialize_initrd_tables() -> renamed to acpi_table_initrd_scan()
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      5ae74f2c
  6. 26 3月, 2016 1 次提交
    • S
      ACPI / processor: Request native thermal interrupt handling via _OSC · a2121167
      Srinivas Pandruvada 提交于
      There are several reports of freeze on enabling HWP (Hardware PStates)
      feature on Skylake-based systems by the Intel P-states driver. The root
      cause is identified as the HWP interrupts causing BIOS code to freeze.
      
      HWP interrupts use the thermal LVT which can be handled by Linux
      natively, but on the affected Skylake-based systems SMM will respond
      to it by default.  This is a problem for several reasons:
       - On the affected systems the SMM thermal LVT handler is broken (it
         will crash when invoked) and a BIOS update is necessary to fix it.
       - With thermal interrupt handled in SMM we lose all of the reporting
         features of the arch/x86/kernel/cpu/mcheck/therm_throt driver.
       - Some thermal drivers like x86-package-temp depend on the thermal
         threshold interrupts signaled via the thermal LVT.
       - The HWP interrupts are useful for debugging and tuning
         performance (if the kernel can handle them).
      The native handling of thermal interrupts needs to be enabled
      because of that.
      
      This requires some way to tell SMM that the OS can handle thermal
      interrupts.  That can be done by using _OSC/_PDC in processor
      scope very early during ACPI initialization.
      
      The meaning of _OSC/_PDC bit 12 in processor scope is whether or
      not the OS supports native handling of interrupts for Collaborative
      Processor Performance Control (CPPC) notifications.  Since on
      HWP-capable systems CPPC is a firmware interface to HWP, setting
      this bit effectively tells the firmware that the OS will handle
      thermal interrupts natively going forward.
      
      For details on _OSC/_PDC refer to:
      http://www.intel.com/content/www/us/en/standards/processor-vendor-specific-acpi-specification.html
      
      To implement the _OSC/_PDC handshake as described, introduce a new
      function, acpi_early_processor_osc(), that walks the ACPI
      namespace looking for ACPI processor objects and invokes _OSC for
      them with bit 12 in the capabilities buffer set and terminates the
      namespace walk on the first success.
      
      Also modify intel_thermal_interrupt() to clear HWP status bits in
      the HWP_STATUS MSR to acknowledge HWP interrupts (which prevents
      them from firing continuously).
      Signed-off-by: NSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      [ rjw: Subject & changelog, function rename ]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a2121167
  7. 10 3月, 2016 1 次提交
  8. 17 2月, 2016 2 次提交
  9. 05 1月, 2016 1 次提交
  10. 09 12月, 2015 1 次提交
  11. 04 10月, 2015 2 次提交
  12. 15 9月, 2015 2 次提交
  13. 07 8月, 2015 1 次提交
    • N
      ACPI: fix acpi_debugfs_init prototype · 10742619
      Nicolas Iooss 提交于
      acpi_debugfs_init function is declared with return type int in
      drivers/acpi/internal.h when CONFIG_DEBUG_FS is enabled, but its
      definition in drivers/acpi/debugfs.c has return type void. This is due
      to commit aecad432 ("ACPI: Cleanup custom_method debug stuff"),
      which changed the return type from int to void without updating the
      declaration.
      
      Fix this inconsistency by updating acpi_debugfs_init prototype.  While
      at it, include internal.h in debugfs.c so that the compiler can check
      that the declaration and definition remain compatible.
      Signed-off-by: NNicolas Iooss <nicolas.iooss_linux@m4x.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      10742619
  14. 28 7月, 2015 1 次提交
  15. 18 7月, 2015 1 次提交
  16. 08 7月, 2015 1 次提交
  17. 03 7月, 2015 1 次提交
    • R
      ACPI / init: Make it possible to override _REV · 18d78b64
      Rafael J. Wysocki 提交于
      The platform firmware on some systems expects Linux to return "5" as
      the supported ACPI revision which makes it expose system configuration
      information in a special way.
      
      For example, based on what ACPI exports as the supported revision,
      Dell XPS 13 (2015) configures its audio device to either work in HDA
      mode or in I2S mode, where the former is supposed to be used on Linux
      until the latter is fully supported (in the kernel as well as in user
      space).
      
      Since ACPI 6 mandates that _REV should return "2" if ACPI 2 or later
      is supported by the OS, a subsequent change will make that happen, so
      make it possible to override that on systems where "5" is expected to
      be returned for Linux to work correctly one them (such as the Dell
      machine mentioned above).
      Original-by: NDominik Brodowski <linux@dominikbrodowski.net>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      18d78b64
  18. 19 6月, 2015 1 次提交
  19. 15 6月, 2015 1 次提交
  20. 23 5月, 2015 1 次提交
  21. 16 5月, 2015 1 次提交
    • L
      ACPI / EC: Fix and clean up register access guarding logics. · d8d031a6
      Lv Zheng 提交于
      In the polling mode, EC driver shouldn't access the EC registers too
      frequently. Though this statement is concluded from the non-root caused
      bugs (see links below), we've maintained the register access guarding
      logics in the current EC driver. The guarding logics can be found here and
      there, makes it hard to root cause real timing issues. This patch collects
      the guarding logics into one single function so that all hidden logics
      related to this can be seen clearly.
      
      The current guarding related code also has several issues:
      1. Per-transaction timestamp prevents inter-transaction guarding from being
         implemented in the same place. We have an inter-transaction udelay() in
         acpi_ec_transaction_unblocked(), this logic can be merged into ec_poll()
         if we can use per-device timestamp. This patch completes such merge to
         form a new ec_guard() function and collects all guarding related hidden
         logics in it.
         One hidden logic is: there is no inter-transaction guarding performed
         for non MSI quirk (wait polling mode), this patch skips
         inter-transaction guarding before wait_event_timeout() for the wait
         polling mode to reveal the hidden logic.
         The other hidden logic is: there is msleep() inter-transaction guarding
         performed when the GPE storming is observed. As after merging this
         commit:
           Commit: e1d4d90f
           Subject: ACPI / EC: Refine command storm prevention support
         EC_FLAGS_COMMAND_STORM is ensured to be cleared after invoking
         acpi_ec_transaction_unlocked(), the msleep() guard logic will never
         happen now. Since no one complains such change, this logic is likely
         added during the old times where the EC race issues are not fixed and
         the bugs are false root-caused to the timing issue. This patch simply
         removes the out-dated logic. We can restore it by stop skipping
         inter-transaction guarding for wait polling mode.
         Two different delay values are defined for msleep() and udelay() while
         they are merged in this patch to 550us.
      2. time_after() causes additional delay in the polling mode (can only be
         observed in noirq suspend/resume processes where polling mode is always
         used) before advance_transaction() is invoked ("wait polling" log is
         added before wait_event_timeout()). We can see 2 wait_event_timeout()
         invocations. This is because time_after() ensures a ">" validation while
         we only need a ">=" validation here:
         [   86.739909] ACPI: Waking up from system sleep state S3
         [   86.742857] ACPI : EC: 2: Increase command
         [   86.742859] ACPI : EC: ***** Command(RD_EC) started *****
         [   86.742861] ACPI : EC: ===== TASK (0) =====
         [   86.742871] ACPI : EC: EC_SC(R) = 0x20 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=0
         [   86.742873] ACPI : EC: EC_SC(W) = 0x80
         [   86.742876] ACPI : EC: ***** Event started *****
         [   86.742880] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   86.743972] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   86.747966] ACPI : EC: ===== TASK (0) =====
         [   86.747977] ACPI : EC: EC_SC(R) = 0x20 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=0
         [   86.747978] ACPI : EC: EC_DATA(W) = 0x06
         [   86.747981] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   86.751971] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   86.755969] ACPI : EC: ===== TASK (0) =====
         [   86.755991] ACPI : EC: EC_SC(R) = 0x21 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=1
         [   86.755993] ACPI : EC: EC_DATA(R) = 0x03
         [   86.755994] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   86.755995] ACPI : EC: ***** Command(RD_EC) stopped *****
         [   86.755996] ACPI : EC: 1: Decrease command
         This patch corrects this by using time_before() instead in ec_guard():
         [   54.283146] ACPI: Waking up from system sleep state S3
         [   54.285414] ACPI : EC: 2: Increase command
         [   54.285415] ACPI : EC: ***** Command(RD_EC) started *****
         [   54.285416] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   54.285417] ACPI : EC: ===== TASK (0) =====
         [   54.285424] ACPI : EC: EC_SC(R) = 0x20 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=0
         [   54.285425] ACPI : EC: EC_SC(W) = 0x80
         [   54.285427] ACPI : EC: ***** Event started *****
         [   54.285429] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   54.287209] ACPI : EC: ===== TASK (0) =====
         [   54.287218] ACPI : EC: EC_SC(R) = 0x20 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=0
         [   54.287219] ACPI : EC: EC_DATA(W) = 0x06
         [   54.287222] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   54.291190] ACPI : EC: ===== TASK (0) =====
         [   54.291210] ACPI : EC: EC_SC(R) = 0x21 SCI_EVT=1 BURST=0 CMD=0 IBF=0 OBF=1
         [   54.291213] ACPI : EC: EC_DATA(R) = 0x03
         [   54.291214] ACPI : EC: ~~~~~ wait polling ~~~~~
         [   54.291215] ACPI : EC: ***** Command(RD_EC) stopped *****
         [   54.291216] ACPI : EC: 1: Decrease command
      
      After cleaning up all guarding logics, we have one single function
      ec_guard() collecting all old, non-root-caused, hidden logics. Then we can
      easily tune the logics in one place to respond to the bug reports.
      
      Except the time_before() change, all other changes do not change the
      behavior of the EC driver.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=12011
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=20242
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=77431Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      d8d031a6
  22. 25 3月, 2015 1 次提交
  23. 06 2月, 2015 2 次提交
  24. 05 2月, 2015 1 次提交
  25. 24 1月, 2015 1 次提交
    • L
      ACPI / EC: Fix issues related to the SCI_EVT handling · 74443bbe
      Lv Zheng 提交于
      This patch fixes 2 issues related to the draining behavior. But it doesn't
      implement the draining support, it only cleans up code so that further
      draining support is possible.
      
      The draining behavior is expected by some platforms (for example, Samsung)
      where SCI_EVT is set only once for a set of events and might be cleared for
      the very first QR_EC command issued after SCI_EVT is set. EC firmware on
      such platforms will return 0x00 to indicate "no outstanding event". Thus
      after seeing an SCI_EVT indication, EC driver need to fetch events until
      0x00 returned (see acpi_ec_clear()).
      
      Issue 1 - acpi_ec_submit_query():
      It's reported on Samsung laptops that SCI_EVT isn't checked when the
      transactions are advanced in ec_poll(), which leads to SCI_EVT triggering
      source lost:
       If no EC GPE IRQs are arrived after that, EC driver cannot detect this
       event and handle it.
      See comment 244/247 for kernel bugzilla 44161.
      This patch fixes this issue by moving SCI_EVT checks into
      advance_transaction(). So that SCI_EVT is checked each time we are going to
      handle the EC firmware indications. And this check will happen for both IRQ
      context and task context.
      Since after doing that, SCI_EVT is also checked after completing a
      transaction, ec_check_sci() and ec_check_sci_sync() can be removed.
      
      Issue 2 - acpi_ec_complete_query():
      We expect to clear EC_FLAGS_QUERY_PENDING to allow queuing another draining
      QR_EC after writing a QR_EC command and before reading the event. After
      reading the event, SCI_EVT might be cleared by the firmware, thus it may
      not be possible to queue such a draining QR_EC at that time.
      But putting the EC_FLAGS_QUERY_PENDING clearing code after
      start_transaction() is wrong as there are chances that after
      start_transaction(), QR_EC can fail to be sent. If this happens,
      EC_FLAG_QUERY_PENDING will be cleared earlier. As a consequence, the
      draining QR_EC will also be queued earlier than expected.
      This patch also moves this code into advance_transaction() where QR_EC is
      just sent (ACPI_EC_COMMAND_POLL flagged) to fix this issue.
      
      Notes:
      1. After introducing the 2 SCI_EVT related handlings into
         advance_transaction(), a next QR_EC can be queued right after writing
         the current QR_EC command and before reading the event. But this still
         hasn't implemented the draining behavior as the draining support
         requires:
           If a previous returned event value isn't 0x00, a draining QR_EC need
           to be issued even when SCI_EVT isn't set.
      2. In this patch, acpi_os_execute() is also converted into a seperate work
         item to avoid invoking kmalloc() in the atomic context. We can do this
         because of the previous global lock fix.
      3. Originally, EC_FLAGS_EVENT_PENDING is also used to avoid queuing up
         multiple work items (created by acpi_os_execute()), this can be covered
         by only using a single work item. But this patch still keeps this flag
         as there are different usages in the driver initialization steps relying
         on this flag.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=44161Reported-by: NKieran Clancy <clancy.kieran@gmail.com>
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      74443bbe
  26. 05 11月, 2014 1 次提交
  27. 10 10月, 2014 2 次提交
  28. 11 9月, 2014 1 次提交
    • Z
      ACPI: introduce ACPI int340x thermal scan handler · 3230bbfc
      Zhang Rui 提交于
      Newer laptops and tablets that use ACPI may have thermal sensors and
      other devices with thermal control capabilities outside the core CPU/SOC,
      for thermal safety reasons.
      They are exposed for the OS to use via
      1) INT3400 ACPI device object as the master.
      2) INT3401 ~ INT340B ACPI device objects as the slaves.
      
      This patch introduces a scan handler to enumerate the INT3400
      ACPI device object to platform bus, and prevent its slaves
      from being enumerated before the controller driver being probed.
      Signed-off-by: NZhang Rui <rui.zhang@intel.com>
      3230bbfc
  29. 21 7月, 2014 1 次提交
  30. 07 7月, 2014 1 次提交
    • Z
      ACPI / PNP: do ACPI binding directly · f1b1dc84
      Zhang Rui 提交于
      PNPACPI uses acpi_bus_type to do ACPI binding for the PNPACPI devices.
      
      This is overkill because PNPACPI code already knows which ACPI
      device object to bind during PNPACPI device enumeration.
      
      This patch removes acpi_pnp_bus and does the binding by invoking
      acpi_bind_one() directly after device enumerated.
      
      This also fixes a bug in the previous code that some PNPACPI devices failed
      to be bound because
       1. the ACPI device _HID is not pnpid, e.g. "MSFT0001", but its _CID is,
          e.g. "PNP0303", thus ACPI _CID is used as the pnp device device id.
       2. device is bound only if the pnp device id matches the ACPI device _HID.
      Tested-by: NPrigent Christophe <christophe.prigent@intel.com>
      Signed-off-by: NZhang Rui <rui.zhang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      f1b1dc84
  31. 30 5月, 2014 4 次提交
    • R
      ACPI / scan: always register ACPI LPSS scan handler · d6ddaaac
      Rafael J. Wysocki 提交于
      Prevent platform devices from being created for ACPI LPSS devices
      if CONFIG_X86_INTEL_LPSS is unset by compiling out the LPSS scan
      handler's callbacks only in that case and still compiling its device
      ID list in and registering the scan handler in either case.
      
      This change is based on a prototype from Zhang Rui.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      d6ddaaac
    • R
      ACPI / scan: always register memory hotplug scan handler · cccd4208
      Rafael J. Wysocki 提交于
      Prevent platform devices from being created for ACPI memory device
      objects if CONFIG_ACPI_HOTPLUG_MEMORY is unset by compiling out the
      memory hotplug scan handler's callbacks only in that case and still
      compiling its device ID list in and registering the scan handler in
      either case.
      
      Also unset the memory hotplug scan handler's .attach() callback
      if acpi_no_memhotplug is set, but still register the scan handler to
      avoid creating platform devices for ACPI memory devices in that case
      too.
      
      This change is based on a prototype from Zhang Rui.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      cccd4208
    • R
      ACPI / scan: always register container scan handler · a1ec6572
      Rafael J. Wysocki 提交于
      Prevent platform devices from being created for ACPI containers
      if CONFIG_ACPI_CONTAINER is unset by compiling out the container
      scan handler's callbacks only in that case and still compiling
      its device ID list in and registering the scan handler in either
      case.
      
      This change is based on a prototype from Zhang Rui.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      a1ec6572
    • Z
      ACPI / PNP: use device ID list for PNPACPI device enumeration · eec15edb
      Zhang Rui 提交于
      ACPI can be used to enumerate PNP devices, but the code does not
      handle this in the right way currently.  Namely, if an ACPI device
      object
       1. Has a _CRS method,
       2. Has an identification of
          "three capital characters followed by four hex digits",
       3. Is not in the excluded IDs list,
      it will be enumerated to PNP bus (that is, a PNP device object will
      be create for it).  This means that, actually, the PNP bus type is
      used as the default bus type for enumerating _HID devices in ACPI.
      
      However, more and more _HID devices need to be enumerated to the
      platform bus instead (that is, platform device objects need to be
      created for them).  As a result, the device ID list in acpi_platform.c
      is used to enforce creating platform device objects rather than PNP
      device objects for matching devices.  That list has been continuously
      growing recently, unfortunately, and it is pretty much guaranteed to
      grow even more in the future.
      
      To address that problem it is better to enumerate _HID devices
      as platform devices by default.  To this end, change the way of
      enumerating PNP devices by adding a PNP ACPI scan handler that
      will use a device ID list to create PNP devices for the ACPI
      device objects whose device IDs are present in that list.
      
      The initial device ID list in the PNP ACPI scan handler contains
      all of the pnp_device_id strings from all the existing PNP drivers,
      so this change should be transparent to the PNP core and all of the
      PNP drivers.  Still, in the future it should be possible to reduce
      its size by converting PNP drivers that need not be PNP for any
      technical reasons into platform drivers.
      Signed-off-by: NZhang Rui <rui.zhang@intel.com>
      [rjw: Rewrote the changelog, modified the PNP ACPI scan handler code]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      eec15edb
  32. 25 5月, 2014 1 次提交
    • R
      ACPI / platform / LPSS: Enable async suspend/resume of LPSS devices · 8ce62f85
      Rafael J. Wysocki 提交于
      To seed up suspend and resume of devices included into Intel SoCs
      handled by the ACPI LPSS driver during system suspend, make
      acpi_lpss_create_device() call device_enable_async_suspend() for
      every device created by it.
      
      This requires acpi_create_platform_device() to be modified to return
      a pointer to struct platform_device instead of an int.  As a result,
      acpi_create_platform_device() cannot be pointed to by the .attach
      pointer in platform_handler directly any more, so a simple wrapper
      around it is necessary for this purpose.  That, in turn, allows the
      second unused argument of acpi_create_platform_device() to be
      dropped, which is an improvement.
      Tested-by: NHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8ce62f85