0001 TI Keystone DSP devices
0002 =======================
0003
0004 The TI Keystone 2 family of SoCs usually have one or more (upto 8) TI DSP Core
0005 sub-systems that are used to offload some of the processor-intensive tasks or
0006 algorithms, for achieving various system level goals.
0007
0008 These processor sub-systems usually contain additional sub-modules like L1
0009 and/or L2 caches/SRAMs, an Interrupt Controller, an external memory controller,
0010 a dedicated local power/sleep controller etc. The DSP processor core in
0011 Keystone 2 SoCs is usually a TMS320C66x CorePac processor.
0012
0013 DSP Device Node:
0014 ================
0015 Each DSP Core sub-system is represented as a single DT node, and should also
0016 have an alias with the stem 'rproc' defined. Each node has a number of required
0017 or optional properties that enable the OS running on the host processor (ARM
0018 CorePac) to perform the device management of the remote processor and to
0019 communicate with the remote processor.
0020
0021 Required properties:
0022 --------------------
0023 The following are the mandatory properties:
0024
0025 - compatible: Should be one of the following,
0026 "ti,k2hk-dsp" for DSPs on Keystone 2 66AK2H/K SoCs
0027 "ti,k2l-dsp" for DSPs on Keystone 2 66AK2L SoCs
0028 "ti,k2e-dsp" for DSPs on Keystone 2 66AK2E SoCs
0029 "ti,k2g-dsp" for DSPs on Keystone 2 66AK2G SoCs
0030
0031 - reg: Should contain an entry for each value in 'reg-names'.
0032 Each entry should have the memory region's start address
0033 and the size of the region, the representation matching
0034 the parent node's '#address-cells' and '#size-cells' values.
0035
0036 - reg-names: Should contain strings with the following names, each
0037 representing a specific internal memory region, and
0038 should be defined in this order,
0039 "l2sram", "l1pram", "l1dram"
0040
0041 - ti,syscon-dev: Should be a pair of the phandle to the Keystone Device
0042 State Control node, and the register offset of the DSP
0043 boot address register within that node's address space.
0044
0045 - resets: Should contain the phandle to the reset controller node
0046 managing the resets for this device, and a reset
0047 specifier. Please refer to either of the following reset
0048 bindings for the reset argument specifier as per SoC,
0049 Documentation/devicetree/bindings/reset/ti-syscon-reset.txt
0050 for 66AK2HK/66AK2L/66AK2E SoCs or,
0051 Documentation/devicetree/bindings/reset/ti,sci-reset.yaml
0052 for 66AK2G SoCs
0053
0054 - interrupts: Should contain an entry for each value in 'interrupt-names'.
0055 Each entry should have the interrupt source number used by
0056 the remote processor to the host processor. The values should
0057 follow the interrupt-specifier format as dictated by the
0058 'interrupt-parent' node. The purpose of each is as per the
0059 description in the 'interrupt-names' property.
0060
0061 - interrupt-names: Should contain strings with the following names, each
0062 representing a specific interrupt,
0063 "vring" - interrupt for virtio based IPC
0064 "exception" - interrupt for exception notification
0065
0066 - kick-gpios: Should specify the gpio device needed for the virtio IPC
0067 stack. This will be used to interrupt the remote processor.
0068 The gpio device to be used is as per the bindings in,
0069 Documentation/devicetree/bindings/gpio/gpio-dsp-keystone.txt
0070
0071 SoC-specific Required properties:
0072 ---------------------------------
0073 The following are mandatory properties for Keystone 2 66AK2HK, 66AK2L and 66AK2E
0074 SoCs only:
0075
0076 - clocks: Should contain the device's input clock, and should be
0077 defined as per the bindings in,
0078 Documentation/devicetree/bindings/clock/keystone-gate.txt
0079
0080 The following are mandatory properties for Keystone 2 66AK2G SoCs only:
0081
0082 - power-domains: Should contain a phandle to a PM domain provider node
0083 and an args specifier containing the DSP device id
0084 value. This property is as per the binding,
0085 Documentation/devicetree/bindings/soc/ti/sci-pm-domain.yaml
0086
0087 Optional properties:
0088 --------------------
0089
0090 - memory-region: phandle to the reserved memory node to be associated
0091 with the remoteproc device. The reserved memory node
0092 can be a CMA memory node, and should be defined as
0093 per the bindings in
0094 Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
0095
0096
0097 Examples:
0098 ---------
0099
0100 1.
0101 /* 66AK2H/K DSP aliases */
0102 aliases {
0103 rproc0 = &dsp0;
0104 rproc1 = &dsp1;
0105 rproc2 = &dsp2;
0106 rproc3 = &dsp3;
0107 rproc4 = &dsp4;
0108 rproc5 = &dsp5;
0109 rproc6 = &dsp6;
0110 rproc7 = &dsp7;
0111 };
0112
0113 /* 66AK2H/K DSP memory node */
0114 reserved-memory {
0115 #address-cells = <2>;
0116 #size-cells = <2>;
0117 ranges;
0118
0119 dsp_common_memory: dsp-common-memory@81f800000 {
0120 compatible = "shared-dma-pool";
0121 reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
0122 reusable;
0123 };
0124 };
0125
0126 /* 66AK2H/K DSP node */
0127 soc {
0128 dsp0: dsp@10800000 {
0129 compatible = "ti,k2hk-dsp";
0130 reg = <0x10800000 0x00100000>,
0131 <0x10e00000 0x00008000>,
0132 <0x10f00000 0x00008000>;
0133 reg-names = "l2sram", "l1pram", "l1dram";
0134 clocks = <&clkgem0>;
0135 ti,syscon-dev = <&devctrl 0x40>;
0136 resets = <&pscrst 0>;
0137 interrupt-parent = <&kirq0>;
0138 interrupts = <0 8>;
0139 interrupt-names = "vring", "exception";
0140 kick-gpios = <&dspgpio0 27 0>;
0141 memory-region = <&dsp_common_memory>;
0142 };
0143
0144 };
0145
0146 2.
0147 /* 66AK2G DSP alias */
0148 aliases {
0149 rproc0 = &dsp0;
0150 };
0151
0152 /* 66AK2G DSP memory node */
0153 reserved-memory {
0154 #address-cells = <2>;
0155 #size-cells = <2>;
0156 ranges;
0157
0158 dsp_common_memory: dsp-common-memory@81f800000 {
0159 compatible = "shared-dma-pool";
0160 reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
0161 reusable;
0162 };
0163 };
0164
0165 /* 66AK2G DSP node */
0166 soc {
0167 dsp0: dsp@10800000 {
0168 compatible = "ti,k2g-dsp";
0169 reg = <0x10800000 0x00100000>,
0170 <0x10e00000 0x00008000>,
0171 <0x10f00000 0x00008000>;
0172 reg-names = "l2sram", "l1pram", "l1dram";
0173 power-domains = <&k2g_pds 0x0046>;
0174 ti,syscon-dev = <&devctrl 0x40>;
0175 resets = <&k2g_reset 0x0046 0x1>;
0176 interrupt-parent = <&kirq0>;
0177 interrupts = <0 8>;
0178 interrupt-names = "vring", "exception";
0179 kick-gpios = <&dspgpio0 27 0>;
0180 memory-region = <&dsp_common_memory>;
0181 };
0182 };