本發明涉及一種基于cscripts進行purley平臺cpu端pcietxeq調整的方法。
背景技術:
由于pcie3.0的速率已經達到8gb/s,而且傳輸的通道往往需要經歷主板至板卡,整個鏈路會比較長,這樣就會導致高速信號比較大的損耗。為補償通道的損耗,確保接收端信號眼圖能夠張開,通過使用相應的加重(去加重或者預加重)及均衡技術是非常有必要的。因此,pcie3.0在發送端使用了施加去加重(de-emphasis)和前沖(preshoot)功能。實際上,pcie3.0的去加重(de-emphasis)和前沖(preshoot)功能是通過一個三階fir濾波器實現的。如圖1所示,其中:c-1,c0與c+1三個參數值即我們所說的txeq值?,F有方案是通過在bios中對dntxpreset選項進行修改來調整,選項中有auto、p0、p1、p2、p3、p4、p5、p6、p7、p8、p9總共11種設置。當選擇auto時,pcie鏈路在training完成后將cpu端的pcietxeq自動設置為理論上的最優值,選擇p0到p9這10中設置時,txeq會被固定為p0到p9對應的參數。
由于需要開機進入bios界面進行設置,且為使設置的參數值生效,需要重啟系統,該過程所需要的時間較長,在需要調整試驗多種txeq參數時,會占用測試工程師較多的時間,檢驗效率低。
技術實現要素:
本發明的目的是提供一種基于cscripts進行purley平臺cpu端pcietxeq調整的方法,該方法在修改完txeq參數后,可立即執行相關測試,無需重啟系統,可極大縮短測試的時間。
為實現上述目的,本發明采用下述技術方案:
一種基于cscripts進行purley平臺cpu端pcietxeq調整的方法,包括以下步驟:
s1、進行txeq調整前,需先將cpuhalt,使cpu只響應修改txeq參數的命令,不進行其他計算操作;
s2、確認當前cpuuniphy所有lane的狀態,判斷待調整的pcieport是否處在l0狀態,是,確認該port所有lane的狀態;否,在bios中調整或者重啟機臺;
s3、確認當前的pcie拓撲,確認待調整pcieport的portnumber;
s4、對相應pcieport的txeq進行調整;
s5、判斷參數修改是否有效,若修改無效,則判斷當前pcieport是否處在gen3狀態下,如果當前pcieport處在gen3狀態下,重啟系統后從步驟s1執行;如果當前pcieport回退到了gen1狀態下,則通過re-enable該pcieport,然后判斷參數修改是否有效,若仍然無效,則重啟系統后從步驟s1執行;有效,結束。
進一步地,步驟s1中,需先將cpuhalt是通過輸入命令unistart(),使以uni.為前綴的命令可以執行實現的。
進一步地,步驟s2中,執行命令uni.showstatus(),確認當前cpuuniphy部分所有lane的狀態,具體包括upiport,dmiport,pcieport的lane的狀態,讀取pcieport的lane的狀態。
進一步地,步驟s3中,執行命令pcie.topology(),確認當前的pcie拓撲,執行命令pcie.port_map(),確認待調整port的portnumber。
進一步地,步驟s4中,執行uni.settxeq()命令,對相應pcieport的txeq進行調整。
進一步地,對相應pcieport的txeq進行調整具體包括對cm1、c0、cp1參數的調整,cm1、c0、cp1分別對應三階fir濾波器的c-1、c0與c+1,根據鏈路的實際情況采用下表中這十組值或其他取值
進一步地,其他取值需要滿足cm1+c0+cp1=63。
進一步地,步驟s5中,執行uni.gettxeq()命令,確認參數修改是否有效,若修改無效,則執行pcie.topology()命令確認當前pcieport是否處在gen3狀態下,如果當前port回退到了gen1狀態下,則通過re-enable該port,然后再次執行uni.gettx()命令來確認參數修改是否有效。
本發明的有益效果是,
本發明通過cscripts對purley平臺cpu的pcietxeq進行更改,更改完成后進行eq參數確認。若更改完后pcie鏈路降速到gen1,則通過re-enable相應pcieport的方法使相應鏈路重新training回gen3,再次確認eq參數修改是否有效。實現在無需頻繁重啟系統的情況下對cpu端pcietxeq進行連續修改,可以做到即改即測,可以極大地提高測試效率。
附圖說明
圖1是三階fir濾波器示意圖;
圖2是本發明流程圖;
圖3是cpuuniphy部分所有lane的狀態圖。
具體實施方式
如圖2所示,一種基于cscripts進行purley平臺cpu端pcietxeq調整的方法,包括以下步驟:s1、進行txeq調整前,需先將cpuhalt,使cpu只響應修改txeq參數的命令,不進行其他計算操作;s2、確認當前cpuuniphy所有lane的狀態,如圖3所示,判斷待調整的pcieport是否處在l0狀態,是,確認該port所有lane的狀態;否,在bios中調整或者重啟機臺;s3、確認當前的pcie拓撲,確認待調整pcieport的portnumber;s4、對相應pcieport的txeq進行調整;s5、判斷參數修改是否有效,若修改無效,則判斷當前pcieport是否處在gen3狀態下,如果當前pcieport處在gen3狀態下,重啟系統后從步驟s1執行;如果當前pcieport回退到了gen1狀態下,則通過re-enable該pcieport,然后判斷參數修改是否有效,若仍然無效,則重啟系統后從步驟s1執行;有效,結束。
下面以將連接在x8帶寬下的cpu0pcieport1atxeq修改為preset8為例,通過具體實施方式對本發明進一步說明:該方法的實現步驟如下:
1、在待檢驗的主板上安裝上cpu、內存、服務器電源;
2、接通ac電源,并開機進入bios設置界面,將evdfxfeatures選項設置為enable,重啟系統。
3、用intel的itp工具將主板的xdp接口與pc連接。在pc端打開cscripts腳本。
4、執行命令halt(),將cpu停住。
5、執行命令uni.showstatus(),查看cpu0的port1a所有lane的狀態,確認是否link在x8的gen3速率下。
6、執行命令pcie.topology(),查看cpu0的pcie拓撲。執行pcie.port_map(),確認cpu0port1a對應的portnumber。
7、執行命令uni.settxeq(cpu0,”p1”,lanemask=0xff,cm1=0x8,c0=0x2f,cp1=0x8),將cpu0port1a的txeq參數設置為preset8所對應的參數。
8、執行命令uni.gettxeq(cpu0,”p1”),確認參數修改是否有效。若無效,則先后執行命令pcie.linkdisable(0,2)與pcie.linkenable(0,2),將該pcieport重新激活。再次執行命令uni.gettxeq(cpu0,”p1”)確認參數,一般情況下,此時參數修改已經生效。若參數修改仍無效,則重啟系統,重新執行以上步驟。
上述雖然結合附圖對本發明的具體實施方式進行了描述,但并非對本發明保護范圍的限制,所屬領域技術人員應該明白,在本發明的技術方案的基礎上,本領域技術人員不需要付出創造性勞動即可做出的各種修改或變形仍在本發明的保護范圍以內。