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.

Linux/DP83TC811S-Q1: Add the DP83TC811S driver to our system, now that the driver has been loaded, but there was a mistake in loading

Part Number: DP83TC811S-Q1

Tool/software: Linux

I have now added the DP83TC811S driver to our system, and now the driver has been loaded, but there was an error loading. When the driver is loaded, the call to dp83811_phy_reset returns successfully, but when the dp83811_config_init function returns an error, the function calls phy_write_mmd at the end of the error, and the return value is-95. Could you please see what might be the problem? Attachment is my driver (we are using the Qualcomm 9607 platform, the Linux kernel version is 3.18) below is the debugging information when loading the driver:

[  551.057791] dp83811_init

[  622.420505] opened /data/eth_mac.conf...

[  622.420530] ETH_MAC_FILE size: 33

[  622.420565] vfs_read :: buffer = Intf0MacAddress=B4774819320F

, len = 30565]

[  622.420582] mac_addr[0] hex2bin= 0xb4

[  622.420591] mac_addr[1] hex2bin= 0x77

[  622.420599] mac_addr[2] hex2bin= 0x48

[  622.420607] mac_addr[3] hex2bin= 0x19

[  622.420616] mac_addr[4] hex2bin= 0x32

[  622.420624] mac_addr[5] hex2bin= 0xf

[  622.436139] libphy: emac-mdio: probed

[  622.501082] qcom-emac 7c40000.qcom,emac eth0: TX queues 1, TX descriptors 512

[  622.501102] qcom-emac 7c40000.qcom,emac eth0: RX queues 1, Rx descriptors 256

[  622.502281] dp83811_phy_reset err =0

[  622.502295] dp83811_config_init

[  622.503103] dp83811_config_init phy_write_mmd ret =-95

[  622.503123] qcom-emac 7c40000.qcom,emac eth0: could not connect phy

Further tracking the lower drive. To find something wrong in (a red spot)

static inline int phy_write_mmd(struct phy_device *phydev, int devad,u32 regnum, u16 val)

{

         if (!phydev->is_c45)

                   return -EOPNOTSUPP;

         regnum = MII_ADDR_C45 | ((devad & 0x1f) << 16) | (regnum & 0xffff);

         return mdiobus_write(phydev->bus, phydev->addr, regnum, val);

}

 

What is this c45, please? There is an error here, is C45 not supported by the main controller, or something else, please direct