uboot 下 phy 驱动的注册运行流程

如果要添加自己的phy driver,只需实现下面的三个接口就好,如果只想做一些特殊的配置,有的接口可以直接用 genphy_xxx接口 。

我用了一个国产裕太的 phy yt8521 , 做了一些配置后,发现到 系统后,网口使用有问题,1000M 打流丢包率90% 以上,后来通过读寄存器发现,自动协商没有使能。

环境 :

bootloader : uboot2018

kernel :linux 4.1

cpu : nxp T1042

网口使用dpaa模式,系统内看不到网卡,因为不走内核协议栈,只需要在uboot 下将phy配置好即可。

fm_standard_init	  //drivers/net/fm/init.c
	->fm_eth_initialize 	//drivers/net/fm/eth.c
		->fm_eth_startup
		->init_phy(dev) //drivers/net/fm/eth.c
			->phy_connect 
				->phy_find_by_mask  //drivers/net/phy/phy.c
					->get_phy_device_by_mask->
						->create_phy_by_mask
							->phy_device_create
								->phy_device_create
									-> if ((drv->uid & drv->mask) == (phy_id & drv->mask))
											return drv;
										else
											return generic_for_interface(interface)
								->phy_probe
				->phy_connect_dev
					->phy_reset
			->phy_config   //drivers/net/phy/phy.c
				->
						/* 
						* 如果没有注册驱动,就会使用generic_driver,会配置自动协商。
						* 如果自己添加驱动,可能没有使能自动协商!!!
						* 跑DPAA,可能就会不通,或者大量丢包~~*/
					if(phydev->drv->config)	
						phydev->drv->config() /* 自己注册的驱动*/
		
					genphy_config			 /* 自己没注册*/
						->genphy_config_aneg
							-> genphy_restart_aneg
		->eth_register
		

搞明白之后,在自己驱动里,加上使能使能自动协商即可

linux 下的 phy驱动,会多一个配置 自动协商的 API, 所以没有上述的问题。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值