From: Corey Minyard 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 Signed-off-by: Andrew Morton --- drivers/char/ipmi/ipmi_si_intf.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) diff -puN drivers/char/ipmi/ipmi_si_intf.c~ipmi-fix-for-handling-bad-dmi-data drivers/char/ipmi/ipmi_si_intf.c --- 25/drivers/char/ipmi/ipmi_si_intf.c~ipmi-fix-for-handling-bad-dmi-data 2005-04-26 19:59:50.507164120 -0700 +++ 25-akpm/drivers/char/ipmi/ipmi_si_intf.c 2005-04-26 19:59:50.512163360 -0700 @@ -1623,7 +1623,13 @@ static int decode_dmi(dmi_header_t *dm, } } 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; } _