osi: core: mgbe: add hsi support for t26x

Added hsi support for below HSIs

T264-MGBE_HSIv2-1
T264-MGBE_HSIv2-2
T264-MGBE_HSIv2-38
T264-MGBE_HSIv2-6
T264-MGBE_HSIv2-7
T264-MGBE_HSIv2-8
T264-MGBE_HSIv2-59
T264-MGBE_HSIv2-60
T264-MGBE_HSIv2-72
T264-MGBE_HSIv2-78

JIRA NET-1948
Bug 4778785

Signed-off-by: Narayan Reddy <narayanr@nvidia.com>
Change-Id: Id0f64470134e8b98962911a95c69eeb6d69a41cf
Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/3260086
Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com>
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: Srinivas Ramachandran <srinivasra@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
Reviewed-by: Bhadram Varka <vbhadram@nvidia.com>
Reviewed-by: Rakesh Goyal <rgoyal@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
This commit is contained in:
Narayan Reddy
2024-12-02 05:24:35 +00:00
committed by mobile promotions
parent c6e5d88ef2
commit c8e1bd95a2
6 changed files with 218 additions and 104 deletions

View File

@@ -659,6 +659,8 @@ typedef my_lint_64 nvel64_t;
#define MAC2MAC_ERR_IDX 8U
/** @brief Link training monitor error Index */
#define PCS_LNK_ERR_IDX 9U
/** @brief mac common interrupt status monitor error Index */
#define MAC_CMN_INTR_ERR_IDX 10U
/** @brief MACSEC RX CRC error Index */
#define MACSEC_RX_CRC_ERR_IDX 0U
/** @brief MACSEC TX CRC error Index */
@@ -692,7 +694,7 @@ typedef my_lint_64 nvel64_t;
* @brief Maximum number of different mac error code
* HSI_SW_ERR_CODE + Two (Corrected and Uncorrected error code)
*/
#define OSI_HSI_MAX_MAC_ERROR_CODE 10U
#define OSI_HSI_MAX_MAC_ERROR_CODE 11U
/**
* @brief Maximum number of different macsec error code
@@ -743,6 +745,8 @@ typedef my_lint_64 nvel64_t;
#define OSI_M2M_CONFIG_PTP_ERR 0x12U
/** @brief pcs link status error code */
#define OSI_PCS_LNK_ERR 0x13U
/** @brief MAC common interrupt status error code */
#define OSI_MAC_CMN_INTR_ERR 0x14U
/** @brief EQOS uncorrectable attribute */
#define OSI_EQOS_UNCORRECTABLE_ATTR 0x109
@@ -1881,6 +1885,8 @@ struct osi_core_priv_data {
/** skip auto neg for usxgmii mode.
* 0(enable AN) and 1(disable AN) are the valid values */
nveu32_t skip_usxgmii_an;
/** MAC common interrupt received */
nveu32_t mac_common_intr_rcvd;
};
/**

View File

@@ -1943,6 +1943,11 @@ nve32_t hsi_common_error_inject(struct osi_core_priv_data *osi_core,
osi_core->hsi.report_err = OSI_ENABLE;
osi_core->hsi.report_count_err[XPCS_WRITE_FAIL_IDX] = OSI_ENABLE;
break;
case OSI_MAC_CMN_INTR_ERR:
osi_core->hsi.err_code[MAC_CMN_INTR_ERR_IDX] = OSI_MAC_CMN_INTR_ERR;
osi_core->hsi.report_err = OSI_ENABLE;
osi_core->hsi.report_count_err[MAC_CMN_INTR_ERR_IDX] = OSI_ENABLE;
break;
case OSI_M2M_TSC_READ_ERR:
case OSI_M2M_TIME_CAL_ERR:
case OSI_M2M_ADJ_FREQ_ERR:

View File

@@ -2193,21 +2193,89 @@ static nve32_t mgbe_hsi_configure(struct osi_core_priv_data *const osi_core,
/* T23X-MGBE_HSIv2-11:Initialization of Watchdog Timer */
value = (0xCCU << XPCS_SFTY_1US_MULT_SHIFT) & XPCS_SFTY_1US_MULT_MASK;
value |= ((nveu32_t)0x01U << XPCS_FSM_TO_SEL_SHIFT) & XPCS_FSM_TO_SEL_MASK;
value |= XPCS_VR_XS_PCS_SFTY_TMR_CTRL_IFT_SEL;
ret = xpcs_write_safety(osi_core, XPCS_VR_XS_PCS_SFTY_TMR_CTRL, value);
if (ret != 0) {
goto fail;
}
/* T23X-MGBE_HSIv2-1 Configure ECC */
/* Below setting is applicable only for 25G in XLGPCS */
if (osi_core->uphy_gbe_mode == OSI_GBE_MODE_25G) {
/* T264-MGBE_HSIv2-59 Initialization of Transaction Timeout in XLGPCS */
/* T264-MGBE_HSIv2-60 Initialization of Watchdog Timer for XLGPCS FSM States */
value = (0xCBU << XPCS_SFTY_1US_MULT_SHIFT) & XPCS_SFTY_1US_MULT_MASK;
value |= ((nveu32_t)0x01U << XPCS_FSM_TO_SEL_SHIFT) & XPCS_FSM_TO_SEL_MASK;
/* IFT_SEL field same as */
value |= XPCS_VR_XS_PCS_SFTY_TMR_CTRL_IFT_SEL;
ret = xpcs_write_safety(osi_core, XLGPCS_VR_PCS_SFTY_TMR_CTRL, value);
if (ret != 0) {
goto fail;
}
}
/* T23X-MGBE_HSIv2-38: Initialization of Register Parity for control registers */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
value &= ~MGBE_MTL_ECC_MTXED;
value &= ~MGBE_MTL_ECC_MRXED;
value &= ~MGBE_MTL_ECC_MGCLED;
value &= ~MGBE_MTL_ECC_MRXPED;
value &= ~MGBE_MTL_ECC_TSOED;
value &= ~MGBE_MTL_ECC_DESCED;
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
value |= MGBE_CPEN;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
/* For T26x CE/UCE are not handled by SW driver,since they are directly
* reported to FSI through HSM , so not enabling it
*/
if (osi_core->mac != OSI_MAC_HW_MGBE_T26X) {
/* T23X-MGBE_HSIv2-1 Configure ECC */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
value &= ~MGBE_MTL_ECC_MTXED;
value &= ~MGBE_MTL_ECC_MRXED;
value &= ~MGBE_MTL_ECC_MGCLED;
value &= ~MGBE_MTL_ECC_MRXPED;
value &= ~MGBE_MTL_ECC_TSOED;
value &= ~MGBE_MTL_ECC_DESCED;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
/* Enable Interrupt */
/* T23X-MGBE_HSIv2-1: Enabling of Memory ECC */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
value |= MGBE_MTL_TXCEIE;
value |= MGBE_MTL_RXCEIE;
value |= MGBE_MTL_GCEIE;
value |= MGBE_MTL_RPCEIE;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
value |= MGBE_DMA_TCEIE;
value |= MGBE_DMA_DCEIE;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value |= MGBE_REGISTER_PARITY_ERR;
value |= MGBE_CORE_CORRECTABLE_ERR;
value |= MGBE_CORE_UNCORRECTABLE_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value = osi_readla(osi_core, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
value |= XPCS_CORE_CORRECTABLE_ERR;
value |= XPCS_CORE_UNCORRECTABLE_ERR;
value |= XPCS_REGISTER_PARITY_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
/* T23X-MGBE_HSIv2-2: Enabling of Bus Parity */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
value &= ~MGBE_DDPP;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
}
/* T23X-MGBE_HSIv2-5: Enabling and Initialization of Transaction Timeout */
value = (0x198U << MGBE_TMR_SHIFT) & MGBE_TMR_MASK;
@@ -2241,53 +2309,6 @@ static nve32_t mgbe_hsi_configure(struct osi_core_priv_data *const osi_core,
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MMC_RX_INTR_EN);
/* T23X-MGBE_HSIv2-2: Enabling of Bus Parity */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
value &= ~MGBE_DDPP;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
/* T23X-MGBE_HSIv2-38: Initialization of Register Parity for control registers */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
value |= MGBE_CPEN;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
/* Enable Interrupt */
/* T23X-MGBE_HSIv2-1: Enabling of Memory ECC */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
value |= MGBE_MTL_TXCEIE;
value |= MGBE_MTL_RXCEIE;
value |= MGBE_MTL_GCEIE;
value |= MGBE_MTL_RPCEIE;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
value |= MGBE_DMA_TCEIE;
value |= MGBE_DMA_DCEIE;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value |= MGBE_REGISTER_PARITY_ERR;
value |= MGBE_CORE_CORRECTABLE_ERR;
value |= MGBE_CORE_UNCORRECTABLE_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value = osi_readla(osi_core, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
value |= XPCS_CORE_CORRECTABLE_ERR;
value |= XPCS_CORE_UNCORRECTABLE_ERR;
value |= XPCS_REGISTER_PARITY_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
} else {
osi_core->hsi.enabled = OSI_DISABLE;
@@ -2296,36 +2317,49 @@ static nve32_t mgbe_hsi_configure(struct osi_core_priv_data *const osi_core,
if (ret != 0) {
goto fail;
}
/* T23X-MGBE_HSIv2-1 Disable ECC */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
value |= MGBE_MTL_ECC_MTXED;
value |= MGBE_MTL_ECC_MRXED;
value |= MGBE_MTL_ECC_MGCLED;
value |= MGBE_MTL_ECC_MRXPED;
value |= MGBE_MTL_ECC_TSOED;
value |= MGBE_MTL_ECC_DESCED;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
/* T23X-MGBE_HSIv2-5: Enabling and Initialization of Transaction Timeout */
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_DWCXG_CORE_MAC_FSM_ACT_TIMER);
if (osi_core->mac != OSI_MAC_HW_MGBE_T26X) {
/* T23X-MGBE_HSIv2-1 Disable ECC */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
value |= MGBE_MTL_ECC_MTXED;
value |= MGBE_MTL_ECC_MRXED;
value |= MGBE_MTL_ECC_MGCLED;
value |= MGBE_MTL_ECC_MRXPED;
value |= MGBE_MTL_ECC_TSOED;
value |= MGBE_MTL_ECC_DESCED;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_CONTROL);
/* Disable Interrupts */
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
/* T23X-MGBE_HSIv2-4: Enabling of Consistency Monitor for XGMAC FSM State */
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_MAC_FSM_CONTROL);
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
/* T23X-MGBE_HSIv2-20: Enabling of error reporting for Inbound Bus CRC errors */
osi_writela(osi_core, 0, (nveu8_t *)osi_core->base + MGBE_MMC_RX_INTR_EN);
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value &= ~MGBE_REGISTER_PARITY_ERR;
value &= ~MGBE_CORE_CORRECTABLE_ERR;
value &= ~MGBE_CORE_UNCORRECTABLE_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
/* T23X-MGBE_HSIv2-2: Disable of Bus Parity */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
value |= MGBE_DDPP;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
value = osi_readla(osi_core, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
value &= ~XPCS_CORE_CORRECTABLE_ERR;
value &= ~XPCS_CORE_UNCORRECTABLE_ERR;
value &= ~XPCS_REGISTER_PARITY_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
/* T23X-MGBE_HSIv2-2: Disable of Bus Parity */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
value |= MGBE_DDPP;
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MTL_DPP_CONTROL);
}
/* T23X-MGBE_HSIv2-38: Disable Register Parity for control registers */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
@@ -2333,28 +2367,26 @@ static nve32_t mgbe_hsi_configure(struct osi_core_priv_data *const osi_core,
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MAC_SCSR_CONTROL);
/* Disable Interrupts */
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_MTL_ECC_INTERRUPT_ENABLE);
/* T23X-MGBE_HSIv2-5: Disabling and DeInitialization of Transaction Timeout */
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_DWCXG_CORE_MAC_FSM_ACT_TIMER);
value &= ~(MGBE_TMR_MASK | MGBE_CTMR_MASK | MGBE_LTMRMD_MASK | MGBE_NTMRMD_MASK);
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_DWCXG_CORE_MAC_FSM_ACT_TIMER);
osi_writela(osi_core, 0,
(nveu8_t *)osi_core->base + MGBE_DMA_ECC_INTERRUPT_ENABLE);
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MAC_FSM_CONTROL);
value &= ~MGBE_PRTYEN;
value &= ~MGBE_TMOUTEN;
/* T23X-MGBE_HSIv2-4: Disabling of Consistency Monitor for XGMAC FSM State */
osi_writela(osi_core, value,
(nveu8_t *)osi_core->base + MGBE_MAC_FSM_CONTROL);
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value &= ~MGBE_REGISTER_PARITY_ERR;
value &= ~MGBE_CORE_CORRECTABLE_ERR;
value &= ~MGBE_CORE_UNCORRECTABLE_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
intr_en[osi_core->mac]);
value = osi_readla(osi_core, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
value &= ~XPCS_CORE_CORRECTABLE_ERR;
value &= ~XPCS_CORE_UNCORRECTABLE_ERR;
value &= ~XPCS_REGISTER_PARITY_ERR;
osi_writela(osi_core, value, (nveu8_t *)osi_core->xpcs_base +
xpcs_intr_ctrl_reg[osi_core->mac]);
value = osi_readla(osi_core,
(nveu8_t *)osi_core->base + MGBE_MMC_RX_INTR_EN);
value &= ~MGBE_RXCRCERPIE;
/* T23X-MGBE_HSIv2-20: Disabling of error reporting for Inbound Bus CRC errors */
osi_writela(osi_core, value, (nveu8_t *)osi_core->base + MGBE_MMC_RX_INTR_EN);
}
fail:
return ret;
@@ -3058,6 +3090,9 @@ static void mgbe_handle_mac_fpe_intrs(struct osi_core_priv_data *osi_core)
/* interrupt bit clear on read as CSR_SW is reset */
val = osi_readla(osi_core, (nveu8_t *)
osi_core->base + MGBE_MAC_FPE_CTS);
if (val != 0U ) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
if ((val & MGBE_MAC_FPE_CTS_RVER) == MGBE_MAC_FPE_CTS_RVER) {
val &= ~MGBE_MAC_FPE_CTS_RVER;
@@ -3128,6 +3163,9 @@ static void mgbe_handle_link_change_and_fpe_intrs(struct osi_core_priv_data *osi
nveu32_t link_ok = 0;
#endif /* HSI_SUPPORT */
/* T264-MGBE_HSIv2-72, T264-MGBE_HSIv2-78 we wil be relying on MAC interrupt
* for any fault occurs during link training */
/* Check for Link status change interrupt */
if ((mac_isr & MGBE_MAC_ISR_LSI) == OSI_ENABLE) {
/* For Local fault need to stop network data and restart the LANE bringup */
@@ -3193,6 +3231,9 @@ static void mgbe_handle_mac_intrs(struct osi_core_priv_data *osi_core)
mac_isr = osi_readla(osi_core, base + MGBE_MAC_ISR);
if (mac_isr != 0U ) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
/* handle mgbe link change and fpe interrupts */
mgbe_handle_link_change_and_fpe_intrs(osi_core, mac_isr);
@@ -3752,6 +3793,9 @@ static void mgbe_handle_mtl_intrs(struct osi_core_priv_data *osi_core,
/* check if Q has underflow error */
qstatus = osi_readl((nveu8_t *)osi_core->base +
MGBE_MTL_QINT_STATUS(qinx));
if (qstatus != 0U ) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
/* Transmit Queue Underflow Interrupt Status */
if ((qstatus & MGBE_MTL_QINT_TXUNIFS) == MGBE_MTL_QINT_TXUNIFS) {
#ifndef OSI_STRIPPED_LIB
@@ -4068,6 +4112,45 @@ static void mgbe_handle_hsi_intr(struct osi_core_priv_data *osi_core)
}
#endif
/**
* @brief mgbe_check_intr_status - Check interrupt status.
*
* Algorithm: Check for the MDIO, LPI, PCTH, PCTW status registers
*
* @param[in] osi_core: OSI core private data structure.
*
* @note MAC should be init and started. see osi_start_mac()
*/
static void mgbe_check_intr_status(struct osi_core_priv_data *const osi_core)
{
nveu32_t value;
#ifndef OSI_STRIPPED_LIB
/* Read for MAC_LPI_Control_Status */
value = osi_readla(osi_core, (nveu8_t *)osi_core->base + MGBE_MAC_LPI_CSR);
if ((value & MGBE_MAC_LPI_STATUS_MASK) != 0U) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
#endif /* !OSI_STRIPPED_LIB */
/* Read for MDIO_Interrupt_Status */
value = osi_readla(osi_core, (nveu8_t *)osi_core->base + MGBE_MAC_MDIO_INTR_STS);
if (value != 0U) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
/* Read for MAC_PCTH_Intr_Status */
value = osi_readla(osi_core, (nveu8_t *)osi_core->base + MGBE_MAC_PCTH_INTR_STS);
if (value != 0U) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
/* Read for MAC_PCTW_Intr_Status */
value = osi_readla(osi_core, (nveu8_t *)osi_core->base + MGBE_MAC_PCTW_INTR_STS);
if (value != 0U) {
osi_core->mac_common_intr_rcvd = OSI_ENABLE;
}
}
/**
* @brief mgbe_handle_common_intr - Handles common interrupt.
*
@@ -4102,7 +4185,7 @@ static void mgbe_handle_common_intr(struct osi_core_priv_data *const osi_core)
nveu32_t val = 0;
#ifdef HSI_SUPPORT
if (osi_core->hsi.enabled == OSI_ENABLE) {
if ((osi_core->hsi.enabled == OSI_ENABLE) && (osi_core->mac != OSI_MAC_HW_MGBE_T26X)) {
mgbe_handle_hsi_intr(osi_core);
}
#endif
@@ -4167,6 +4250,9 @@ static void mgbe_handle_common_intr(struct osi_core_priv_data *const osi_core)
mgbe_handle_mtl_intrs(osi_core, mtl_isr);
}
/* Check MDIO, LPI, PCTH, PCTW interrupt status */
mgbe_check_intr_status(osi_core);
/* Clear common interrupt status in wrapper register */
osi_writela(osi_core, MGBE_MAC_SBD_INTR,
(nveu8_t *)base + intr_status[osi_core->mac]);
@@ -4183,6 +4269,17 @@ static void mgbe_handle_common_intr(struct osi_core_priv_data *const osi_core)
MGBE_MTL_RXP_INTR_CS_FOOVIS |
MGBE_MTL_RXP_INTR_CS_PDRFIS);
osi_writela(osi_core, val, (nveu8_t *)base + MGBE_MTL_RXP_INTR_CS);
#ifdef HSI_SUPPORT
/* if interrupt is not from any of the below conditions then notify error */
if ((osi_core->hsi.enabled == OSI_ENABLE) &&
!((dma_sr != 0U) || (dma_isr_ch0_15 != 0U) || (dma_isr_ch16_47 != 0U)
|| (mtl_isr != 0U) || (val != 0U) || (osi_core->mac_common_intr_rcvd != 0U))) {
osi_core->hsi.err_code[MAC_CMN_INTR_ERR_IDX] = OSI_MAC_CMN_INTR_ERR;
osi_core->hsi.report_err = OSI_ENABLE;
osi_core->hsi.report_count_err[MAC_CMN_INTR_ERR_IDX] = OSI_ENABLE;
osi_core->mac_common_intr_rcvd = OSI_DISABLE;
}
#endif
done:
return;

View File

@@ -159,6 +159,7 @@
#define MGBE_MAC_LPI_CSR_LPITXA OSI_BIT(19)
#define MGBE_MAC_LPI_CSR_PLS OSI_BIT(17)
#define MGBE_MAC_LPI_CSR_LPIEN OSI_BIT(16)
#define MGBE_MAC_LPI_STATUS_MASK 0xF0FU
#define MGBE_MAC_PFR_VTFE_SHIFT 16
#define MGBE_MAC_PIDR_PID_MASK 0XFFFFU
@@ -382,10 +383,13 @@
#define MGBE_MAC_EXT_CNF 0x0140
#define MGBE_MDIO_SCCD 0x0204
#define MGBE_MDIO_SCCA 0x0200
#define MGBE_MAC_MDIO_INTR_STS 0x0214
#define MGBE_MAC_ADDRH(x) ((0x0008U * (x)) + 0x0300U)
#define MGBE_MAC_ADDRL(x) ((0x0008U * (x)) + 0x0304U)
#define MGBE_MAC_INDIR_AC 0x0700
#define MGBE_MAC_INDIR_DATA 0x0704
#define MGBE_MAC_PCTH_INTR_STS 0x070C
#define MGBE_MAC_PCTW_INTR_STS 0x0734
#define MGBE_MMC_TX_INTR_EN 0x0810
#define MGBE_MMC_RX_INTR_EN 0x080C
#define MGBE_MMC_CNTRL 0x0800

View File

@@ -548,7 +548,7 @@ static void fill_hsi_attributes(struct osi_core_priv_data *const osi_core)
nveu32_t i = 0U;
nveu32_t instance = 0U;
if (osi_core->mac == OSI_MAC_HW_MGBE) {
if ((osi_core->mac == OSI_MAC_HW_MGBE) || (osi_core->mac == OSI_MAC_HW_MGBE_T26X)) {
/* Update MGBE instance */
instance = osi_core->instance_id + 1U;
} else {

View File

@@ -209,6 +209,8 @@
#define XPCS_FSM_TO_SEL_MASK 0xC00U
#define EQOS_PCS_SFTY_TMR_CTRL 0x7E03D4
#define EQOS_PCS_SFTY_TMR_CTRL_RXFPEI OSI_BIT(8)
#define XLGPCS_VR_PCS_SFTY_TMR_CTRL 0xE03E4
#define XPCS_VR_XS_PCS_SFTY_TMR_CTRL_IFT_SEL OSI_BIT(8)
#endif
/** @} */