Texas Instruments sysc interconnect target module wrapper binding

Texas Instruments SoCs can have a generic interconnect target module
hardware for devices connected to various interconnects such as L3
interconnect (Arteris NoC) and L4 interconnect (Sonics s3220). The sysc
is mostly used for interaction between module and PRCM. It participates
in the OCP Disconnect Protocol but other than that is mostly independent
of the interconnect.

Each interconnect target module can have one or more devices connected to
it. There is a set of control registers for managing interconnect target
module clocks, idle modes and interconnect level resets for the module.

These control registers are sprinkled into the unused register address
space of the first child device IP block managed by the interconnect
target module and typically are named REVISION, SYSCONFIG and SYSSTATUS.

Required standard properties:

- compatible	shall be one of the following generic types:

		"ti,sysc-omap2"
		"ti,sysc-omap4"
		"ti,sysc-omap4-simple"

		or one of the following derivative types for hardware
		needing special workarounds:

		"ti,sysc-omap3430-sr"
		"ti,sysc-omap3630-sr"
		"ti,sysc-omap4-sr"
		"ti,sysc-omap3-sham"
		"ti,sysc-omap-aes"
		"ti,sysc-mcasp"
		"ti,sysc-usb-host-fs"

- reg		shall have register areas implemented for the interconnect
		target module in question such as revision, sysc and syss

- reg-names	shall contain the register names implemented for the
		interconnect target module in question such as
		"rev, "sysc", and "syss"

- ranges	shall contain the interconnect target module IO range
		available for one or more child device IP blocks managed
		by the interconnect target module, the ranges may include
		multiple ranges such as device L4 range for control and
		parent L3 range for DMA access

Optional properties:

- clocks	clock specifier for each name in the clock-names as
		specified in the binding documentation for ti-clkctrl,
		typically available for all interconnect targets on TI SoCs
		based on omap4 except if it's read-only register in hwauto
		mode as for example omap4 L4_CFG_CLKCTRL

- clock-names	should contain at least "fck", and optionally also "ick"
		depending on the SoC and the interconnect target module

- ti,hwmods	optional TI interconnect module name to use legacy
		hwmod platform data


Example: Single instance of MUSB controller on omap4 using interconnect ranges
using offsets from l4_cfg second segment (0x4a000000 + 0x80000 = 0x4a0ab000):

	target-module@2b000 {		/* 0x4a0ab000, ap 84 12.0 */
		compatible = "ti,sysc-omap2";
		ti,hwmods = "usb_otg_hs";
		reg = <0x2b400 0x4>,
		      <0x2b404 0x4>,
		      <0x2b408 0x4>;
		reg-names = "rev", "sysc", "syss";
		clocks = <&l3_init_clkctrl OMAP4_USB_OTG_HS_CLKCTRL 0>;
		clock-names = "fck";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0 0x2b000 0x1000>;

		usb_otg_hs: otg@0 {
			compatible = "ti,omap4-musb";
			reg = <0x0 0x7ff>;
			interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>;
			usb-phy = <&usb2_phy>;
			...
		};
	};

Note that other SoCs, such as am335x can have multipe child devices. On am335x
there are two MUSB instances, two USB PHY instances, and a single CPPI41 DMA
instance as children of a single interconnet target module.
