mirror of
git://nv-tegra.nvidia.com/kernel/nvethernetrm.git
synced 2025-12-24 10:34:24 +03:00
osi: T26x: update delay for UPHY XPCS lane bringup
- Update delay for 10G required when EQ is enabled. - Enable the EQ for 10G. - Update delay for eqos. Bug 4790491 Change-Id: I63146b1a9ab03d5dbcdbc26e4d2a7ec48a15e497 Signed-off-by: Mahesh Patil <maheshp@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/3270227 Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Srinivas Ramachandran <srinivasra@nvidia.com> Reviewed-by: Narayana Reddy P <narayanr@nvidia.com> Reviewed-by: Ajay Gupta <ajayg@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
b5ed6001a7
commit
3a59f31c77
@@ -458,17 +458,23 @@ static nve32_t xpcs_uphy_lane_bring_up(struct osi_core_priv_data *osi_core,
|
|||||||
T26X_XPCS_WRAP_UPHY_HW_INIT_CTRL
|
T26X_XPCS_WRAP_UPHY_HW_INIT_CTRL
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((osi_core->mac == OSI_MAC_HW_MGBE_T26X) || (osi_core->mac_ver == OSI_EQOS_MAC_5_40)) {
|
if (osi_core->mac == OSI_MAC_HW_MGBE_T26X) {
|
||||||
|
/* Delay added as per HW team suggestion which is
|
||||||
|
* of 100msec if equalizer is enabled for every
|
||||||
|
* iteration of a lane bring sequence. So 100 * 1000
|
||||||
|
* gives us a delay of 100msec for each retry of lane
|
||||||
|
* bringup */
|
||||||
retry = 1000U;
|
retry = 1000U;
|
||||||
if (osi_core->uphy_gbe_mode == OSI_GBE_MODE_25G) {
|
retry_delay = 100U;
|
||||||
/* Delay added as per HW team suggestion which is
|
} else if (osi_core->mac_ver == OSI_EQOS_MAC_5_40) {
|
||||||
* of 100msec if equalizer is enabled for every
|
/* Delay added as per HW team suggestion which is
|
||||||
* iteration of a lane bring sequence. So 100 * 1000
|
* of 10msec for eqos lane bring up. So 10 * 1000
|
||||||
* gives us a delay of 100msec for each retry of lane
|
* gives us a delay of 10msec for each retry of lane
|
||||||
* bringup
|
* bringup */
|
||||||
*/
|
retry = 1000U;
|
||||||
retry_delay = 100U;
|
retry_delay = 10U;
|
||||||
}
|
} else {
|
||||||
|
/* do nothing */
|
||||||
}
|
}
|
||||||
|
|
||||||
val = osi_readla(osi_core,
|
val = osi_readla(osi_core,
|
||||||
@@ -884,6 +890,7 @@ fail:
|
|||||||
nve32_t xpcs_init(struct osi_core_priv_data *osi_core)
|
nve32_t xpcs_init(struct osi_core_priv_data *osi_core)
|
||||||
{
|
{
|
||||||
void *xpcs_base = osi_core->xpcs_base;
|
void *xpcs_base = osi_core->xpcs_base;
|
||||||
|
nveu32_t value = 0;
|
||||||
nveu32_t ctrl = 0;
|
nveu32_t ctrl = 0;
|
||||||
nve32_t ret = 0;
|
nve32_t ret = 0;
|
||||||
|
|
||||||
@@ -898,6 +905,38 @@ nve32_t xpcs_init(struct osi_core_priv_data *osi_core)
|
|||||||
"xpcs_base_r_fec failed", 0ULL);
|
"xpcs_base_r_fec failed", 0ULL);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
if ((osi_core->mac == OSI_MAC_HW_MGBE_T26X) &&
|
||||||
|
(osi_core->uphy_gbe_mode == OSI_GBE_MODE_10G)) {
|
||||||
|
/* Added below programming sequence from hw scripts */
|
||||||
|
value = osi_readla(osi_core, (nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_CONFIG_0);
|
||||||
|
value &= ~OSI_BIT(0);
|
||||||
|
osi_writela(osi_core, value, (nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_CONFIG_0);
|
||||||
|
osi_writela(osi_core, XPCS_10G_WRAP_UPHY_RX_CTRL_2_SLEEP_CAL_EN_DLY,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_TX_CTRL_2);
|
||||||
|
osi_writela(osi_core, XPCS_10G_WRAP_UPHY_RX_CTRL_2_SLEEP_CAL_EN_DLY,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_RX_CTRL_2);
|
||||||
|
osi_writela(osi_core, XPCS_10G_WRAP_UPHY_TX_CTRL_3_DATAREADY_DATAEN_DLY,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_TX_CTRL_3);
|
||||||
|
osi_writela(osi_core, XPCS_10G_WRAP_UPHY_RX_CTRL_3_CAL_DONE_DATA_EN_DLY,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_RX_CTRL_3);
|
||||||
|
osi_writela(osi_core,
|
||||||
|
XLGPCS_WRAP_UPHY_TO_CTRL2_EQ_DONE_TOV,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_T0_CTRL_2_0);
|
||||||
|
value = osi_readla(osi_core,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_RX_CTRL_5_0);
|
||||||
|
value |= XLGPCS_WRAP_UPHY_RX_CTRL5_RX_EQ_ENABLE;
|
||||||
|
osi_writela(osi_core, value,
|
||||||
|
(nveu8_t *)osi_core->xpcs_base +
|
||||||
|
T26X_XPCS_WRAP_UPHY_RX_CTRL_5_0);
|
||||||
|
}
|
||||||
|
|
||||||
if (xpcs_lane_bring_up(osi_core) < 0) {
|
if (xpcs_lane_bring_up(osi_core) < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|||||||
@@ -131,6 +131,9 @@
|
|||||||
#define XPCS_WRAP_UPHY_TX_CTRL_3_DATAREADY_DATAEN_DLY 0x82U
|
#define XPCS_WRAP_UPHY_TX_CTRL_3_DATAREADY_DATAEN_DLY 0x82U
|
||||||
#define XPCS_WRAP_UPHY_RX_CTRL_2_SLEEP_CAL_EN_DLY 0xFBDU
|
#define XPCS_WRAP_UPHY_RX_CTRL_2_SLEEP_CAL_EN_DLY 0xFBDU
|
||||||
#define XPCS_WRAP_UPHY_RX_CTRL_3_CAL_DONE_DATA_EN_DLY 0x78U
|
#define XPCS_WRAP_UPHY_RX_CTRL_3_CAL_DONE_DATA_EN_DLY 0x78U
|
||||||
|
#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 EQOS_XPCS_WRAP_UPHY_HW_INIT_CTRL 0x8038
|
#define EQOS_XPCS_WRAP_UPHY_HW_INIT_CTRL 0x8038
|
||||||
#define EQOS_XPCS_WRAP_UPHY_STATUS 0x8064
|
#define EQOS_XPCS_WRAP_UPHY_STATUS 0x8064
|
||||||
|
|||||||
Reference in New Issue
Block a user