96 lines
3.5 KiB
Plaintext
96 lines
3.5 KiB
Plaintext
|
Qualcomm Technologies HIDMA Management interface
|
||
|
|
||
|
Qualcomm Technologies HIDMA is a high speed DMA device. It only supports
|
||
|
memcpy and memset capabilities. It has been designed for virtualized
|
||
|
environments.
|
||
|
|
||
|
Each HIDMA HW instance consists of multiple DMA channels. These channels
|
||
|
share the same bandwidth. The bandwidth utilization can be partitioned
|
||
|
among channels based on the priority and weight assignments.
|
||
|
|
||
|
There are only two priority levels and 15 weigh assignments possible.
|
||
|
|
||
|
Other parameters here determine how much of the system bus this HIDMA
|
||
|
instance can use like maximum read/write request and number of bytes to
|
||
|
read/write in a single burst.
|
||
|
|
||
|
Main node required properties:
|
||
|
- compatible: "qcom,hidma-mgmt-1.0";
|
||
|
- reg: Address range for DMA device
|
||
|
- dma-channels: Number of channels supported by this DMA controller.
|
||
|
- max-write-burst-bytes: Maximum write burst in bytes that HIDMA can
|
||
|
occupy the bus for in a single transaction. A memcpy requested is
|
||
|
fragmented to multiples of this amount. This parameter is used while
|
||
|
writing into destination memory. Setting this value incorrectly can
|
||
|
starve other peripherals in the system.
|
||
|
- max-read-burst-bytes: Maximum read burst in bytes that HIDMA can
|
||
|
occupy the bus for in a single transaction. A memcpy request is
|
||
|
fragmented to multiples of this amount. This parameter is used while
|
||
|
reading the source memory. Setting this value incorrectly can starve
|
||
|
other peripherals in the system.
|
||
|
- max-write-transactions: This value is how many times a write burst is
|
||
|
applied back to back while writing to the destination before yielding
|
||
|
the bus.
|
||
|
- max-read-transactions: This value is how many times a read burst is
|
||
|
applied back to back while reading the source before yielding the bus.
|
||
|
- channel-reset-timeout-cycles: Channel reset timeout in cycles for this SOC.
|
||
|
Once a reset is applied to the HW, HW starts a timer for reset operation
|
||
|
to confirm. If reset is not completed within this time, HW reports reset
|
||
|
failure.
|
||
|
|
||
|
Sub-nodes:
|
||
|
|
||
|
HIDMA has one or more DMA channels that are used to move data from one
|
||
|
memory location to another.
|
||
|
|
||
|
When the OS is not in control of the management interface (i.e. it's a guest),
|
||
|
the channel nodes appear on their own, not under a management node.
|
||
|
|
||
|
Required properties:
|
||
|
- compatible: must contain "qcom,hidma-1.0" for initial HW or
|
||
|
"qcom,hidma-1.1"/"qcom,hidma-1.2" for MSI capable HW.
|
||
|
- reg: Addresses for the transfer and event channel
|
||
|
- interrupts: Should contain the event interrupt
|
||
|
- desc-count: Number of asynchronous requests this channel can handle
|
||
|
- iommus: required a iommu node
|
||
|
|
||
|
Optional properties for MSI:
|
||
|
- msi-parent : See the generic MSI binding described in
|
||
|
devicetree/bindings/interrupt-controller/msi.txt for a description of the
|
||
|
msi-parent property.
|
||
|
|
||
|
Example:
|
||
|
|
||
|
Hypervisor OS configuration:
|
||
|
|
||
|
hidma-mgmt@f9984000 = {
|
||
|
compatible = "qcom,hidma-mgmt-1.0";
|
||
|
reg = <0xf9984000 0x15000>;
|
||
|
dma-channels = <6>;
|
||
|
max-write-burst-bytes = <1024>;
|
||
|
max-read-burst-bytes = <1024>;
|
||
|
max-write-transactions = <31>;
|
||
|
max-read-transactions = <31>;
|
||
|
channel-reset-timeout-cycles = <0x500>;
|
||
|
|
||
|
hidma_24: dma-controller@5c050000 {
|
||
|
compatible = "qcom,hidma-1.0";
|
||
|
reg = <0 0x5c050000 0x0 0x1000>,
|
||
|
<0 0x5c0b0000 0x0 0x1000>;
|
||
|
interrupts = <0 389 0>;
|
||
|
desc-count = <10>;
|
||
|
iommus = <&system_mmu>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
Guest OS configuration:
|
||
|
|
||
|
hidma_24: dma-controller@5c050000 {
|
||
|
compatible = "qcom,hidma-1.0";
|
||
|
reg = <0 0x5c050000 0x0 0x1000>,
|
||
|
<0 0x5c0b0000 0x0 0x1000>;
|
||
|
interrupts = <0 389 0>;
|
||
|
desc-count = <10>;
|
||
|
iommus = <&system_mmu>;
|
||
|
};
|