主题中讨论的其他部件: DP8.3867万E
尊敬的各位:
我正在为DP8.3867万 PHY IC开发Linux驱动程序。 我使用的是4.9 vanilla内核。
我的主板需要进行一次调整:
通过初始引导设置,“端口镜像”功能已启用:
reg:0x31 (CFG4)- port_mirror_EN位(0)设置为1
要禁用它,我将此寄存器值从0x10b1更改为0x10b0。
Linux驱动程序出现问题:
dp8.3867万_phy_reset() 函数位于./drivers/net/ph/dp8.3867万.c
它在控制寄存器(CTRL - 0x001F)上执行SW_RESET (位15)。 此类复位执行完全复位(包括寄存器)。
问题由此开始:
dp8.3867万_config_init()函数的默认初始化代码将保留PHYCR寄存器(0x10),其值为0x5848 (重置后的默认值)。
通过此设置,我可以看到链路已建立,但PHY无法正常工作(无数据传输-已通过Wireshark检查)。
要使其正常工作,请将0x4040值写入PHYCR (0x10)寄存器。
为什么我需要这样做?
以下内容的含义是什么:
第3位-我必须清楚地说明
——第11位,12位——我必须清楚地说明
根据IC数据集(SNLS484D–2015年2月–2016年7月修订),这些字段将被保留,RO和写入将被忽略。
DP8.3867万寄存器转储:
PHY_PRINT_STATUS
REG 0x0:0x1140
REG 0x1:0x796d.
REG 0x2:0x2000
REG 0x3:0xa231
REG 0x4:0x1e1
REG 0x5:0xc1e1
REG 0x6:0x6f
REG 0x7:0x2001
REG 0x8:0x6801
REG 0x9:0x300
REG 0xA:0x3800
REG 0xb:0x0
reg 0xc:0x0
REG 0xd:0x401f
reg 0xe:0x10b0
REG 0xF:0x3000
REG 0x10:0x4040
reg 0x11:0xbc02
REG 0x12:0x0
REG 0x13:0x1c40
REG 0x14:0x29c7
REG 0x15:0x0
REG 0x16:0x0
REG 0x17:0x40
REG 0x18:0x6150
REG 0x19:0x4040
REG 0x1a:0x2
REG 0x1b:0x0
reg 0x1c:0x0
reg 0x1d:0x0
REG 0x1E:0x2
REG 0x1f:0x0
PHY_regs_dump:扩展寄存器
EXT REG 0x31:0x10b0
EXT REG 0x32:0xd3
EXT REG 0x33:0x0
EXT REG 0x6e:0x8800
EXT REG 0x6f:0x30
EXT REG 0x86:0x37
重置前和重置后之间的区别仅与有区别
0x10为0x4040,重置前(从u-boot设置)
和 0x5848之后(执行寄存器重置时)
有人能解释为什么需要清除保留位吗?
致以诚挚的问候,在此提前感谢,
Łukasz