Tom Rini | 53633a8 | 2024-02-29 12:33:36 -0500 | [diff] [blame] | 1 | Keystone Navigator DMA Controller |
| 2 | |
| 3 | This document explains the device tree bindings for the packet dma |
| 4 | on keystone devices. The Keystone Navigator DMA driver sets up the dma |
| 5 | channels and flows for the QMSS(Queue Manager SubSystem) who triggers |
| 6 | the actual data movements across clients using destination queues. Every |
| 7 | client modules like NETCP(Network Coprocessor), SRIO(Serial Rapid IO), |
| 8 | CRYPTO Engines etc has its own instance of dma hardware. QMSS has also |
| 9 | an internal packet DMA module which is used as an infrastructure DMA |
| 10 | with zero copy. |
| 11 | |
| 12 | Navigator DMA cloud layout: |
| 13 | ------------------ |
| 14 | | Navigator DMAs | |
| 15 | ------------------ |
| 16 | | |
| 17 | |-> DMA instance #0 |
| 18 | | |
| 19 | |-> DMA instance #1 |
| 20 | . |
| 21 | . |
| 22 | | |
| 23 | |-> DMA instance #n |
| 24 | |
| 25 | Navigator DMA properties: |
| 26 | Required properties: |
| 27 | - compatible: Should be "ti,keystone-navigator-dma" |
| 28 | - clocks: phandle to dma instances clocks. The clock handles can be as |
| 29 | many as the dma instances. The order should be maintained as per |
| 30 | the dma instances. |
| 31 | - ti,navigator-cloud-address: Should contain base address for the multi-core |
| 32 | navigator cloud and number of addresses depends on SOC integration |
| 33 | configuration.. Navigator cloud global address needs to be programmed |
| 34 | into DMA and the DMA uses it as the physical addresses to reach queue |
| 35 | managers. Note that these addresses though points to queue managers, |
| 36 | they are relevant only from DMA perspective. The QMSS may not choose to |
| 37 | use them since it has a different address space view to reach all |
| 38 | its components. |
| 39 | |
| 40 | DMA instance properties: |
| 41 | Required properties: |
| 42 | - reg: Should contain register location and length of the following dma |
| 43 | register regions. Register regions should be specified in the following |
| 44 | order. |
| 45 | - Global control register region (global). |
| 46 | - Tx DMA channel configuration register region (txchan). |
| 47 | - Rx DMA channel configuration register region (rxchan). |
| 48 | - Tx DMA channel Scheduler configuration register region (txsched). |
| 49 | - Rx DMA flow configuration register region (rxflow). |
| 50 | |
| 51 | Optional properties: |
| 52 | - reg-names: Names for the register regions. |
| 53 | - ti,enable-all: Enable all DMA channels vs clients opening specific channels |
| 54 | what they need. This property is useful for the userspace fast path |
| 55 | case where the linux drivers enables the channels used by userland |
| 56 | stack. |
| 57 | - ti,loop-back: To loopback Tx streaming I/F to Rx streaming I/F. Used for |
| 58 | infrastructure transfers. |
| 59 | - ti,rx-retry-timeout: Number of dma cycles to wait before retry on buffer |
| 60 | starvation. |
| 61 | |
| 62 | Example: |
| 63 | |
| 64 | knav_dmas: knav_dmas@0 { |
| 65 | compatible = "ti,keystone-navigator-dma"; |
| 66 | clocks = <&papllclk>, <&clkxge>; |
| 67 | #address-cells = <1>; |
| 68 | #size-cells = <1>; |
| 69 | ranges; |
| 70 | ti,navigator-cloud-address = <0x23a80000 0x23a90000 |
| 71 | 0x23aa0000 0x23ab0000>; |
| 72 | |
| 73 | dma_gbe: dma_gbe@0 { |
| 74 | reg = <0x2004000 0x100>, |
| 75 | <0x2004400 0x120>, |
| 76 | <0x2004800 0x300>, |
| 77 | <0x2004c00 0x120>, |
| 78 | <0x2005000 0x400>; |
| 79 | reg-names = "global", "txchan", "rxchan", |
| 80 | "txsched", "rxflow"; |
| 81 | }; |
| 82 | |
| 83 | dma_xgbe: dma_xgbe@0 { |
| 84 | reg = <0x2fa1000 0x100>, |
| 85 | <0x2fa1400 0x200>, |
| 86 | <0x2fa1800 0x200>, |
| 87 | <0x2fa1c00 0x200>, |
| 88 | <0x2fa2000 0x400>; |
| 89 | reg-names = "global", "txchan", "rxchan", |
| 90 | "txsched", "rxflow"; |
| 91 | }; |
| 92 | }; |
| 93 | |
| 94 | Navigator DMA client: |
| 95 | Required properties: |
| 96 | - ti,navigator-dmas: List of one or more DMA specifiers, each consisting of |
| 97 | - A phandle pointing to DMA instance node |
| 98 | - A DMA channel number as a phandle arg. |
| 99 | - ti,navigator-dma-names: Contains dma channel name for each DMA specifier in |
| 100 | the 'ti,navigator-dmas' property. |
| 101 | |
| 102 | Example: |
| 103 | |
| 104 | netcp: netcp@2090000 { |
| 105 | .. |
| 106 | ti,navigator-dmas = <&dma_gbe 22>, |
| 107 | <&dma_gbe 23>, |
| 108 | <&dma_gbe 8>; |
| 109 | ti,navigator-dma-names = "netrx0", "netrx1", "nettx"; |
| 110 | .. |
| 111 | }; |