[PATCH] Fix for handling bad IPMI DMI data

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Fix for handling bad IPMI DMI data

Corey Minyard-4


Ignore the bottom bit of the base address from the DMI data.  It
is supposed to be set to 1 if it is I/O space.  Few systems do this,
but this enables the ones that do set it to work properly.

Signed-off-by: Corey Minyard <[hidden email]>

Index: linux-2.6.12-rc2/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.12-rc2.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6.12-rc2/drivers/char/ipmi/ipmi_si_intf.c
@@ -1654,7 +1654,13 @@
  }
  } else {
  /* Old DMI spec. */
- ipmi_data->base_addr = base_addr;
+ /* Note that technically, the lower bit of the base
+ * address should be 1 if the address is I/O and 0 if
+ * the address is in memory.  So many systems get that
+ * wrong (and all that I have seen are I/O) so we just
+ * ignore that bit and assume I/O.  Systems that use
+ * memory should use the newer spec, anyway. */
+ ipmi_data->base_addr = base_addr & 0xfffe;
  ipmi_data->addr_space = IPMI_IO_ADDR_SPACE;
  ipmi_data->offset = 1;
  }