| MHI Host Interface |
| |
| MHI used by the host to control and communicate with modem over |
| high speed peripheral bus. |
| |
| ============== |
| Node Structure |
| ============== |
| |
| Main node properties: |
| |
| - mhi,max-channels |
| Usage: required |
| Value type: <u32> |
| Definition: Maximum number of channels supported by this controller |
| |
| - mhi,timeout |
| Usage: optional |
| Value type: <u32> |
| Definition: Maximum timeout in ms wait for state and cmd completion |
| |
| - mhi,use-bb |
| Usage: optional |
| Value type: <bool> |
| Definition: Set true, if PCIe controller does not have full access to host |
| DDR, and we're using a dedicated memory pool like cma, or |
| carveout pool. Pool must support atomic allocation. |
| |
| - mhi,buffer-len |
| Usage: optional |
| Value type: <bool> |
| Definition: MHI automatically pre-allocate buffers for some channel. |
| Set the length of buffer size to allocate. If not default |
| size MHI_MAX_MTU will be used. |
| |
| ============================ |
| mhi channel node properties: |
| ============================ |
| |
| - reg |
| Usage: required |
| Value type: <u32> |
| Definition: physical channel number |
| |
| - label |
| Usage: required |
| Value type: <string> |
| Definition: given name for the channel |
| |
| - mhi,num-elements |
| Usage: optional |
| Value type: <u32> |
| Definition: Number of elements transfer ring support |
| |
| - mhi,event-ring |
| Usage: required |
| Value type: <u32> |
| Definition: Event ring index associated with this channel |
| |
| - mhi,chan-dir |
| Usage: required |
| Value type: <u32> |
| Definition: Channel direction as defined by enum dma_data_direction |
| 0 = Bidirectional data transfer |
| 1 = UL data transfer |
| 2 = DL data transfer |
| 3 = No direction, not a regular data transfer channel |
| |
| - mhi,ee |
| Usage: required |
| Value type: <u32> |
| Definition: Channel execution enviornment (EE) mask as defined by enum |
| mhi_ch_ee_mask |
| BIT(0) = Channel supported in PBL EE |
| BIT(1) = Channel supported in SBL EE |
| BIT(2) = Channel supported in AMSS EE |
| BIT(3) = Channel supported in RDDM EE |
| BIT(4) = Channel supported in WFW EE |
| BIT(5) = Channel supported in PTHRU EE |
| BIT(6) = Channel supported in EDL EE |
| |
| - mhi,pollcfg |
| Usage: optional |
| Value type: <u32> |
| Definition: MHI poll configuration, valid only when burst mode is enabled |
| 0 = Use default (device specific) polling configuration |
| For UL channels, value specifies the timer to poll MHI context in |
| milliseconds. |
| For DL channels, the threshold to poll the MHI context in multiple of |
| eight ring element. |
| |
| - mhi,data-type |
| Usage: required |
| Value type: <u32> |
| Definition: Data transfer type accepted as defined by enum MHI_XFER_TYPE |
| 0 = accept cpu address for buffer |
| 1 = accept skb |
| 2 = accept scatterlist |
| 3 = offload channel, does not accept any transfer type |
| 4 = accept pre-mapped buffers |
| 5 = rsc channel type, accept pre-mapped buffers |
| |
| - mhi,doorbell-mode |
| Usage: required |
| Value type: <u32> |
| Definition: Channel doorbell mode configuration as defined by enum |
| MHI_BRSTMODE |
| 2 = burst mode disabled |
| 3 = burst mode enabled |
| |
| - mhi,lpm-notify |
| Usage: optional |
| Value type: <bool> |
| Definition: This channel master require low power mode enter and exit |
| notifications from mhi bus master. |
| |
| - mhi,offload-chan |
| Usage: optional |
| Value type: <bool> |
| Definition: Client managed channel, MHI host only involved in setting up |
| the data path, not involved in active data path. |
| |
| - mhi,db-mode-switch |
| Usage: optional |
| Value type: <bool> |
| Definition: Must switch to doorbell mode whenever MHI M0 state transition |
| happens. |
| |
| - mhi,auto-queue |
| Usage: optional |
| Value type: <bool> |
| Definition: MHI bus driver will pre-allocate buffers for this channel and |
| queue to hardware. If set, client not allowed to queue buffers. Valid |
| only for downlink direction. |
| |
| - mhi,auto-start |
| Usage: optional |
| Value type: <bool> |
| Definition: MHI host driver to automatically start channels once mhi device |
| driver probe is complete. This should be only set true if initial |
| handshake iniaitead by external modem. |
| |
| - mhi,wake-capable |
| Usage: optional |
| Value type: <bool> |
| Definition: Time sensitive data channel, host should process all pending data |
| before system suspend. |
| |
| - mhi,chan-type |
| Usage: optional |
| Value type: <u32> |
| Definition: By default, chan-type is same as 'chan,dir' property except |
| in some special channels, chan type supplement chan direction. |
| 3 = default no direction, or inbound coalesced channel |
| |
| ========================== |
| mhi event node properties: |
| ========================== |
| |
| - mhi,num-elements |
| Usage: required |
| Value type: <u32> |
| Definition: Number of elements event ring support |
| |
| - mhi,intmod |
| Usage: required |
| Value type: <u32> |
| Definition: interrupt moderation time in ms |
| |
| - mhi,msi |
| Usage: required |
| Value type: <u32> |
| Definition: MSI associated with this event ring |
| |
| - mhi,chan |
| Usage: optional |
| Value type: <u32> |
| Definition: Dedicated channel number, if it's a dedicated event ring |
| |
| - mhi,priority |
| Usage: required |
| Value type: <u32> |
| Definition: Event ring priority, set to 1 for now |
| |
| - mhi,brstmode |
| Usage: required |
| Value type: <u32> |
| Definition: Event doorbell mode configuration as defined by |
| enum MHI_BRSTMODE |
| 2 = burst mode disabled |
| 3 = burst mode enabled |
| |
| - mhi,data-type |
| Usage: optional |
| Value type: <u32> |
| Definition: Type of data this event ring will process as defined |
| by enum mhi_er_data_type |
| 0 = process data packets (default) |
| 1 = process mhi control packets |
| |
| - mhi,hw-ev |
| Usage: optional |
| Value type: <bool> |
| Definition: Event ring associated with hardware channels |
| |
| - mhi,client-manage |
| Usage: optional |
| Value type: <bool> |
| Definition: Client manages the event ring (use by napi_poll) |
| |
| - mhi,offload |
| Usage: optional |
| Value type: <bool> |
| Definition: Event ring associated with offload channel |
| |
| |
| Children node properties: |
| |
| MHI drivers that require DT can add driver specific information as a child node. |
| |
| - mhi,chan |
| Usage: Required |
| Value type: <string> |
| Definition: Channel name |
| |
| ======== |
| Example: |
| ======== |
| mhi_controller { |
| mhi,max-channels = <105>; |
| |
| mhi_chan@0 { |
| reg = <0>; |
| label = "LOOPBACK"; |
| mhi,num-elements = <64>; |
| mhi,event-ring = <2>; |
| mhi,chan-dir = <1>; |
| mhi,data-type = <0>; |
| mhi,doorbell-mode = <2>; |
| mhi,ee = <0x4>; |
| }; |
| |
| mhi_chan@1 { |
| reg = <1>; |
| label = "LOOPBACK"; |
| mhi,num-elements = <64>; |
| mhi,event-ring = <2>; |
| mhi,chan-dir = <2>; |
| mhi,data-type = <0>; |
| mhi,doorbell-mode = <2>; |
| mhi,ee = <0x4>; |
| }; |
| |
| mhi_event@0 { |
| mhi,num-elements = <32>; |
| mhi,intmod = <1>; |
| mhi,msi = <1>; |
| mhi,chan = <0>; |
| mhi,priority = <1>; |
| mhi,bstmode = <2>; |
| mhi,data-type = <1>; |
| }; |
| |
| mhi_event@1 { |
| mhi,num-elements = <256>; |
| mhi,intmod = <1>; |
| mhi,msi = <2>; |
| mhi,chan = <0>; |
| mhi,priority = <1>; |
| mhi,bstmode = <2>; |
| }; |
| |
| mhi,timeout = <500>; |
| |
| children_node { |
| mhi,chan = "LOOPBACK" |
| <driver specific properties> |
| }; |
| }; |
| |
| ================ |
| Children Devices |
| ================ |
| |
| MHI netdev properties |
| |
| - mhi,chan |
| Usage: required |
| Value type: <string> |
| Definition: Channel name MHI netdev support |
| |
| - mhi,mru |
| Usage: required |
| Value type: <u32> |
| Definition: Largest packet size interface can receive in bytes. |
| |
| - mhi,interface-name |
| Usage: optional |
| Value type: <string> |
| Definition: Interface name to be given so clients can identify it |
| |
| - aliases |
| Usage: required |
| Value type: <string> |
| Definition: mhi net_device should have numbered alias in the alias node, |
| in the form of mhi_netdevN, N = 0, 1..n for each network interface. |
| |
| ======== |
| Example: |
| ======== |
| |
| aliases { |
| mhi_netdev0 = &mhi_netdev_0; |
| }; |
| |
| mhi_netdev_0: mhi_rmnet@0 { |
| mhi,chan = "IP_HW0"; |
| mhi,interface-name = "rmnet_mhi"; |
| mhi,mru = <0x4000>; |
| }; |