UniPhier reset controller


System reset
------------

Required properties:
- compatible: should be one of the following:
    "socionext,uniphier-ld4-reset"  - for LD4 SoC
    "socionext,uniphier-pro4-reset" - for Pro4 SoC
    "socionext,uniphier-sld8-reset" - for sLD8 SoC
    "socionext,uniphier-pro5-reset" - for Pro5 SoC
    "socionext,uniphier-pxs2-reset" - for PXs2/LD6b SoC
    "socionext,uniphier-ld11-reset" - for LD11 SoC
    "socionext,uniphier-ld20-reset" - for LD20 SoC
    "socionext,uniphier-pxs3-reset" - for PXs3 SoC
- #reset-cells: should be 1.

Example:

	sysctrl@61840000 {
		compatible = "socionext,uniphier-ld11-sysctrl",
			     "simple-mfd", "syscon";
		reg = <0x61840000 0x4000>;

		reset {
			compatible = "socionext,uniphier-ld11-reset";
			#reset-cells = <1>;
		};

		other nodes ...
	};


Media I/O (MIO) reset, SD reset
-------------------------------

Required properties:
- compatible: should be one of the following:
    "socionext,uniphier-ld4-mio-reset"  - for LD4 SoC
    "socionext,uniphier-pro4-mio-reset" - for Pro4 SoC
    "socionext,uniphier-sld8-mio-reset" - for sLD8 SoC
    "socionext,uniphier-pro5-sd-reset"  - for Pro5 SoC
    "socionext,uniphier-pxs2-sd-reset"  - for PXs2/LD6b SoC
    "socionext,uniphier-ld11-mio-reset" - for LD11 SoC (MIO)
    "socionext,uniphier-ld11-sd-reset"  - for LD11 SoC (SD)
    "socionext,uniphier-ld20-sd-reset"  - for LD20 SoC
    "socionext,uniphier-pxs3-sd-reset"  - for PXs3 SoC
- #reset-cells: should be 1.

Example:

	mioctrl@59810000 {
		compatible = "socionext,uniphier-ld11-mioctrl",
			     "simple-mfd", "syscon";
		reg = <0x59810000 0x800>;

		reset {
			compatible = "socionext,uniphier-ld11-mio-reset";
			#reset-cells = <1>;
		};

		other nodes ...
	};


Peripheral reset
----------------

Required properties:
- compatible: should be one of the following:
    "socionext,uniphier-ld4-peri-reset"  - for LD4 SoC
    "socionext,uniphier-pro4-peri-reset" - for Pro4 SoC
    "socionext,uniphier-sld8-peri-reset" - for sLD8 SoC
    "socionext,uniphier-pro5-peri-reset" - for Pro5 SoC
    "socionext,uniphier-pxs2-peri-reset" - for PXs2/LD6b SoC
    "socionext,uniphier-ld11-peri-reset" - for LD11 SoC
    "socionext,uniphier-ld20-peri-reset" - for LD20 SoC
    "socionext,uniphier-pxs3-peri-reset" - for PXs3 SoC
- #reset-cells: should be 1.

Example:

	perictrl@59820000 {
		compatible = "socionext,uniphier-ld11-perictrl",
			     "simple-mfd", "syscon";
		reg = <0x59820000 0x200>;

		reset {
			compatible = "socionext,uniphier-ld11-peri-reset";
			#reset-cells = <1>;
		};

		other nodes ...
	};


Analog signal amplifier reset
-----------------------------

Required properties:
- compatible: should be one of the following:
    "socionext,uniphier-ld11-adamv-reset" - for LD11 SoC
    "socionext,uniphier-ld20-adamv-reset" - for LD20 SoC
- #reset-cells: should be 1.

Example:

	adamv@57920000 {
		compatible = "socionext,uniphier-ld11-adamv",
			     "simple-mfd", "syscon";
		reg = <0x57920000 0x1000>;

		adamv_rst: reset {
			compatible = "socionext,uniphier-ld11-adamv-reset";
			#reset-cells = <1>;
		};

		other nodes ...
	};


Peripheral core reset in glue layer
-----------------------------------

Some peripheral core reset belongs to its own glue layer. Before using
this core reset, it is necessary to control the clocks and resets to enable
this layer. These clocks and resets should be described in each property.

Required properties:
- compatible: Should be
    "socionext,uniphier-pro4-usb3-reset" - for Pro4 SoC USB3
    "socionext,uniphier-pxs2-usb3-reset" - for PXs2 SoC USB3
    "socionext,uniphier-ld20-usb3-reset" - for LD20 SoC USB3
    "socionext,uniphier-pxs3-usb3-reset" - for PXs3 SoC USB3
    "socionext,uniphier-pro4-ahci-reset" - for Pro4 SoC AHCI
    "socionext,uniphier-pxs2-ahci-reset" - for PXs2 SoC AHCI
    "socionext,uniphier-pxs3-ahci-reset" - for PXs3 SoC AHCI
- #reset-cells: Should be 1.
- reg: Specifies offset and length of the register set for the device.
- clocks: A list of phandles to the clock gate for the glue layer.
	According to the clock-names, appropriate clocks are required.
- clock-names: Should contain
    "gio", "link" - for Pro4 SoC
    "link"        - for others
- resets: A list of phandles to the reset control for the glue layer.
	According to the reset-names, appropriate resets are required.
- reset-names: Should contain
    "gio", "link" - for Pro4 SoC
    "link"        - for others

Example:

	usb-glue@65b00000 {
		compatible = "socionext,uniphier-ld20-dwc3-glue",
			     "simple-mfd";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 0x65b00000 0x400>;

		usb_rst: reset@0 {
			compatible = "socionext,uniphier-ld20-usb3-reset";
			reg = <0x0 0x4>;
			#reset-cells = <1>;
			clock-names = "link";
			clocks = <&sys_clk 14>;
			reset-names = "link";
			resets = <&sys_rst 14>;
		};

		regulator {
			...
		};

		phy {
			...
		};
		...
	};
