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

// SYSTEM_CONFIG_PHY_MODE_1
APBWRT DAT 0 0xa028 0x11C
// LANE0_RXIDLE_MAX_ERRCNT_THR
APBWRT DAT 0 0x9008 0xF8
// 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_AXI_SLAVE_WINDOW0_0
APBWRT DAT 0 0x80c0 0x30000000
// PCIE_AXI_SLAVE_WINDOW0_1
APBWRT DAT 0 0x80c4 0xFF000001
// 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

// 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
