Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
473 lines (389 sloc) 20.1 KB
This file is auto-generated by ahci_fsm_sequence.py
Checking for undefined labels:
All jumps are to the defined labels
Checking for unused labels:
All labels are used
Asynchronous transitions labels:
0x000: POR
0x002: HBA_RST
0x004: PORT_RST
0x006: COMINIT
0x008: ST_CLEARED
Number of lines : 273
Number of labels : 74
Number of actions : 53
Number of conditions : 44
Actions that do not wait for done (40):
NOP
PXSERR_DIAG_X
SIRQ_DHR
SIRQ_DP
SIRQ_DS
SIRQ_IF
SIRQ_INF
SIRQ_PS
SIRQ_SDB
SIRQ_TFE
SIRQ_UF
PFSM_STARTED
PCMD_CR_CLEAR
PCMD_CR_SET
PXCI0_CLEAR
PXSSTS_DET_1
SSTS_DET_OFFLINE
SCTL_DET_CLEAR
HBA_RST_DONE
SET_UPDATE_SIG
UPDATE_SIG
UPDATE_ERR_STS
UPDATE_PIO
UPDATE_PRDBC
CLEAR_BSY_DRQ
CLEAR_BSY_SET_DRQ
SET_BSY
SET_STS_7F
SET_STS_80
XFER_CNTR_CLEAR
DECR_DWCR
DECR_DWCW
FIS_FIRST_FLUSH
CLEAR_CMD_TO_ISSUE
DMA_PRD_IRQ_CLEAR
XMIT_COMRESET
SET_OFFLINE
R_OK
R_ERR
EN_COMINIT
Actions that wait for done (13):
DMA_ABORT*
SEND_SYNC_ESC*
FETCH_CMD*
ATAPI_XMIT*
CFIS_XMIT*
DX_XMIT*
GET_DATA_FIS*
GET_DSFIS*
GET_IGNORE*
GET_PSFIS*
GET_RFIS*
GET_SDBFIS*
GET_UFIS*
Conditions(44):
ST_NB_ND
PXCI0_NOT_CMDTOISSUE
PCTI_CTBAR_XCZ
PCTI_XCZ
NST_D2HR
NPD_NCA
CHW_DMAA
SCTL_DET_CHANGED_TO_4
SCTL_DET_CHANGED_TO_1
PXSSTS_DET_NE_3
PXSSTS_DET_EQ_1
NPCMD_FRE
FIS_OK
FIS_ERR
FIS_FERR
FIS_EXTRA
FIS_FIRST_INVALID
FR_D2HR
FIS_DATA
FIS_ANY
NB_ND_D2HR_PIO
D2HR
SDB
DMA_ACT
DMA_SETUP
BIST_ACT_FE
BIST_ACT
PIO_SETUP
NB_ND
TFD_STS_ERR
FIS_I
PIO_I
NPD
PIOX
XFER0
PIOX_XFER0
CTBAA_CTBAP
CTBAP
CTBA_B
CTBA_C
TX_ERR
SYNCESC_ERR
DMA_PRD_IRQ_PEND
X_RDY_COLLISION
code:
000: 20000 # POR: do NOP
001: 0000c # always goto H:Init
002: 20000 # HBA_RST: do NOP
003: 0000a # always goto H:HBA_RST
004: 20000 # PORT_RST: do NOP
005: 0000c # always goto H:Init
006: 20000 # COMINIT: do NOP
007: 00022 # always goto P:Cominit
008: 20000 # ST_CLEARED: do NOP
009: 00035 # always goto P:StartBitCleared
00a: 20202 # H:HBA_RST: do HBA_RST_DONE
00b: 0000c # always goto H:Init
00c: 20000 # H:Init: do NOP
00d: 0000e # always goto H:WaitForAhciEnable
00e: 20000 # H:WaitForAhciEnable: do NOP
00f: 00010 # always goto H:Idle
010: 20000 # H:Idle: do NOP
011: 00012 # always goto P:Init
012: 00006 # P:Init: do PFSM_STARTED
013: 00022 # do PXCI0_CLEAR
014: 00104 # do CLEAR_BSY_SET_DRQ
015: 00404 # do SET_STS_7F
016: 00402 # do SET_UPDATE_SIG
017: 20050 # do XMIT_COMRESET
018: 0001b # always goto P:NotRunning
019: 20108 # P:NotRunningGarbage: do FIS_FIRST_FLUSH
01a: 0001b # always goto P:NotRunning
01b: 20060 # P:NotRunning: do EN_COMINIT
01c: 14419 # if FIS_FIRST_INVALID goto P:NotRunningGarbage
01d: 05432 # if SCTL_DET_CHANGED_TO_4 goto P:Offline
01e: 09449 # if SCTL_DET_CHANGED_TO_1 goto P:StartComm
01f: 01c3c # if ST_NB_ND goto P:Idle
020: 24455 # if FR_D2HR goto NDR:Entry
021: 0001b # always goto P:NotRunning
022: 00000 # P:Cominit: do NOP
023: 00018 # do SET_STS_80
024: 00042 # do PXSSTS_DET_1
025: 20003 # do PXSERR_DIAG_X
026: 0001b # always goto P:NotRunning
027: 30180 # P:RegFisUpdate: do GET_RFIS, WAIT DONE
028: 1250e # if FIS_ERR goto ERR:Non-Fatal
029: 22507 # if FIS_FERR goto ERR:Fatal
02a: 0002b # always goto P:RegFisAccept
02b: 00210 # P:RegFisAccept: do R_OK
02c: 0000c # do UPDATE_SIG
02d: 20014 # do UPDATE_ERR_STS
02e: 0c830 # if FIS_I goto P:RegFisSetIS
02f: 0001b # always goto P:NotRunning
030: 20005 # P:RegFisSetIS: do SIRQ_DHR
031: 0001b # always goto P:NotRunning
032: 00110 # P:Offline: do SET_OFFLINE
033: 20102 # do SCTL_DET_CLEAR
034: 0001b # always goto P:NotRunning
035: 00410 # P:StartBitCleared: do R_ERR
036: 00022 # do PXCI0_CLEAR
037: 10408 # do DMA_ABORT, WAIT DONE
038: 0000a # do PCMD_CR_CLEAR
039: 00028 # do XFER_CNTR_CLEAR
03a: 20108 # P:IdleGarbage: do FIS_FIRST_FLUSH
03b: 0003c # always goto P:Idle
03c: 20012 # P:Idle: do PCMD_CR_SET
03d: 1141b # if PXSSTS_DET_NE_3 goto P:NotRunning
03e: 02c45 # if PXCI0_NOT_CMDTOISSUE goto P:FetchCmd
03f: 04c6b # if PCTI_CTBAR_XCZ goto CFIS:SyncEscape
040: 1443a # if FIS_FIRST_INVALID goto P:IdleGarbage
041: 184c7 # if FIS_DATA goto DR:Entry
042: 28455 # if FIS_ANY goto NDR:Entry
043: 08c6e # if PCTI_XCZ goto CFIS:Xmit
044: 0003c # always goto P:Idle
045: 300a0 # P:FetchCmd: do FETCH_CMD, WAIT DONE
046: 0707d # if CTBAA_CTBAP goto CFIS:PrefetchACMD
047: 0b080 # if CTBAP goto CFIS:PrefetchPRD
048: 0003c # always goto P:Idle
049: 00404 # P:StartComm: do SET_STS_7F
04a: 00402 # do SET_UPDATE_SIG
04b: 00050 # do XMIT_COMRESET
04c: 20102 # do SCTL_DET_CLEAR
04d: 21449 # if PXSSTS_DET_EQ_1 goto P:StartComm
04e: 0001b # always goto P:NotRunning
04f: 20210 # P:OkIdle: do R_OK
050: 0003c # always goto P:Idle
051: 20210 # P:OkNotRunning: do R_OK
052: 0001b # always goto P:NotRunning
053: 20000 # PM:Aggr: do NOP
054: 0003c # always goto P:Idle
055: 20000 # NDR:Entry: do NOP
056: 0005f # always goto NDR:Accept
057: 30240 # NDR:IgnoreNR: do GET_IGNORE, WAIT DONE
058: 1250e # if FIS_ERR goto ERR:Non-Fatal
059: 22507 # if FIS_FERR goto ERR:Fatal
05a: 0004f # always goto P:OkIdle
05b: 30240 # NDR:IgnoreIdle: do GET_IGNORE, WAIT DONE
05c: 1250e # if FIS_ERR goto ERR:Non-Fatal
05d: 22507 # if FIS_FERR goto ERR:Fatal
05e: 00051 # always goto P:OkNotRunning
05f: 20000 # NDR:Accept: do NOP
060: 3045b # if NB_ND_D2HR_PIO goto NDR:IgnoreIdle
061: 10c27 # if NST_D2HR goto P:RegFisUpdate
062: 06457 # if NPCMD_FRE goto NDR:IgnoreNR
063: 03885 # if D2HR goto RegFIS:Entry
064: 058e0 # if SDB goto SDB:Entry
065: 098b0 # if DMA_ACT goto DX:EntryIgnore
066: 118d4 # if DMA_SETUP goto DmaSet:Entry
067: 218f5 # if BIST_ACT_FE goto BIST:FarEndLoopback
068: 068fc # if BIST_ACT goto BIST:TestOngoing
069: 0a899 # if PIO_SETUP goto PIO:Entry
06a: 000ee # always goto UFIS:Entry
06b: 10090 # CFIS:SyncEscape: do SEND_SYNC_ESC, WAIT DONE
06c: 20402 # do SET_UPDATE_SIG
06d: 0006e # always goto CFIS:Xmit
06e: 00204 # CFIS:Xmit: do SET_BSY
06f: 30220 # do CFIS_XMIT, WAIT DONE
070: 1903c # if X_RDY_COLLISION goto P:Idle
071: 15104 # if SYNCESC_ERR goto ERR:SyncEscapeRecv
072: 0d10e # if TX_ERR goto ERR:Non-Fatal
073: 00074 # always goto CFIS:Success
074: 20208 # CFIS:Success: do CLEAR_CMD_TO_ISSUE
075: 130fc # if CTBA_B goto BIST:TestOngoing
076: 2307a # if CTBA_C goto CFIS:ClearCI
077: 0707d # if CTBAA_CTBAP goto CFIS:PrefetchACMD
078: 0b080 # if CTBAP goto CFIS:PrefetchPRD
079: 0003c # always goto P:Idle
07a: 00022 # CFIS:ClearCI: do PXCI0_CLEAR
07b: 20084 # do CLEAR_BSY_DRQ
07c: 00053 # always goto PM:Aggr
07d: 20000 # CFIS:PrefetchACMD: do NOP
07e: 0b080 # if CTBAP goto CFIS:PrefetchPRD
07f: 0003c # always goto P:Idle
080: 20000 # CFIS:PrefetchPRD: do NOP
081: 0003c # always goto P:Idle
082: 30120 # ATAPI:Entry: do ATAPI_XMIT, WAIT DONE
083: 0d107 # if TX_ERR goto ERR:Fatal
084: 000a2 # always goto PIO:Update
085: 30180 # RegFIS:Entry: do GET_RFIS, WAIT DONE
086: 1250e # if FIS_ERR goto ERR:Non-Fatal
087: 22507 # if FIS_FERR goto ERR:Fatal
088: 00089 # always goto RegFIS:Accept
089: 00210 # RegFIS:Accept: do R_OK
08a: 00014 # do UPDATE_ERR_STS
08b: 00000 # do NOP
08c: 00000 # do NOP
08d: 20000 # do NOP
08e: 2290a # if TFD_STS_ERR goto ERR:FatalTaskfile
08f: 12891 # if NB_ND goto RegFIS:ClearCI
090: 00097 # always goto RegFIS:UpdateSig
091: 00044 # RegFIS:ClearCI: do UPDATE_PRDBC
092: 20022 # do PXCI0_CLEAR
093: 0c895 # if FIS_I goto RegFIS:SetIntr
094: 00097 # always goto RegFIS:UpdateSig
095: 20005 # RegFIS:SetIntr: do SIRQ_DHR
096: 00097 # always goto RegFIS:UpdateSig
097: 2000c # RegFIS:UpdateSig: do UPDATE_SIG
098: 00053 # always goto PM:Aggr
099: 30440 # PIO:Entry: do GET_PSFIS, WAIT DONE
09a: 1250e # if FIS_ERR goto ERR:Non-Fatal
09b: 22507 # if FIS_FERR goto ERR:Fatal
09c: 0009d # always goto PIO:Accept
09d: 20210 # PIO:Accept: do R_OK
09e: 2290a # if TFD_STS_ERR goto ERR:FatalTaskfile
09f: 20cb6 # if NPD_NCA goto DX:Entry
0a0: 24882 # if NPD goto ATAPI:Entry
0a1: 0003c # always goto P:Idle
0a2: 00024 # PIO:Update: do UPDATE_PIO
0a3: 00000 # do NOP
0a4: 00000 # do NOP
0a5: 20000 # do NOP
0a6: 2290a # if TFD_STS_ERR goto ERR:FatalTaskfile
0a7: 128aa # if NB_ND goto PIO:ClearCI
0a8: 148ae # if PIO_I goto PIO:SetIntr
0a9: 0003c # always goto P:Idle
0aa: 00044 # PIO:ClearCI: do UPDATE_PRDBC
0ab: 20022 # do PXCI0_CLEAR
0ac: 148ae # if PIO_I goto PIO:SetIntr
0ad: 00053 # always goto PM:Aggr
0ae: 20081 # PIO:SetIntr: do SIRQ_PS
0af: 00053 # always goto PM:Aggr
0b0: 30240 # DX:EntryIgnore: do GET_IGNORE, WAIT DONE
0b1: 1250e # if FIS_ERR goto ERR:Non-Fatal
0b2: 22507 # if FIS_FERR goto ERR:Fatal
0b3: 000b4 # always goto DX:Accept
0b4: 20210 # DX:Accept: do R_OK
0b5: 000b6 # always goto DX:Entry
0b6: 20030 # DX:Entry: do DMA_PRD_IRQ_CLEAR
0b7: 308a2 # if PIOX_XFER0 goto PIO:Update
0b8: 2883c # if XFER0 goto P:Idle
0b9: 000ba # always goto DX:Transmit
0ba: 30420 # DX:Transmit: do DX_XMIT, WAIT DONE
0bb: 15104 # if SYNCESC_ERR goto ERR:SyncEscapeRecv
0bc: 0d107 # if TX_ERR goto ERR:Fatal
0bd: 000be # always goto DX:UpdateByteCount
0be: 00088 # DX:UpdateByteCount: do DECR_DWCW
0bf: 20044 # do UPDATE_PRDBC
0c0: 250c3 # if DMA_PRD_IRQ_PEND goto DX:PrdSetIntr
0c1: 188a2 # if PIOX goto PIO:Update
0c2: 0003c # always goto P:Idle
0c3: 00009 # DX:PrdSetIntr: do SIRQ_DP
0c4: 20030 # do DMA_PRD_IRQ_CLEAR
0c5: 188a2 # if PIOX goto PIO:Update
0c6: 0003c # always goto P:Idle
0c7: 20030 # DR:Entry: do DMA_PRD_IRQ_CLEAR
0c8: 000c9 # always goto DR:Receive
0c9: 300c0 # DR:Receive: do GET_DATA_FIS, WAIT DONE
0ca: 12507 # if FIS_ERR goto ERR:Fatal
0cb: 22507 # if FIS_FERR goto ERR:Fatal
0cc: 0c50e # if FIS_EXTRA goto ERR:Non-Fatal
0cd: 000ce # always goto DR:UpdateByteCount
0ce: 00210 # DR:UpdateByteCount: do R_OK
0cf: 00048 # do DECR_DWCR
0d0: 20044 # do UPDATE_PRDBC
0d1: 250c3 # if DMA_PRD_IRQ_PEND goto DX:PrdSetIntr
0d2: 188a2 # if PIOX goto PIO:Update
0d3: 0003c # always goto P:Idle
0d4: 30140 # DmaSet:Entry: do GET_DSFIS, WAIT DONE
0d5: 1250e # if FIS_ERR goto ERR:Non-Fatal
0d6: 22507 # if FIS_FERR goto ERR:Fatal
0d7: 000d8 # always goto DmaSet:Accept
0d8: 20210 # DmaSet:Accept: do R_OK
0d9: 0c8db # if FIS_I goto DmaSet:SetIntr
0da: 000dd # always goto DmaSet:AutoActivate
0db: 20011 # DmaSet:SetIntr: do SIRQ_DS
0dc: 000dd # always goto DmaSet:AutoActivate
0dd: 20000 # DmaSet:AutoActivate: do NOP
0de: 034db # if CHW_DMAA goto DmaSet:SetIntr
0df: 0003c # always goto P:Idle
0e0: 30280 # SDB:Entry: do GET_SDBFIS, WAIT DONE
0e1: 1250e # if FIS_ERR goto ERR:Non-Fatal
0e2: 22507 # if FIS_FERR goto ERR:Fatal
0e3: 000e4 # always goto SDB:Accept
0e4: 00210 # SDB:Accept: do R_OK
0e5: 00014 # do UPDATE_ERR_STS
0e6: 00000 # do NOP
0e7: 00000 # do NOP
0e8: 20000 # do NOP
0e9: 2290a # if TFD_STS_ERR goto ERR:FatalTaskfile
0ea: 0c8ec # if FIS_I goto SDB:SetIntr
0eb: 00053 # always goto PM:Aggr
0ec: 20101 # SDB:SetIntr: do SIRQ_SDB
0ed: 00053 # always goto PM:Aggr
0ee: 30480 # UFIS:Entry: do GET_UFIS, WAIT DONE
0ef: 1250e # if FIS_ERR goto ERR:Non-Fatal
0f0: 22507 # if FIS_FERR goto ERR:Fatal
0f1: 000f2 # always goto UFIS:Accept
0f2: 00210 # UFIS:Accept: do R_OK
0f3: 20401 # do SIRQ_UF
0f4: 0003c # always goto P:Idle
0f5: 30240 # BIST:FarEndLoopback: do GET_IGNORE, WAIT DONE
0f6: 1250e # if FIS_ERR goto ERR:Non-Fatal
0f7: 22507 # if FIS_FERR goto ERR:Fatal
0f8: 000f9 # always goto BIST:FarEndLoopbackAccept
0f9: 00210 #BIST:FarEndLoopbackAccept: do R_OK
0fa: 20082 # do SSTS_DET_OFFLINE
0fb: 00102 # always goto BIST:TestLoop
0fc: 30240 # BIST:TestOngoing: do GET_IGNORE, WAIT DONE
0fd: 1250e # if FIS_ERR goto ERR:Non-Fatal
0fe: 22507 # if FIS_FERR goto ERR:Fatal
0ff: 00100 # always goto BIST:TestLoopAccept
100: 20210 # BIST:TestLoopAccept: do R_OK
101: 00102 # always goto BIST:TestLoop
102: 20000 # BIST:TestLoop: do NOP
103: 00102 # always goto BIST:TestLoop
104: 00084 # ERR:SyncEscapeRecv: do CLEAR_BSY_DRQ
105: 20021 # do SIRQ_IF
106: 0010c # always goto ERR:WaitForClear
107: 00410 # ERR:Fatal: do R_ERR
108: 20021 # do SIRQ_IF
109: 0010c # always goto ERR:WaitForClear
10a: 20201 # ERR:FatalTaskfile: do SIRQ_TFE
10b: 0010c # always goto ERR:WaitForClear
10c: 20000 # ERR:WaitForClear: do NOP
10d: 0010c # always goto ERR:WaitForClear
10e: 00410 # ERR:Non-Fatal: do R_ERR
10f: 20041 # do SIRQ_INF
110: 0003c # always goto P:Idle
You can’t perform that action at this time.