MSM MHI

MSM MHI enables communication with a device over a PCIe link using the
Modem Host Interface protocol. The bindings referred to below, enable
the correct configuration of the interface and required sideband
signals.

==============
Node Structure
==============

Main node properties:

- compatible
  Usage: required
  Value type: <string>
  Definition: "qcom,mhi"

- qcom,pci-dev_id
  Usage: optional
  Value type: <u32>
  Definition: Device id reported by modem

- qcom,pci-domain
  Usage: required
  Value type: <u32>
  Definition: PCIE root complex device connected to

- qcom,pci-bus
  Usage: required
  Value type: <u32>
  Definition: PCIE bus device connected to

- qcom,pci-slot
  Usage: required
  Value type: <u32>
  Definition: PCIE slot (dev_id/function) device connected to

- esoc-names
  Usage: optional
  Value type: <string>
  Definition: esoc name for the device

- esoc-0
  Usage: required if "esoc-names" is defined
  Value type: phandle
  Definition: A phandle pointing to the esoc node.

- qcom,msm-bus,name
  Usage: required if MHI is bus master
  Value type: string
  Definition: string representing the client name

- qcom,msm-bus,num-cases
  Usage: required if MHI is bus master
  Value type: <u32>
  Definition: Number of use cases MHI support.  Must be set to 2.

- qcom,msm-bus,num-paths
  Usage: required if MHI is bus master
  Value type: <u32>
  Definition: Total number of master-slave pairs.  Must be set to one.

- qcom,msm-bus,vectors-KBps
  Usage: required if MHI is bus master
  Value type: Array of <u32>
  Definition: Array of tuples which define the bus bandwidth requirements.
	Each tuple is of length 4, values are master-id, slave-id,
	arbitrated bandwidth in KBps, and instantaneous bandwidth in
	KBps.

- mhi-chan-cfg-#
  Usage: required
  Value type: Array of <u32>
  Definition: mhi channel configuration parameters for platform
	defined as below <A B C D>:
		A = chan number
		B = maximum descriptors
		C = event ring associated with channel
		D = flags defined by mhi_macros.h GET_CHAN_PROPS

- mhi-event-rings
  Usage: required
  Value type: <u32>
  Definition: Number of event rings device support

- mhi-event-cfg-#
  Usage: required
  Value type: Array of <u32>
  Definition: mhi event ring configuration parameters for platform
	defined as below <A B C D E F>:
		A = maximum event descriptors
		B = MSI associated with event
		C = interrupt moderation (see MHI specification)
		D = Associated channel
		E = priority of the event ring. 0 being the highest.
		F = flags defined by mhi_macros.h GET_EV_PROPS

- qcom,mhi-address-window
  Usage: required
  Value type: Array of <u64>
  Definition: start DDR address and ending DDR address device can access.

- qcom,mhi-manage-boot
  Usage: optional
  Value type: bool
  Definition: Determine whether MHI host manages firmware download to device.

- qcom,mhi-fw-image
  Usage: required if MHI host managing firmware download process
  Value type: string
  Definition: firmware image name

- qcom,mhi-max-sbl
  Usage: required if MHI host managing firmware download process
  Value type: <u32>
  Definition: Maximum size in bytes SBL image device support.

- qcom,mhi-sg-size
  Usage: required if MHI host managing firmware download process
  Value type: <u32>
  Definition: Segment size in bytes for each segment in bytes.

- qcom,mhi-bb-required
  Usage: optional
  Value type: bool
  Definition: Determine whether MHI device require bounce buffer
	during active transfer.  If true, during channel open host
	will pre-allocate transfer buffers.

========
Example:
========
mhi: qcom,mhi {
	compatible = "qcom,mhi";
	qcom,pci-dev_id = <0x0301>;
	qcom,pci-domain = <2>;
	qcom,pci-bus = <4>;
	qcom,pci-slot = <0>;
	qcom,mhi-address-window = <0x0 0x80000000 0x0 0xbfffffff>;
	esoc-names = "mdm";
	esoc-0 = <&mdm1>;
	qcom,msm-bus,name = "mhi";
	qcom,msm-bus,num-cases = <2>;
	qcom,msm-bus,num-paths = <1>;
	qcom,msm-bus,vectors-KBps =
			<100 512 0 0>,
			<100 512 1200000000 1200000000>;
	mhi-event-rings = <1>;
	mhi-chan-cfg-102 = <0x66 0x80 0x5 0x62>;
	mhi-event-cfg-0 = <0x80 0x0 0x0 0x0 0 1 0x11>;
};
