123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- ==============================
- 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>;
- i2c-protocol;
- };
- };
- If xmit of data to be done using raw i2c block vs smbus
- then "i2c-protocol" needs to be defined as above.
- 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.rst'.
- 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.
|