mirror of
git://nv-tegra.nvidia.com/kernel/nvethernetrm.git
synced 2025-12-22 17:34:29 +03:00
core: update code for TSN
- Update CTOV recommended value - Update PTOV recommended value - Disable PEC filed on preemption disable - Disable EEST with message to reprogram GCL instead of dropping packet on HLBF/HLBS - Configure code not to drop any packet silently on HLBF and HLBS error - Q2TC mapping with CBS enable Bug 200763256 Bug 200765943 Change-Id: I7a2581af488e22a23d32ce1819440c21f4748800 Signed-off-by: Rakesh Goyal <rgoyal@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/2593162 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Bhadram Varka
parent
964255eba4
commit
bb634e1af4
@@ -1935,35 +1935,34 @@ static void eqos_tsn_init(struct osi_core_priv_data *osi_core,
|
|||||||
/* 6*1/(78.6 MHz) in ns*/
|
/* 6*1/(78.6 MHz) in ns*/
|
||||||
temp = (6U * 13U);
|
temp = (6U * 13U);
|
||||||
} else {
|
} else {
|
||||||
/* 6*1/(312 MHz) in ns*/
|
temp = EQOS_MTL_EST_PTOV_RECOMMEND;
|
||||||
temp = (6U * 3U);
|
|
||||||
}
|
}
|
||||||
temp = temp << EQOS_MTL_EST_CONTROL_PTOV_SHIFT;
|
temp = temp << EQOS_MTL_EST_CONTROL_PTOV_SHIFT;
|
||||||
val |= temp;
|
val |= temp;
|
||||||
|
|
||||||
/* We have a bug on CTOV for Qbv that synopsys is yet to
|
|
||||||
* fix[Case – 8001147927, Bug 200468714]. You can go ahead
|
|
||||||
* with 128*8ns for now. TODO */
|
|
||||||
val &= ~EQOS_MTL_EST_CONTROL_CTOV;
|
val &= ~EQOS_MTL_EST_CONTROL_CTOV;
|
||||||
temp = (128U * 8U);
|
temp = EQOS_MTL_EST_CTOV_RECOMMEND;
|
||||||
temp = temp << EQOS_MTL_EST_CONTROL_CTOV_SHIFT;
|
temp = temp << EQOS_MTL_EST_CONTROL_CTOV_SHIFT;
|
||||||
val |= temp;
|
val |= temp;
|
||||||
|
|
||||||
/*Loop Count to report Scheduling Error*/
|
/*Loop Count to report Scheduling Error*/
|
||||||
val &= ~EQOS_MTL_EST_CONTROL_LCSE;
|
val &= ~EQOS_MTL_EST_CONTROL_LCSE;
|
||||||
val |= EQOS_MTL_EST_CONTROL_LCSE_VAL;
|
val |= EQOS_MTL_EST_CONTROL_LCSE_VAL;
|
||||||
/* Drop Frames causing Scheduling Error */
|
|
||||||
val |= EQOS_MTL_EST_CONTROL_DFBS;
|
val &= ~(EQOS_MTL_EST_CONTROL_DDBF |
|
||||||
|
EQOS_MTL_EST_CONTROL_DFBS);
|
||||||
|
val |= EQOS_MTL_EST_CONTROL_DDBF;
|
||||||
|
|
||||||
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
EQOS_MTL_EST_CONTROL);
|
EQOS_MTL_EST_CONTROL);
|
||||||
|
|
||||||
val = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
val = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
EQOS_MTL_EST_OVERHEAD);
|
EQOS_MTL_EST_OVERHEAD);
|
||||||
val &= ~EQOS_MTL_EST_OVERHEAD_OVHD;
|
val &= ~EQOS_MTL_EST_OVERHEAD_OVHD;
|
||||||
/* As per hardware team recommendation */
|
/* As per hardware team recommendation */
|
||||||
val |= EQOS_MTL_EST_OVERHEAD_RECOMMEND;
|
val |= EQOS_MTL_EST_OVERHEAD_RECOMMEND;
|
||||||
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
EQOS_MTL_EST_OVERHEAD);
|
EQOS_MTL_EST_OVERHEAD);
|
||||||
|
|
||||||
eqos_enable_mtl_interrupts(osi_core);
|
eqos_enable_mtl_interrupts(osi_core);
|
||||||
}
|
}
|
||||||
@@ -2400,12 +2399,13 @@ static inline void update_dma_sr_stats(
|
|||||||
*/
|
*/
|
||||||
static void eqos_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
static void eqos_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
||||||
{
|
{
|
||||||
unsigned int val = 0;
|
unsigned int val = 0U;
|
||||||
unsigned int sch_err = 0;
|
unsigned int sch_err = 0U;
|
||||||
unsigned int frm_err = 0;
|
unsigned int frm_err = 0U;
|
||||||
unsigned int temp = 0U;
|
unsigned int temp = 0U;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
unsigned long stat_val = 0;
|
unsigned long stat_val = 0U;
|
||||||
|
unsigned int value = 0U;
|
||||||
|
|
||||||
val = osi_readla(osi_core,
|
val = osi_readla(osi_core,
|
||||||
(unsigned char *)osi_core->base + EQOS_MTL_EST_STATUS);
|
(unsigned char *)osi_core->base + EQOS_MTL_EST_STATUS);
|
||||||
@@ -2446,6 +2446,18 @@ static void eqos_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
|||||||
sch_err &= 0xFFU; /* only 8 TC allowed so clearing all */
|
sch_err &= 0xFFU; /* only 8 TC allowed so clearing all */
|
||||||
osi_writela(osi_core, sch_err,
|
osi_writela(osi_core, sch_err,
|
||||||
(nveu8_t *)osi_core->base + EQOS_MTL_EST_SCH_ERR);
|
(nveu8_t *)osi_core->base + EQOS_MTL_EST_SCH_ERR);
|
||||||
|
/* Disable est as error happen */
|
||||||
|
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
|
EQOS_MTL_EST_CONTROL);
|
||||||
|
/* DBFS 0 means do not packet */
|
||||||
|
if ((value & EQOS_MTL_EST_CONTROL_DFBS) == OSI_DISABLE) {
|
||||||
|
value &= ~EQOS_MTL_EST_CONTROL_EEST;
|
||||||
|
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
|
||||||
|
EQOS_MTL_EST_CONTROL);
|
||||||
|
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||||
|
"Disabling EST due to HLBS, correct GCL\n",
|
||||||
|
OSI_NONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((val & EQOS_MTL_EST_STATUS_HLBF) == EQOS_MTL_EST_STATUS_HLBF) {
|
if ((val & EQOS_MTL_EST_STATUS_HLBF) == EQOS_MTL_EST_STATUS_HLBF) {
|
||||||
@@ -2468,6 +2480,19 @@ static void eqos_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
|||||||
frm_err &= 0xFFU; /* 8 TC allowed so clearing all */
|
frm_err &= 0xFFU; /* 8 TC allowed so clearing all */
|
||||||
osi_writela(osi_core, frm_err, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, frm_err, (nveu8_t *)osi_core->base +
|
||||||
EQOS_MTL_EST_FRMS_ERR);
|
EQOS_MTL_EST_FRMS_ERR);
|
||||||
|
/* Disable est as error happen */
|
||||||
|
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
|
EQOS_MTL_EST_CONTROL);
|
||||||
|
/* DDBF 1 means don't drop packet */
|
||||||
|
if ((value & EQOS_MTL_EST_CONTROL_DDBF) ==
|
||||||
|
EQOS_MTL_EST_CONTROL_DDBF) {
|
||||||
|
value &= ~EQOS_MTL_EST_CONTROL_EEST;
|
||||||
|
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
|
||||||
|
EQOS_MTL_EST_CONTROL);
|
||||||
|
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||||
|
"Disabling EST due to HLBF, correct GCL\n",
|
||||||
|
OSI_NONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((val & EQOS_MTL_EST_STATUS_SWLC) == EQOS_MTL_EST_STATUS_SWLC) {
|
if ((val & EQOS_MTL_EST_STATUS_SWLC) == EQOS_MTL_EST_STATUS_SWLC) {
|
||||||
@@ -4675,24 +4700,26 @@ static int eqos_hw_config_fpe(struct osi_core_priv_data *osi_core,
|
|||||||
|
|
||||||
osi_core->fpe_ready = OSI_DISABLE;
|
osi_core->fpe_ready = OSI_DISABLE;
|
||||||
|
|
||||||
val = osi_readla(osi_core,
|
|
||||||
(unsigned char *)osi_core->base + EQOS_MTL_FPE_CTS);
|
|
||||||
|
|
||||||
if (((fpe->tx_queue_preemption_enable << EQOS_MTL_FPE_CTS_PEC_SHIFT) &
|
if (((fpe->tx_queue_preemption_enable << EQOS_MTL_FPE_CTS_PEC_SHIFT) &
|
||||||
EQOS_MTL_FPE_CTS_PEC) == OSI_DISABLE) {
|
EQOS_MTL_FPE_CTS_PEC) == OSI_DISABLE) {
|
||||||
val &= ~EQOS_MAC_FPE_CTS_EFPE;
|
val = osi_readla(osi_core,
|
||||||
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
(nveu8_t *)osi_core->base + EQOS_MTL_FPE_CTS);
|
||||||
EQOS_MAC_FPE_CTS);
|
val &= ~EQOS_MTL_FPE_CTS_PEC;
|
||||||
|
osi_writela(osi_core, val,
|
||||||
|
(nveu8_t *)osi_core->base + EQOS_MTL_FPE_CTS);
|
||||||
|
|
||||||
val = osi_readla(osi_core, (unsigned char *)osi_core->base +
|
val = osi_readla(osi_core,
|
||||||
EQOS_MAC_RQC1R);
|
(nveu8_t *)osi_core->base + EQOS_MAC_FPE_CTS);
|
||||||
val &= ~EQOS_MAC_RQC1R_FPRQ;
|
val &= ~EQOS_MAC_FPE_CTS_EFPE;
|
||||||
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
EQOS_MAC_RQC1R);
|
EQOS_MAC_FPE_CTS);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val = osi_readla(osi_core,
|
||||||
|
(nveu8_t *)osi_core->base + EQOS_MTL_FPE_CTS);
|
||||||
val &= ~EQOS_MTL_FPE_CTS_PEC;
|
val &= ~EQOS_MTL_FPE_CTS_PEC;
|
||||||
for (i = 0U; i < OSI_MAX_TC_NUM; i++) {
|
for (i = 0U; i < OSI_MAX_TC_NUM; i++) {
|
||||||
/* max 8 bit for this structure fot TC/TXQ. Set the TC for express or
|
/* max 8 bit for this structure fot TC/TXQ. Set the TC for express or
|
||||||
@@ -4712,7 +4739,7 @@ static int eqos_hw_config_fpe(struct osi_core_priv_data *osi_core,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
osi_writela(osi_core, val,
|
osi_writela(osi_core, val,
|
||||||
(unsigned char *)osi_core->base + EQOS_MTL_FPE_CTS);
|
(nveu8_t *)osi_core->base + EQOS_MTL_FPE_CTS);
|
||||||
|
|
||||||
/* Setting RQ as RxQ 0 is not allowed */
|
/* Setting RQ as RxQ 0 is not allowed */
|
||||||
if (fpe->rq == 0x0U || fpe->rq >= OSI_EQOS_MAX_NUM_CHANS) {
|
if (fpe->rq == 0x0U || fpe->rq >= OSI_EQOS_MAX_NUM_CHANS) {
|
||||||
@@ -5330,6 +5357,7 @@ static nve32_t eqos_set_avb_algorithm(
|
|||||||
EQOS_MTL_CH0_TX_OP_MODE_IDX + qinx);
|
EQOS_MTL_CH0_TX_OP_MODE_IDX + qinx);
|
||||||
|
|
||||||
/* Set Algo and Credit control */
|
/* Set Algo and Credit control */
|
||||||
|
value = OSI_DISABLE;
|
||||||
if (avb->algo == OSI_MTL_TXQ_AVALG_CBS) {
|
if (avb->algo == OSI_MTL_TXQ_AVALG_CBS) {
|
||||||
value = (avb->credit_control << EQOS_MTL_TXQ_ETS_CR_CC_SHIFT) &
|
value = (avb->credit_control << EQOS_MTL_TXQ_ETS_CR_CC_SHIFT) &
|
||||||
EQOS_MTL_TXQ_ETS_CR_CC;
|
EQOS_MTL_TXQ_ETS_CR_CC;
|
||||||
|
|||||||
@@ -538,6 +538,7 @@
|
|||||||
OSI_BIT(28) | OSI_BIT(29) | \
|
OSI_BIT(28) | OSI_BIT(29) | \
|
||||||
OSI_BIT(30) | OSI_BIT(31))
|
OSI_BIT(30) | OSI_BIT(31))
|
||||||
#define EQOS_MTL_EST_CONTROL_PTOV_SHIFT 24U
|
#define EQOS_MTL_EST_CONTROL_PTOV_SHIFT 24U
|
||||||
|
#define EQOS_MTL_EST_PTOV_RECOMMEND 32U
|
||||||
#define EQOS_MTL_EST_CONTROL_CTOV (OSI_BIT(12) | OSI_BIT(13) | \
|
#define EQOS_MTL_EST_CONTROL_CTOV (OSI_BIT(12) | OSI_BIT(13) | \
|
||||||
OSI_BIT(14) | OSI_BIT(15) | \
|
OSI_BIT(14) | OSI_BIT(15) | \
|
||||||
OSI_BIT(16) | OSI_BIT(17) | \
|
OSI_BIT(16) | OSI_BIT(17) | \
|
||||||
@@ -545,6 +546,7 @@
|
|||||||
OSI_BIT(20) | OSI_BIT(21) | \
|
OSI_BIT(20) | OSI_BIT(21) | \
|
||||||
OSI_BIT(22) | OSI_BIT(23))
|
OSI_BIT(22) | OSI_BIT(23))
|
||||||
#define EQOS_MTL_EST_CONTROL_CTOV_SHIFT 12U
|
#define EQOS_MTL_EST_CONTROL_CTOV_SHIFT 12U
|
||||||
|
#define EQOS_MTL_EST_CTOV_RECOMMEND 94U
|
||||||
#define EQOS_MTL_EST_CONTROL_TILS (OSI_BIT(8) | OSI_BIT(9) | \
|
#define EQOS_MTL_EST_CONTROL_TILS (OSI_BIT(8) | OSI_BIT(9) | \
|
||||||
OSI_BIT(10))
|
OSI_BIT(10))
|
||||||
#define EQOS_MTL_EST_CONTROL_LCSE (OSI_BIT(6) | OSI_BIT(5))
|
#define EQOS_MTL_EST_CONTROL_LCSE (OSI_BIT(6) | OSI_BIT(5))
|
||||||
|
|||||||
@@ -2927,23 +2927,22 @@ static void mgbe_tsn_init(struct osi_core_priv_data *osi_core,
|
|||||||
/* 6*1/(78.6 MHz) in ns*/
|
/* 6*1/(78.6 MHz) in ns*/
|
||||||
temp = (6U * 13U);
|
temp = (6U * 13U);
|
||||||
} else {
|
} else {
|
||||||
/* 6*1/(312 MHz) in ns*/
|
temp = MGBE_MTL_EST_PTOV_RECOMMEND;
|
||||||
temp = (6U * 3U);
|
|
||||||
}
|
}
|
||||||
temp = temp << MGBE_MTL_EST_CONTROL_PTOV_SHIFT;
|
temp = temp << MGBE_MTL_EST_CONTROL_PTOV_SHIFT;
|
||||||
val |= temp;
|
val |= temp;
|
||||||
|
|
||||||
/* We have a bug on CTOV for Qbv that synopsys is yet to
|
|
||||||
* fix[Case – 8001147927, Bug 200468714]. You can go ahead
|
|
||||||
* with 128*8ns for now. TODO */
|
|
||||||
val &= ~MGBE_MTL_EST_CONTROL_CTOV;
|
val &= ~MGBE_MTL_EST_CONTROL_CTOV;
|
||||||
temp = (128U * 8U);
|
temp = MGBE_MTL_EST_CTOV_RECOMMEND;
|
||||||
temp = temp << MGBE_MTL_EST_CONTROL_CTOV_SHIFT;
|
temp = temp << MGBE_MTL_EST_CONTROL_CTOV_SHIFT;
|
||||||
val |= temp;
|
val |= temp;
|
||||||
|
|
||||||
/*Loop Count to report Scheduling Error*/
|
/*Loop Count to report Scheduling Error*/
|
||||||
val &= ~MGBE_MTL_EST_CONTROL_LCSE;
|
val &= ~MGBE_MTL_EST_CONTROL_LCSE;
|
||||||
val |= MGBE_MTL_EST_CONTROL_LCSE_VAL;
|
val |= MGBE_MTL_EST_CONTROL_LCSE_VAL;
|
||||||
|
|
||||||
|
val &= ~MGBE_MTL_EST_CONTROL_DDBF;
|
||||||
|
val |= MGBE_MTL_EST_CONTROL_DDBF;
|
||||||
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
||||||
MGBE_MTL_EST_CONTROL);
|
MGBE_MTL_EST_CONTROL);
|
||||||
|
|
||||||
@@ -2951,7 +2950,7 @@ static void mgbe_tsn_init(struct osi_core_priv_data *osi_core,
|
|||||||
MGBE_MTL_EST_OVERHEAD);
|
MGBE_MTL_EST_OVERHEAD);
|
||||||
val &= ~MGBE_MTL_EST_OVERHEAD_OVHD;
|
val &= ~MGBE_MTL_EST_OVERHEAD_OVHD;
|
||||||
/* As per hardware programming info */
|
/* As per hardware programming info */
|
||||||
val |= OVHD_MGBE_MAC;
|
val |= MGBE_MTL_EST_OVERHEAD_RECOMMEND;
|
||||||
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
MGBE_MTL_EST_OVERHEAD);
|
MGBE_MTL_EST_OVERHEAD);
|
||||||
|
|
||||||
@@ -3449,6 +3448,7 @@ static int mgbe_set_avb_algorithm(
|
|||||||
value |= ((avb->oper_mode << MGBE_MTL_TX_OP_MODE_TXQEN_SHIFT) &
|
value |= ((avb->oper_mode << MGBE_MTL_TX_OP_MODE_TXQEN_SHIFT) &
|
||||||
MGBE_MTL_TX_OP_MODE_TXQEN);
|
MGBE_MTL_TX_OP_MODE_TXQEN);
|
||||||
/* Set TC mapping */
|
/* Set TC mapping */
|
||||||
|
value &= ~MGBE_MTL_TX_OP_MODE_Q2TCMAP;
|
||||||
value |= ((tcinx << MGBE_MTL_TX_OP_MODE_Q2TCMAP_SHIFT) &
|
value |= ((tcinx << MGBE_MTL_TX_OP_MODE_Q2TCMAP_SHIFT) &
|
||||||
MGBE_MTL_TX_OP_MODE_Q2TCMAP);
|
MGBE_MTL_TX_OP_MODE_Q2TCMAP);
|
||||||
osi_writela(osi_core, value, (unsigned char *)osi_core->base +
|
osi_writela(osi_core, value, (unsigned char *)osi_core->base +
|
||||||
@@ -3612,12 +3612,13 @@ static int mgbe_get_avb_algorithm(struct osi_core_priv_data *const osi_core,
|
|||||||
*/
|
*/
|
||||||
static void mgbe_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
static void mgbe_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
||||||
{
|
{
|
||||||
unsigned int val = 0;
|
unsigned int val = 0U;
|
||||||
unsigned int sch_err = 0;
|
unsigned int sch_err = 0U;
|
||||||
unsigned int frm_err = 0;
|
unsigned int frm_err = 0U;
|
||||||
unsigned int temp = 0U;
|
unsigned int temp = 0U;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
unsigned long stat_val = 0;
|
unsigned long stat_val = 0U;
|
||||||
|
unsigned int value = 0U;
|
||||||
|
|
||||||
val = osi_readla(osi_core,
|
val = osi_readla(osi_core,
|
||||||
(nveu8_t *)osi_core->base + MGBE_MTL_EST_STATUS);
|
(nveu8_t *)osi_core->base + MGBE_MTL_EST_STATUS);
|
||||||
@@ -3658,6 +3659,14 @@ static void mgbe_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
|||||||
sch_err &= 0xFFU; //only 8 TC allowed so clearing all
|
sch_err &= 0xFFU; //only 8 TC allowed so clearing all
|
||||||
osi_writela(osi_core, sch_err, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, sch_err, (nveu8_t *)osi_core->base +
|
||||||
MGBE_MTL_EST_SCH_ERR);
|
MGBE_MTL_EST_SCH_ERR);
|
||||||
|
/* Reset EST with print to configure it properly */
|
||||||
|
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_EST_CONTROL);
|
||||||
|
value &= ~MGBE_MTL_EST_EEST;
|
||||||
|
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_EST_CONTROL);
|
||||||
|
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||||
|
"Disabling EST due to HLBS, correct GCL\n", OSI_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((val & MGBE_MTL_EST_STATUS_HLBF) == MGBE_MTL_EST_STATUS_HLBF) {
|
if ((val & MGBE_MTL_EST_STATUS_HLBF) == MGBE_MTL_EST_STATUS_HLBF) {
|
||||||
@@ -3680,6 +3689,20 @@ static void mgbe_handle_mtl_intrs(struct osi_core_priv_data *osi_core)
|
|||||||
frm_err &= 0xFFU; //only 8 TC allowed so clearing all
|
frm_err &= 0xFFU; //only 8 TC allowed so clearing all
|
||||||
osi_writela(osi_core, frm_err, (nveu8_t *)osi_core->base +
|
osi_writela(osi_core, frm_err, (nveu8_t *)osi_core->base +
|
||||||
MGBE_MTL_EST_FRMS_ERR);
|
MGBE_MTL_EST_FRMS_ERR);
|
||||||
|
|
||||||
|
/* Reset EST with print to configure it properly */
|
||||||
|
value = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_EST_CONTROL);
|
||||||
|
/* DDBF 1 means don't drop packets */
|
||||||
|
if ((value & MGBE_MTL_EST_CONTROL_DDBF) ==
|
||||||
|
MGBE_MTL_EST_CONTROL_DDBF) {
|
||||||
|
value &= ~MGBE_MTL_EST_EEST;
|
||||||
|
osi_writela(osi_core, value, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_EST_CONTROL);
|
||||||
|
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||||
|
"Disabling EST due to HLBF, correct GCL\n",
|
||||||
|
OSI_NONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((val & MGBE_MTL_EST_STATUS_SWLC) == MGBE_MTL_EST_STATUS_SWLC) {
|
if ((val & MGBE_MTL_EST_STATUS_SWLC) == MGBE_MTL_EST_STATUS_SWLC) {
|
||||||
@@ -4698,23 +4721,25 @@ static int mgbe_hw_config_fpe(struct osi_core_priv_data *osi_core,
|
|||||||
|
|
||||||
osi_core->fpe_ready = OSI_DISABLE;
|
osi_core->fpe_ready = OSI_DISABLE;
|
||||||
|
|
||||||
val = osi_readla(osi_core, (unsigned char *)
|
|
||||||
osi_core->base + MGBE_MTL_FPE_CTS);
|
|
||||||
if (((fpe->tx_queue_preemption_enable << MGBE_MTL_FPE_CTS_PEC_SHIFT) &
|
if (((fpe->tx_queue_preemption_enable << MGBE_MTL_FPE_CTS_PEC_SHIFT) &
|
||||||
MGBE_MTL_FPE_CTS_PEC) == OSI_DISABLE) {
|
MGBE_MTL_FPE_CTS_PEC) == OSI_DISABLE) {
|
||||||
val &= ~MGBE_MAC_FPE_CTS_EFPE;
|
val = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
MGBE_MTL_FPE_CTS);
|
||||||
MGBE_MAC_FPE_CTS);
|
val &= ~MGBE_MTL_FPE_CTS_PEC;
|
||||||
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_FPE_CTS);
|
||||||
|
|
||||||
val = osi_readla(osi_core, (unsigned char *)osi_core->base +
|
val = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
MGBE_MAC_RQC1R);
|
MGBE_MAC_FPE_CTS);
|
||||||
val &= ~MGBE_MAC_RQC1R_RQ;
|
val &= ~MGBE_MAC_FPE_CTS_EFPE;
|
||||||
osi_writela(osi_core, val, (unsigned char *)osi_core->base +
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
MGBE_MAC_RQC1R);
|
MGBE_MAC_FPE_CTS);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val = osi_readla(osi_core, (nveu8_t *)osi_core->base +
|
||||||
|
MGBE_MTL_FPE_CTS);
|
||||||
val &= ~MGBE_MTL_FPE_CTS_PEC;
|
val &= ~MGBE_MTL_FPE_CTS_PEC;
|
||||||
for (i = 0U; i < OSI_MAX_TC_NUM; i++) {
|
for (i = 0U; i < OSI_MAX_TC_NUM; i++) {
|
||||||
/* max 8 bit for this structure fot TC/TXQ. Set the TC for express or
|
/* max 8 bit for this structure fot TC/TXQ. Set the TC for express or
|
||||||
@@ -4733,8 +4758,8 @@ static int mgbe_hw_config_fpe(struct osi_core_priv_data *osi_core,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
osi_writela(osi_core, val, (unsigned char *)
|
osi_writela(osi_core, val, (nveu8_t *)osi_core->base +
|
||||||
osi_core->base + MGBE_MTL_FPE_CTS);
|
MGBE_MTL_FPE_CTS);
|
||||||
|
|
||||||
if (fpe->rq == 0x0U || fpe->rq >= OSI_MGBE_MAX_NUM_CHANS) {
|
if (fpe->rq == 0x0U || fpe->rq >= OSI_MGBE_MAX_NUM_CHANS) {
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
||||||
|
|||||||
@@ -609,6 +609,7 @@
|
|||||||
OSI_BIT(29) | OSI_BIT(30) | \
|
OSI_BIT(29) | OSI_BIT(30) | \
|
||||||
OSI_BIT(31))
|
OSI_BIT(31))
|
||||||
#define MGBE_MTL_EST_CONTROL_PTOV_SHIFT 23U
|
#define MGBE_MTL_EST_CONTROL_PTOV_SHIFT 23U
|
||||||
|
#define MGBE_MTL_EST_PTOV_RECOMMEND 32U
|
||||||
#define MGBE_MTL_EST_CONTROL_CTOV (OSI_BIT(11) | OSI_BIT(12) | \
|
#define MGBE_MTL_EST_CONTROL_CTOV (OSI_BIT(11) | OSI_BIT(12) | \
|
||||||
OSI_BIT(13) | OSI_BIT(14) | \
|
OSI_BIT(13) | OSI_BIT(14) | \
|
||||||
OSI_BIT(15) | OSI_BIT(16) | \
|
OSI_BIT(15) | OSI_BIT(16) | \
|
||||||
@@ -616,6 +617,7 @@
|
|||||||
OSI_BIT(19) | OSI_BIT(20) | \
|
OSI_BIT(19) | OSI_BIT(20) | \
|
||||||
OSI_BIT(21) | OSI_BIT(22))
|
OSI_BIT(21) | OSI_BIT(22))
|
||||||
#define MGBE_MTL_EST_CONTROL_CTOV_SHIFT 11U
|
#define MGBE_MTL_EST_CONTROL_CTOV_SHIFT 11U
|
||||||
|
#define MGBE_MTL_EST_CTOV_RECOMMEND 42U
|
||||||
#define MGBE_MTL_EST_CONTROL_TILS (OSI_BIT(8) | OSI_BIT(9) | \
|
#define MGBE_MTL_EST_CONTROL_TILS (OSI_BIT(8) | OSI_BIT(9) | \
|
||||||
OSI_BIT(10))
|
OSI_BIT(10))
|
||||||
#define MGBE_MTL_EST_CONTROL_LCSE (OSI_BIT(7) | OSI_BIT(6))
|
#define MGBE_MTL_EST_CONTROL_LCSE (OSI_BIT(7) | OSI_BIT(6))
|
||||||
@@ -627,6 +629,7 @@
|
|||||||
#define MGBE_MTL_EST_OVERHEAD_OVHD (OSI_BIT(0) | OSI_BIT(1) | \
|
#define MGBE_MTL_EST_OVERHEAD_OVHD (OSI_BIT(0) | OSI_BIT(1) | \
|
||||||
OSI_BIT(2) | OSI_BIT(3) | \
|
OSI_BIT(2) | OSI_BIT(3) | \
|
||||||
OSI_BIT(4) | OSI_BIT(5))
|
OSI_BIT(4) | OSI_BIT(5))
|
||||||
|
#define MGBE_MTL_EST_OVERHEAD_RECOMMEND 56U
|
||||||
/* EST controlOSI_BITmap */
|
/* EST controlOSI_BITmap */
|
||||||
#define MGBE_MTL_EST_EEST OSI_BIT(0)
|
#define MGBE_MTL_EST_EEST OSI_BIT(0)
|
||||||
#define MGBE_MTL_EST_SSWL OSI_BIT(1)
|
#define MGBE_MTL_EST_SSWL OSI_BIT(1)
|
||||||
@@ -853,14 +856,6 @@
|
|||||||
OSI_MGBE_MAX_MAC_ADDRESS_FILTER + 1U))
|
OSI_MGBE_MAX_MAC_ADDRESS_FILTER + 1U))
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
|
||||||
* @addtogroup IPG over head
|
|
||||||
*
|
|
||||||
* @brief OVHD value for MGBE MAC
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define OVHD_MGBE_MAC 56U
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup MGBE-MAC MGBE MAC HW feature registers
|
* @addtogroup MGBE-MAC MGBE MAC HW feature registers
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user