1*368990e9SJonas Jelonek# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*368990e9SJonas Jelonek%YAML 1.2 3*368990e9SJonas Jelonek--- 4*368990e9SJonas Jelonek$id: http://devicetree.org/schemas/net/pse-pd/realtek,pse-mcu-gen1.yaml# 5*368990e9SJonas Jelonek$schema: http://devicetree.org/meta-schemas/core.yaml# 6*368990e9SJonas Jelonek 7*368990e9SJonas Jelonektitle: Realtek PSE MCU 8*368990e9SJonas Jelonek 9*368990e9SJonas Jelonekmaintainers: 10*368990e9SJonas Jelonek - Jonas Jelonek <jelonek.jonas@gmail.com> 11*368990e9SJonas Jelonek 12*368990e9SJonas Jelonekdescription: | 13*368990e9SJonas Jelonek A microcontroller (MCU) that manages the PSE (Power Sourcing Equipment) 14*368990e9SJonas Jelonek hardware on a range of managed PoE switches. The host CPU talks only to 15*368990e9SJonas Jelonek this MCU - over I2C/SMBus or UART - using a small message-based protocol; 16*368990e9SJonas Jelonek the PSE silicon it drives sits behind the MCU and is never accessed 17*368990e9SJonas Jelonek directly. For example, on the Zyxel GS1900-10HP the SoC reaches the MCU 18*368990e9SJonas Jelonek over UART, and the MCU manages the on-board PSE chip. 19*368990e9SJonas Jelonek 20*368990e9SJonas Jelonek This binding describes the MCU together with its Realtek firmware: the 21*368990e9SJonas Jelonek firmware and its host protocol, which are stable across boards. The 22*368990e9SJonas Jelonek microcontroller silicon is a general-purpose part that varies, and the 23*368990e9SJonas Jelonek PSE silicon behind the MCU (Realtek RTL823x/RTL8239* or Broadcom 24*368990e9SJonas Jelonek BCM59xxx) is reported by the MCU and detected at runtime - neither is 25*368990e9SJonas Jelonek named here. 26*368990e9SJonas Jelonek 27*368990e9SJonas Jelonek Two protocol generations exist, both Realtek's: 28*368990e9SJonas Jelonek gen1 older boards, where the MCU fronts Broadcom PSE silicon 29*368990e9SJonas Jelonek gen2 the altered protocol used with Realtek's own PSE silicon 30*368990e9SJonas Jelonek 31*368990e9SJonas Jelonek On an I2C attachment the framing the MCU firmware expects is part of the 32*368990e9SJonas Jelonek compatible: '-smbus' (reads carry a leading command byte and a repeated 33*368990e9SJonas Jelonek start) or '-i2c' (bare block writes and reads). A UART attachment carries 34*368990e9SJonas Jelonek no framing suffix; the transport is given by the parent 'serial' node. 35*368990e9SJonas Jelonek 36*368990e9SJonas Jelonek Each board additionally carries a device-specific compatible that falls 37*368990e9SJonas Jelonek back to one of the protocol compatibles above. Drivers bind on the 38*368990e9SJonas Jelonek protocol compatible; the device-specific string identifies the board and 39*368990e9SJonas Jelonek reserves a place for a future per-board quirk without having to retrofit 40*368990e9SJonas Jelonek device trees already in the field. 41*368990e9SJonas Jelonek 42*368990e9SJonas Jelonekproperties: 43*368990e9SJonas Jelonek compatible: 44*368990e9SJonas Jelonek oneOf: 45*368990e9SJonas Jelonek # UART 46*368990e9SJonas Jelonek - items: 47*368990e9SJonas Jelonek - enum: 48*368990e9SJonas Jelonek - zyxel,gs1900-10hp-a1-pse 49*368990e9SJonas Jelonek - const: realtek,pse-mcu-gen1 50*368990e9SJonas Jelonek 51*368990e9SJonas Jelonek # I2C, SMBus framing 52*368990e9SJonas Jelonek - items: 53*368990e9SJonas Jelonek - enum: 54*368990e9SJonas Jelonek - zyxel,gs1920-24hp-v2-pse 55*368990e9SJonas Jelonek - const: realtek,pse-mcu-gen1-smbus 56*368990e9SJonas Jelonek 57*368990e9SJonas Jelonek # UART 58*368990e9SJonas Jelonek - items: 59*368990e9SJonas Jelonek - enum: 60*368990e9SJonas Jelonek - zyxel,gs1900-10hp-b1-pse 61*368990e9SJonas Jelonek - zyxel,xmg1915-10ep-pse 62*368990e9SJonas Jelonek - const: realtek,pse-mcu-gen2 63*368990e9SJonas Jelonek 64*368990e9SJonas Jelonek # I2C, SMBus framing 65*368990e9SJonas Jelonek - items: 66*368990e9SJonas Jelonek - enum: 67*368990e9SJonas Jelonek - zyxel,xs1930-12hp-pse 68*368990e9SJonas Jelonek - const: realtek,pse-mcu-gen2-smbus 69*368990e9SJonas Jelonek 70*368990e9SJonas Jelonek # I2C, raw framing 71*368990e9SJonas Jelonek - items: 72*368990e9SJonas Jelonek - enum: 73*368990e9SJonas Jelonek - linksys,lgs328mpc-v2-pse 74*368990e9SJonas Jelonek - const: realtek,pse-mcu-gen2-i2c 75*368990e9SJonas Jelonek 76*368990e9SJonas Jelonek reg: 77*368990e9SJonas Jelonek maxItems: 1 78*368990e9SJonas Jelonek 79*368990e9SJonas Jelonek reset-gpios: 80*368990e9SJonas Jelonek description: Reset line of the MCU. 81*368990e9SJonas Jelonek maxItems: 1 82*368990e9SJonas Jelonek 83*368990e9SJonas Jelonek disable-ports-gpios: 84*368990e9SJonas Jelonek description: 85*368990e9SJonas Jelonek Hardware gate that forces all ports into admin-disabled state while 86*368990e9SJonas Jelonek asserted. 87*368990e9SJonas Jelonek maxItems: 1 88*368990e9SJonas Jelonek 89*368990e9SJonas Jelonekrequired: 90*368990e9SJonas Jelonek - compatible 91*368990e9SJonas Jelonek 92*368990e9SJonas JelonekallOf: 93*368990e9SJonas Jelonek - $ref: pse-controller.yaml# 94*368990e9SJonas Jelonek # A '-smbus'/'-i2c' compatible is an I2C attachment: it has 'reg' and 95*368990e9SJonas Jelonek # cannot carry serial bus properties. A bare gen compatible is a UART 96*368990e9SJonas Jelonek # attachment: no 'reg', the transport comes from the parent serial node. 97*368990e9SJonas Jelonek - if: 98*368990e9SJonas Jelonek properties: 99*368990e9SJonas Jelonek compatible: 100*368990e9SJonas Jelonek contains: 101*368990e9SJonas Jelonek enum: 102*368990e9SJonas Jelonek - realtek,pse-mcu-gen1-smbus 103*368990e9SJonas Jelonek - realtek,pse-mcu-gen2-smbus 104*368990e9SJonas Jelonek - realtek,pse-mcu-gen2-i2c 105*368990e9SJonas Jelonek then: 106*368990e9SJonas Jelonek required: 107*368990e9SJonas Jelonek - reg 108*368990e9SJonas Jelonek properties: 109*368990e9SJonas Jelonek current-speed: false 110*368990e9SJonas Jelonek max-speed: false 111*368990e9SJonas Jelonek else: 112*368990e9SJonas Jelonek allOf: 113*368990e9SJonas Jelonek - $ref: /schemas/serial/serial-peripheral-props.yaml# 114*368990e9SJonas Jelonek 115*368990e9SJonas Jelonek properties: 116*368990e9SJonas Jelonek reg: false 117*368990e9SJonas Jelonek 118*368990e9SJonas JelonekunevaluatedProperties: false 119*368990e9SJonas Jelonek 120*368990e9SJonas Jelonekexamples: 121*368990e9SJonas Jelonek # SMBus-framed I2C attachment 122*368990e9SJonas Jelonek - | 123*368990e9SJonas Jelonek i2c { 124*368990e9SJonas Jelonek #address-cells = <1>; 125*368990e9SJonas Jelonek #size-cells = <0>; 126*368990e9SJonas Jelonek 127*368990e9SJonas Jelonek ethernet-pse@20 { 128*368990e9SJonas Jelonek compatible = "zyxel,xs1930-12hp-pse", "realtek,pse-mcu-gen2-smbus"; 129*368990e9SJonas Jelonek reg = <0x20>; 130*368990e9SJonas Jelonek 131*368990e9SJonas Jelonek pse-pis { 132*368990e9SJonas Jelonek #address-cells = <1>; 133*368990e9SJonas Jelonek #size-cells = <0>; 134*368990e9SJonas Jelonek 135*368990e9SJonas Jelonek pse-pi@0 { 136*368990e9SJonas Jelonek reg = <0>; 137*368990e9SJonas Jelonek #pse-cells = <0>; 138*368990e9SJonas Jelonek }; 139*368990e9SJonas Jelonek }; 140*368990e9SJonas Jelonek }; 141*368990e9SJonas Jelonek }; 142*368990e9SJonas Jelonek 143*368990e9SJonas Jelonek # Raw-I2C-framed attachment 144*368990e9SJonas Jelonek - | 145*368990e9SJonas Jelonek i2c { 146*368990e9SJonas Jelonek #address-cells = <1>; 147*368990e9SJonas Jelonek #size-cells = <0>; 148*368990e9SJonas Jelonek 149*368990e9SJonas Jelonek ethernet-pse@20 { 150*368990e9SJonas Jelonek compatible = "linksys,lgs328mpc-v2-pse", "realtek,pse-mcu-gen2-i2c"; 151*368990e9SJonas Jelonek reg = <0x20>; 152*368990e9SJonas Jelonek 153*368990e9SJonas Jelonek pse-pis { 154*368990e9SJonas Jelonek #address-cells = <1>; 155*368990e9SJonas Jelonek #size-cells = <0>; 156*368990e9SJonas Jelonek 157*368990e9SJonas Jelonek pse-pi@0 { 158*368990e9SJonas Jelonek reg = <0>; 159*368990e9SJonas Jelonek #pse-cells = <0>; 160*368990e9SJonas Jelonek }; 161*368990e9SJonas Jelonek }; 162*368990e9SJonas Jelonek }; 163*368990e9SJonas Jelonek }; 164*368990e9SJonas Jelonek 165*368990e9SJonas Jelonek # UART attachment 166*368990e9SJonas Jelonek - | 167*368990e9SJonas Jelonek serial { 168*368990e9SJonas Jelonek ethernet-pse { 169*368990e9SJonas Jelonek compatible = "zyxel,gs1900-10hp-a1-pse", "realtek,pse-mcu-gen1"; 170*368990e9SJonas Jelonek current-speed = <19200>; 171*368990e9SJonas Jelonek 172*368990e9SJonas Jelonek pse-pis { 173*368990e9SJonas Jelonek #address-cells = <1>; 174*368990e9SJonas Jelonek #size-cells = <0>; 175*368990e9SJonas Jelonek 176*368990e9SJonas Jelonek pse-pi@0 { 177*368990e9SJonas Jelonek reg = <0>; 178*368990e9SJonas Jelonek #pse-cells = <0>; 179*368990e9SJonas Jelonek }; 180*368990e9SJonas Jelonek }; 181*368990e9SJonas Jelonek }; 182*368990e9SJonas Jelonek }; 183