mirror of
git://nv-tegra.nvidia.com/kernel/nvethernetrm.git
synced 2025-12-22 09:12:10 +03:00
osi: Enable BASE-R FEC support for 25G
Bug 4674473 Change-Id: Ic4a0f67158449094a9489afbe8de8d2efc0fdf99 Signed-off-by: Mahesh Patil <maheshp@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/3316844 GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: Ajay Gupta <ajayg@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Srinivas Ramachandran <srinivasra@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
c13a414c34
commit
df0be09573
@@ -364,32 +364,36 @@ nve32_t xlgpcs_start(struct osi_core_priv_data *osi_core)
|
||||
ret = -1;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* * XLGPCS programming guideline IAS section 7.1.3.2.2.2
|
||||
*/
|
||||
/* 4 Poll SR_PCS_CTRL1 reg RST bit */
|
||||
ctrl = xpcs_read(xpcs_base, XLGPCS_SR_PCS_CTRL1);
|
||||
ctrl |= XLGPCS_SR_PCS_CTRL1_RST;
|
||||
xpcs_write(xpcs_base, XLGPCS_SR_PCS_CTRL1, ctrl);
|
||||
|
||||
count = 0;
|
||||
while (cond == 1) {
|
||||
if (count > retry) {
|
||||
ret = -1;
|
||||
goto fail;
|
||||
}
|
||||
count++;
|
||||
if (osi_core->pcs_base_r_fec_en != OSI_ENABLE) {
|
||||
/* 4 Poll SR_PCS_CTRL1 reg RST bit */
|
||||
ctrl = xpcs_read(xpcs_base, XLGPCS_SR_PCS_CTRL1);
|
||||
if ((ctrl & XLGPCS_SR_PCS_CTRL1_RST) == 0U) {
|
||||
cond = 0;
|
||||
} else {
|
||||
/* Maximum wait delay as per HW team is 10msec.
|
||||
* So add a loop for 1000 iterations with 1usec delay,
|
||||
* so that if check get satisfies before 1msec will come
|
||||
* out of loop and it can save some boot time
|
||||
*/
|
||||
osi_core->osd_ops.udelay(10U);
|
||||
ctrl |= XLGPCS_SR_PCS_CTRL1_RST;
|
||||
xpcs_write(xpcs_base, XLGPCS_SR_PCS_CTRL1, ctrl);
|
||||
|
||||
count = 0;
|
||||
while (cond == 1) {
|
||||
if (count > retry) {
|
||||
ret = -1;
|
||||
goto fail;
|
||||
}
|
||||
count++;
|
||||
ctrl = xpcs_read(xpcs_base, XLGPCS_SR_PCS_CTRL1);
|
||||
if ((ctrl & XLGPCS_SR_PCS_CTRL1_RST) == 0U) {
|
||||
cond = 0;
|
||||
} else {
|
||||
/* Maximum wait delay as per HW team is 10msec.
|
||||
* So add a loop for 1000 iterations with 1usec delay,
|
||||
* so that if check get satisfies before 1msec will come
|
||||
* out of loop and it can save some boot time
|
||||
*/
|
||||
osi_core->osd_ops.udelay(10U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 5 Program SR_AN_CTRL reg AN_EN bit to disable auto-neg */
|
||||
ctrl = xpcs_read(xpcs_base, XLGPCS_SR_AN_CTRL);
|
||||
ctrl &= ~XLGPCS_SR_AN_CTRL_AN_EN;
|
||||
@@ -856,6 +860,21 @@ static nve32_t xpcs_base_r_fec(struct osi_core_priv_data *osi_core)
|
||||
nveu32_t ctrl = 0;
|
||||
nve32_t ret = 0;
|
||||
|
||||
if ((osi_core->pcs_base_r_fec_en == OSI_ENABLE) &&
|
||||
(osi_core->uphy_gbe_mode == OSI_GBE_MODE_25G)) {
|
||||
/* Program SR_AN_CTRL reg AN_EN bit to disable auto-neg */
|
||||
ctrl = xpcs_read(xpcs_base, XLGPCS_SR_AN_CTRL);
|
||||
ctrl &= ~XLGPCS_SR_AN_CTRL_AN_EN;
|
||||
ret = xpcs_write_safety(osi_core, XLGPCS_SR_AN_CTRL, ctrl);
|
||||
if (ret != 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
osi_writela(osi_core, XPCS_WRAP_UPHY_TIMEOUT_CONTROL_0_0_VALUE,
|
||||
(nveu8_t *)osi_core->xpcs_base +
|
||||
T26X_XPCS_WRAP_UPHY_TIMEOUT_CONTROL_0_0);
|
||||
}
|
||||
|
||||
/* Enable/Disable BASE-R FEC */
|
||||
ctrl = xpcs_read(xpcs_base, XPCS_SR_PMA_KR_FEC_CTRL);
|
||||
if (osi_core->pcs_base_r_fec_en == OSI_ENABLE) {
|
||||
@@ -869,7 +888,7 @@ static nve32_t xpcs_base_r_fec(struct osi_core_priv_data *osi_core)
|
||||
ret = xpcs_write_safety(osi_core, XPCS_SR_PMA_KR_FEC_CTRL, ctrl);
|
||||
if (ret != 0) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
fail:
|
||||
return ret;
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
#define T26X_XPCS_WRAP_UPHY_TX_CTRL_2 0x8008
|
||||
#define T26X_XPCS_WRAP_UPHY_RX_CTRL_2 0x8040
|
||||
#define T26X_XPCS_WRAP_UPHY_RX_CTRL_3 0x8044
|
||||
|
||||
#define T26X_XPCS_WRAP_UPHY_TIMEOUT_CONTROL_0_0 0x8070
|
||||
|
||||
/** @} */
|
||||
|
||||
@@ -134,6 +134,7 @@
|
||||
#define XPCS_10G_WRAP_UPHY_RX_CTRL_2_SLEEP_CAL_EN_DLY 0xCAAU
|
||||
#define XPCS_10G_WRAP_UPHY_TX_CTRL_3_DATAREADY_DATAEN_DLY 0x50U
|
||||
#define XPCS_10G_WRAP_UPHY_RX_CTRL_3_CAL_DONE_DATA_EN_DLY 0x32U
|
||||
#define XPCS_WRAP_UPHY_TIMEOUT_CONTROL_0_0_VALUE 0x3FFFD90
|
||||
|
||||
#define EQOS_XPCS_WRAP_UPHY_HW_INIT_CTRL 0x8038
|
||||
#define EQOS_XPCS_WRAP_UPHY_STATUS 0x8064
|
||||
|
||||
Reference in New Issue
Block a user