Document the Renesas RG3MxxB12A1 I3C HUB. Signed-off-by: Steven Niu <steven.niu.uj@xxxxxxxxxxx> --- .../devicetree/bindings/i3c/i3c-hub.yaml | 400 ++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 Documentation/devicetree/bindings/i3c/i3c-hub.yaml diff --git a/Documentation/devicetree/bindings/i3c/i3c-hub.yaml b/Documentation/devicetree/bindings/i3c/i3c-hub.yaml new file mode 100644 index 000000000000..8ff6ca172975 --- /dev/null +++ b/Documentation/devicetree/bindings/i3c/i3c-hub.yaml @@ -0,0 +1,400 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/i3c/i3c-hub.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: I3C HUB + +maintainers: + - Zbigniew Lukwinski <zbigniew.lukwinski@xxxxxxxxxxxxxxx> + - Steven Niu <steven.niu.uj@xxxxxxxxxxx> + +description: | + I3C HUB is smart device which provides multiple functionality: + * enabling voltage compatibility across I3C Controller and Target devices, + * bus capacitance isolation + * address conflict isolation + * I3C port expansion + * two controllers in a single I3C bus + * I3C and SMBus device compatibility + * GPIO expansion + + Having such big number of features, there is a need to have some DT knobs to tell the I3C HUB + driver which features shall be enabled and how they shall be configured. I3C HUB driver read, + validate DT knobs and set corresponding registers with the right way to satisfy user requests from + DT. + + All the DT properties for I3C HUB are located under dedicated (for I3C HUB) DT entry. I3C HUB DT + entry structure is aligned with regular I3C device DT entry described in i3c.yaml. + +allOf: + - $ref: i3c.yaml# + +properties: + $nodename: + pattern: "^hub@0,0$" + + cp0-ldo-en: + enum: + - disabled + - enabled + description: | + I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by + on-die LDO will be available externally on dedicated pin. This option could be used to supply + external pull-up resistors or for any other purpose which does not cross LDO capabilities. + + This property is optional. If not provided, LDO will be disabled. + + cp1-ldo-en: + enum: + - disabled + - enabled + description: | + I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by + on-die LDO will be available externally on dedicated pin. This option could be used to supply + external pull-up resistors or for any other purpose which does not cross LDO capabilities. + + This property is optional. If not provided, LDO will be disabled. + + tp0145-ldo-en: + enum: + - disabled + - enabled + description: | + I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by + on-die LDO will be available externally on dedicated pin. This option could be used to supply + external pull-up resistors or for any other purpose which does not cross LDO capabilities. + + This property is optional. If not provided, LDO will be disabled. + + tp2367-ldo-en: + enum: + - disabled + - enabled + description: | + I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by + on-die LDO will be available externally on dedicated pin. This option could be used to supply + external pull-up resistors or for any other purpose which does not cross LDO capabilities. + + This property is optional. If not provided, LDO will be disabled. + + cp0-ldo-volt: + enum: + - 1.0V + - 1.1V + - 1.2V + - 1.8V + description: | + I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This + property is optional. + + If not provided, LDO configuration is not modified in I3C HUB. + + cp1-ldo-volt: + enum: + - 1.0V + - 1.1V + - 1.2V + - 1.8V + description: | + I3C HUB Controller Port 1 LDO setting to control the Controller Port 1 voltage level. This + property is optional. + + If not provided, LDO configuration is not modified in I3C HUB. + + tp0145-ldo-volt: + enum: + - disabled + - 1.0V + - 1.1V + - 1.2V + - 1.8V + description: | + I3C HUB Target Ports 0/1/4/5 LDO setting to control the Target Ports 0/1/4/5 voltage level. + + If not provided, LDO configuration is not modified in I3C HUB. + + tp2367-ldo-volt: + enum: + - disabled + - 1.0V + - 1.1V + - 1.2V + - 1.8V + description: | + I3C HUB Target Ports 2/3/6/7 LDO setting to control the Target Ports 2/3/6/7 voltage level. + + If not provided, LDO configuration is not modified in I3C HUB. + + tp0145-pullup: + enum: + - disabled + - 250R + - 500R + - 1k + - 2k + description: | + I3C HUB Target Ports 0/1/4/5 pull-up setting to control the Target Ports 0/1/4/5 pull-up + resistance level. + + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB. + + tp2367-pullup: + enum: + - disabled + - 250R + - 500R + - 1k + - 2k + description: | + I3C HUB Target Ports 2/3/6/7 pull-up setting to control the Target Ports 2/3/6/7 pull-up + resistance level. + + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB. + + cp0-io-strength: + enum: + - 20Ohms + - 30Ohms + - 40Ohms + - 50Ohms + description: | + I3C HUB Controller Port 0 IO strength setting to control the Controller Port 0 output driver + strength. + + This property is optional. If not provided, IO strength configuration is not modified in I3C + HUB. + + cp1-io-strength: + enum: + - 20Ohms + - 30Ohms + - 40Ohms + - 50Ohms + description: | + I3C HUB Controller Port 1 IO strength setting to control the Controller Port 1 output driver + strength. + + This property is optional. If not provided, IO strength configuration is not modified in I3C + HUB. + + tp0145-io-strength: + enum: + - 20Ohms + - 30Ohms + - 40Ohms + - 50Ohms + description: | + I3C HUB Target Ports 0/1/4/5 IO strength setting to control the Target Ports 0/1/4/5 output + driver strength. + + This property is optional. If not provided, IO strength configuration is not modified in I3C + HUB. + + tp2367-io-strength: + enum: + - 20Ohms + - 30Ohms + - 40Ohms + - 50Ohms + description: | + I3C HUB Target Ports 2/3/6/7 IO strength setting to control the Target Ports 2/3/6/7 output + driver strength. + + This property is optional. If not provided, IO strength configuration is not modified in I3C + HUB. + + id: + enum: + - 0 + - 1 + - 3 + description: | + I3C HUB ID based on CSEL pin. There are three possible values: + 0 - CP0 is selected as primary Controller Port + 1 - Primary Controller Port is selected by software by writing the REG#56 + 3 - CP1 is selected as primary Controller Port + + I3C HUB driver reads CSEL pin status (REG#121[5:4]) and tries to find DT node with matching + value in 'id' property. + + This property is optional. If not provided, DT node can only be used by the I3C HUB driver if + there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes with no + 'id' property - the first one will be chosen by I3C HUB driver. If there is a multiple DT + nodes with matching 'id' property - the first one will be chosen by I3C HUB driver. + + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those + read from I3C HUB. + + id-cp1: + enum: + - 0 + - 1 + - 2 + - 3 + description: | + I3C HUB ID based on CP1 SDA and SCL pins state probed during power on. + + I3C HUB driver reads CP1 SDA and SCL pin status and tries to find DT node with matching value + in 'id-cp1' property. + + This property is optional. If not provided, DT node can only be used by the I3C HUB + driver if there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes + with no 'id-cp1' property - the first one will be chosen by I3C HUB driver. If there is a + multiple DT nodes with matching 'id-cp1' property - the first one will be chosen by I3C HUB + driver. + + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those + read from I3C HUB. + +patternProperties: + "@[0-9]$": + type: object + description: | + I3C HUB Target Port child, should be named: target-port@<target-port-id> + + properties: + mode: + enum: + - disabled + - i3c + - smbus + - gpio + description: | + I3C HUB Target Port mode setting to control Target Port functionality. + + This property is optional. If not provided, Target Port mode configuration is not modified + in I3C HUB. + + pullup: + enum: + - disabled + - enabled + description: | + I3C HUB Target Port pull-up setting to disable/enable Target Port pull-up. + + This property is optional. If not provided, Target Port pull-up configuration is not + modified in I3C HUB. + + always-enable: + type: boolean + description: | + I3C HUB Target Port settings to control the port enable/disable policy. + + This property is optional. If not provided, Target Port is enabled only on accessing to + the devices connected to it and the port is disabled automatically after the accessing + is done. If provided, the Target Port is always enabled. + + patternProperties: + "@0,0$": + type: object + description: | + Backend for handling SMBus mode, should be named: backend@0,0 + Adding this node installs the backed for handling SMBus Target mode communication. + + properties: + compatible: + description: + Compatible of the I2C/SMBus backend. + + target-reg: + description: + Target address used for Target Port in the I3C HUB configured as SMBus Target mode. + +additionalProperties: true + +examples: + - | + i3c-master@d040000 { + #address-cells = <1>; + #size-cells = <0>; + + hub@0,0 { + cp0-ldo-en = "disabled"; + cp1-ldo-en = "enabled"; + cp0-ldo-volt = "1.0V"; + cp1-ldo-volt = "1.1V"; + tp0145-ldo-en = "enabled"; + tp2367-ldo-en = "disabled"; + tp0145-ldo-volt = "1.2V"; + tp2367-ldo-volt = "1.8V"; + tp0145-pullup = "2k"; + tp2367-pullup = "500R"; + tp0145-io-strength = "50Ohms"; + tp2367-io-strength = "30Ohms"; + cp0-io-strength = "20Ohms"; + cp1-io-strength = "40Ohms"; + + target-port@0 { + mode = "i3c"; + pullup = "enabled"; + always_enable; + }; + target-port@1 { + mode = "smbus"; + pullup = "enabled"; + backend@0,0{ + compatible = "slave-mqueue"; + target-reg = <0x10>; + }; + }; + target-port@2 { + mode = "gpio"; + pullup = "disabled"; + }; + target-port@3 { + mode = "disabled"; + pullup = "disabled"; + }; + }; + }; + + - | + i3c-master@d040000 { + #address-cells = <1>; + #size-cells = <0>; + + hub@70,3C000000100 { + reg = <0x70 0x3C0 0x00000100>; + assigned-address = <0x70>; + dcr = <0xC2>; + + cp0-ldo-en = "disabled"; + cp1-ldo-en = "enabled"; + cp0-ldo-volt = "1.0V"; + cp1-ldo-volt = "1.1V"; + tp0145-ldo-en = "enabled"; + tp2367-ldo-en = "disabled"; + tp0145-ldo-volt = "1.2V"; + tp2367-ldo-volt = "1.8V"; + tp0145-pullup = "2k"; + tp2367-pullup = "500R"; + tp0145-io-strength = "50Ohms"; + tp2367-io-strength = "30Ohms"; + cp0-io-strength = "20Ohms"; + cp1-io-strength = "40Ohms"; + + target-port@0 { + mode = "i3c"; + pullup = "enabled"; + always-enable; + }; + target-port@1 { + mode = "smbus"; + pullup = "enabled"; + backend@0,0{ + compatible = "slave-mqueue"; + target-reg = <0x12>; + }; + }; + target-port@2 { + mode = "gpio"; + pullup = "disabled"; + }; + target-port@3 { + mode = "disabled"; + pullup = "disabled"; + }; + }; + }; -- 2.25.1