/* SPDX-License-Identifier: BSD-3-Clause
 * Copyright(C) 2022 Marvell.
 */
#ifndef _ROC_ERRATA_H_
#define _ROC_ERRATA_H_

#include "roc_model.h"

/* Errata IPBUNIXRX-40129, IPBUNIXRX-40179 */
static inline bool
roc_errata_nix_has_no_drop_re(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() ||
		roc_model_is_cnf10kb_a0() || roc_model_is_cn10ka_a1());
}

/* Errata NIX-34873 */
static inline bool
roc_errata_nix_has_cq_min_size_4k(void)
{
	return (roc_model_is_cn96_a0() || roc_model_is_cn95_a0());
}

/* Errata IPBUNPA-37480 */
static inline bool
roc_errata_npa_has_no_fc_stype_ststp(void)
{
	return roc_model_is_cn10ka_a0() || roc_model_is_cn10ka_a1() || roc_model_is_cnf10ka_a0() ||
	       roc_model_is_cnf10kb_a0();
}

/* Errata IPBUNIXTX-39337 */
static inline bool
roc_errata_nix_has_no_drop_aging(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0());
}

/* Errata IPBUNIXRX-40130 */
static inline bool
roc_errata_nix_has_no_vwqe_flush_op(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() ||
		roc_model_is_cnf10kb_a0() || roc_model_is_cn10ka_a1() || roc_model_is_cn10ka_b0() ||
		roc_model_is_cn10kb_a0());
}

/* Errata IPBURVUM-38481 */
static inline bool
roc_errata_ruvm_has_no_interrupt_with_msixen(void)
{
	return true;
}

/* Errata IPBUCPT-38551 */
static inline bool
roc_errata_cpt_has_use_incorrect_ldwb(void)
{
	return true;
}

/* Errata IPBUNIXTX-39322 */
static inline bool
roc_errata_nix_has_overwrite_incorrect_sq_intr(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() ||
		roc_model_is_cnf10kb_a0() || roc_model_is_cn10ka_a1());
}

/* Errata IPBUNIXTX-39248 */
static inline bool
roc_errata_nix_has_perf_issue_on_stats_update(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() ||
		roc_model_is_cnf10kb_a0() || roc_model_is_cn10ka_a1());
}

/* Errata IPBUCPT-38736, IPBUCPT-38737 */
static inline bool
roc_errata_cpt_hang_on_x2p_bp(void)
{
	return roc_model_is_cn10ka_a0() || roc_model_is_cn10ka_a1();
}

/* Errata IPBUCPT-38756 */
static inline bool
roc_errata_cpt_has_ctx_fetch_issue(void)
{
	return roc_model_is_cn10kb();
}

/* IPBUNIXRX-40400 */
static inline bool
roc_errata_nix_no_meta_aura(void)
{
	return roc_model_is_cn10ka_a0();
}

/* Errata IPBUNIXTX-35039 */
static inline bool
roc_errata_nix_sdp_send_has_mtu_size_16k(void)
{
	return (roc_model_is_cnf95xxn_a0() || roc_model_is_cnf95xxo_a0() ||
		roc_model_is_cn96_a0() || roc_model_is_cn96_b0());
}

/* Errata IPBUCPT-38753 */
static inline bool
roc_errata_cpt_hang_on_mixed_ctx_val(void)
{
	return roc_model_is_cn10ka_a0() || roc_model_is_cn10ka_a1();
}

/* Errata IPBUNIXTX-39300 */
static inline bool
roc_errata_nix_assign_incorrect_qint(void)
{
	return (roc_model_is_cn10ka_a0() || roc_model_is_cnf10ka_a0() ||
		roc_model_is_cnf10kb_a0() || roc_model_is_cn10ka_a1());
}

#endif /* _ROC_ERRATA_H_ */
