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等等信息。

相关推荐
李修缘99915 分钟前
chown和chmod的区别
linux
白嫖一茶32 分钟前
shell语言替换脚本、填补整个命令行
linux·shell
zyx没烦恼1 小时前
Linux 进程信号
linux·运维·服务器·开发语言·c++
网络安全指导员1 小时前
如何在JMeter中配置断言,将非200状态码视为测试成功
网络·学习·jmeter·安全·web安全·架构
Arbori_262151 小时前
linux paste 命令
linux·运维·服务器
~樱小路~1 小时前
网络:华为数通HCIA学习:IP路由基础
网络·学习·华为
GalaxyPokemon1 小时前
Muduo网络库实现 [十三] - HttpRequest模块
linux·服务器·网络·c++
逆鱼_042 小时前
ARM-外部中断,ADC模数转换器
arm开发·单片机·嵌入式硬件
h^hh2 小时前
实操(进程状态,R/S/D/T/t/X/Z)Linux
linux
liruiqiang052 小时前
循环神经网络 - 机器学习任务之同步的序列到序列模式
网络·人工智能·rnn·深度学习·神经网络·机器学习