一. 简介
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.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等等信息。