|  | Marvell Berlin SoC Family Device Tree Bindings | 
|  | --------------------------------------------------------------- | 
|  |  | 
|  | Boards with a SoC of the Marvell Berlin family, e.g. Armada 1500 | 
|  | shall have the following properties: | 
|  |  | 
|  | * Required root node properties: | 
|  | compatible: must contain "marvell,berlin" | 
|  |  | 
|  | In addition, the above compatible shall be extended with the specific | 
|  | SoC and board used. Currently known SoC compatibles are: | 
|  | "marvell,berlin2"      for Marvell Armada 1500 (BG2, 88DE3100), | 
|  | "marvell,berlin2cd"    for Marvell Armada 1500-mini (BG2CD, 88DE3005) | 
|  | "marvell,berlin2ct"    for Marvell Armada ? (BG2CT, 88DE????) | 
|  | "marvell,berlin2q"     for Marvell Armada 1500-pro (BG2Q, 88DE3114) | 
|  | "marvell,berlin3"      for Marvell Armada ? (BG3, 88DE????) | 
|  |  | 
|  | * Example: | 
|  |  | 
|  | / { | 
|  | model = "Sony NSZ-GS7"; | 
|  | compatible = "sony,nsz-gs7", "marvell,berlin2", "marvell,berlin"; | 
|  |  | 
|  | ... | 
|  | } | 
|  |  | 
|  | * Marvell Berlin CPU control bindings | 
|  |  | 
|  | CPU control register allows various operations on CPUs, like resetting them | 
|  | independently. | 
|  |  | 
|  | Required properties: | 
|  | - compatible: should be "marvell,berlin-cpu-ctrl" | 
|  | - reg: address and length of the register set | 
|  |  | 
|  | Example: | 
|  |  | 
|  | cpu-ctrl@f7dd0000 { | 
|  | compatible = "marvell,berlin-cpu-ctrl"; | 
|  | reg = <0xf7dd0000 0x10000>; | 
|  | }; | 
|  |  | 
|  | * Marvell Berlin2 chip control binding | 
|  |  | 
|  | Marvell Berlin SoCs have a chip control register set providing several | 
|  | individual registers dealing with pinmux, padmux, clock, reset, and secondary | 
|  | CPU boot address. Unfortunately, the individual registers are spread among the | 
|  | chip control registers, so there should be a single DT node only providing the | 
|  | different functions which are described below. | 
|  |  | 
|  | Required properties: | 
|  | - compatible: shall be one of | 
|  | "marvell,berlin2-chip-ctrl" for BG2 | 
|  | "marvell,berlin2cd-chip-ctrl" for BG2CD | 
|  | "marvell,berlin2q-chip-ctrl" for BG2Q | 
|  | - reg: address and length of following register sets for | 
|  | BG2/BG2CD: chip control register set | 
|  | BG2Q: chip control register set and cpu pll registers | 
|  |  | 
|  | * Marvell Berlin2 system control binding | 
|  |  | 
|  | Marvell Berlin SoCs have a system control register set providing several | 
|  | individual registers dealing with pinmux, padmux, and reset. | 
|  |  | 
|  | Required properties: | 
|  | - compatible: should be one of | 
|  | "marvell,berlin2-system-ctrl" for BG2 | 
|  | "marvell,berlin2cd-system-ctrl" for BG2CD | 
|  | "marvell,berlin2q-system-ctrl" for BG2Q | 
|  | - reg: address and length of the system control register set | 
|  |  | 
|  | * Clock provider binding | 
|  |  | 
|  | As clock related registers are spread among the chip control registers, the | 
|  | chip control node also provides the clocks. Marvell Berlin2 (BG2, BG2CD, BG2Q) | 
|  | SoCs share the same IP for PLLs and clocks, with some minor differences in | 
|  | features and register layout. | 
|  |  | 
|  | Required properties: | 
|  | - #clock-cells: shall be set to 1 | 
|  | - clocks: clock specifiers referencing the core clock input clocks | 
|  | - clock-names: array of strings describing the input clock specifiers above. | 
|  | Allowed clock-names for the reference clocks are | 
|  | "refclk" for the SoCs osciallator input on all SoCs, | 
|  | and SoC-specific input clocks for | 
|  | BG2/BG2CD: "video_ext0" for the external video clock input | 
|  |  | 
|  | Clocks provided by core clocks shall be referenced by a clock specifier | 
|  | indexing one of the provided clocks. Refer to dt-bindings/clock/berlin<soc>.h | 
|  | for the corresponding index mapping. | 
|  |  | 
|  | * Pin controller binding | 
|  |  | 
|  | Pin control registers are part of both register sets, chip control and system | 
|  | control. The pins controlled are organized in groups, so no actual pin | 
|  | information is needed. | 
|  |  | 
|  | A pin-controller node should contain subnodes representing the pin group | 
|  | configurations, one per function. Each subnode has the group name and the muxing | 
|  | function used. | 
|  |  | 
|  | Be aware the Marvell Berlin datasheets use the keyword 'mode' for what is called | 
|  | a 'function' in the pin-controller subsystem. | 
|  |  | 
|  | Required subnode-properties: | 
|  | - groups: a list of strings describing the group names. | 
|  | - function: a string describing the function used to mux the groups. | 
|  |  | 
|  | * Reset controller binding | 
|  |  | 
|  | A reset controller is part of the chip control registers set. The chip control | 
|  | node also provides the reset. The register set is not at the same offset between | 
|  | Berlin SoCs. | 
|  |  | 
|  | Required property: | 
|  | - #reset-cells: must be set to 2 | 
|  |  | 
|  | Example: | 
|  |  | 
|  | chip: chip-control@ea0000 { | 
|  | compatible = "marvell,berlin2-chip-ctrl"; | 
|  | #clock-cells = <1>; | 
|  | #reset-cells = <2>; | 
|  | reg = <0xea0000 0x400>; | 
|  | clocks = <&refclk>, <&externaldev 0>; | 
|  | clock-names = "refclk", "video_ext0"; | 
|  |  | 
|  | spi1_pmux: spi1-pmux { | 
|  | groups = "G0"; | 
|  | function = "spi1"; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | sysctrl: system-controller@d000 { | 
|  | compatible = "marvell,berlin2-system-ctrl"; | 
|  | reg = <0xd000 0x100>; | 
|  |  | 
|  | uart0_pmux: uart0-pmux { | 
|  | groups = "GSM4"; | 
|  | function = "uart0"; | 
|  | }; | 
|  |  | 
|  | uart1_pmux: uart1-pmux { | 
|  | groups = "GSM5"; | 
|  | function = "uart1"; | 
|  | }; | 
|  |  | 
|  | uart2_pmux: uart2-pmux { | 
|  | groups = "GSM3"; | 
|  | function = "uart2"; | 
|  | }; | 
|  | }; |