[PATCH v1 1/3] ipmi: bt-i2c: added documentation for bt-i2c drivers
Added device tree binding documentation for ipmi-bt-i2c (host) and ipmi-bmc-bt-i2c (BMC) and documentation for the Block Transfer over I2C (bt-i2c) protocol. Signed-off-by: Brendan Higgins--- Documentation/bt-i2c.txt | 121 + .../devicetree/bindings/ipmi/ipmi-bt-i2c.txt | 21 .../bindings/ipmi_bmc/ipmi-bmc-bt-i2c.txt | 21 3 files changed, 163 insertions(+) create mode 100644 Documentation/bt-i2c.txt create mode 100644 Documentation/devicetree/bindings/ipmi/ipmi-bt-i2c.txt create mode 100644 Documentation/devicetree/bindings/ipmi_bmc/ipmi-bmc-bt-i2c.txt diff --git a/Documentation/bt-i2c.txt b/Documentation/bt-i2c.txt new file mode 100644 index ..1b375359c519 --- /dev/null +++ b/Documentation/bt-i2c.txt @@ -0,0 +1,121 @@ +Linux Block Transfer over I2C (bt-i2c) interface description + + +by Brendan Higgins in 2016 + +Introduction + + +IPMI defines an interface for communication between a CPU, a BMC (Baseboard +Management Controller), and sensors and various other peripherals. For a more +complete description of IPMI please see: +http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-second-gen-interface-spec-v2-rev1-1.html + +IPMI defines a *common* message format, as in a set of fields that are common +across all IPMI messages; they could be viewed as part of the framing +information for an IPMI message. They include: + + - netfn + - lun + - cmd + +netfn and cmd together define the type of the message; netfn can be viewed as a +message class and cmd is a subtype of sorts. lun (logical unit number) is used +for routing between messages between different interfaces. After the last field +there is usually a variable length payload. Despite these common fields, the +remainder of the framing varies widely between the IPMI defined hardware +interfaces; some specify a length as part of the framing which is never more +than a byte in length; others use a special signal to denote the end of message. +Some IPMI hardware interfaces, the Block Transfer interface in particular, +support a sequence number that aids in support of multiple in-flight IPMI +messages. + +IPMI defines SSIF (SMBus System Interface) as the IPMI hardware interface for +SMBus/I2C. It supports a maximum total message length of 255 bytes that is +broken up across several SMBus block operations. It does not define a sequence +field in the IPMI framing making it very difficult to support multiple in flight +messages (it is also intentionally left out of the specification). SSIF also +requires the slave device to NACK until it is ready to accept data (technically +it only specifies that it may NACK until it is ready, but must NACK on attempted +reads if it does not support SMBus Alert; however, this is an effective +requirements since a slave device is supposed to start with SMBus Alert +disabled); this again makes SSIF very difficult to support for some slave +devices which may not support NACKing arbitrary messages; indeed, at the time of +writing, the Linux I2C slave driver framework did not have support for sending +NACKs. + +Block Transfer over I2C defines a new IPMI compatible interface that uses Block +Transfer messages and semantics on top of plain old I2C; it does not assume that +the I2C slave is capable of NACKing arbitrary messages; however, it is designed +such that it could take advantage of SMBus Alert so that the master does not +have to poll (the Linux I2C core slave mode does not currently support SMBus +Alert, but a patch adding this support is currently on the way). + +Protocol Definition +--- + +Block Transfer over I2C uses the IPMI defined Block Transfer message format; it +supports variable length messages with a maximum length of 255 bytes (limited by +the IPMI Block Transfer length byte). + +A Block Transfer over I2C Request is structured as follows: + +-- +| I2C start | slave address / RW bit unset | Block Transfer message | ... (another message or stop ) | +-- + +Multiple requests can be sent before any responses are received. Sequence +numbers are to be handled by the users of the drivers; thus, no semantics are +prescribed to their usage; however, the slave driver is required to buffer at +least 256 requests before dropping requests; this can be used in conjunction +with sequence numbers to prevent messages from being dropped by the slave. + +A Block Transfer over I2C Response is structured as follows: + + +| I2C start | slave address / RW bit set | Block Transfer
[PATCH v1 1/3] ipmi: bt-i2c: added documentation for bt-i2c drivers
Added device tree binding documentation for ipmi-bt-i2c (host) and ipmi-bmc-bt-i2c (BMC) and documentation for the Block Transfer over I2C (bt-i2c) protocol. Signed-off-by: Brendan Higgins --- Documentation/bt-i2c.txt | 121 + .../devicetree/bindings/ipmi/ipmi-bt-i2c.txt | 21 .../bindings/ipmi_bmc/ipmi-bmc-bt-i2c.txt | 21 3 files changed, 163 insertions(+) create mode 100644 Documentation/bt-i2c.txt create mode 100644 Documentation/devicetree/bindings/ipmi/ipmi-bt-i2c.txt create mode 100644 Documentation/devicetree/bindings/ipmi_bmc/ipmi-bmc-bt-i2c.txt diff --git a/Documentation/bt-i2c.txt b/Documentation/bt-i2c.txt new file mode 100644 index ..1b375359c519 --- /dev/null +++ b/Documentation/bt-i2c.txt @@ -0,0 +1,121 @@ +Linux Block Transfer over I2C (bt-i2c) interface description + + +by Brendan Higgins in 2016 + +Introduction + + +IPMI defines an interface for communication between a CPU, a BMC (Baseboard +Management Controller), and sensors and various other peripherals. For a more +complete description of IPMI please see: +http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-second-gen-interface-spec-v2-rev1-1.html + +IPMI defines a *common* message format, as in a set of fields that are common +across all IPMI messages; they could be viewed as part of the framing +information for an IPMI message. They include: + + - netfn + - lun + - cmd + +netfn and cmd together define the type of the message; netfn can be viewed as a +message class and cmd is a subtype of sorts. lun (logical unit number) is used +for routing between messages between different interfaces. After the last field +there is usually a variable length payload. Despite these common fields, the +remainder of the framing varies widely between the IPMI defined hardware +interfaces; some specify a length as part of the framing which is never more +than a byte in length; others use a special signal to denote the end of message. +Some IPMI hardware interfaces, the Block Transfer interface in particular, +support a sequence number that aids in support of multiple in-flight IPMI +messages. + +IPMI defines SSIF (SMBus System Interface) as the IPMI hardware interface for +SMBus/I2C. It supports a maximum total message length of 255 bytes that is +broken up across several SMBus block operations. It does not define a sequence +field in the IPMI framing making it very difficult to support multiple in flight +messages (it is also intentionally left out of the specification). SSIF also +requires the slave device to NACK until it is ready to accept data (technically +it only specifies that it may NACK until it is ready, but must NACK on attempted +reads if it does not support SMBus Alert; however, this is an effective +requirements since a slave device is supposed to start with SMBus Alert +disabled); this again makes SSIF very difficult to support for some slave +devices which may not support NACKing arbitrary messages; indeed, at the time of +writing, the Linux I2C slave driver framework did not have support for sending +NACKs. + +Block Transfer over I2C defines a new IPMI compatible interface that uses Block +Transfer messages and semantics on top of plain old I2C; it does not assume that +the I2C slave is capable of NACKing arbitrary messages; however, it is designed +such that it could take advantage of SMBus Alert so that the master does not +have to poll (the Linux I2C core slave mode does not currently support SMBus +Alert, but a patch adding this support is currently on the way). + +Protocol Definition +--- + +Block Transfer over I2C uses the IPMI defined Block Transfer message format; it +supports variable length messages with a maximum length of 255 bytes (limited by +the IPMI Block Transfer length byte). + +A Block Transfer over I2C Request is structured as follows: + +-- +| I2C start | slave address / RW bit unset | Block Transfer message | ... (another message or stop ) | +-- + +Multiple requests can be sent before any responses are received. Sequence +numbers are to be handled by the users of the drivers; thus, no semantics are +prescribed to their usage; however, the slave driver is required to buffer at +least 256 requests before dropping requests; this can be used in conjunction +with sequence numbers to prevent messages from being dropped by the slave. + +A Block Transfer over I2C Response is structured as follows: + + +| I2C start | slave address / RW bit set | Block Transfer message | ... (another message or stop ) |