1. 15 Aug, 2008 2 commits
    • Zhao Yakui's avatar
      ACPI: Avoid bogus EC timeout when EC is in Polling mode · 9d699ed9
      Zhao Yakui authored
      When EC is in Polling mode, OS will check the EC status continually by using
      the following source code:
             clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
             while (time_before(jiffies, delay)) {
                     if (acpi_ec_check_status(ec, event))
             	            return 0;
                     msleep(1);
             }
      But msleep is realized by the function of schedule_timeout. At the same time
      although one process is already waken up by some events, it won't be scheduled
      immediately. So maybe there exists the following phenomena:
           a. The current jiffies is already after the predefined jiffies.
      	But before timeout happens, OS has no chance to check the EC
      	status again.
           b. If preemptible schedule is enabled, maybe preempt schedule will happen
      	before checking loop. When the process is resumed again, maybe
      	timeout already happens, which means that OS has no chance to check
      	the EC status.
      
      In such case maybe EC status is already what OS expects when timeout happens.
      But OS has no chance to check the EC status and regards it as AE_TIME.
      
      So it will be more appropriate that OS will try to check the EC status again
      when timeout happens. If the EC status is what we expect, it won't be regarded
      as timeout. Only when the EC status is not what we expect, it will be regarded
      as timeout, which means that EC controller can't give a response in time.
      
      http://bugzilla.kernel.org/show_bug.cgi?id=9823
      http://bugzilla.kernel.org/show_bug.cgi?id=11141Signed-off-by: default avatarZhao Yakui <yakui.zhao@intel.com>
      Signed-off-by: default avatarZhang Rui  <rui.zhang@intel.com>
      Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
      9d699ed9
    • Zhao Yakui's avatar
      ACPI : Add the EC dmi table to fix the incorrect ECDT table · 2500822b
      Zhao Yakui authored
      On some ASUS laptops the ECDT gives the incorrect command/status & Data I/O
      register address.
      
      AK: it seems like the command/data addresses are exchanged.
      
      In such case it will cause that EC device can't be
      initialized correctly.
      To add the EC dmi table is to fix this issue. If the laptop falls into the
      EC dmi table, the EC command/data I/O address will be fixed.
      
      AK: Add comments describing this better
      
      http://bugzilla.kernel.org/show_bug.cgi?id=9399Signed-off-by: default avatarZhao Yakui <yakui.zhao@intel.com>
      tested-by    : Jan Kasprzak  <kas@fi.muni.cz>
      Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
      2500822b
  2. 14 Aug, 2008 38 commits