xref: /freebsd/sys/dev/mlx5/diagnostics.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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