U-Boot中改用DM8168的网口1

背景

在HXX板中,DM8168使用了和EVM板一样的配置,即两个EMAC模块分别连接到两个PHY上,用同一个MDIO模块管理。这两个PHY配置为不同地址。在TFTP方式烧写内核和文件系统过程中,U-Boot默认使用且只支持EMAC0实现网口通信。
然而在新研FXX板中,DM8168改变了网口连接方式,其EMAC0未引出板外,EMAC1通过PHY引出RJ45接口。因此在烧写内核和文件系统过程中只能使用EMAC1,这就需要修改U-Boot源码使其支持EMAC1。

U-Boot网口驱动分析

U-Boot的启动过程不赘述,其中与EMAC相关的几个函数的调用关系为
start_armboot()–>eth_initialize()–>board_eth_init()–>davinci_emac_initialize()–>davinci_eth_mdio_enable()&davinci_eth_phy_detect()&davinci_eth_phy_read()&davinci_eth_phy_write(),此外还有一些如miiphy_init()eth_register()miiphy_register()等与硬件无关的代码。

初始化过程将网络设备注册到U-Boot系统中,但并不真正使用它。在调用U-Boot网络命令时,才会调用网口的关闭、打开、接收、发送等函数。在DM8168上对应davinci_eth_open()davinci_eth_close()davinci_eth_send_packet()davinci_eth_rcv_packet()函数。

了解了这个脉络,就可以进一步分析代码了。先看第一个真正的硬件操作:

============ drivers/net/davince_emac.c 115 129 ==================
static void davinci_eth_mdio_enable(void)
{
    u_int32_t   clkdiv;

    clkdiv = (EMAC_MDIO_BUS_FREQ / EMAC_MDIO_CLOCK_FREQ) - 1;

    writel((clkdiv & 0xff) |
           MDIO_CONTROL_ENABLE |
           MDIO_CONTROL_FAULT |
           MDIO_CONTROL_FAULT_ENABLE,
           
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值