EMAC MII And RMII SOP
1. 概述¶
该SOP适用于SSR631G/ SSR920G/SSC8838G/SSC359G/SSD268G。
本系列IC拥有两个EMAC控制器:
-
EMAC0
support MII(internal phy)、RMII(external phy)
-
EMAC1
support RMII(external phy)
U-Boot: 支持EMAC0和EMAC1的各种模式,但一个config仅能开启一个EMAC。
Kernel: 支持EMAC0和EMAC1的各种模式,且可同时开启EMAC0和EMAC1。
2. EMAC0 MII(INTERNAL PHY)¶
2.1. U-Boot¶
-
Default Config
make mercury6_defconfig -
Menuconfig
make menuconfig参考如下配置(default config无需修改)

2.2. Kernel¶
-
Default Config
以EVB SSC016A Spi Nor为例:
make mercury6_ssc016_s01a_defconfig -
DTS
arch/arm/boot/dts/mercury6.dtsi参考如下配置(default config无需修改)
3. EMAC0 RMII(EXTERNAL PHY)¶
3.1. U-Boot¶
-
Default Config
make mercury6_defconfig -
Menuconfig
make menuconfig参考如下配置

-
Driver
drivers/mstar/emac/mercury6/mhal_emac.c函数(MHal_EMAC_Power_On_Clk)
参考如下修改

3.2. Kernel¶
-
Default Config
以EVB SSC016A Spi Nor为例:
make mercury6_ssc016_s01a_defconfig -
DTS
arch/arm/boot/dts/mercury6.dtsi参考如下配置
-
Driver
drivers/sstar/emac/hal/mercury6/mhal_emac.c函数(MHal_EMAC_Power_On_Clk)
参考如下修改:


4. EMAC1 RMII(EXTERNAL PHY)¶
4.1. U-Boot¶
-
Default Config
make mercury6_defconfig -
Menuconfig
make menuconfig参考如下配置

4.2. Kernel¶
-
Default Config
以EVB SSC016A Spi Nor为例:
make mercury6_ssc016_s01a_defconfig -
DTS
arch/arm/boot/dts/mercury6.dtsi参考如下配置(default config无需修改)
5. EMAC0 adapt MII & RMII¶
EVB只有SSC016A的EMAC0 support该模式,所以以下操作一律以SSC016A为例。
5.1. U-Boot¶
- Default Config make mercury6_defconfig
-
Menuconfig
make menuconfig参考如下配置。
internal phy和RMII配置任选其中一个,支持MII和RMII两种动态选择,代表software driver在未主动做选择时,default为MII还是RMII Mode。

-
MII & RMII动态匹配依据
运行阶段,EMAC的MII Mode可选择MII使用internal phy,也可以选择RMII使用外部phy或外部switch,具体选择由全局变量m_bus_mode决定。

-
可在初始化阶段如MHal_EMAC_Power_On_Clk中,配置m_bus_mode的值为EMAC_MII_MODE或EMAC_RMII_MODE
-
m_bus_mode配置何种值的依据,由用户自行定义,如MII和RMII两种board通过hardware上某根GPIO拉high和拉low进行区别,当该GPIO拉high,则m_bus_mode配置为EMAC_MII_MODE,当该GPIO拉low,则m_bus_mode配置为EMAC_RMII_MODE
-
5.2. Kernel¶
-
Default Config
以EVB SSC016A Spi Nor为例:
make mercury6_ssc016_s01a_defconfig -
DTS
arch/arm/boot/dts/mercury6.dtsi参考如下配置(default config无需修改)bus-mode的值可配置为1或2,支持MII和RMII两种动态选择,代表software driver在未主动做选择时,default为MII还是RMII Mode。

-
MII & RMII动态匹配依据
运行阶段,EMAC的MII Mode可选择MII使用internal phy,也可以选择RMII使用外部phy或外部switch,具体选择由hemac->bus_mode决定。

-
可在dts解析阶段MDev_EMAC_dts中,强行配置hemac->bus_mode的值为1或2,而不从dts中获取value
-
hemac->bus_mode配置何种值的依据,由用户自行定义,如MII和RMII两种board通过hardware上某根GPIO拉high和拉low进行区别,当该GPIO拉high,则hemac->bus_mode配置为1,当该GPIO拉low,则hemac->bus_mode配置为2
-