diff options
author | Corey Minyard <minyard@acm.org> | 2005-05-01 11:59:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 11:59:10 -0400 |
commit | 9206880198589670dfc33feb9d2e903c3492701f (patch) | |
tree | 3c9c15a6bca7c365fb64660cec4734b7cd3d1d3a | |
parent | 5717ffbe16815db229a66fee824c2190cb306734 (diff) |
[PATCH] IPMI: fix for handling bad IPMI DMI data
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 <minyard@acm.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 44a7f13c788b..3522723eb6b8 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
@@ -1623,7 +1623,13 @@ static int decode_dmi(dmi_header_t *dm, int intf_num) | |||
1623 | } | 1623 | } |
1624 | } else { | 1624 | } else { |
1625 | /* Old DMI spec. */ | 1625 | /* Old DMI spec. */ |
1626 | ipmi_data->base_addr = base_addr; | 1626 | /* Note that technically, the lower bit of the base |
1627 | * address should be 1 if the address is I/O and 0 if | ||
1628 | * the address is in memory. So many systems get that | ||
1629 | * wrong (and all that I have seen are I/O) so we just | ||
1630 | * ignore that bit and assume I/O. Systems that use | ||
1631 | * memory should use the newer spec, anyway. */ | ||
1632 | ipmi_data->base_addr = base_addr & 0xfffe; | ||
1627 | ipmi_data->addr_space = IPMI_IO_ADDR_SPACE; | 1633 | ipmi_data->addr_space = IPMI_IO_ADDR_SPACE; |
1628 | ipmi_data->offset = 1; | 1634 | ipmi_data->offset = 1; |
1629 | } | 1635 | } |