// --------------------------------------
// CoreABC SERDES Initialization Sequence
// --------------------------------------

// SYSTEM_DEBUG_MODE_KEY
APBWRT DAT 0 0xa0a8 0xA5
// SYSTEM_CONFIG_PHY_MODE_1
APBWRT DAT 0 0xa028 0x11C
// LANE0_RXIDLE_MAX_ERRCNT_THR
APBWRT DAT 0 0x9008 0xF8
// LANE0_TX_PST_RATIO_DEEMP0_FULL
APBWRT DAT 0 0x9050 0x20
// LANE0_TX_PST_RATIO_DEEMP1_FULL
APBWRT DAT 0 0x9058 0x15
// LANE0_TX_PST_RATIO_DEEMP0_HALF
APBWRT DAT 0 0x9090 0x20
// LANE0_TX_PST_RATIO_DEEMP1_HALF
APBWRT DAT 0 0x9098 0x15
// LANE0_UPDATE_SETTINGS
APBWRT DAT 0 0x9200 0x1
// SYSTEM_CONFIG_PHY_MODE_1
APBWRT DAT 0 0xa028 0xF1C

// Set CONFIG1_DONE to '1'
APBWRT DAT 0 0x2000 0x1

// Wait for SDIF_RELEASE assertion
$WaitSdifRelease
APBREAD 0 0x2004
AND 0x02
JUMP IF ZERO $WaitSdifRelease

// Lane selection before PCIE_0 PMA STATUS polling
APBREAD 0 0xa028
AND 0xFFFFF0FF
OR 0x100
APBWRT ACC 0 0xa028

// Wait for PCIE_0 PMA READY
$WaitPcie0PmaReady
APBREAD 0 0x90c0
AND 0x80
JUMP IF ZERO $WaitPcie0PmaReady

// PCIE_VID_DEVID
APBWRT DAT 0 0x8000 0x110A1556
// PCIE_POWER_MGT_CAPABILITY
APBWRT DAT 0 0x8048 0x48018001
// PCIE_AXI_MASTER_WINDOW0_0
APBWRT DAT 0 0x8100 0x40000000
// PCIE_AXI_MASTER_WINDOW0_1
APBWRT DAT 0 0x8104 0xFFF00001
// PCIE_AXI_MASTER_WINDOW0_2
APBWRT DAT 0 0x8108 0x1
// PCIE_AXI_MASTER_WINDOW1_0
APBWRT DAT 0 0x8110 0x20000000
// PCIE_AXI_MASTER_WINDOW1_1
APBWRT DAT 0 0x8114 0xFFFF0001
// PCIE_AXI_MASTER_WINDOW1_2
APBWRT DAT 0 0x8118 0x2
// PCIE_MSI_CTRL_STATUS
APBWRT DAT 0 0x8040 0x10000

// Issue Soft Reset on PCIE_0 controler
APBREAD 0 0xa008
AND 0xFFFFFFFE
APBWRT ACC 0 0xa008
OR 0x00000001
APBWRT ACC 0 0xa008

// Set CONFIG2_DONE to '1'
APBWRT DAT 0 0x2000 0x3

HALT
