I.MX6ULL的MAC网络外设设备树实现说明一

一. 简介

IMX6ULL芯片内部集成了两个 10/100M 的网络 MAC 外设,所以,ALPHA开发板上的有线网络的硬件方案是:

SOC内部集成网络MAC外设+ PHY网络芯片方案。

本文来说明一下MAC网络外设的设备节点信息的实现。
因此, I.MX6ULL 网络驱动主要就是这两个网络 MAC 外设的驱动。这两个外设的驱动都是一样的,我们分析其 中 一 个 就 行 了 。

二. I.MX6ULL的MAC网络外设设备树实现说明

NXP 的 I.MX 系 列 SOC 网 络 绑 定 文 档 为
Documentation/devicetree/bindings/net/fsl-fec.txt ,此绑定文档描述了 I.MX 系列 SOC 网络设备树
节点的要求。

1. 必要属性

compatible : 这个肯定是必须的,一般是" fsl,<soc>-fec ",比如 I.MX6ULL 的 compatible 属 性就是 "fsl,imx6ul-fec", 和 "fsl,imx6q-fec" 。
reg : SOC 网络外设寄存器地址范围。
interrupts :网络中断。
phy-mode : 网络所使用的 PHY 接口模式,是 MII 还是 RMII 。

2. 可选属性

phy-reset-gpios : PHY 芯片的复位引脚。
phy-reset-duration : PHY 复位引脚复位持续时间,单位为毫秒。只有当设置了 phy-reset-gpios 属性此属性才会有效,如果不设置此属性的话 PHY 芯片复位引脚的复位持续时间默认为 1 毫秒,数值不能大于 1000 毫秒,大于 1000 毫秒的话就会强制设置为 1 毫秒。
phy-supply : PHY 芯片的电源调节。
phy-handle :连接到此网络设备的 PHY 芯片句柄。
fsl,num-tx-queues : 此属性指定发送队列的数量,如果不指定的话默认为 1 。
fsl,num-rx-queues : 此属性指定接收队列的数量,如果不指定的话默认为 2 。
fsl,magic-packet : 此属性不用设置具体的值,直接将此属性名字写到设备树里面即可,表示支持硬件魔术帧唤醒。
fsl,wakeup_irq : 此属性设置唤醒中断索引。
stop-mode : 如果此属性存在的话表明 SOC 需要设置 GPR 位来请求停止模式。

3. 可选子节点

mdio:可以设置名为"mdio"的子节点,此子节点用于指定网络外设所使用的 MDIO 总线,
主要做为 PHY 节点的容器,也就是在 mdio 子节点下指定 PHY **相关的属性信息,**具体信息可 以参考 PHY 的绑定文档 Documentation/devicetree/bindings/net/phy.txt 。
PHY 节点相关属性内容如下:
interrupts :中断属性,可以不需要。
interrupt-parent : 中断控制器句柄,可以不需要。
reg : PHY 芯片地址,必须的!
compatible : 兼容性列表,一般为" ethernet-phy-ieee802.3-c22 "或" ethernet-phy-ieee802.3-c45 ",分别对应 IEEE802.3 的 22 簇和 45 簇,默认是 22 簇。也可以设置为其他值,如果 PHY 的 ID 不知道的话,可以 compatible 属性可以设置为" ethernet-phy-idAAAA.BBBB ", AAAA 和 BBBB 的含义如下:
AAAA : PHY 的 16 位 ID 寄存器 1 值,也就是 OUI 的 bit3~18 , 16 进制格式。
BBBB : PHY 的 16 位 ID 寄存器 2 值,也就是 OUI 的 bit19~24 , 16 进制格式。
max-speed : PHY 支持的最高速度,比如 10 、 100 或 1000 。

三. IMX6ULL的MAC网络外设的设备节点(MAC网络外设的根设备节点)

打开 imx6ull.dtsi ,找到如下 I.MX6ULL 的两个网络外设节点,如下所示:

复制代码
			fec1: ethernet@02188000 {
				compatible = "fsl,imx6ul-fec", "fsl,imx6q-fec";
				reg = <0x02188000 0x4000>;
				interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
					     <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
				clocks = <&clks IMX6UL_CLK_ENET>,
					 <&clks IMX6UL_CLK_ENET_AHB>,
					 <&clks IMX6UL_CLK_ENET_PTP>,
					 <&clks IMX6UL_CLK_ENET_REF>,
					 <&clks IMX6UL_CLK_ENET_REF>;
				clock-names = "ipg", "ahb", "ptp",
					      "enet_clk_ref", "enet_out";
				stop-mode = <&gpr 0x10 3>;
				fsl,num-tx-queues=<1>;
				fsl,num-rx-queues=<1>;
				fsl,magic-packet;
				fsl,wakeup_irq = <0>;
				status = "disabled";
                        };

			fec2: ethernet@020b4000 {
				compatible = "fsl,imx6ul-fec", "fsl,imx6q-fec";
				reg = <0x020b4000 0x4000>;
				interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
					     <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
				clocks = <&clks IMX6UL_CLK_ENET>,
					 <&clks IMX6UL_CLK_ENET_AHB>,
					 <&clks IMX6UL_CLK_ENET_PTP>,
					 <&clks IMX6UL_CLK_ENET2_REF_125M>,
					 <&clks IMX6UL_CLK_ENET2_REF_125M>;
				clock-names = "ipg", "ahb", "ptp",
					      "enet_clk_ref", "enet_out";
				stop-mode = <&gpr 0x10 4>;
				fsl,num-tx-queues=<1>;
				fsl,num-rx-queues=<1>;
				fsl,magic-packet;
				fsl,wakeup_irq = <0>;
				status = "disabled";
			};

fec1 和 fec2 分别对应 I.MX6ULL 的 ENET1 和 ENET2 ,至于节点的具体属性就不分析了,上面在讲解绑定文档的时候就已经详细的讲过了。上面的IMX6ULL的MAC网络外设的设备节点 是 NXP 官方编写的,我们 不需要去修改。

接下来需要在上面 IMX6ULL的MAC网络外设的设备节点的基础上,进行添加。添加针对 APLHA开发板的设备节点信息。例如,网络 所使用的引脚 pinctrl 节点信 息, 设置网络对应的 PHY 芯片接口为 MII还是RMII,复位IO等等信息。

相关推荐
律宏阔41 分钟前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔42 分钟前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴42 分钟前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千1 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei371 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei371 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei371 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW1 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW1 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
yunwei371 小时前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化