diff options
author | Igal Liberman <igall@marvell.com> | 2017-08-27 13:59:59 +0300 |
---|---|---|
committer | Kostya Porotchkin <kostap@marvell.com> | 2017-08-31 18:17:54 +0300 |
commit | edd15acdaef60fed973c328b1d1563d6f91a3d4c (patch) | |
tree | b8dfe4ca9afed5d8802f9ff7a93889535dbc45ab | |
parent | 9fcfc8e53ed4d51a39dc72bd177f988c225be3d6 (diff) |
pcie: a8040_ocp: pcie stabilization configurations
This patch optimizes the pcie comphy receiver and transmitter configuration.
It includes the following optimizations:
RX - Force FFE constant values instead of trained values
TX - Increase the full swing value and update all presets
(p0 - p10) accordingly
Change-Id: I6e48d543eb343b453ed804d9b48bcfec86c30225
Signed-off-by: Ofir Fedida <ofedida@marvell.com>
Signed-off-by: Igal Liberman <igall@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/43426
Tested-by: iSoC Platform CI <ykjenk@marvell.com>
Reviewed-by: Kostya Porotchkin <kostap@marvell.com>
-rw-r--r-- | drivers/marvell/comphy.h | 118 | ||||
-rw-r--r-- | drivers/marvell/pcie-comphy-cp110.c | 138 | ||||
-rw-r--r-- | plat/marvell/a8k/a80x0_ocp/plat_def.h | 1 |
3 files changed, 256 insertions, 1 deletions
diff --git a/drivers/marvell/comphy.h b/drivers/marvell/comphy.h index b58fc071..9b0f4e5b 100644 --- a/drivers/marvell/comphy.h +++ b/drivers/marvell/comphy.h @@ -329,6 +329,12 @@ #define HPIPE_G2_DFE_RES_MASK (0x3 << HPIPE_G2_DFE_RES_OFFSET) #define HPIPE_G3_SETTING_3_REG 0x450 +#define HPIPE_G3_FFE_CAP_SEL_OFFSET 0 +#define HPIPE_G3_FFE_CAP_SEL_MASK (0xf << HPIPE_G3_FFE_CAP_SEL_OFFSET) +#define HPIPE_G3_FFE_RES_SEL_OFFSET 4 +#define HPIPE_G3_FFE_RES_SEL_MASK (0x7 << HPIPE_G3_FFE_RES_SEL_OFFSET) +#define HPIPE_G3_FFE_SETTING_FORCE_OFFSET 7 +#define HPIPE_G3_FFE_SETTING_FORCE_MASK (0x1 << HPIPE_G3_FFE_SETTING_FORCE_OFFSET) #define HPIPE_G3_FFE_DEG_RES_LEVEL_OFFSET 12 #define HPIPE_G3_FFE_DEG_RES_LEVEL_MASK (0x3 << HPIPE_G3_FFE_DEG_RES_LEVEL_OFFSET) #define HPIPE_G3_FFE_LOAD_RES_LEVEL_OFFSET 14 @@ -379,6 +385,10 @@ #define HPIPE_LANE_CFG4_SSC_CTRL_MASK (0x1 << HPIPE_LANE_CFG4_SSC_CTRL_OFFSET) #define HPIPE_LANE_EQU_CONFIG_0_REG 0x69C +#define HPIPE_CFG_EQ_FS_OFFSET 0 +#define HPIPE_CFG_EQ_FS_MASK (0x3f << HPIPE_CFG_EQ_FS_OFFSET) +#define HPIPE_CFG_EQ_LF_OFFSET 6 +#define HPIPE_CFG_EQ_LF_MASK (0x3f << HPIPE_CFG_EQ_LF_OFFSET) #define HPIPE_CFG_PHY_RC_EP_OFFSET 12 #define HPIPE_CFG_PHY_RC_EP_MASK (0x1 << HPIPE_CFG_PHY_RC_EP_OFFSET) @@ -386,6 +396,114 @@ #define HPIPE_CFG_UPDATE_POLARITY_OFFSET 12 #define HPIPE_CFG_UPDATE_POLARITY_MASK (0x1 << HPIPE_CFG_UPDATE_POLARITY_OFFSET) +#define HPIPE_LANE_PRESET_CFG0_REG 0x6a8 +#define HPIPE_CFG_CURSOR_PRESET0_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET0_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET0_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET1_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET1_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET1_OFFSET) + +#define HPIPE_LANE_PRESET_CFG1_REG 0x6ac +#define HPIPE_CFG_CURSOR_PRESET2_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET2_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET2_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET3_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET3_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET3_OFFSET) + +#define HPIPE_LANE_PRESET_CFG2_REG 0x6b0 +#define HPIPE_CFG_CURSOR_PRESET4_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET4_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET4_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET5_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET5_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET5_OFFSET) + +#define HPIPE_LANE_PRESET_CFG3_REG 0x6b4 +#define HPIPE_CFG_CURSOR_PRESET6_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET6_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET6_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET7_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET7_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET7_OFFSET) + +#define HPIPE_LANE_PRESET_CFG4_REG 0x6b8 +#define HPIPE_CFG_CURSOR_PRESET8_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET8_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET8_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET9_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET9_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET9_OFFSET) + +#define HPIPE_LANE_PRESET_CFG5_REG 0x6bc +#define HPIPE_CFG_CURSOR_PRESET10_OFFSET 0 +#define HPIPE_CFG_CURSOR_PRESET10_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET10_OFFSET) +#define HPIPE_CFG_CURSOR_PRESET11_OFFSET 6 +#define HPIPE_CFG_CURSOR_PRESET11_MASK (0x3f << HPIPE_CFG_CURSOR_PRESET11_OFFSET) + +#define HPIPE_LANE_PRESET_CFG6_REG 0x6c0 +#define HPIPE_CFG_PRE_CURSOR_PRESET0_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET0_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET0_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET0_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET0_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET0_OFFSET) + +#define HPIPE_LANE_PRESET_CFG7_REG 0x6c4 +#define HPIPE_CFG_PRE_CURSOR_PRESET1_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET1_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET1_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET1_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET1_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET1_OFFSET) + +#define HPIPE_LANE_PRESET_CFG8_REG 0x6c8 +#define HPIPE_CFG_PRE_CURSOR_PRESET2_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET2_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET2_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET2_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET2_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET2_OFFSET) + +#define HPIPE_LANE_PRESET_CFG9_REG 0x6cc +#define HPIPE_CFG_PRE_CURSOR_PRESET3_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET3_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET3_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET3_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET3_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET3_OFFSET) + +#define HPIPE_LANE_PRESET_CFG10_REG 0x6d0 +#define HPIPE_CFG_PRE_CURSOR_PRESET4_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET4_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET4_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET4_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET4_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET4_OFFSET) + +#define HPIPE_LANE_PRESET_CFG11_REG 0x6d4 +#define HPIPE_CFG_PRE_CURSOR_PRESET5_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET5_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET5_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET5_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET5_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET5_OFFSET) + +#define HPIPE_LANE_PRESET_CFG12_REG 0x6d8 +#define HPIPE_CFG_PRE_CURSOR_PRESET6_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET6_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET6_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET6_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET6_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET6_OFFSET) + +#define HPIPE_LANE_PRESET_CFG13_REG 0x6dc +#define HPIPE_CFG_PRE_CURSOR_PRESET7_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET7_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET7_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET7_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET7_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET7_OFFSET) + +#define HPIPE_LANE_PRESET_CFG14_REG 0x6e0 +#define HPIPE_CFG_PRE_CURSOR_PRESET8_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET8_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET8_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET8_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET8_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET8_OFFSET) + +#define HPIPE_LANE_PRESET_CFG15_REG 0x6e4 +#define HPIPE_CFG_PRE_CURSOR_PRESET9_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET9_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET9_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET9_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET9_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET9_OFFSET) + +#define HPIPE_LANE_PRESET_CFG16_REG 0x6e8 +#define HPIPE_CFG_PRE_CURSOR_PRESET10_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET10_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET10_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET10_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET10_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET10_OFFSET) + +#define HPIPE_LANE_PRESET_CFG17_REG 0x6ec +#define HPIPE_CFG_PRE_CURSOR_PRESET11_OFFSET 0 +#define HPIPE_CFG_PRE_CURSOR_PRESET11_MASK (0x3f << HPIPE_CFG_PRE_CURSOR_PRESET11_OFFSET) +#define HPIPE_CFG_POST_CURSOR_PRESET11_OFFSET 6 +#define HPIPE_CFG_POST_CURSOR_PRESET11_MASK (0x3f << HPIPE_CFG_POST_CURSOR_PRESET11_OFFSET) + #define HPIPE_LANE_EQ_REMOTE_SETTING_REG 0x6f8 #define HPIPE_LANE_CFG_FOM_DIRN_OVERRIDE_OFFSET 0 #define HPIPE_LANE_CFG_FOM_DIRN_OVERRIDE_MASK (0x1 << HPIPE_LANE_CFG_FOM_DIRN_OVERRIDE_OFFSET) diff --git a/drivers/marvell/pcie-comphy-cp110.c b/drivers/marvell/pcie-comphy-cp110.c index b1b06845..329f32f6 100644 --- a/drivers/marvell/pcie-comphy-cp110.c +++ b/drivers/marvell/pcie-comphy-cp110.c @@ -356,8 +356,137 @@ int comphy_pcie_power_up(uint32_t lane, struct pci_hw_cfg *hw) data = 0x1 << HPIPE_G3_FFE_DEG_RES_LEVEL_OFFSET; mask |= HPIPE_G3_FFE_LOAD_RES_LEVEL_MASK; data |= 0x3 << HPIPE_G3_FFE_LOAD_RES_LEVEL_OFFSET; + +#ifdef OCP_COMPHY_TUNE + /* FFE-res tuning and cap select */ + mask |= HPIPE_G3_FFE_CAP_SEL_MASK; + data |= 0xf << HPIPE_G3_FFE_CAP_SEL_OFFSET; + mask |= HPIPE_G3_FFE_CAP_SEL_MASK; + data |= 0x4 << HPIPE_G3_FFE_RES_SEL_OFFSET; + mask |= HPIPE_G3_FFE_SETTING_FORCE_MASK; + data |= 0x1 << HPIPE_G3_FFE_SETTING_FORCE_OFFSET; +#endif reg_set(hpipe_addr + HPIPE_G3_SETTING_3_REG, data, mask); +#ifdef OCP_COMPHY_TUNE + /* preset0,1 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET0_MASK; + data = 0x23 << HPIPE_CFG_CURSOR_PRESET0_OFFSET; + mask |= HPIPE_CFG_CURSOR_PRESET1_MASK; + data |= 0x28 << HPIPE_CFG_CURSOR_PRESET1_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG0_REG, data, mask); + + /* preset2,3 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET2_MASK; + data = 0x26 << HPIPE_CFG_CURSOR_PRESET2_OFFSET; + mask |= HPIPE_CFG_CURSOR_PRESET3_MASK; + data |= 0x2a << HPIPE_CFG_CURSOR_PRESET3_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG1_REG, data, mask); + + /* preset4,5 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET4_MASK; + data = 0x30 << HPIPE_CFG_CURSOR_PRESET4_OFFSET; + mask |= HPIPE_CFG_CURSOR_PRESET5_MASK; + data |= 0x2c << HPIPE_CFG_CURSOR_PRESET5_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG2_REG, data, mask); + + /* preset6,7 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET6_MASK; + data = 0x2a << HPIPE_CFG_CURSOR_PRESET6_OFFSET; + mask |= HPIPE_CFG_CURSOR_PRESET7_MASK; + data |= 0x22 << HPIPE_CFG_CURSOR_PRESET7_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG3_REG, data, mask); + + /* preset8,9 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET8_MASK; + data = 0x24 << HPIPE_CFG_CURSOR_PRESET8_OFFSET; + mask |= HPIPE_CFG_CURSOR_PRESET9_MASK; + data |= 0x28 << HPIPE_CFG_CURSOR_PRESET9_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG4_REG, data, mask); + + /* preset10,11 main cursor fine Tune*/ + mask = HPIPE_CFG_CURSOR_PRESET10_MASK; + data = 0x21 << HPIPE_CFG_CURSOR_PRESET10_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG5_REG, data, mask); + + /* preset0 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET0_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET0_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET0_MASK; + data |= 0xd << HPIPE_CFG_POST_CURSOR_PRESET0_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG6_REG, data, mask); + + /* preset1 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET1_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET1_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET1_MASK; + data |= 0x8 << HPIPE_CFG_POST_CURSOR_PRESET1_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG7_REG, data, mask); + + /* preset2 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET2_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET2_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET2_MASK; + data |= 0xa << HPIPE_CFG_POST_CURSOR_PRESET2_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG8_REG, data, mask); + + /* preset3 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET3_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET3_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET3_MASK; + data |= 0x6 << HPIPE_CFG_POST_CURSOR_PRESET3_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG9_REG, data, mask); + + /* preset4 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET4_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET4_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET4_MASK; + data |= 0x0 << HPIPE_CFG_POST_CURSOR_PRESET4_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG10_REG, data, mask); + + /* preset5 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET5_MASK; + data = 0x4 << HPIPE_CFG_PRE_CURSOR_PRESET5_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET5_MASK; + data |= 0x0 << HPIPE_CFG_POST_CURSOR_PRESET5_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG11_REG, data, mask); + + /* preset6 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET6_MASK; + data = 0x6 << HPIPE_CFG_PRE_CURSOR_PRESET6_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET6_MASK; + data |= 0x0 << HPIPE_CFG_POST_CURSOR_PRESET6_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG12_REG, data, mask); + + /* preset7 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET7_MASK; + data = 0x4 << HPIPE_CFG_PRE_CURSOR_PRESET7_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET7_MASK; + data |= 0xa << HPIPE_CFG_POST_CURSOR_PRESET7_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG13_REG, data, mask); + + /* preset8 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET8_MASK; + data = 0x6 << HPIPE_CFG_PRE_CURSOR_PRESET8_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET8_MASK; + data |= 0x6 << HPIPE_CFG_POST_CURSOR_PRESET8_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG14_REG, data, mask); + + /* preset9 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET9_MASK; + data = 0x8 << HPIPE_CFG_PRE_CURSOR_PRESET9_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET9_MASK; + data |= 0x0 << HPIPE_CFG_POST_CURSOR_PRESET9_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG15_REG, data, mask); + + /* preset10 pre and post cursor fine Tune*/ + mask = HPIPE_CFG_PRE_CURSOR_PRESET10_MASK; + data = 0x0 << HPIPE_CFG_PRE_CURSOR_PRESET10_OFFSET; + mask |= HPIPE_CFG_POST_CURSOR_PRESET10_MASK; + data |= 0xf << HPIPE_CFG_POST_CURSOR_PRESET10_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_PRESET_CFG16_REG, data, mask); +#endif /* OCP_COMPHY_TUNE */ + /* Pattern lock lost timeout disable */ mask = HPIPE_FRAME_DET_LOCK_LOST_TO_MASK; data = 0x0 << HPIPE_FRAME_DET_LOCK_LOST_TO_OFFSET; @@ -420,8 +549,15 @@ int comphy_pcie_power_up(uint32_t lane, struct pci_hw_cfg *hw) reg_set(hpipe_addr + HPIPE_LANE_EQU_CONFIG_0_REG, data, mask); } - INFO("stage: Comphy power up\n"); +#ifdef OCP_COMPHY_TUNE + mask = HPIPE_CFG_EQ_FS_MASK; + data = 0x30 << HPIPE_CFG_EQ_FS_OFFSET; + mask |= HPIPE_CFG_EQ_LF_MASK; + data |= 0x10 << HPIPE_CFG_EQ_LF_OFFSET; + reg_set(hpipe_addr + HPIPE_LANE_EQU_CONFIG_0_REG, data, mask); +#endif /* OCP_COMPHY_TUNE */ + INFO("stage: Comphy power up\n"); /* for PCIe by4 or by2 - release from reset only after finish to configure all lanes */ if ((hw->lane_width == 1) || (lane == (hw->lane_width - 1))) { uint32_t i, start_lane, end_lane; diff --git a/plat/marvell/a8k/a80x0_ocp/plat_def.h b/plat/marvell/a8k/a80x0_ocp/plat_def.h index 132f507f..788eb4d6 100644 --- a/plat/marvell/a8k/a80x0_ocp/plat_def.h +++ b/plat/marvell/a8k/a80x0_ocp/plat_def.h @@ -38,6 +38,7 @@ #include <a8k_plat_def.h> #define CP_COUNT 2 /* A80x0 has both CP0 & CP1 */ +#define OCP_COMPHY_TUNE /* Force disable of LLC, regardless of LLC_DISABLE compilation flag * this is due to an issue observed while running iperf with |