← Documents 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 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

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. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 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>;
        };