Documentation/devicetree/bindings/net/qcom-emac.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

Qualcomm EMAC

Qualcomm EMAC MAC, internal SGMII와 external PHY binding입니다.

Source pathDocumentation/devicetree/bindings/net/qcom-emac.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설, 영어 원문, 전체 번역을 구분해 실었습니다. API 이름, 코드 심벌, 소스 경로는 원문 표기를 유지합니다.

1. 요약·해설

원문의 핵심 내용을 정리하고 커널 프로그래밍에 필요한 설명을 덧붙였습니다. 아래의 전체 번역과는 별도로 작성한 해설입니다.

요약과 해설

qcom-emac.txt:1-111

FSM9900과 QDF2432의 address, clock와 PHY 연결 차이를 설명합니다.

2. 영어 원문 전체

번역에 사용한 Linux v6.18.37 원문입니다. 줄 번호는 해당 버전의 소스 파일을 기준으로 합니다.

원문 전체 펼치기
1 Qualcomm Technologies EMAC Gigabit Ethernet Controller
2
3 This network controller consists of two devices: a MAC and an SGMII
4 internal PHY. Each device is represented by a device tree node. A phandle
5 connects the MAC node to its corresponding internal phy node. Another
6 phandle points to the external PHY node.
7
8 Required properties:
9
10 MAC node:
11 - compatible : Should be "qcom,fsm9900-emac".
12 - reg : Offset and length of the register regions for the device
13 - interrupts : Interrupt number used by this controller
14 - mac-address : The 6-byte MAC address. If present, it is the default
15 MAC address.
16 - internal-phy : phandle to the internal PHY node
17 - phy-handle : phandle to the external PHY node
18
19 Internal PHY node:
20 - compatible : Should be "qcom,fsm9900-emac-sgmii" or "qcom,qdf2432-emac-sgmii".
21 - reg : Offset and length of the register region(s) for the device
22 - interrupts : Interrupt number used by this controller
23
24 The external phy child node:
25 - reg : The phy address
26
27 Example:
28
29 FSM9900:
30
31 soc {
32 #address-cells = <1>;
33 #size-cells = <1>;
34
35 emac0: ethernet@feb20000 {
36 compatible = "qcom,fsm9900-emac";
37 reg = <0xfeb20000 0x10000>,
38 <0xfeb36000 0x1000>;
39 interrupts = <76>;
40
41 clocks = <&gcc 0>, <&gcc 1>, <&gcc 3>, <&gcc 4>, <&gcc 5>,
42 <&gcc 6>, <&gcc 7>;
43 clock-names = "axi_clk", "cfg_ahb_clk", "high_speed_clk",
44 "mdio_clk", "tx_clk", "rx_clk", "sys_clk";
45
46 internal-phy = <&emac_sgmii>;
47
48 phy-handle = <&phy0>;
49
50 #address-cells = <1>;
51 #size-cells = <0>;
52 phy0: ethernet-phy@0 {
53 reg = <0>;
54 };
55
56 pinctrl-names = "default";
57 pinctrl-0 = <&mdio_pins_a>;
58 };
59
60 emac_sgmii: ethernet@feb38000 {
61 compatible = "qcom,fsm9900-emac-sgmii";
62 reg = <0xfeb38000 0x1000>;
63 interrupts = <80>;
64 };
65
66 tlmm: pinctrl@fd510000 {
67 compatible = "qcom,fsm9900-pinctrl";
68
69 mdio_pins_a: mdio {
70 state {
71 pins = "gpio123", "gpio124";
72 function = "mdio";
73 };
74 };
75 };
76
77
78 QDF2432:
79
80 soc {
81 #address-cells = <2>;
82 #size-cells = <2>;
83
84 emac0: ethernet@38800000 {
85 compatible = "qcom,fsm9900-emac";
86 reg = <0x0 0x38800000 0x0 0x10000>,
87 <0x0 0x38816000 0x0 0x1000>;
88 interrupts = <0 256 4>;
89
90 clocks = <&gcc 0>, <&gcc 1>, <&gcc 3>, <&gcc 4>, <&gcc 5>,
91 <&gcc 6>, <&gcc 7>;
92 clock-names = "axi_clk", "cfg_ahb_clk", "high_speed_clk",
93 "mdio_clk", "tx_clk", "rx_clk", "sys_clk";
94
95 internal-phy = <&emac_sgmii>;
96
97 phy-handle = <&phy0>;
98
99 #address-cells = <1>;
100 #size-cells = <0>;
101 phy0: ethernet-phy@4 {
102 reg = <4>;
103 };
104 };
105
106 emac_sgmii: ethernet@410400 {
107 compatible = "qcom,qdf2432-emac-sgmii";
108 reg = <0x0 0x00410400 0x0 0xc00>, /* Base address */
109 <0x0 0x00410000 0x0 0x400>; /* Per-lane digital */
110 interrupts = <0 254 1>;
111 };
112

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미에 맞춰 전체 내용을 번역했습니다. 코드, 함수명, 코드 심벌, URL은 원문 표기를 유지합니다.

Qualcomm EMAC 구성

1-7

Qualcomm Technologies EMAC Gigabit Ethernet controller는 MAC과 SGMII internal PHY 두 장치로 구성되며 각각 Device Tree node로 표현합니다. 한 phandle은 MAC node를 대응 internal PHY에 연결하고 다른 phandle은 external PHY node를 가리킵니다.

MAC, internal PHY와 external PHY 속성

8-26

MAC node의 필수 `compatible`은 `qcom,fsm9900-emac`입니다. `reg`는 register 영역 offset과 길이, `interrupts`는 controller interrupt입니다. 선택적 기본 6-byte MAC address는 `mac-address`에 둡니다.

`internal-phy`는 internal PHY node phandle이고 `phy-handle`은 external PHY node phandle입니다.

Internal PHY node의 `compatible`은 `qcom,fsm9900-emac-sgmii` 또는 `qcom,qdf2432-emac-sgmii`입니다. `reg`는 해당 register 영역, `interrupts`는 controller interrupt입니다. External PHY child node의 `reg`는 PHY address입니다.

FSM9900 예제

27-77

FSM9900 예제는 EMAC register 두 영역과 interrupt 76, `axi_clk`부터 `sys_clk`까지 7개 clock을 구성합니다. MAC은 internal SGMII PHY와 MDIO 주소 0의 external PHY를 참조하고 GPIO123/124를 MDIO pin으로 사용합니다. Internal PHY interrupt는 80입니다.

soc {
        #address-cells = <1>;
        #size-cells = <1>;

        emac0: ethernet@feb20000 {
                compatible = "qcom,fsm9900-emac";
                reg = <0xfeb20000 0x10000>,
                      <0xfeb36000 0x1000>;
                interrupts = <76>;

                clocks = <&gcc 0>, <&gcc 1>, <&gcc 3>, <&gcc 4>, <&gcc 5>,
                        <&gcc 6>, <&gcc 7>;
                clock-names = "axi_clk", "cfg_ahb_clk", "high_speed_clk",
                        "mdio_clk", "tx_clk", "rx_clk", "sys_clk";

                internal-phy = <&emac_sgmii>;

                phy-handle = <&phy0>;

                #address-cells = <1>;
                #size-cells = <0>;
                phy0: ethernet-phy@0 {
                        reg = <0>;
                };

                pinctrl-names = "default";
                pinctrl-0 = <&mdio_pins_a>;
        };

        emac_sgmii: ethernet@feb38000 {
                compatible = "qcom,fsm9900-emac-sgmii";
                reg = <0xfeb38000 0x1000>;
                interrupts = <80>;
        };

        tlmm: pinctrl@fd510000 {
                compatible = "qcom,fsm9900-pinctrl";

                mdio_pins_a: mdio {
                        state {
                                pins = "gpio123", "gpio124";
                                function = "mdio";
                        };
                };
        };

QDF2432 예제

78-111

QDF2432 예제는 64-bit address/size cell, EMAC interrupt 256과 같은 7개 clock을 사용합니다. External PHY는 MDIO 주소 4이고 internal SGMII PHY는 base와 per-lane digital 두 register 영역, interrupt 254를 가집니다.

soc {
        #address-cells = <2>;
        #size-cells = <2>;

        emac0: ethernet@38800000 {
                compatible = "qcom,fsm9900-emac";
                reg = <0x0 0x38800000 0x0 0x10000>,
                      <0x0 0x38816000 0x0 0x1000>;
                interrupts = <0 256 4>;

                clocks = <&gcc 0>, <&gcc 1>, <&gcc 3>, <&gcc 4>, <&gcc 5>,
                         <&gcc 6>, <&gcc 7>;
                clock-names = "axi_clk", "cfg_ahb_clk", "high_speed_clk",
                        "mdio_clk", "tx_clk", "rx_clk", "sys_clk";

                internal-phy = <&emac_sgmii>;

                phy-handle = <&phy0>;

                #address-cells = <1>;
                #size-cells = <0>;
                phy0: ethernet-phy@4 {
                        reg = <4>;
                };
        };

        emac_sgmii: ethernet@410400 {
                compatible = "qcom,qdf2432-emac-sgmii";
                reg = <0x0 0x00410400 0x0 0xc00>, /* Base address */
                      <0x0 0x00410000 0x0 0x400>; /* Per-lane digital */
                interrupts = <0 254 1>;
        };