This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近在学着弄网卡驱动,
请问下TI官方uboot代码有没有已经对RTL8306的网卡驱动做了兼容的。
查看了代码,初始化的配置也就这些
/* Support for RTL8211B PHY */
static struct phy_driver RTL8211B_driver = {
.name = "RealTek RTL8211B",
.uid = 0x1cc910, //这里的ID是RTL每款芯片特有的吗????RTL8306怎么获得?在手册上只提供了它EEPROM地址
.mask = 0xfffff0,
.features =PHY_BASIC_FEATURES , // 原来是 PHY_GBIT_FEATURES,
.config = &rtl8211x_config, //这里的配置似乎也没有干啥
.startup = &rtl8211x_startup,
.shutdown = &genphy_shutdown,
};
已经在am335x_evm.h 支持realtek的支持。
目前还是没有能够ping 通,求指导。
是100 M的,暂时使用8211默认的配置,但是ping不通。。。
static struct phy_driver RTL8306SD_driver = {
101 .name = "RealTek RTL8306SD",
102 .uid = 0x1cc852,
103 .mask = 0xfffff0,
104 .features = PHY_BASIC_FEATURES,//PHY_GBIT_FEATURES,
105 .config = &rtl8211x_config,
106 .startup = &rtl8211x_startup,
107 .shutdown = &genphy_shutdown,
108 };
不知道还需要怎么修改????环境配置一些关键点。
如果是RMII的PHY,U-boot驱动需要修改一些地方,请参考:
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/45981.aspx
1、是用的是MII。
2、引脚复用情况是如下
static struct module_pin_mux mii1_pin_mux[] = {
{OFFSET(mii1_rxerr), MODE(0) | RXACTIVE}, /* MII1_RXERR */
{OFFSET(mii1_txen), MODE(0)}, /* MII1_TXEN */
{OFFSET(mii1_rxdv), MODE(0) | RXACTIVE}, /* MII1_RXDV */
{OFFSET(mii1_txd3), MODE(0)}, /* MII1_TXD3 */
{OFFSET(mii1_txd2), MODE(0)}, /* MII1_TXD2 */
{OFFSET(mii1_txd1), MODE(0)}, /* MII1_TXD1 */
{OFFSET(mii1_txd0), MODE(0)}, /* MII1_TXD0 */
{OFFSET(mii1_txclk), MODE(0) | RXACTIVE}, /* MII1_TXCLK */
{OFFSET(mii1_rxclk), MODE(0) | RXACTIVE}, /* MII1_RXCLK */
{OFFSET(mii1_rxd3), MODE(0) | RXACTIVE}, /* MII1_RXD3 */
{OFFSET(mii1_rxd2), MODE(0) | RXACTIVE}, /* MII1_RXD2 */
{OFFSET(mii1_rxd1), MODE(0) | RXACTIVE}, /* MII1_RXD1 */
{OFFSET(mii1_rxd0), MODE(0) | RXACTIVE}, /* MII1_RXD0 */
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN}, /* MDIO_DATA */
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
{-1},
};
3、 我的板子上用的是25M晶振。
4、参考你给的链接里面的
(1)(2)(3)点我都设置了。。
(1)点
writel(MII_MODE_ENABLE, &cdev->miisel);
cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if =
PHY_INTERFACE_MODE_MII;
(2)、(3)点都在上面的信息中。。 但依然是ping 不通。。难道还要处理RTL8306的一些寄存器没有配置好??
我看这个pinmux和beaglebone上的LAN8710是一样的,基本上软件也都改了,在确认两点吧:
1. RTL8306对应MDIO的phyaddr确定是对的,而且要改到第一个结构体的.phy_id中:
static struct cpsw_slave_data cpsw_slaves[] = {
{
.slave_reg_ofs = 0x208,
.sliver_reg_ofs = 0xd80,
.phy_id = 0,
},
{
.slave_reg_ofs = 0x308,
.sliver_reg_ofs = 0xdc0,
.phy_id = 1,
},
};
2.请硬件工程师检查下硬件电路
1、 cpsw_slaves结构里面的数值,我的uboot里面默认就是这个了。
2、用mdio write可以直接配置phy相关的寄存器。
使用默认的状态是ping不通的, 现在想修改一下配置。。但是mdio write 这里命令不会用
mdio write 0 0 0x3100 // 这是提示错误。
3、硬件上怎么该判断是否有问题??
1.你确定这个PHY地址已经设置为0了?
2.其实跟踪下代码加些打印就可以确认MDIO读写是否正常,可以跟踪下\drivers\net\cpsw.c中的cpsw_phy_init()。
3。如果软件没有发现问题,要请硬件工程师再检查下PHY部分的电路,有时候一个电阻焊错都会导致网络不能ping通。
1、当我使用mdio read 0 0 //这不是说明我的phy add 0;那么mdio write 0 0 0x3100 //这样的格式是对了吗??
2、 在board.c中网卡初始化的时候,使用phy_write(phydev, 0, MII_BMCR,0x3100);然后在uboot启动后,读取
mdio read 0 0 读出来的值,并不是我写入的。
通过使用mdio read 能够正常的读取网卡的ID说明读是正常的。。
现在mdio write 似乎不正常。。这是为什么??这点该怎么验证。。
mdio write XX XX //完成的参数到底什么??
现在能ping通,但是打开tftp服务器烧写那是不可以了。。//这又是为什么????
link up on port 0, speed 10, full duplex
Using cpsw device
host 192.168.1.8 is alive
U-Boot# bootp 0x82000000 uImage
link up on port 0, speed 10, full duplex
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
BOOTP broadcast 6
BOOTP broadcast 7
BOOTP broadcast 8
BOOTP broadcast 9
BOOTP broadcast 10
网络直接连在PC机上的?
这样的话应该是使用固定IP的链接方式,建议你UBOOT下,可以尝试以下命令,看看是否能成功。
为啥是bootp啊?我给你的那组命令里面只是使用tftp。如果是bootp的话,是需要从一个服务器上获取IP的,所以才会有broadcast。你在PC机上面建立了DHCP服务器了吗?