Merge tag 'for-linus-5.3' of git://github.com/cminyard/linux-ipmi
Pull IPMI updates from Corey Minyard: "Some small fixes for various things, nothing huge, mostly found by automated tools. Plus add a driver that allows Linux to act as an IPMB slave device, so it can be a satellite MC in an IPMI network" * tag 'for-linus-5.3' of git://github.com/cminyard/linux-ipmi: docs: ipmb: place it at driver-api and convert to ReST fix platform_no_drv_owner.cocci warnings ipmi: ipmb: don't allocate i2c_client on stack ipmi: ipmb: Fix build error while CONFIG_I2C is set to m Add support for IPMB driver drivers: ipmi: Drop device reference ipmi_ssif: fix unexpected driver unregister warning ipmi_si: use bool type for initialized variable ipmi_si: fix unexpected driver unregister warning
Tento commit je obsažen v:
@@ -34,6 +34,7 @@ available subsections can be seen below.
|
||||
pci/index
|
||||
spi
|
||||
i2c
|
||||
ipmb
|
||||
i3c/index
|
||||
hsi
|
||||
edac
|
||||
|
105
Documentation/driver-api/ipmb.rst
Normální soubor
105
Documentation/driver-api/ipmb.rst
Normální soubor
@@ -0,0 +1,105 @@
|
||||
==============================
|
||||
IPMB Driver for a Satellite MC
|
||||
==============================
|
||||
|
||||
The Intelligent Platform Management Bus or IPMB, is an
|
||||
I2C bus that provides a standardized interconnection between
|
||||
different boards within a chassis. This interconnection is
|
||||
between the baseboard management (BMC) and chassis electronics.
|
||||
IPMB is also associated with the messaging protocol through the
|
||||
IPMB bus.
|
||||
|
||||
The devices using the IPMB are usually management
|
||||
controllers that perform management functions such as servicing
|
||||
the front panel interface, monitoring the baseboard,
|
||||
hot-swapping disk drivers in the system chassis, etc...
|
||||
|
||||
When an IPMB is implemented in the system, the BMC serves as
|
||||
a controller to give system software access to the IPMB. The BMC
|
||||
sends IPMI requests to a device (usually a Satellite Management
|
||||
Controller or Satellite MC) via IPMB and the device
|
||||
sends a response back to the BMC.
|
||||
|
||||
For more information on IPMB and the format of an IPMB message,
|
||||
refer to the IPMB and IPMI specifications.
|
||||
|
||||
IPMB driver for Satellite MC
|
||||
----------------------------
|
||||
|
||||
ipmb-dev-int - This is the driver needed on a Satellite MC to
|
||||
receive IPMB messages from a BMC and send a response back.
|
||||
This driver works with the I2C driver and a userspace
|
||||
program such as OpenIPMI:
|
||||
|
||||
1) It is an I2C slave backend driver. So, it defines a callback
|
||||
function to set the Satellite MC as an I2C slave.
|
||||
This callback function handles the received IPMI requests.
|
||||
|
||||
2) It defines the read and write functions to enable a user
|
||||
space program (such as OpenIPMI) to communicate with the kernel.
|
||||
|
||||
|
||||
Load the IPMB driver
|
||||
--------------------
|
||||
|
||||
The driver needs to be loaded at boot time or manually first.
|
||||
First, make sure you have the following in your config file:
|
||||
CONFIG_IPMB_DEVICE_INTERFACE=y
|
||||
|
||||
1) If you want the driver to be loaded at boot time:
|
||||
|
||||
a) Add this entry to your ACPI table, under the appropriate SMBus::
|
||||
|
||||
Device (SMB0) // Example SMBus host controller
|
||||
{
|
||||
Name (_HID, "<Vendor-Specific HID>") // Vendor-Specific HID
|
||||
Name (_UID, 0) // Unique ID of particular host controller
|
||||
:
|
||||
:
|
||||
Device (IPMB)
|
||||
{
|
||||
Name (_HID, "IPMB0001") // IPMB device interface
|
||||
Name (_UID, 0) // Unique device identifier
|
||||
}
|
||||
}
|
||||
|
||||
b) Example for device tree::
|
||||
|
||||
&i2c2 {
|
||||
status = "okay";
|
||||
|
||||
ipmb@10 {
|
||||
compatible = "ipmb-dev";
|
||||
reg = <0x10>;
|
||||
};
|
||||
};
|
||||
|
||||
2) Manually from Linux::
|
||||
|
||||
modprobe ipmb-dev-int
|
||||
|
||||
|
||||
Instantiate the device
|
||||
----------------------
|
||||
|
||||
After loading the driver, you can instantiate the device as
|
||||
described in 'Documentation/i2c/instantiating-devices'.
|
||||
If you have multiple BMCs, each connected to your Satellite MC via
|
||||
a different I2C bus, you can instantiate a device for each of
|
||||
those BMCs.
|
||||
|
||||
The name of the instantiated device contains the I2C bus number
|
||||
associated with it as follows::
|
||||
|
||||
BMC1 ------ IPMB/I2C bus 1 ---------| /dev/ipmb-1
|
||||
Satellite MC
|
||||
BMC1 ------ IPMB/I2C bus 2 ---------| /dev/ipmb-2
|
||||
|
||||
For instance, you can instantiate the ipmb-dev-int device from
|
||||
user space at the 7 bit address 0x10 on bus 2::
|
||||
|
||||
# echo ipmb-dev 0x1010 > /sys/bus/i2c/devices/i2c-2/new_device
|
||||
|
||||
This will create the device file /dev/ipmb-2, which can be accessed
|
||||
by the user space program. The device needs to be instantiated
|
||||
before running the user space program.
|
Odkázat v novém úkolu
Zablokovat Uživatele