X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fqede%2Fbase%2Fbcm_osal.c;h=65837b53d063d25fc34417ad07e91262e92ff46a;hb=8ee821cfae8fe4fdc61f5265c020a490342ece0e;hp=693328f117c7983980e6b62d4026155c6a8f0c45;hpb=b74fd6b842b7e41e4ee6a037dd37735aeedd8095;p=dpdk.git diff --git a/drivers/net/qede/base/bcm_osal.c b/drivers/net/qede/base/bcm_osal.c index 693328f117..65837b53d0 100644 --- a/drivers/net/qede/base/bcm_osal.c +++ b/drivers/net/qede/base/bcm_osal.c @@ -10,6 +10,7 @@ #include "bcm_osal.h" #include "ecore.h" #include "ecore_hw.h" +#include "ecore_dev_api.h" #include "ecore_iov_api.h" #include "ecore_mcp_api.h" #include "ecore_l2_api.h" @@ -45,26 +46,6 @@ u32 qede_osal_log2(u32 val) return log; } -inline void qede_set_bit(u32 nr, unsigned long *addr) -{ - __sync_fetch_and_or(addr, (1UL << nr)); -} - -inline void qede_clr_bit(u32 nr, unsigned long *addr) -{ - __sync_fetch_and_and(addr, ~(1UL << nr)); -} - -inline bool qede_test_bit(u32 nr, unsigned long *addr) -{ - bool res; - - rte_mb(); - res = ((*addr) & (1UL << nr)) != 0; - rte_mb(); - return res; -} - static inline u32 qede_ffb(unsigned long word) { unsigned long first_bit; @@ -94,7 +75,7 @@ static inline u32 qede_ffz(unsigned long word) return first_zero ? (first_zero - 1) : OSAL_BITS_PER_UL; } -inline u32 qede_find_first_zero_bit(unsigned long *addr, u32 limit) +inline u32 qede_find_first_zero_bit(u32 *addr, u32 limit) { u32 i; u32 nwords = 0; @@ -128,7 +109,7 @@ void *osal_dma_alloc_coherent(struct ecore_dev *p_dev, } OSAL_MEM_ZERO(mz_name, sizeof(*mz_name)); - snprintf(mz_name, sizeof(mz_name) - 1, "%lx", + snprintf(mz_name, sizeof(mz_name), "%lx", (unsigned long)rte_get_timer_cycles()); if (core_id == (unsigned int)LCORE_ID_ANY) core_id = rte_get_master_lcore(); @@ -167,7 +148,7 @@ void *osal_dma_alloc_coherent_aligned(struct ecore_dev *p_dev, } OSAL_MEM_ZERO(mz_name, sizeof(*mz_name)); - snprintf(mz_name, sizeof(mz_name) - 1, "%lx", + snprintf(mz_name, sizeof(mz_name), "%lx", (unsigned long)rte_get_timer_cycles()); if (core_id == (unsigned int)LCORE_ID_ANY) core_id = rte_get_master_lcore(); @@ -265,6 +246,28 @@ qede_get_mcp_proto_stats(struct ecore_dev *edev, } } +static void qede_hw_err_handler(void *dev, enum ecore_hw_err_type err_type) +{ + struct ecore_dev *edev = dev; + + switch (err_type) { + case ECORE_HW_ERR_FAN_FAIL: + break; + + case ECORE_HW_ERR_MFW_RESP_FAIL: + case ECORE_HW_ERR_HW_ATTN: + case ECORE_HW_ERR_DMAE_FAIL: + case ECORE_HW_ERR_RAMROD_FAIL: + case ECORE_HW_ERR_FW_ASSERT: + OSAL_SAVE_FW_DUMP(0); /* Using port 0 as default port_id */ + break; + + default: + DP_NOTICE(edev, false, "Unknown HW error [%d]\n", err_type); + return; + } +} + void qede_hw_err_notify(struct ecore_hwfn *p_hwfn, enum ecore_hw_err_type err_type) { @@ -294,6 +297,9 @@ qede_hw_err_notify(struct ecore_hwfn *p_hwfn, enum ecore_hw_err_type err_type) } DP_ERR(p_hwfn, "HW error occurred [%s]\n", err_str); + + qede_hw_err_handler(p_hwfn->p_dev, err_type); + ecore_int_attn_clr_enable(p_hwfn->p_dev, true); } @@ -308,3 +314,9 @@ u32 qede_crc32(u32 crc, u8 *ptr, u32 length) } return crc; } + +void qed_set_platform_str(struct ecore_hwfn *p_hwfn, + char *buf_str, u32 buf_size) +{ + snprintf(buf_str, buf_size, "%s.", rte_version()); +}