2011年5月25日 星期三

PCIE ASPM

最近常在找PCIE ASPM register,所以寫下來避免自己忘記。
ASPM control register 是存在PCIE Link Control Register。至於如何找到Link Control Register。
1.先找到PCIE Capability List Pointer Register ,而此Register 存在PCI Congfiguration Registers Offset 0x34
2.檢查Capability ID ( (1st byte))是否為0x10,如果不是,讀取Next Capability Pointer Register (2nd byte ),讀取下一個Capability.


3. 當Capability ID 為0x10時,Link Control Register就是在目前Capability的Offset+0x10為Link Control Register
     

4. Check Link Control Register bit[0:1]
   Bits              Definition
   00                Disabled
   01                L0s Entry Enabled
   10                L1  Entry Enabled
   11                L0s and L1 Entry Enabled

下面就舉個例子來看,比較容易清楚。
1.先找Capability List Pointer Register (offset 0x34), 此register 的值是0x60,表示Capability List 是從Offset 0x60開始。
   
2. 我們要檢查Capability ID是否為0x10,可以看到0ffset 0x60的值是0x01,代表不是PCIE Capability,所以我們要找Next Capability,而Next Capability在Offset 0x61 是0x68,
    同樣的Capaiblity ID 為0x05也不是PCIE Capability,所以要找下一個Capability為0x78.
    在Offset 0x78的值為0x10,代表是PCIE Capability ID,所以我們可以找到Link Control Register在Offset 0x88~0x89
    Check Link Control Register bit[0:1]為0,所以此PCIE Device ASPM 設定為 L0s and L1均為Disable




 
References:
  PCI Express System Architecture
  PCI Express 3.0 Spec

2011年3月14日 星期一

Top Swap Issue

Platform: Pine Trail
Fail Symptom; Can't boot and Post Code is 0xFF; after reset RTC, it can boot normally.
Root Cause: Top Swap bit is set unexpected.
最近有個Pine Trail機種 發生了無法開機,Post code是0xFF,而用示波器量 LFrame#,卻沒有 assert,在沒有頭緒的情況下,重新翻閱了Tiger Point 的EDS,發現有可以跟Top Swap Bit也許有關,所以將calpella的Top Swap Solution導入,試看看,結果bingo,就可以開機了。分析Top Swap Solution,就是在0xFFFEFFF0h 放jmp 指令,跳到去做清Top Swap Bit的動作,之後做reboot. CPU 在Power On之後hardward Reset完成之後,會Fetch code from 0xFFFFFFF0h,而當tiger point的Top Swap被設起來,Tiger Point會將0xFFFFFFF0h轉到0xFFFEFFF0h,而導致無法Fetch到正常的boot code.