요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
TI Keystone DSP devices
=======================
The TI Keystone 2 family of SoCs usually have one or more (upto 8) TI DSP Core
sub-systems that are used to offload some of the processor-intensive tasks or
algorithms, for achieving various system level goals.
These processor sub-systems usually contain additional sub-modules like L1
and/or L2 caches/SRAMs, an Interrupt Controller, an external memory controller,
a dedicated local power/sleep controller etc. The DSP processor core in
Keystone 2 SoCs is usually a TMS320C66x CorePac processor.
DSP Device Node:
================
Each DSP Core sub-system is represented as a single DT node, and should also
have an alias with the stem 'rproc' defined. Each node has a number of required
or optional properties that enable the OS running on the host processor (ARM
CorePac) to perform the device management of the remote processor and to
communicate with the remote processor.
Required properties:
--------------------
The following are the mandatory properties:
- compatible: Should be one of the following,
"ti,k2hk-dsp" for DSPs on Keystone 2 66AK2H/K SoCs
"ti,k2l-dsp" for DSPs on Keystone 2 66AK2L SoCs
"ti,k2e-dsp" for DSPs on Keystone 2 66AK2E SoCs
"ti,k2g-dsp" for DSPs on Keystone 2 66AK2G SoCs
- reg: Should contain an entry for each value in 'reg-names'.
Each entry should have the memory region's start address
and the size of the region, the representation matching
the parent node's '#address-cells' and '#size-cells' values.
- reg-names: Should contain strings with the following names, each
representing a specific internal memory region, and
should be defined in this order,
"l2sram", "l1pram", "l1dram"
- ti,syscon-dev: Should be a pair of the phandle to the Keystone Device
State Control node, and the register offset of the DSP
boot address register within that node's address space.
- resets: Should contain the phandle to the reset controller node
managing the resets for this device, and a reset
specifier. Please refer to either of the following reset
bindings for the reset argument specifier as per SoC,
Documentation/devicetree/bindings/reset/ti-syscon-reset.txt
for 66AK2HK/66AK2L/66AK2E SoCs or,
Documentation/devicetree/bindings/reset/ti,sci-reset.yaml
for 66AK2G SoCs
- interrupts: Should contain an entry for each value in 'interrupt-names'.
Each entry should have the interrupt source number used by
the remote processor to the host processor. The values should
follow the interrupt-specifier format as dictated by the
'interrupt-parent' node. The purpose of each is as per the
description in the 'interrupt-names' property.
- interrupt-names: Should contain strings with the following names, each
representing a specific interrupt,
"vring" - interrupt for virtio based IPC
"exception" - interrupt for exception notification
- kick-gpios: Should specify the gpio device needed for the virtio IPC
stack. This will be used to interrupt the remote processor.
The gpio device to be used is as per the bindings in,
Documentation/devicetree/bindings/gpio/gpio-dsp-keystone.txt
SoC-specific Required properties:
---------------------------------
The following are mandatory properties for Keystone 2 66AK2HK, 66AK2L and 66AK2E
SoCs only:
- clocks: Should contain the device's input clock, and should be
defined as per the bindings in,
Documentation/devicetree/bindings/clock/keystone-gate.txt
The following are mandatory properties for Keystone 2 66AK2G SoCs only:
- power-domains: Should contain a phandle to a PM domain provider node
and an args specifier containing the DSP device id
value. This property is as per the binding,
Documentation/devicetree/bindings/soc/ti/sci-pm-domain.yaml
Optional properties:
--------------------
- memory-region: phandle to the reserved memory node to be associated
with the remoteproc device. The reserved memory node
can be a CMA memory node, and should be defined as
per the bindings in
Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt
Examples:
---------
1.
/* 66AK2H/K DSP aliases */
aliases {
rproc0 = &dsp0;
rproc1 = &dsp1;
rproc2 = &dsp2;
rproc3 = &dsp3;
rproc4 = &dsp4;
rproc5 = &dsp5;
rproc6 = &dsp6;
rproc7 = &dsp7;
};
/* 66AK2H/K DSP memory node */
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
dsp_common_memory: dsp-common-memory@81f800000 {
compatible = "shared-dma-pool";
reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
reusable;
};
};
/* 66AK2H/K DSP node */
soc {
dsp0: dsp@10800000 {
compatible = "ti,k2hk-dsp";
reg = <0x10800000 0x00100000>,
<0x10e00000 0x00008000>,
<0x10f00000 0x00008000>;
reg-names = "l2sram", "l1pram", "l1dram";
clocks = <&clkgem0>;
ti,syscon-dev = <&devctrl 0x40>;
resets = <&pscrst 0>;
interrupt-parent = <&kirq0>;
interrupts = <0 8>;
interrupt-names = "vring", "exception";
kick-gpios = <&dspgpio0 27 0>;
memory-region = <&dsp_common_memory>;
};
};
2.
/* 66AK2G DSP alias */
aliases {
rproc0 = &dsp0;
};
/* 66AK2G DSP memory node */
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
dsp_common_memory: dsp-common-memory@81f800000 {
compatible = "shared-dma-pool";
reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
reusable;
};
};
/* 66AK2G DSP node */
soc {
dsp0: dsp@10800000 {
compatible = "ti,k2g-dsp";
reg = <0x10800000 0x00100000>,
<0x10e00000 0x00008000>,
<0x10f00000 0x00008000>;
reg-names = "l2sram", "l1pram", "l1dram";
power-domains = <&k2g_pds 0x0046>;
ti,syscon-dev = <&devctrl 0x40>;
resets = <&k2g_reset 0x0046 0x1>;
interrupt-parent = <&kirq0>;
interrupts = <0 8>;
interrupt-names = "vring", "exception";
kick-gpios = <&dspgpio0 27 0>;
memory-region = <&dsp_common_memory>;
};
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Keystone 2 DSP subsystem
1-12TI Keystone 2 SoC 계열에는 보통 최대 8개의 TI DSP Core subsystem이 있으며 processor 집약적인 task나 algorithm을 offload합니다.
Subsystem에는 L1/L2 cache 또는 SRAM, interrupt controller, external memory controller, 전용 local power/sleep controller 등이 포함됩니다. Keystone 2 SoC의 DSP processor core는 보통 TMS320C66x CorePac processor입니다.
DSP node와 rproc alias
13-20각 DSP Core subsystem은 하나의 DT node로 표현하고 stem이 `rproc`인 alias도 정의해야 합니다. Required·optional property를 통해 ARM CorePac에서 실행하는 host OS가 remote processor를 관리하고 통신할 수 있습니다.
공통 필수 property
21-70`compatible`은 66AK2H/K에서 `ti,k2hk-dsp`, 66AK2L에서 `ti,k2l-dsp`, 66AK2E에서 `ti,k2e-dsp`, 66AK2G에서 `ti,k2g-dsp`를 사용합니다.
`reg`에는 `reg-names`마다 start address와 size를 parent의 address·size cell 형식으로 넣습니다. `reg-names`는 `l2sram`, `l1pram`, `l1dram`을 이 순서로 포함해야 합니다.
`ti,syscon-dev`는 Keystone Device State Control node phandle과 그 address space 안의 DSP boot address register offset 쌍입니다.
`resets`는 device reset을 관리하는 controller phandle과 reset specifier를 담습니다. 66AK2HK·66AK2L·66AK2E는 `Documentation/devicetree/bindings/reset/ti-syscon-reset.txt`, 66AK2G는 `Documentation/devicetree/bindings/reset/ti,sci-reset.yaml`을 따릅니다.
`interrupts`에는 `interrupt-names`마다 remote processor가 host processor에 보내는 interrupt source 번호를 넣고 `interrupt-parent` 형식을 따릅니다. `interrupt-names`는 virtio IPC의 `vring`과 exception notification의 `exception`입니다.
`kick-gpios`는 virtio IPC stack이 remote processor에 interrupt를 보내는 GPIO device를 지정하며 `Documentation/devicetree/bindings/gpio/gpio-dsp-keystone.txt` binding을 따릅니다.
SoC별 필수 clock 또는 power domain
71-8666AK2HK·66AK2L·66AK2E에서는 `clocks`에 device input clock을 넣고 `Documentation/devicetree/bindings/clock/keystone-gate.txt`를 따릅니다.
66AK2G에서는 `power-domains`에 PM domain provider phandle과 DSP device ID를 담은 args specifier를 넣고 `Documentation/devicetree/bindings/soc/ti/sci-pm-domain.yaml`을 따릅니다.
선택 reserved memory
87-96선택 `memory-region`은 remoteproc device와 연결할 reserved memory node phandle입니다. CMA memory node일 수 있으며 `Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt` binding에 따라 정의합니다.
예제 1: 66AK2H/K DSP
97-145첫 예제는 `rproc0`부터 `rproc7`까지 8개 DSP alias를 만들고 공용 8MiB reusable DMA pool을 정의합니다. `dsp0`은 `ti,k2hk-dsp`, `clkgem0`, `devctrl`, `pscrst`, `vring`·`exception` interrupt, kick GPIO와 공용 memory를 사용합니다.
1.
/* 66AK2H/K DSP aliases */
aliases {
rproc0 = &dsp0;
rproc1 = &dsp1;
rproc2 = &dsp2;
rproc3 = &dsp3;
rproc4 = &dsp4;
rproc5 = &dsp5;
rproc6 = &dsp6;
rproc7 = &dsp7;
};
/* 66AK2H/K DSP memory node */
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
dsp_common_memory: dsp-common-memory@81f800000 {
compatible = "shared-dma-pool";
reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
reusable;
};
};
/* 66AK2H/K DSP node */
soc {
dsp0: dsp@10800000 {
compatible = "ti,k2hk-dsp";
reg = <0x10800000 0x00100000>,
<0x10e00000 0x00008000>,
<0x10f00000 0x00008000>;
reg-names = "l2sram", "l1pram", "l1dram";
clocks = <&clkgem0>;
ti,syscon-dev = <&devctrl 0x40>;
resets = <&pscrst 0>;
interrupt-parent = <&kirq0>;
interrupts = <0 8>;
interrupt-names = "vring", "exception";
kick-gpios = <&dspgpio0 27 0>;
memory-region = <&dsp_common_memory>;
};
};
예제 2: 66AK2G DSP
146-182두 번째 예제는 `rproc0` 하나와 같은 크기의 공용 memory를 정의합니다. `dsp0`은 `ti,k2g-dsp`, `k2g_pds` power domain과 `k2g_reset`을 사용하며 나머지 interrupt·kick GPIO·memory 연결은 첫 예제와 같은 구조입니다.
2.
/* 66AK2G DSP alias */
aliases {
rproc0 = &dsp0;
};
/* 66AK2G DSP memory node */
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
dsp_common_memory: dsp-common-memory@81f800000 {
compatible = "shared-dma-pool";
reg = <0x00000008 0x1f800000 0x00000000 0x800000>;
reusable;
};
};
/* 66AK2G DSP node */
soc {
dsp0: dsp@10800000 {
compatible = "ti,k2g-dsp";
reg = <0x10800000 0x00100000>,
<0x10e00000 0x00008000>,
<0x10f00000 0x00008000>;
reg-names = "l2sram", "l1pram", "l1dram";
power-domains = <&k2g_pds 0x0046>;
ti,syscon-dev = <&devctrl 0x40>;
resets = <&k2g_reset 0x0046 0x1>;
interrupt-parent = <&kirq0>;
interrupts = <0 8>;
interrupt-names = "vring", "exception";
kick-gpios = <&dspgpio0 27 0>;
memory-region = <&dsp_common_memory>;
};
};
요약과 해설
ti,keystone-rproc.txt:1-182Remote processor의 memory, reset, interrupt와 IPC 요구사항을 요약하고 영어 원문 전체 및 줄 좌표별 한국어 전문을 제공합니다.