166d53750SHans Petter Selasky /*- 266d53750SHans Petter Selasky * Copyright (c) 2013-2017, Mellanox Technologies, Ltd. All rights reserved. 366d53750SHans Petter Selasky * 466d53750SHans Petter Selasky * Redistribution and use in source and binary forms, with or without 566d53750SHans Petter Selasky * modification, are permitted provided that the following conditions 666d53750SHans Petter Selasky * are met: 766d53750SHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 866d53750SHans Petter Selasky * notice, this list of conditions and the following disclaimer. 966d53750SHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 1066d53750SHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 1166d53750SHans Petter Selasky * documentation and/or other materials provided with the distribution. 1266d53750SHans Petter Selasky * 1366d53750SHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND 1466d53750SHans Petter Selasky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1566d53750SHans Petter Selasky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1666d53750SHans Petter Selasky * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 1766d53750SHans Petter Selasky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1866d53750SHans Petter Selasky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 1966d53750SHans Petter Selasky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2066d53750SHans Petter Selasky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2166d53750SHans Petter Selasky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2266d53750SHans Petter Selasky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2366d53750SHans Petter Selasky * SUCH DAMAGE. 2466d53750SHans Petter Selasky */ 2566d53750SHans Petter Selasky 2666d53750SHans Petter Selasky #ifndef MLX5_CORE_DIAGNOSTICS_H 2766d53750SHans Petter Selasky #define MLX5_CORE_DIAGNOSTICS_H 2866d53750SHans Petter Selasky 2966d53750SHans Petter Selasky #define MLX5_CORE_DIAGNOSTICS_NUM(n, s, t) n 3066d53750SHans Petter Selasky #define MLX5_CORE_DIAGNOSTICS_STRUCT(n, s, t) s, 3166d53750SHans Petter Selasky #define MLX5_CORE_DIAGNOSTICS_ENTRY(n, s, t) { #s, (t) }, 3266d53750SHans Petter Selasky 33*048ddb58SHans Petter Selasky static MALLOC_DEFINE(M_MLX5_EEPROM, "MLX5EEPROM", "MLX5 EEPROM information"); 34*048ddb58SHans Petter Selasky 3566d53750SHans Petter Selasky struct mlx5_core_diagnostics_entry { 36eac79e77SHans Petter Selasky const char *desc; 3766d53750SHans Petter Selasky u16 counter_id; 3866d53750SHans Petter Selasky }; 3966d53750SHans Petter Selasky 4066d53750SHans Petter Selasky #define MLX5_CORE_PCI_DIAGNOSTICS(m) \ 4166d53750SHans Petter Selasky m(+1, pxd_ready_bp, 0x0401) \ 4266d53750SHans Petter Selasky m(+1, pci_write_bp, 0x0402) \ 4366d53750SHans Petter Selasky m(+1, pci_read_bp, 0x0403) \ 4466d53750SHans Petter Selasky m(+1, pci_read_stuck_no_completion_buffer, 0x0404) \ 4566d53750SHans Petter Selasky m(+1, max_pci_bw, 0x0405) \ 4666d53750SHans Petter Selasky m(+1, used_pci_bw, 0x0406) \ 4766d53750SHans Petter Selasky m(+1, rx_pci_errors, 0) \ 4866d53750SHans Petter Selasky m(+1, tx_pci_errors, 0) \ 4966d53750SHans Petter Selasky m(+1, tx_pci_correctable_errors, 0) \ 5066d53750SHans Petter Selasky m(+1, tx_pci_non_fatal_errors, 0) \ 5166d53750SHans Petter Selasky m(+1, tx_pci_fatal_errors, 0) 5266d53750SHans Petter Selasky 5366d53750SHans Petter Selasky #define MLX5_CORE_PCI_DIAGNOSTICS_NUM \ 5466d53750SHans Petter Selasky (0 MLX5_CORE_PCI_DIAGNOSTICS(MLX5_CORE_DIAGNOSTICS_NUM)) 5566d53750SHans Petter Selasky 5666d53750SHans Petter Selasky union mlx5_core_pci_diagnostics { 5766d53750SHans Petter Selasky u64 array[MLX5_CORE_PCI_DIAGNOSTICS_NUM]; 5866d53750SHans Petter Selasky struct { 5966d53750SHans Petter Selasky u64 MLX5_CORE_PCI_DIAGNOSTICS( 6066d53750SHans Petter Selasky MLX5_CORE_DIAGNOSTICS_STRUCT) dummy[0]; 6166d53750SHans Petter Selasky } counter; 6266d53750SHans Petter Selasky }; 6366d53750SHans Petter Selasky 6466d53750SHans Petter Selasky extern const struct mlx5_core_diagnostics_entry 6566d53750SHans Petter Selasky mlx5_core_pci_diagnostics_table[MLX5_CORE_PCI_DIAGNOSTICS_NUM]; 6666d53750SHans Petter Selasky 6766d53750SHans Petter Selasky #define MLX5_CORE_GENERAL_DIAGNOSTICS(m) \ 6866d53750SHans Petter Selasky m(+1, l0_mtt_miss, 0x0801) \ 6966d53750SHans Petter Selasky m(+1, l0_mtt_hit, 0x0802) \ 7066d53750SHans Petter Selasky m(+1, l1_mtt_miss, 0x0803) \ 7166d53750SHans Petter Selasky m(+1, l1_mtt_hit, 0x0804) \ 7266d53750SHans Petter Selasky m(+1, l0_mpt_miss, 0x0805) \ 7366d53750SHans Petter Selasky m(+1, l0_mpt_hit, 0x0806) \ 7466d53750SHans Petter Selasky m(+1, l1_mpt_miss, 0x0807) \ 7566d53750SHans Petter Selasky m(+1, l1_mpt_hit, 0x0808) \ 7666d53750SHans Petter Selasky m(+1, rxb_no_slow_path_credits, 0x0c01) \ 7766d53750SHans Petter Selasky m(+1, rxb_no_fast_path_credits, 0x0c02) \ 7866d53750SHans Petter Selasky m(+1, rxb_rxt_no_slow_path_cred_perf_count, 0x0c03) \ 7966d53750SHans Petter Selasky m(+1, rxb_rxt_no_fast_path_cred_perf_count, 0x0c04) \ 8066d53750SHans Petter Selasky m(+1, rxt_ctrl_perf_slice_load_slow, 0x1001) \ 8166d53750SHans Petter Selasky m(+1, rxt_ctrl_perf_slice_load_fast, 0x1002) \ 8266d53750SHans Petter Selasky m(+1, rxt_steering_perf_count_steering0_rse_work_rate, 0x1003) \ 8366d53750SHans Petter Selasky m(+1, rxt_steering_perf_count_steering1_rse_work_rate, 0x1004) \ 8466d53750SHans Petter Selasky m(+1, perf_count_tpt_credit, 0x1401) \ 8566d53750SHans Petter Selasky m(+1, perf_wb_miss, 0x1402) \ 8666d53750SHans Petter Selasky m(+1, perf_wb_hit, 0x1403) \ 8766d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_slow_miss_ldb, 0x1404) \ 8866d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_slow_hit_ldb, 0x1405) \ 8966d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_fast_miss_ldb, 0x1406) \ 9066d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_fast_hit_ldb, 0x1407) \ 9166d53750SHans Petter Selasky m(+1, rxw_perf_l2_cache_read_miss_ldb, 0x1408) \ 9266d53750SHans Petter Selasky m(+1, rxw_perf_l2_cache_read_hit_ldb, 0x1409) \ 9366d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_slow_miss_reqsl, 0x140a) \ 9466d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_slow_hit_reqsl, 0x140b) \ 9566d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_fast_miss_reqsl, 0x140c) \ 9666d53750SHans Petter Selasky m(+1, rxw_perf_rx_l1_fast_hit_reqsl, 0x140d) \ 9766d53750SHans Petter Selasky m(+1, rxw_perf_l2_cache_read_miss_reqsl, 0x140e) \ 9866d53750SHans Petter Selasky m(+1, rxw_perf_l2_cache_read_hit_reqsl, 0x140f) \ 9966d53750SHans Petter Selasky m(+1, rxs_no_pxt_credits, 0x1801) \ 10066d53750SHans Petter Selasky m(+1, rxc_eq_all_slices_busy, 0x1c01) \ 10166d53750SHans Petter Selasky m(+1, rxc_cq_all_slices_busy, 0x1c02) \ 10266d53750SHans Petter Selasky m(+1, rxc_msix_all_slices_busy, 0x1c03) \ 10366d53750SHans Petter Selasky m(+1, sxw_qp_done_due_to_vl_limited, 0x2001) \ 10466d53750SHans Petter Selasky m(+1, sxw_qp_done_due_to_desched, 0x2002) \ 10566d53750SHans Petter Selasky m(+1, sxw_qp_done_due_to_work_done, 0x2003) \ 10666d53750SHans Petter Selasky m(+1, sxw_qp_done_due_to_limited, 0x2004) \ 10766d53750SHans Petter Selasky m(+1, sxw_qp_done_due_to_e2e_credits, 0x2005) \ 10866d53750SHans Petter Selasky m(+1, sxw_packet_send_sxw2sxp_go_vld, 0x2006) \ 10966d53750SHans Petter Selasky m(+1, sxw_perf_count_steering_hit, 0x2007) \ 11066d53750SHans Petter Selasky m(+1, sxw_perf_count_steering_miss, 0x2008) \ 11166d53750SHans Petter Selasky m(+1, sxw_perf_count_steering_rse_0, 0x2009) \ 11266d53750SHans Petter Selasky m(+1, sxd_no_sched_credits, 0x2401) \ 11366d53750SHans Petter Selasky m(+1, sxd_no_slow_path_sched_credits, 0x2402) \ 11466d53750SHans Petter Selasky m(+1, tpt_indirect_mem_key, 0x2801) 11566d53750SHans Petter Selasky 11666d53750SHans Petter Selasky #define MLX5_CORE_GENERAL_DIAGNOSTICS_NUM \ 11766d53750SHans Petter Selasky (0 MLX5_CORE_GENERAL_DIAGNOSTICS(MLX5_CORE_DIAGNOSTICS_NUM)) 11866d53750SHans Petter Selasky 11966d53750SHans Petter Selasky union mlx5_core_general_diagnostics { 12066d53750SHans Petter Selasky u64 array[MLX5_CORE_GENERAL_DIAGNOSTICS_NUM]; 12166d53750SHans Petter Selasky struct { 12266d53750SHans Petter Selasky u64 MLX5_CORE_GENERAL_DIAGNOSTICS( 12366d53750SHans Petter Selasky MLX5_CORE_DIAGNOSTICS_STRUCT) dummy[0]; 12466d53750SHans Petter Selasky } counter; 12566d53750SHans Petter Selasky }; 12666d53750SHans Petter Selasky 12766d53750SHans Petter Selasky extern const struct mlx5_core_diagnostics_entry 12866d53750SHans Petter Selasky mlx5_core_general_diagnostics_table[MLX5_CORE_GENERAL_DIAGNOSTICS_NUM]; 12966d53750SHans Petter Selasky 130*048ddb58SHans Petter Selasky struct mlx5_eeprom { 131*048ddb58SHans Petter Selasky int lock_bit; 132*048ddb58SHans Petter Selasky int i2c_addr; 133*048ddb58SHans Petter Selasky int page_num; 134*048ddb58SHans Petter Selasky int device_addr; 135*048ddb58SHans Petter Selasky int module_num; 136*048ddb58SHans Petter Selasky int len; 137*048ddb58SHans Petter Selasky int type; 138*048ddb58SHans Petter Selasky int page_valid; 139*048ddb58SHans Petter Selasky u32 *data; 140*048ddb58SHans Petter Selasky }; 141*048ddb58SHans Petter Selasky 14266d53750SHans Petter Selasky /* function prototypes */ 14366d53750SHans Petter Selasky int mlx5_core_set_diagnostics_full(struct mlx5_core_dev *mdev, 14466d53750SHans Petter Selasky u8 enable_pci, u8 enable_general); 14566d53750SHans Petter Selasky int mlx5_core_get_diagnostics_full(struct mlx5_core_dev *mdev, 14666d53750SHans Petter Selasky union mlx5_core_pci_diagnostics *ppci, 14766d53750SHans Petter Selasky union mlx5_core_general_diagnostics *pgen); 14866d53750SHans Petter Selasky int mlx5_core_supports_diagnostics(struct mlx5_core_dev *mdev, u16 counter_id); 149*048ddb58SHans Petter Selasky int mlx5_read_eeprom(struct mlx5_core_dev *dev, struct mlx5_eeprom *eeprom); 150*048ddb58SHans Petter Selasky int mlx5_get_eeprom_info(struct mlx5_core_dev *dev, struct mlx5_eeprom *eeprom); 151*048ddb58SHans Petter Selasky int mlx5_get_eeprom(struct mlx5_core_dev *dev, struct mlx5_eeprom *ee); 15266d53750SHans Petter Selasky 15366d53750SHans Petter Selasky #endif /* MLX5_CORE_DIAGNOSTICS_H */ 154