Re: [PATCH] ipmi: Fix ACPI detecting with regspacing

From: Bjorn Helgaas
Date: Tue Jul 27 2010 - 11:35:10 EST


On Monday, July 26, 2010 03:48:02 pm Yinghai Lu wrote:
>
> after the commint that change ipmi_si detecting sequence from SMBIOS/ACPI to ACPI/SMBIOS,
>
> | commit 754d453185275951d39792865927ec494fa1ebd8
> | Author: Matthew Garrett <mjg@xxxxxxxxxx>
> | Date: Wed May 26 14:43:47 2010 -0700
> |
> | ipmi: change device discovery order
> |
> | The ipmi spec provides an ordering for si discovery. Change the driver to
> | match, with the exception of preferring smbios to SPMI as HPs (at least)
> | contain accurate information in the former but not the latter.
>
> ipmi_si can not be initialized.

I think this patch makes sense, as long as this is not a bringup
issue that only affects pre-release firmware. If this only affects
a prototype, it would be better to change the firmware so it conforms
to the conventional _CRS usage of systems in the field.

To that end, I'd like to know what system this is, and whether IPMI
works under Windows on this system. We know that Windows doesn't
look at SMBIOS or SPMI, so if Windows works, it must be doing something
similar to your patch.

Bjorn

> [ 138.799739] calling init_ipmi_devintf+0x0/0x109 @ 1
> [ 138.805050] ipmi device interface
> [ 138.818131] initcall init_ipmi_devintf+0x0/0x109 returned 0 after 12797 usecs
> [ 138.822998] calling init_ipmi_si+0x0/0xa90 @ 1
> [ 138.840276] IPMI System Interface driver.
> [ 138.846137] ipmi_si: probing via ACPI
> [ 138.849225] ipmi_si 00:09: [io 0x0ca2] regsize 1 spacing 1 irq 0
> [ 138.864438] ipmi_si: Adding ACPI-specified kcs state machine
> [ 138.870893] ipmi_si: probing via SMBIOS
> [ 138.880945] ipmi_si: Adding SMBIOS-specified kcs state machineipmi_si: duplicate interface
> [ 138.896511] ipmi_si: probing via SPMI
> [ 138.899861] ipmi_si: Adding SPMI-specified kcs state machineipmi_si: duplicate interface
> [ 138.917095] ipmi_si: Trying ACPI-specified kcs state machine at i/o address 0xca2, slave address 0x0, irq 0
> [ 138.928658] ipmi_si: Interface detection failed
> [ 138.953411] initcall init_ipmi_si+0x0/0xa90 returned 0 after 110847 usecs
>
> in smbios has
> DMI/SMBIOS
> Handle 0x00C5, DMI type 38, 18 bytes
> IPMI Device Information
> Interface Type: KCS (Keyboard Control Style)
> Specification Version: 2.0
> I2C Slave Address: 0x00
> NV Storage Device: Not Present
> Base Address: 0x0000000000000CA2 (I/O)
> Register Spacing: 32-bit Boundaries
> in DSDT has
> Device (BMC)
> {
>
> Name (_HID, EisaId ("IPI0001"))
> Method (_STA, 0, NotSerialized)
> {
> If (LEqual (OSN, Zero))
> {
> Return (Zero)
> }
>
> Return (0x0F)
> }
>
> Name (_STR, Unicode ("IPMI_KCS"))
> Name (_UID, Zero)
> Name (_CRS, ResourceTemplate ()
> {
> IO (Decode16,
> 0x0CA2, // Range Minimum
> 0x0CA2, // Range Maximum
> 0x00, // Alignment
> 0x01, // Length
> )
> IO (Decode16,
> 0x0CA6, // Range Minimum
> 0x0CA6, // Range Maximum
> 0x00, // Alignment
> 0x01, // Length
> )
> })
> Method (_IFT, 0, NotSerialized)
> {
> Return (One)
> }
>
> Method (_SRV, 0, NotSerialized)
> {
> Return (0x0200)
> }
> }
> so the reg spacing should be 4 instead of 1.
>
> Try to calculate regspacing for this kind of system.
>
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
>
> ---
> drivers/char/ipmi/ipmi_si_intf.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> Index: linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> ===================================================================
> --- linux-2.6.orig/drivers/char/ipmi/ipmi_si_intf.c
> +++ linux-2.6/drivers/char/ipmi/ipmi_si_intf.c
> @@ -2176,6 +2176,14 @@ static int __devinit ipmi_pnp_probe(stru
> info->io.addr_data = res->start;
>
> info->io.regspacing = DEFAULT_REGSPACING;
> + res = pnp_get_resource(dev,
> + (info->io.addr_type == IPMI_IO_ADDR_SPACE) ?
> + IORESOURCE_IO : IORESOURCE_MEM,
> + 1);
> + if (res) {
> + if (res->start > info->io.addr_data)
> + info->io.regspacing = res->start - info->io.addr_data;
> + }
> info->io.regsize = DEFAULT_REGSPACING;
> info->io.regshift = 0;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/