diff --git a/osi/core/eqos_core.c b/osi/core/eqos_core.c index 3d8cb48..43739e3 100644 --- a/osi/core/eqos_core.c +++ b/osi/core/eqos_core.c @@ -1692,6 +1692,15 @@ static void eqos_configure_mac(struct osi_core_priv_data *const osi_core) eqos_core_safety_writel(osi_core, value, (nveu8_t *)osi_core->base + EQOS_MAC_MCR, EQOS_MAC_MCR_IDX); + /* Enable common interrupt at wrapper level */ + if (osi_core->mac_ver >= OSI_EQOS_MAC_5_30) { + value = osi_readla(osi_core, (nveu8_t *)osi_core->base + + EQOS_WRAP_COMMON_INTR_ENABLE); + value |= EQOS_MAC_SBD_INTR; + osi_writela(osi_core, value, (nveu8_t *)osi_core->base + + EQOS_WRAP_COMMON_INTR_ENABLE); + } + /* enable Packet Duplication Control */ value = osi_readla(osi_core, (nveu8_t *)osi_core->base + EQOS_MAC_EXTR); if (osi_core->mac_ver >= OSI_EQOS_MAC_5_00) { @@ -2520,8 +2529,17 @@ static void eqos_handle_common_intr(struct osi_core_priv_data *const osi_core) nveu32_t i = 0; nveu32_t dma_sr = 0; nveu32_t dma_ier = 0; - unsigned int mtl_isr = 0; - unsigned int frp_isr = 0U; + nveu32_t mtl_isr = 0; + nveu32_t frp_isr = 0U; + nveu32_t val = 0U; + + if (osi_core->mac_ver >= OSI_EQOS_MAC_5_30) { + val = osi_readla(osi_core, (nveu8_t *)osi_core->base + + EQOS_WRAP_COMMON_INTR_STATUS); + val |= EQOS_MAC_SBD_INTR; + osi_writela(osi_core, val, (nveu8_t *)osi_core->base + + EQOS_WRAP_COMMON_INTR_STATUS); + } dma_isr = osi_readla(osi_core, (nveu8_t *)base + EQOS_DMA_ISR); if (dma_isr == 0U) { diff --git a/osi/core/eqos_core.h b/osi/core/eqos_core.h index a9313f4..02bc699 100644 --- a/osi/core/eqos_core.h +++ b/osi/core/eqos_core.h @@ -184,6 +184,9 @@ #define EQOS_PAD_AUTO_CAL_CFG 0x8804U #define EQOS_PAD_AUTO_CAL_STAT 0x880CU #define EQOS_VIRT_INTR_APB_CHX_CNTRL(x) (0x8200U + ((x) * 4U)) +#define EQOS_WRAP_COMMON_INTR_ENABLE 0x8704 +#define EQOS_WRAP_COMMON_INTR_STATUS 0x8708 +#define EQOS_MAC_SBD_INTR 0x4 /** @} */ /**