phy_read
/include/linux/phy.h 中的方法返回一个 32 位值。 phy 驱动程序使用此方法读取 16 位 MII 寄存器。phy_read
方法返回一个 32 位值。在 32 位字段上存储 16 位值会使 0xFFFF 变为 0x0000FFFF,在 16 位字段中会被视为 -1(错误)并以这种方式处理,但将其存储在 32 位中会使其成为一个大的正值,而不是一个错误。这会改变驱动程序执行的过程,并以不期望的方式创建更改链接参数。
我观察到这个genphy_read_status
方法,其中phy_read
is 和 int(4 字节) 返回的值,但它包含 0xFFFF,以防管理行被删除或发生某些错误。由于返回值是 4 个字节,所有检查它是否小于零的检查都会失败。在这种情况下,链路速度和口是心非会更改为最大可能速度(即 1000Mbps),即使它无法做到这一点。
那么phy driver如何处理这种情况呢?如果发生此类硬件错误,链路以这种方式更改其配置是否正常?将读取大小从 int 更改为 u16 可能会解决问题,那么为什么不这样做呢?
所有这些问题都在 Linux 内核 3.8.13 中观察到。最新的 linux 源似乎是相似的,尽管我没有测试错误情况。
如何处理 16 位 phy 寄存器的 MII 寄存器读取错误?
相关内容
- apt-get update 不起作用:签名/验证错误
- 关于较新的 DDR 3 RAM [关闭]
- 警告:require_once(HTTP/Request2.php):无法打开流:
- 在联想 IdeaPad S540 上通过 USB 驱动器安装 Ubuntu 的替代方案
- PHP 未在 apache2 中解析,php 模块已安装并启用
- 我如何让 IIS 提供 Zip 文件内的内容?
- 如何在 Ubuntu/Kubuntu 上捕获 HDMI 设备?[关闭]
- Ubuntu 18.04 中的蓝牙服务在一段时间后失败并冻结
- chemfig:交叉反应就像填字游戏,适用于多种反应:definearrow1{plus}{+} 保持不可见
- 如何让 Windows 生成文件夹中的所有缩略图而无需浏览它?