• Yinghai Lu's avatar
    ipmi: fix ACPI detection with regspacing · d9e1b6c4
    Yinghai Lu authored
    After the commit that changed ipmi_si detecting sequence from SMBIOS/ACPI
    to ACPI/SMBIOS,
    
    | commit 754d4531
    | Author: Matthew Garrett <mjg@redhat.com>
    | 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.
    
    [  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.
    
    Observed on a Sun Fire X4800.  Other OSes work and pass certification.
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
    Acked-by: default avatarMatthew Garrett <mjg@redhat.com>
    Cc: Len Brown <len.brown@intel.com>
    Cc: Myron Stowe <myron.stowe@hp.com>
    Cc: Corey Minyard <minyard@acm.org>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d9e1b6c4
ipmi_si_intf.c 87.8 KB