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 寄存器读取错误?
相关内容
- Xubuntu - 使用相同设置在 Chrome 中反向滚动,在 Firefox 中自然滚动
- 尝试在 /boot/eft 的 SCSI (0,0,0),分区 #1 (sda) 中安装类型为 vfat 的文件系统失败
- 使用平板电脑作为计算机绘图板
- MySQL - 为什么 SHOW SLAVE HOSTS 会导致 binlog 转储?
- 当我不使用笔记本电脑时,Windows 10 出现错误
- 仅显示目录中第 1 级标题的页码
- 如何在没有数字键盘或“AltGr”键的情况下在 Windows 10 中的美式英语键盘上输入欧元符号 €?
- 如何在 Sony Vaio 笔记本电脑上重新安装 Windows 7?
- 如何在 Linux 上安装新的 Beamer 主题(texlive 和 texmaker)
- Asus P8Z68-V LX 是否支持第三代 Intel Core I5 处理器?[关闭]