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";
	};
};
