Bug#563313: [165/197] ACPI: EC: Allow multibyte access to EC

2010-04-22 Thread Greg KH
2.6.32-stable review patch.  If anyone has any objections, please let us know.

--


From: Alexey Starikovskiy astarikovs...@suse.de

commit dadf28a10c3eb29421837a2e413ab869ebd upstream

http://bugzilla.kernel.org/show_bug.cgi?id=14667

[bwh: Backport to 2.6.32; same applies to 2.6.33]

Signed-off-by: Alexey Starikovskiy astarikovs...@suse.de
Signed-off-by: Len Brown len.br...@intel.com
Cc: Ben Hutchings b...@decadent.org.uk
Signed-off-by: Greg Kroah-Hartman gre...@suse.de

---
 drivers/acpi/acpica/exprep.c |   12 
 drivers/acpi/ec.c|   35 +--
 2 files changed, 21 insertions(+), 26 deletions(-)

--- a/drivers/acpi/acpica/exprep.c
+++ b/drivers/acpi/acpica/exprep.c
@@ -468,6 +468,18 @@ acpi_status acpi_ex_prep_field_value(str
 
acpi_ut_add_reference(obj_desc-field.region_obj);
 
+   /* allow full data read from EC address space */
+   if (obj_desc-field.region_obj-region.space_id ==
+   ACPI_ADR_SPACE_EC) {
+   if (obj_desc-common_field.bit_length  8)
+   obj_desc-common_field.access_bit_width =
+   ACPI_ROUND_UP(obj_desc-common_field.
+   bit_length, 8);
+   obj_desc-common_field.access_byte_width =
+   ACPI_DIV_8(obj_desc-common_field.
+   access_bit_width);
+   }
+
ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
  RegionField: BitOff %X, Off %X, Gran %X, 
Region %p\n,
  obj_desc-field.start_field_bit_offset,
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -588,12 +588,12 @@ static u32 acpi_ec_gpe_handler(void *dat
 
 static acpi_status
 acpi_ec_space_handler(u32 function, acpi_physical_address address,
- u32 bits, acpi_integer *value,
+ u32 bits, acpi_integer *value64,
  void *handler_context, void *region_context)
 {
struct acpi_ec *ec = handler_context;
-   int result = 0, i;
-   u8 temp = 0;
+   int result = 0, i, bytes = bits / 8;
+   u8 *value = (u8 *)value64;
 
if ((address  0xFF) || !value || !handler_context)
return AE_BAD_PARAMETER;
@@ -601,32 +601,15 @@ acpi_ec_space_handler(u32 function, acpi
if (function != ACPI_READ  function != ACPI_WRITE)
return AE_BAD_PARAMETER;
 
-   if (bits != 8  acpi_strict)
-   return AE_BAD_PARAMETER;
-
-   if (EC_FLAGS_MSI)
+   if (EC_FLAGS_MSI || bits  8)
acpi_ec_burst_enable(ec);
 
-   if (function == ACPI_READ) {
-   result = acpi_ec_read(ec, address, temp);
-   *value = temp;
-   } else {
-   temp = 0xff  (*value);
-   result = acpi_ec_write(ec, address, temp);
-   }
-
-   for (i = 8; unlikely(bits - i  0); i += 8) {
-   ++address;
-   if (function == ACPI_READ) {
-   result = acpi_ec_read(ec, address, temp);
-   (*value) |= ((acpi_integer)temp)  i;
-   } else {
-   temp = 0xff  ((*value)  i);
-   result = acpi_ec_write(ec, address, temp);
-   }
-   }
+   for (i = 0; i  bytes; ++i, ++address, ++value)
+   result = (function == ACPI_READ) ?
+   acpi_ec_read(ec, address, value) :
+   acpi_ec_write(ec, address, *value);
 
-   if (EC_FLAGS_MSI)
+   if (EC_FLAGS_MSI || bits  8)
acpi_ec_burst_disable(ec);
 
switch (result) {





-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20100422190922.146928...@kvm.kroah.org



Bug#563313: [165/197] ACPI: EC: Allow multibyte access to EC

2010-04-22 Thread Linus Torvalds


On Thu, 22 Apr 2010, Greg KH wrote:
 
 From: Alexey Starikovskiy astarikovs...@suse.de
 
 commit dadf28a10c3eb29421837a2e413ab869ebd upstream

Hmm. Doesn't this need commit 2060c44576c79086ff24718878d7edaa7384a985
to fix things up for crazy access_bit_width values?

Maybe it's there in the series somewhere, but I didn't see it.

Linus



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/alpine.lfd.2.00.1004221257390.26...@i5.linux-foundation.org



Bug#563313: [165/197] ACPI: EC: Allow multibyte access to EC

2010-04-22 Thread Greg KH
On Thu, Apr 22, 2010 at 12:59:16PM -0700, Linus Torvalds wrote:
 
 
 On Thu, 22 Apr 2010, Greg KH wrote:
  
  From: Alexey Starikovskiy astarikovs...@suse.de
  
  commit dadf28a10c3eb29421837a2e413ab869ebd upstream
 
 Hmm. Doesn't this need commit 2060c44576c79086ff24718878d7edaa7384a985
 to fix things up for crazy access_bit_width values?
 
 Maybe it's there in the series somewhere, but I didn't see it.

Yes, it's two patches later:
Subject: [167/197] ACPI: EC: Limit burst to 64 bits

good catch.

thanks,

greg k-h



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20100422200722.ga26...@suse.de