dt-bindings: net: New binding mctp-i2c-controller

Used to define a local endpoint to communicate with MCTP peripherals
attached to an I2C bus. This I2C endpoint can communicate with remote
MCTP devices on the I2C bus.

In the example I2C topology below (matching the second yaml example) we
have MCTP devices on busses i2c1 and i2c6. MCTP-supporting busses are
indicated by the 'mctp-controller' DT property on an I2C bus node.

A mctp-i2c-controller I2C client DT node is placed at the top of the
mux topology, since only the root I2C adapter will support I2C slave
functionality.
                                               .-------.
                                               |eeprom |
    .------------.     .------.               /'-------'
    | adapter    |     | mux  --@0,i2c5------'
    | i2c1       ----.*|      --@1,i2c6--.--.
    |............|    \'------'           \  \  .........
    | mctp-i2c-  |     \                   \  \ .mctpB  .
    | controller |      \                   \  '.0x30   .
    |            |       \  .........        \  '.......'
    | 0x50       |        \ .mctpA  .         \ .........
    '------------'         '.0x1d   .          '.mctpC  .
                            '.......'          '.0x31   .
                                                '.......'
(mctpX boxes above are remote MCTP devices not included in the DT at
present, they can be hotplugged/probed at runtime. A DT binding for
specific fixed MCTP devices could be added later if required)

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
Reviewed-by: Rob Herring <robh@kernel.org>
Acked-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Matt Johnston 2022-02-18 13:51:05 +08:00 committed by David S. Miller
parent 4b340a5a72
commit 6881e493b0
2 changed files with 96 additions and 0 deletions

View File

@ -95,6 +95,10 @@ wants to support one of the below features, it should adapt these bindings.
- smbus-alert - smbus-alert
states that the optional SMBus-Alert feature apply to this bus. states that the optional SMBus-Alert feature apply to this bus.
- mctp-controller
indicates that the system is accessible via this bus as an endpoint for
MCTP over I2C transport.
Required properties (per child device) Required properties (per child device)
-------------------------------------- --------------------------------------

View File

@ -0,0 +1,92 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/mctp-i2c-controller.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: MCTP I2C transport binding
maintainers:
- Matt Johnston <matt@codeconstruct.com.au>
description: |
An mctp-i2c-controller defines a local MCTP endpoint on an I2C controller.
MCTP I2C is specified by DMTF DSP0237.
An mctp-i2c-controller must be attached to an I2C adapter which supports
slave functionality. I2C busses (either directly or as subordinate mux
busses) are attached to the mctp-i2c-controller with a 'mctp-controller'
property on each used bus. Each mctp-controller I2C bus will be presented
to the host system as a separate MCTP I2C instance.
properties:
compatible:
const: mctp-i2c-controller
reg:
minimum: 0x40000000
maximum: 0x4000007f
description: |
7 bit I2C address of the local endpoint.
I2C_OWN_SLAVE_ADDRESS (1<<30) flag must be set.
additionalProperties: false
required:
- compatible
- reg
examples:
- |
// Basic case of a single I2C bus
#include <dt-bindings/i2c/i2c.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
mctp-controller;
mctp@30 {
compatible = "mctp-i2c-controller";
reg = <(0x30 | I2C_OWN_SLAVE_ADDRESS)>;
};
};
- |
// Mux topology with multiple MCTP-handling busses under
// a single mctp-i2c-controller.
// i2c1 and i2c6 can have MCTP devices, i2c5 does not.
#include <dt-bindings/i2c/i2c.h>
i2c1: i2c {
#address-cells = <1>;
#size-cells = <0>;
mctp-controller;
mctp@50 {
compatible = "mctp-i2c-controller";
reg = <(0x50 | I2C_OWN_SLAVE_ADDRESS)>;
};
};
i2c-mux {
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&i2c1>;
i2c5: i2c@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
eeprom@33 {
reg = <0x33>;
};
};
i2c6: i2c@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
mctp-controller;
};
};