PCIe寄存器之二

关键字索引:

CAP_PM 对应:Capabilities: [c0] Power Management
CAP_MSI 对应:Capabilities: [c8] MSI
CAP_MSIX对应:Capabilities: [e0] MSI-X
CAP_EXP 对应:Capabilities: [70] Express (v2) Endpoint
以上 [] 内的字符是依照不同设备变化的,并非都是,具体依照 lspci -vvv 显示的来

01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983 (prog-if 02 [NVM Express])
       Subsystem: Samsung Electronics Co Ltd Device a801
       Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
       Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
       Latency: 0, Cache Line Size: 64 bytes
       Interrupt: pin A routed to IRQ 48
       NUMA node: 0
       Region 0: Memory at c0800000 (64-bit, non-prefetchable) [size=16K]
       Capabilities: [40] Power Management version 3
               Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
               Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
       Capabilities: [50] MSI: Enable- Count=1/32 Maskable- 64bit+
               Address: 0000000000000000  Data: 0000
       Capabilities: [70] Express (v2) Endpoint, MSI 00
               DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
                       ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 0.000W
               DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+
                       RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
                       MaxPayload 256 bytes, MaxReadReq 512 bytes
               DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
               LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s unlimited, L1 <64us
                       ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
               LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- CommClk+
                       ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
               LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
               DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR+, OBFF Not Supported
               DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled
               LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
                        Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                        Compliance De-emphasis: -6dB
               LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete+, EqualizationPhase1+
                        EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
       Capabilities: [b0] MSI-X: Enable+ Count=33 Masked-
               Vector table: BAR=0 offset=00003000
               PBA: BAR=0 offset=00002000
       Capabilities: [100 v2] Advanced Error Reporting
               UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
               UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
               UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
               CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
               CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
               AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
       Capabilities: [148 v1] Device Serial Number 00-00-00-00-00-00-00-00
       Capabilities: [158 v1] Power Budgeting <?>
       Capabilities: [168 v1] #19
       Capabilities: [188 v1] Latency Tolerance Reporting
               Max snoop latency: 1048576ns
               Max no snoop latency: 1048576ns
       Capabilities: [190 v1] L1 PM Substates
               L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
                         PortCommonModeRestoreTime=10us PortTPowerOnTime=10us
       Kernel driver in use: nvme
       Kernel modules: nvme

[root@localhost ~]# ll /sys/block/| grep nvme
lrwxrwxrwx. 1 root root 0 Nov  4 15:25 nvme0n1 -> ../devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0/nvme0n1

读取硬盘上层Root Port端的Target Link Speed:
位置是 CAP_EXP 也可参考lspci的返回值Capabilities: [58] Express (v2) Root Port (Slot+), MSI 00,如我这里是 58,偏移量 30h,得到命令:
setpci -s 00:02.1 CAP_EXP+30.b
在我这个平台上等同于(不同平台索引号不同,所以建议直接用CAP_EXP代替)
setpci -s 01:00.0 58+30.b
返回值代表Link Speed:
01 = 0001 = 2.5GT/s GEN1
02 = 0010 = 5GT/s GEN2
03 = 0011 = 8GT/s GEN3
04 = 0100 = 16GT/s Gen4
05 = 0101 = 32GT/s GEN5

[root@localhost ~]# setpci -s 00:02.1 CAP_EXP+30.b
03
[root@localhost ~]# setpci -s 00:02.1 58+30.b
03
[root@localhost ~]#

修改Traget Link Speed:
修改为Gen1:setpci -s 00:02.1 CAP_EXP+30.b=1

[root@localhost ~]# setpci -s 00:02.1 CAP_EXP+30.b=1
[root@localhost ~]# setpci -s 00:02.1 CAP_EXP+30.b
01
[root@localhost ~]# lspci -vvv -s 00:02.1|grep -E "LnkSta:|LnkCtl2"
               LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive+ BWMgmt+ ABWMgmt-
               LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
[root@localhost ~]# lspci -vvv -s 01:00.0|grep -E "LnkSta:|LnkCtl2"
               LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
               LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-

可以看到root port 端已修改Target Speed为 2.5GT,但LnkSta还是 8GT,我们读读盘端,盘端均未改变,依然为8GT
对root port端下 Retrain命令:

[root@localhost ~]# setpci -s 00:02.1 CAP_EXP+10.b=0x60
[root@localhost ~]# lspci -vvv -s 00:02.1|grep -E "LnkSta:|LnkCtl2"
               LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive+ BWMgmt+ ABWMgmt-
               LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
[root@localhost ~]# lspci -vvv -s 01:00.0|grep -E "LnkSta:|LnkCtl2"
               LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
               LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-

可以看到,retrain后,速度变成了我们刚开始设定的2.5GT无误

附上Spec的定义,偏移量和取值是参考的Spec
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCI Express(PCIe)是一种高速数据接口标准,广泛应用于计算机内部和外部设备之间的通信。Windows操作系统为计算机上安装的PCIe设备提供了驱动程序、API和控制面板,以便用户可以轻松地配置和管理这些设备。 在Windows中,可以使用设备管理器查看和管理PCIe设备,包括设备驱动程序、设备状态、资源分配和中断设置等。使用设备管理器还可以查看和编辑PCIe设备的注册表设置,包括设备ID、BAR(基址寄存器)和中断信息等。 在编写Windows设备驱动程序时,需要使用Windows驱动程序开发工具包(WDK),其中包含了大量用于PCIe设备驱动程序开发的API和库文件。这些API和库文件提供了访问PCIe设备资源的接口,包括设备寄存器的读写、中断处理、DMA传输和电源管理等。 PCIe设备寄存器是设备硬件的一部分,用于存储设备的状态和控制信息。使用Windows驱动程序开发工具包中提供的API或者读写设备驱动程序中的寄存器,可以实现访问和控制PCIe设备的能力。通常,访问并控制PCIe设备寄存器需要满足以下条件:正确的寄存器地址、寄存器读写权限的正确设置、正确的寄存器大小等。 总之,Windows操作系统为用户提供了丰富的API和工具,以便管理和配置PCIe设备。通过使用这些API和工具,开发人员可以编写高效的设备驱动程序,以实现访问和控制PCIe设备的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值