How to enable ASPM for jetson nano

I saw there is a segment stating how to enable ASPM in guide:

To enable ASPM support
1.Remove the following value from configs/<board_and_rev>_defconfig:
CONFIG_PCIEASPM
2.Add the following value:
CONFIG_PCIEASPM_POWERSAVE=y
Where <board_and_rev> is described in the section Placeholders in Commands.

and I just checked the kernel configuration for ASPM in .conf (Note: I can not remove “CONFIG_PCIEASPM”, or the other ASPM configuration are disabled consequently):

CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEBUG=y
# CONFIG_PCIEASPM_DEFAULT is not set
CONFIG_PCIEASPM_POWERSAVE=y
# CONFIG_PCIEASPM_PERFORMANCE is not set

then compiled and flashed my Jetson Nano device. After system rebooting, I checked the PCIE device list through command “lspci --vv” and found the ASPM of the externel nvme device was still disabled yet:

01:00.0 Non-Volatile memory controller: Device 1d79:2263 (rev 03) (prog-if 02 [NVM Express])
	Subsystem: Device 1d79:2263
	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
	Interrupt: pin A routed to IRQ 83
	Region 0: Memory at 13000000 (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/8 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	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 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
		LnkCap:	Port #0, Speed 8GT/s, Width x4, **ASPM not supported**, Exit Latency L0s <1us, L1 <8us
			ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	**ASPM Disabled**; RCB 64 bytes Disabled- CommClk+
			ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 5GT/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: -6dB, EqualizationComplete-, EqualizationPhase1-
			 EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
	Capabilities: [b0] MSI-X: Enable+ Count=16 Masked-
		Vector table: BAR=0 offset=00002000
		PBA: BAR=0 offset=00002100
	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: [158 v1] #19
	Capabilities: [178 v1] Latency Tolerance Reporting
		Max snoop latency: 0ns
		Max no snoop latency: 0ns
	Capabilities: [180 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
		L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
			   T_CommonMode=0us LTR1.2_Threshold=98304ns
		L1SubCtl2: T_PwrOn=70us
	Kernel driver in use: nvme

Then, I also tried appending attribute “pcie_aspm=force” into kernel commandline, but failed.
Could you give some adivce how to enable ASPM on Jetson Nano ?

Look for the entry “nvidia,disable-aspm-states = <0xf>;” in the DT and replace ‘0xf’ with ‘0x0’.

Tried that change in “tegra210-soc-base.dtsi”, the only file containing this attribute, and then added some debug messages in following kernel drivers:

nvidia/drivers/pci/dwc/pcie-tegra.c
nvidia/drivers/pci/ep/pcie-tegra-dw-ep.c
nvidia/drivers/pci/host/pcie-tegra-dw.c

Decompiled the dtb in order to confirm the modification indeed took effects.
Pushed the updated kernel image “Image” into target Nano board under “/boot”, and then rebooted, unfortunately, checked the ASPM was still disabled (seen from command lspci -vv), and no ASPM debug message was output from dmesg except log “localhost kernel: [ 0.000000] PCIe ASPM is forcibly enabled”, as I just kept attritues “pcie_aspm=force” appending in command line.
It seems this change can not enable ASPM totally.

lspci output says NVMe doesn’t have ASPM capability. That is the reason for not able to enable ASPM.

	LnkCap:	Port #0, Speed 8GT/s, Width x4, **ASPM not supported**, Exit Latency L0s <1us, L1 <8us

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.