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 sdk6.0的uboot能否支持RTL8306的驱动

最近在学着弄网卡驱动,

请问下TI官方uboot代码有没有已经对RTL8306的网卡驱动做了兼容的。

  • \drivers\net\phy\realtek.c里面有RTL8211的驱动,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 通,求指导。 

  • uid要看RTL8306的ID寄存器,可以在datasheet里查到。

    另外这颗PHY是百兆PHY还是千兆PHY

  • 是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

  • serverip 设置对了吗?

  • U-Boot# echo $serverip
    192.168.1.8

    serverip设置没问题

  • 网络直接连在PC机上的?

    这样的话应该是使用固定IP的链接方式,建议你UBOOT下,可以尝试以下命令,看看是否能成功。

    setenv ipaddr 192.168.x.x
    setenv serverip 192.168.x.y
    setenv bootfile uImage
    setenv autoload yes
    tftp
  • pc端直接连接板子。

    前面ping就返回alive,后面用bootp烧写uImage映像不行。 

  • 为啥是bootp啊?我给你的那组命令里面只是使用tftp。如果是bootp的话,是需要从一个服务器上获取IP的,所以才会有broadcast。你在PC机上面建立了DHCP服务器了吗?

  • Andarm,

    我问下,你修改了RTL8306的哪部分配置之后,就可以ping通了?

  • 1、mux复用

    2、MII开启

    3、realtek.c 相关id,根据手册上将默认值配入相关寄存器。

    //在内核端我也是同样这样修改。

  • 谢谢你的回复,问题解决了。

    将ti配置好的网卡模块,在内核上干掉那就ok了。

  • 请我问一下:网卡通信正常了。但是在不接线的情况下网口的绿灯依然亮。这是软件问题还是硬件问题?

  • 这个好像可以通过PHY的寄存器控制

x 出现错误。请重试或与管理员联系。