summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/marvell/mci.c212
-rw-r--r--include/drivers/marvell/mci.h212
2 files changed, 212 insertions, 212 deletions
diff --git a/drivers/marvell/mci.c b/drivers/marvell/mci.c
index 280ea3ad..6e7dd0a2 100644
--- a/drivers/marvell/mci.c
+++ b/drivers/marvell/mci.c
@@ -39,6 +39,218 @@
#include <delay_timer.h>
#include <mvebu.h>
+/* /HB /Units /Direct_regs /Direct regs /Configuration Register Write/Read Data Register */
+#define MCI_WRITE_READ_DATA_REG(mci_index) MVEBU_MCI_REG_BASE_REMAP(mci_index)
+/* /HB /Units /Direct_regs /Direct regs /Configuration Register Access Command Register */
+#define MCI_ACCESS_CMD_REG(mci_index) (MVEBU_MCI_REG_BASE_REMAP(mci_index) + 0x4)
+/* Access Command fields :
+ * bit[3:0] - Sub command: 1 => Periferal Config Register Read,
+ * 0 => Periferal Config Refister Write,
+ * 2 => Periferal Assign ID request,
+ * 3 => Circular Config Write
+ * bit[5] - 1 => Local (same chip access) 0 => Remote
+ * bit[15:8] - Destination hop ID. Put Global ID (GID) here (see scheme below).
+ * bit[23:22] - 0x3 IHB PHY REG address space, 0x0 IHB Controller space
+ * bit[21:16] - Low 6 bits of offset. Hight 2 bits are taken from bit[28:27]
+ * of IHB_PHY_CTRL (must be set before any PHY register access occures):
+ * /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Version Control Register
+ *
+ * ixi_ihb_top IHB PHY
+ * AXI ----------------------------- -------------
+ * <--| axi_hb_top | ihb_pipe_top |-->| |
+ * -->| GID=1 | GID=0 |<--| |
+ * ----------------------------- -------------
+ */
+#define MCI_INDIRECT_CTRL_READ_CMD 0x1
+#define MCI_INDIRECT_CTRL_ASSIGN_CMD 0x2
+#define MCI_INDIRECT_CTRL_CIRCULAR_CMD 0x3
+#define MCI_INDIRECT_CTRL_LOCAL_PKT (1 << 5)
+#define MCI_INDIRECT_CTRL_CMD_DONE_OFFSET 6
+#define MCI_INDIRECT_CTRL_CMD_DONE (1 << MCI_INDIRECT_CTRL_CMD_DONE_OFFSET)
+#define MCI_INDIRECT_CTRL_DATA_READY_OFFSET 7
+#define MCI_INDIRECT_CTRL_DATA_READY (1 << MCI_INDIRECT_CTRL_DATA_READY_OFFSET)
+#define MCI_INDIRECT_CTRL_HOPID_OFFSET 8
+#define MCI_INDIRECT_CTRL_HOPID(id) (((id) & 0xFF) << MCI_INDIRECT_CTRL_HOPID_OFFSET)
+#define MCI_INDIRECT_CTRL_REG_CHIPID_OFFSET 16
+#define MCI_INDIRECT_REG_CTRL_ADDR(reg_num) (reg_num << MCI_INDIRECT_CTRL_REG_CHIPID_OFFSET)
+/* Hop ID values */
+#define GID_IHB_PIPE 0
+#define GID_AXI_HB 1
+#define GID_IHB_EXT 2
+
+
+#define MCI_DID_GLOBAL_ASSIGNMENT_REQUEST_REG 0x2
+/* Target MCi Local ID (LID, which is = self DID) */
+#define MCI_DID_GLOBAL_ASSIGN_REQ_MCI_LOCAL_ID(val) (((val) & 0xFF) << 16)
+/* Bits [15:8]: Number of MCis on chip of target MCi */
+#define MCI_DID_GLOBAL_ASSIGN_REQ_MCI_COUNT(val) (((val) & 0xFF) << 8)
+/* Bits [7:0]: Number of hops on chip of target MCi */
+#define MCI_DID_GLOBAL_ASSIGN_REQ_HOPS_NUM(val) (((val) & 0xFF) << 0)
+
+/* IHB_REG domain registers */
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
+ * Rx Memory Configuration Register (RX_MEM_CFG) */
+#define MCI_CTRL_RX_MEM_CFG_REG_NUM 0x0
+#define MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(val) (((val) & 0xFF) << 24)
+#define MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(val) (((val) & 0xFF) << 16)
+#define MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(val) (((val) & 0xFF) << 8)
+#define MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(val) (((val) & 0xF) << 4)
+#define MCI_CTRL_RX_TX_MEM_CFG_RTC(val) (((val) & 0x3) << 2)
+#define MCI_CTRL_RX_TX_MEM_CFG_WTC(val) (((val) & 0x3) << 0)
+#define MCI_CTRL_RX_MEM_CFG_REG_DEF_CP_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x07) | \
+ MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x3f) | \
+ MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x3f) | \
+ MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(0xf) | \
+ MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
+ MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
+
+#define MCI_CTRL_RX_MEM_CFG_REG_DEF_AP_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x3f) | \
+ MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x03) | \
+ MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x3f) | \
+ MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(0xf) | \
+ MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
+ MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
+
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
+ * Tx Memory Configuration Register (TX_MEM_CFG) */
+#define MCI_CTRL_TX_MEM_CFG_REG_NUM 0x1
+/* field mapping for TX mem config register are the as for RX register - see register above */
+#define MCI_CTRL_TX_MEM_CFG_REG_DEF_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x20) | \
+ MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x20) | \
+ MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x20) | \
+ MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(2) | \
+ MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
+ MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Link CRC Control */
+/* MCi Link CRC Control Register (MCi_CRC_CTRL) */
+#define MCI_LINK_CRC_CTRL_REG_NUM 0x4
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Status Register */
+/* MCi Status Register (MCi_STS) */
+#define MCI_CTRL_STATUS_REG_NUM 0x5
+#define MCI_CTRL_STATUS_REG_PHY_READY (1 << 12)
+#define MCI_CTRL_STATUS_REG_LINK_PRESENT (1 << 15)
+#define MCI_CTRL_STATUS_REG_PHY_CID_VIO_OFFSET 24
+#define MCI_CTRL_STATUS_REG_PHY_CID_VIO_MASK (0xF << MCI_CTRL_STATUS_REG_PHY_CID_VIO_OFFSET)
+/* Expected successful Link result, including reserved bit */
+#define MCI_CTRL_PHY_READY (MCI_CTRL_STATUS_REG_PHY_READY | \
+ MCI_CTRL_STATUS_REG_LINK_PRESENT | \
+ MCI_CTRL_STATUS_REG_PHY_CID_VIO_MASK)
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
+ * MCi PHY Speed Settings Register (MCi_PHY_SETTING) */
+#define MCI_CTRL_MCI_PHY_SETTINGS_REG_NUM 0x8
+#define MCI_CTRL_MCI_PHY_SET_DLO_FIFO_FULL_TRESH(val) (((val) & 0xF) << 28)
+#define MCI_CTRL_MCI_PHY_SET_PHY_MAX_SPEED(val) (((val) & 0xF) << 12)
+#define MCI_CTRL_MCI_PHY_SET_PHYCLK_SEL(val) (((val) & 0xF) << 8)
+#define MCI_CTRL_MCI_PHY_SET_REFCLK_FREQ_SEL(val) (((val) & 0xF) << 4)
+#define MCI_CTRL_MCI_PHY_SET_AUTO_LINK_EN(val) (((val) & 0x1) << 1)
+#define MCI_CTRL_MCI_PHY_SET_REG_DEF_VAL (MCI_CTRL_MCI_PHY_SET_DLO_FIFO_FULL_TRESH(0x3) | \
+ MCI_CTRL_MCI_PHY_SET_PHY_MAX_SPEED(0x3) | \
+ MCI_CTRL_MCI_PHY_SET_PHYCLK_SEL(0x2) | \
+ MCI_CTRL_MCI_PHY_SET_REFCLK_FREQ_SEL(0x1))
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Mode Config */
+#define MCI_CTRL_IHB_MODE_CFG_REG_NUM 0x25
+#define MCI_CTRL_IHB_MODE_HBCLK_DIV(val) ((val) & 0xFF)
+#define MCI_CTRL_IHB_MODE_CHUNK_MOD_OFFSET 8
+#define MCI_CTRL_IHB_MODE_CHUNK_MOD (1 << MCI_CTRL_IHB_MODE_CHUNK_MOD_OFFSET)
+#define MCI_CTRL_IHB_MODE_FWD_MOD_OFFSET 9
+#define MCI_CTRL_IHB_MODE_FWD_MOD (1 << MCI_CTRL_IHB_MODE_FWD_MOD_OFFSET)
+#define MCI_CTRL_IHB_MODE_SEQFF_FINE_MOD(val) (((val) & 0xF) << 12)
+#define MCI_CTRL_IHB_MODE_RX_COMB_THRESH(val) (((val) & 0xFF) << 16)
+#define MCI_CTRL_IHB_MODE_TX_COMB_THRESH(val) (((val) & 0xFF) << 24)
+
+#define MCI_CTRL_IHB_MODE_CFG_REG_DEF_VAL (MCI_CTRL_IHB_MODE_HBCLK_DIV(6) | \
+ MCI_CTRL_IHB_MODE_FWD_MOD | \
+ MCI_CTRL_IHB_MODE_SEQFF_FINE_MOD(0xF) | \
+ MCI_CTRL_IHB_MODE_RX_COMB_THRESH(0x3f) | \
+ MCI_CTRL_IHB_MODE_TX_COMB_THRESH(0x40))
+/* AXI_HB registers */
+#define MCI_AXI_ACCESS_DATA_REG_NUM 0x0
+#define MCI_AXI_ACCESS_PCIE_MODE 1
+#define MCI_AXI_ACCESS_CACHE_CHECK_OFFSET 5
+#define MCI_AXI_ACCESS_CACHE_CHECK (1 << MCI_AXI_ACCESS_CACHE_CHECK_OFFSET)
+#define MCI_AXI_ACCESS_FORCE_POST_WR_OFFSET 6
+#define MCI_AXI_ACCESS_FORCE_POST_WR (1 << MCI_AXI_ACCESS_FORCE_POST_WR_OFFSET)
+#define MCI_AXI_ACCESS_DISABLE_CLK_GATING_OFFSET 9
+#define MCI_AXI_ACCESS_DISABLE_CLK_GATING (1 << MCI_AXI_ACCESS_DISABLE_CLK_GATING_OFFSET)
+
+/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Window 0 Address Mask Register */
+#define MCI_HB_CTRL_WIN0_ADDRESS_MASK_REG_NUM 0x2
+
+/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Window 0 Destination Register */
+#define MCI_HB_CTRL_WIN0_DESTINATION_REG_NUM 0x3
+#define MCI_HB_CTRL_WIN0_DEST_VALID_FLAG(val) (((val) & 0x1) << 16)
+#define MCI_HB_CTRL_WIN0_DEST_ID(val) (((val) & 0xFF) << 0)
+
+/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Tx Control Register */
+#define MCI_HB_CTRL_TX_CTRL_REG_NUM 0xD
+#define MCI_HB_CTRL_TX_CTRL_PCIE_MODE_OFFSET 24
+#define MCI_HB_CTRL_TX_CTRL_PCIE_MODE (1 << MCI_HB_CTRL_TX_CTRL_PCIE_MODE_OFFSET)
+#define MCI_HB_CTRL_TX_CTRL_PRI_TH_QOS(val) (((val) & 0xF) << 12)
+#define MCI_HB_CTRL_TX_CTRL_MAX_RD_CNT(val) (((val) & 0x1F) << 6)
+#define MCI_HB_CTRL_TX_CTRL_MAX_WR_CNT(val) (((val) & 0x1F) << 0)
+
+/* HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB PHY Idle Control Register */
+#define MCI_PHY_P0_IDLE_CTRL_REG_NUM 0x6
+#define MCI_PHY_P0_IDLE_MIN_IDLE_COUNT_OFFSET 12
+#define MCI_PHY_P0_IDLE_MIN_IDLE_COUNT (0xF << MCI_PHY_P0_IDLE_MIN_IDLE_COUNT_OFFSET)
+#define MCI_PHY_P0_IDLE_SW_PWR_REQ_EN_OFFSET 16
+#define MCI_PHY_P0_IDLE_SW_PWR_REQ_EN (1 << MCI_PHY_P0_IDLE_SW_PWR_REQ_EN_OFFSET)
+#define MCI_PHY_P0_IDLE_SW_RETRAIN_MODE_OFFSET 20
+#define MCI_PHY_P0_IDLE_SW_RETRAIN_MODE (1 << MCI_PHY_P0_IDLE_SW_RETRAIN_MODE_OFFSET)
+
+/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Version Control Register */
+#define MCI_PHY_CTRL_REG_NUM 0x7
+#define MCI_PHY_CTRL_MCI_MINOR 0x8 /* BITS [3:0] */
+#define MCI_PHY_CTRL_MCI_MAJOR_OFFSET 4
+#define MCI_PHY_CTRL_MCI_MAJOR (1 << MCI_PHY_CTRL_MCI_MAJOR_OFFSET)
+#define MCI_PHY_CTRL_MCI_SLEEP_REQ_OFFSET 11
+#define MCI_PHY_CTRL_MCI_SLEEP_REQ (1 << MCI_PHY_CTRL_MCI_SLEEP_REQ_OFFSET)
+#define MCI_PHY_CTRL_MCI_PHY_MODE_OFFSET 24 /* Host=1 / Device=0 PHY mode */
+#define MCI_PHY_CTRL_MCI_PHY_MODE_HOST (1 << MCI_PHY_CTRL_MCI_PHY_MODE_OFFSET)
+#define MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE_OFFSET 25 /* Register=1 / PWM=0 interface */
+#define MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE (1 << MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE_OFFSET)
+#define MCI_PHY_CTRL_MCI_PHY_RESET_CORE_OFFSET 26 /* PHY code InReset=1 */
+#define MCI_PHY_CTRL_MCI_PHY_RESET_CORE (1 << MCI_PHY_CTRL_MCI_PHY_RESET_CORE_OFFSET)
+#define MCI_PHY_CTRL_PHY_ADDR_MSB_OFFSET 27
+#define MCI_PHY_CTRL_PHY_ADDR_MSB(addr) (((addr) & 0x3) << MCI_PHY_CTRL_PHY_ADDR_MSB_OFFSET)
+#define MCI_PHY_CTRL_PIDI_MODE_OFFSET 31
+#define MCI_PHY_CTRL_PIDI_MODE (1 << MCI_PHY_CTRL_PIDI_MODE_OFFSET)
+/* /IHB_8G_X4_PHY_V /Units /Registers /PWM Control Register 2 */
+#define MCI_PHY_PWM2_REG_NUM 0x6
+#define PWM2_SPEED_V3_8G (3)
+#define PWM2_SPEED_V2_4G (2)
+#define PWM2_SPEED_V1_2G (1)
+#define PWM2_SPEED_V0_1G (0)
+#define PWM2_SPEED_FORCE_OFFSET 10
+#define PWM2_SPEED_FORCE (1 << PWM2_SPEED_FORCE_OFFSET)
+#define PWM2_RX_LINE_EN_OFFSET 21
+#define PWM2_RX_LINE_EN (1 << PWM2_RX_LINE_EN_OFFSET)
+#define PWM2_TX_LINE_EN_OFFSET 29
+#define PWM2_TX_LINE_EN (1 << PWM2_TX_LINE_EN_OFFSET)
+
+/* /IHB_8G_X4_PHY_V /Units /Registers /PWM Control Register 3 */
+#define MCI_PHY_PWM3_REG_NUM 0x7
+#define PWM3_LINK_ERROR_OFFSET 8 /* [11:8] : LINK_ERROR */
+#define PWM3_LINK_ERROR_MASK (0xF << PWM3_LINK_ERROR_OFFSET)
+#define PWM3_NUM_OF_LANES_OFFSET 20 /* [20:22] : AUTO_NUMBER_OF_LANES */
+#define PWM3_NUM_OF_LANES_MASK (0x7 << PWM3_NUM_OF_LANES_OFFSET)
+#define PWM3_LINK_SPEED_MASK 0x7 /* [3:0] AUTO_SPEED */
+
+/* Number of times to wait for the MCI link ready after MCI configurations
+ * Normally takes 34-35 successive reads
+ */
+#define LINK_READY_TIMEOUT 100
+
+enum mci_register_type {
+ MCI_REG_TYPE_PHY = 0,
+ MCI_REG_TYPE_CTRL,
+};
+
enum {
MCI_CMD_WRITE,
MCI_CMD_READ
diff --git a/include/drivers/marvell/mci.h b/include/drivers/marvell/mci.h
index 2944e66b..c76e3e94 100644
--- a/include/drivers/marvell/mci.h
+++ b/include/drivers/marvell/mci.h
@@ -35,218 +35,6 @@
#ifndef _MCI_H_
#define _MCI_H_
-/* /HB /Units /Direct_regs /Direct regs /Configuration Register Write/Read Data Register */
-#define MCI_WRITE_READ_DATA_REG(mci_index) MVEBU_MCI_REG_BASE_REMAP(mci_index)
-/* /HB /Units /Direct_regs /Direct regs /Configuration Register Access Command Register */
-#define MCI_ACCESS_CMD_REG(mci_index) (MVEBU_MCI_REG_BASE_REMAP(mci_index) + 0x4)
-/* Access Command fields :
- * bit[3:0] - Sub command: 1 => Periferal Config Register Read,
- * 0 => Periferal Config Refister Write,
- * 2 => Periferal Assign ID request,
- * 3 => Circular Config Write
- * bit[5] - 1 => Local (same chip access) 0 => Remote
- * bit[15:8] - Destination hop ID. Put Global ID (GID) here (see scheme below).
- * bit[23:22] - 0x3 IHB PHY REG address space, 0x0 IHB Controller space
- * bit[21:16] - Low 6 bits of offset. Hight 2 bits are taken from bit[28:27]
- * of IHB_PHY_CTRL (must be set before any PHY register access occures):
- * /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Version Control Register
- *
- * ixi_ihb_top IHB PHY
- * AXI ----------------------------- -------------
- * <--| axi_hb_top | ihb_pipe_top |-->| |
- * -->| GID=1 | GID=0 |<--| |
- * ----------------------------- -------------
- */
-#define MCI_INDIRECT_CTRL_READ_CMD 0x1
-#define MCI_INDIRECT_CTRL_ASSIGN_CMD 0x2
-#define MCI_INDIRECT_CTRL_CIRCULAR_CMD 0x3
-#define MCI_INDIRECT_CTRL_LOCAL_PKT (1 << 5)
-#define MCI_INDIRECT_CTRL_CMD_DONE_OFFSET 6
-#define MCI_INDIRECT_CTRL_CMD_DONE (1 << MCI_INDIRECT_CTRL_CMD_DONE_OFFSET)
-#define MCI_INDIRECT_CTRL_DATA_READY_OFFSET 7
-#define MCI_INDIRECT_CTRL_DATA_READY (1 << MCI_INDIRECT_CTRL_DATA_READY_OFFSET)
-#define MCI_INDIRECT_CTRL_HOPID_OFFSET 8
-#define MCI_INDIRECT_CTRL_HOPID(id) (((id) & 0xFF) << MCI_INDIRECT_CTRL_HOPID_OFFSET)
-#define MCI_INDIRECT_CTRL_REG_CHIPID_OFFSET 16
-#define MCI_INDIRECT_REG_CTRL_ADDR(reg_num) (reg_num << MCI_INDIRECT_CTRL_REG_CHIPID_OFFSET)
-/* Hop ID values */
-#define GID_IHB_PIPE 0
-#define GID_AXI_HB 1
-#define GID_IHB_EXT 2
-
-
-#define MCI_DID_GLOBAL_ASSIGNMENT_REQUEST_REG 0x2
-/* Target MCi Local ID (LID, which is = self DID) */
-#define MCI_DID_GLOBAL_ASSIGN_REQ_MCI_LOCAL_ID(val) (((val) & 0xFF) << 16)
-/* Bits [15:8]: Number of MCis on chip of target MCi */
-#define MCI_DID_GLOBAL_ASSIGN_REQ_MCI_COUNT(val) (((val) & 0xFF) << 8)
-/* Bits [7:0]: Number of hops on chip of target MCi */
-#define MCI_DID_GLOBAL_ASSIGN_REQ_HOPS_NUM(val) (((val) & 0xFF) << 0)
-
-/* IHB_REG domain registers */
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
- * Rx Memory Configuration Register (RX_MEM_CFG) */
-#define MCI_CTRL_RX_MEM_CFG_REG_NUM 0x0
-#define MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(val) (((val) & 0xFF) << 24)
-#define MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(val) (((val) & 0xFF) << 16)
-#define MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(val) (((val) & 0xFF) << 8)
-#define MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(val) (((val) & 0xF) << 4)
-#define MCI_CTRL_RX_TX_MEM_CFG_RTC(val) (((val) & 0x3) << 2)
-#define MCI_CTRL_RX_TX_MEM_CFG_WTC(val) (((val) & 0x3) << 0)
-#define MCI_CTRL_RX_MEM_CFG_REG_DEF_CP_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x07) | \
- MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x3f) | \
- MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x3f) | \
- MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(0xf) | \
- MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
- MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
-
-#define MCI_CTRL_RX_MEM_CFG_REG_DEF_AP_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x3f) | \
- MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x03) | \
- MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x3f) | \
- MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(0xf) | \
- MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
- MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
-
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
- * Tx Memory Configuration Register (TX_MEM_CFG) */
-#define MCI_CTRL_TX_MEM_CFG_REG_NUM 0x1
-/* field mapping for TX mem config register are the as for RX register - see register above */
-#define MCI_CTRL_TX_MEM_CFG_REG_DEF_VAL (MCI_CTRL_RX_TX_MEM_CFG_RQ_THRESH(0x20) | \
- MCI_CTRL_RX_TX_MEM_CFG_PQ_THRESH(0x20) | \
- MCI_CTRL_RX_TX_MEM_CFG_NQ_THRESH(0x20) | \
- MCI_CTRL_RX_TX_MEM_CFG_DELTA_THRESH(2) | \
- MCI_CTRL_RX_TX_MEM_CFG_RTC(1) | \
- MCI_CTRL_RX_TX_MEM_CFG_WTC(1))
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Link CRC Control */
-/* MCi Link CRC Control Register (MCi_CRC_CTRL) */
-#define MCI_LINK_CRC_CTRL_REG_NUM 0x4
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Status Register */
-/* MCi Status Register (MCi_STS) */
-#define MCI_CTRL_STATUS_REG_NUM 0x5
-#define MCI_CTRL_STATUS_REG_PHY_READY (1 << 12)
-#define MCI_CTRL_STATUS_REG_LINK_PRESENT (1 << 15)
-#define MCI_CTRL_STATUS_REG_PHY_CID_VIO_OFFSET 24
-#define MCI_CTRL_STATUS_REG_PHY_CID_VIO_MASK (0xF << MCI_CTRL_STATUS_REG_PHY_CID_VIO_OFFSET)
-/* Expected successful Link result, including reserved bit */
-#define MCI_CTRL_PHY_READY (MCI_CTRL_STATUS_REG_PHY_READY | \
- MCI_CTRL_STATUS_REG_LINK_PRESENT | \
- MCI_CTRL_STATUS_REG_PHY_CID_VIO_MASK)
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers/
- * MCi PHY Speed Settings Register (MCi_PHY_SETTING) */
-#define MCI_CTRL_MCI_PHY_SETTINGS_REG_NUM 0x8
-#define MCI_CTRL_MCI_PHY_SET_DLO_FIFO_FULL_TRESH(val) (((val) & 0xF) << 28)
-#define MCI_CTRL_MCI_PHY_SET_PHY_MAX_SPEED(val) (((val) & 0xF) << 12)
-#define MCI_CTRL_MCI_PHY_SET_PHYCLK_SEL(val) (((val) & 0xF) << 8)
-#define MCI_CTRL_MCI_PHY_SET_REFCLK_FREQ_SEL(val) (((val) & 0xF) << 4)
-#define MCI_CTRL_MCI_PHY_SET_AUTO_LINK_EN(val) (((val) & 0x1) << 1)
-#define MCI_CTRL_MCI_PHY_SET_REG_DEF_VAL (MCI_CTRL_MCI_PHY_SET_DLO_FIFO_FULL_TRESH(0x3) | \
- MCI_CTRL_MCI_PHY_SET_PHY_MAX_SPEED(0x3) | \
- MCI_CTRL_MCI_PHY_SET_PHYCLK_SEL(0x2) | \
- MCI_CTRL_MCI_PHY_SET_REFCLK_FREQ_SEL(0x1))
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Mode Config */
-#define MCI_CTRL_IHB_MODE_CFG_REG_NUM 0x25
-#define MCI_CTRL_IHB_MODE_HBCLK_DIV(val) ((val) & 0xFF)
-#define MCI_CTRL_IHB_MODE_CHUNK_MOD_OFFSET 8
-#define MCI_CTRL_IHB_MODE_CHUNK_MOD (1 << MCI_CTRL_IHB_MODE_CHUNK_MOD_OFFSET)
-#define MCI_CTRL_IHB_MODE_FWD_MOD_OFFSET 9
-#define MCI_CTRL_IHB_MODE_FWD_MOD (1 << MCI_CTRL_IHB_MODE_FWD_MOD_OFFSET)
-#define MCI_CTRL_IHB_MODE_SEQFF_FINE_MOD(val) (((val) & 0xF) << 12)
-#define MCI_CTRL_IHB_MODE_RX_COMB_THRESH(val) (((val) & 0xFF) << 16)
-#define MCI_CTRL_IHB_MODE_TX_COMB_THRESH(val) (((val) & 0xFF) << 24)
-
-#define MCI_CTRL_IHB_MODE_CFG_REG_DEF_VAL (MCI_CTRL_IHB_MODE_HBCLK_DIV(6) | \
- MCI_CTRL_IHB_MODE_FWD_MOD | \
- MCI_CTRL_IHB_MODE_SEQFF_FINE_MOD(0xF) | \
- MCI_CTRL_IHB_MODE_RX_COMB_THRESH(0x3f) | \
- MCI_CTRL_IHB_MODE_TX_COMB_THRESH(0x40))
-/* AXI_HB registers */
-#define MCI_AXI_ACCESS_DATA_REG_NUM 0x0
-#define MCI_AXI_ACCESS_PCIE_MODE 1
-#define MCI_AXI_ACCESS_CACHE_CHECK_OFFSET 5
-#define MCI_AXI_ACCESS_CACHE_CHECK (1 << MCI_AXI_ACCESS_CACHE_CHECK_OFFSET)
-#define MCI_AXI_ACCESS_FORCE_POST_WR_OFFSET 6
-#define MCI_AXI_ACCESS_FORCE_POST_WR (1 << MCI_AXI_ACCESS_FORCE_POST_WR_OFFSET)
-#define MCI_AXI_ACCESS_DISABLE_CLK_GATING_OFFSET 9
-#define MCI_AXI_ACCESS_DISABLE_CLK_GATING (1 << MCI_AXI_ACCESS_DISABLE_CLK_GATING_OFFSET)
-
-/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Window 0 Address Mask Register */
-#define MCI_HB_CTRL_WIN0_ADDRESS_MASK_REG_NUM 0x2
-
-/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Window 0 Destination Register */
-#define MCI_HB_CTRL_WIN0_DESTINATION_REG_NUM 0x3
-#define MCI_HB_CTRL_WIN0_DEST_VALID_FLAG(val) (((val) & 0x1) << 16)
-#define MCI_HB_CTRL_WIN0_DEST_ID(val) (((val) & 0xFF) << 0)
-
-/* /HB /Units /HB_REG /HB_REGHopping Bus Registers /Tx Control Register */
-#define MCI_HB_CTRL_TX_CTRL_REG_NUM 0xD
-#define MCI_HB_CTRL_TX_CTRL_PCIE_MODE_OFFSET 24
-#define MCI_HB_CTRL_TX_CTRL_PCIE_MODE (1 << MCI_HB_CTRL_TX_CTRL_PCIE_MODE_OFFSET)
-#define MCI_HB_CTRL_TX_CTRL_PRI_TH_QOS(val) (((val) & 0xF) << 12)
-#define MCI_HB_CTRL_TX_CTRL_MAX_RD_CNT(val) (((val) & 0x1F) << 6)
-#define MCI_HB_CTRL_TX_CTRL_MAX_WR_CNT(val) (((val) & 0x1F) << 0)
-
-/* HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB PHY Idle Control Register */
-#define MCI_PHY_P0_IDLE_CTRL_REG_NUM 0x6
-#define MCI_PHY_P0_IDLE_MIN_IDLE_COUNT_OFFSET 12
-#define MCI_PHY_P0_IDLE_MIN_IDLE_COUNT (0xF << MCI_PHY_P0_IDLE_MIN_IDLE_COUNT_OFFSET)
-#define MCI_PHY_P0_IDLE_SW_PWR_REQ_EN_OFFSET 16
-#define MCI_PHY_P0_IDLE_SW_PWR_REQ_EN (1 << MCI_PHY_P0_IDLE_SW_PWR_REQ_EN_OFFSET)
-#define MCI_PHY_P0_IDLE_SW_RETRAIN_MODE_OFFSET 20
-#define MCI_PHY_P0_IDLE_SW_RETRAIN_MODE (1 << MCI_PHY_P0_IDLE_SW_RETRAIN_MODE_OFFSET)
-
-/* /HB /Units /IHB_REG /IHB_REGInterchip Hopping Bus Registers /IHB Version Control Register */
-#define MCI_PHY_CTRL_REG_NUM 0x7
-#define MCI_PHY_CTRL_MCI_MINOR 0x8 /* BITS [3:0] */
-#define MCI_PHY_CTRL_MCI_MAJOR_OFFSET 4
-#define MCI_PHY_CTRL_MCI_MAJOR (1 << MCI_PHY_CTRL_MCI_MAJOR_OFFSET)
-#define MCI_PHY_CTRL_MCI_SLEEP_REQ_OFFSET 11
-#define MCI_PHY_CTRL_MCI_SLEEP_REQ (1 << MCI_PHY_CTRL_MCI_SLEEP_REQ_OFFSET)
-#define MCI_PHY_CTRL_MCI_PHY_MODE_OFFSET 24 /* Host=1 / Device=0 PHY mode */
-#define MCI_PHY_CTRL_MCI_PHY_MODE_HOST (1 << MCI_PHY_CTRL_MCI_PHY_MODE_OFFSET)
-#define MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE_OFFSET 25 /* Register=1 / PWM=0 interface */
-#define MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE (1 << MCI_PHY_CTRL_MCI_PHY_REG_IF_MODE_OFFSET)
-#define MCI_PHY_CTRL_MCI_PHY_RESET_CORE_OFFSET 26 /* PHY code InReset=1 */
-#define MCI_PHY_CTRL_MCI_PHY_RESET_CORE (1 << MCI_PHY_CTRL_MCI_PHY_RESET_CORE_OFFSET)
-#define MCI_PHY_CTRL_PHY_ADDR_MSB_OFFSET 27
-#define MCI_PHY_CTRL_PHY_ADDR_MSB(addr) (((addr) & 0x3) << MCI_PHY_CTRL_PHY_ADDR_MSB_OFFSET)
-#define MCI_PHY_CTRL_PIDI_MODE_OFFSET 31
-#define MCI_PHY_CTRL_PIDI_MODE (1 << MCI_PHY_CTRL_PIDI_MODE_OFFSET)
-/* /IHB_8G_X4_PHY_V /Units /Registers /PWM Control Register 2 */
-#define MCI_PHY_PWM2_REG_NUM 0x6
-#define PWM2_SPEED_V3_8G (3)
-#define PWM2_SPEED_V2_4G (2)
-#define PWM2_SPEED_V1_2G (1)
-#define PWM2_SPEED_V0_1G (0)
-#define PWM2_SPEED_FORCE_OFFSET 10
-#define PWM2_SPEED_FORCE (1 << PWM2_SPEED_FORCE_OFFSET)
-#define PWM2_RX_LINE_EN_OFFSET 21
-#define PWM2_RX_LINE_EN (1 << PWM2_RX_LINE_EN_OFFSET)
-#define PWM2_TX_LINE_EN_OFFSET 29
-#define PWM2_TX_LINE_EN (1 << PWM2_TX_LINE_EN_OFFSET)
-
-/* /IHB_8G_X4_PHY_V /Units /Registers /PWM Control Register 3 */
-#define MCI_PHY_PWM3_REG_NUM 0x7
-#define PWM3_LINK_ERROR_OFFSET 8 /* [11:8] : LINK_ERROR */
-#define PWM3_LINK_ERROR_MASK (0xF << PWM3_LINK_ERROR_OFFSET)
-#define PWM3_NUM_OF_LANES_OFFSET 20 /* [20:22] : AUTO_NUMBER_OF_LANES */
-#define PWM3_NUM_OF_LANES_MASK (0x7 << PWM3_NUM_OF_LANES_OFFSET)
-#define PWM3_LINK_SPEED_MASK 0x7 /* [3:0] AUTO_SPEED */
-
-/* Number of times to wait for the MCI link ready after MCI configurations
- * Normally takes 34-35 successive reads
- */
-#define LINK_READY_TIMEOUT 100
-
-enum mci_register_type {
- MCI_REG_TYPE_PHY = 0,
- MCI_REG_TYPE_CTRL,
-};
-
int mci_initialize(int mci_index);
#endif /* _MCI_H_ */