From 33ffdfa6f5ab07dc1c8d4a3fb9a68821d35723ca Mon Sep 17 00:00:00 2001 From: Knut Omang Date: Fri, 12 Aug 2016 13:45:06 +0200 Subject: [PATCH] sif: EPSC_API_VERSION(2,10) - EPSC_DIAG_COUNTERS Adding a new EPSC command EPSC_DIAG_COUNTERS to get Diag counter values via mailbox. Orabug: 24374612 Modified-by: Knut Omang Signed-off-by: Knut Omang --- drivers/infiniband/hw/sif/psif_api.h | 2 +- drivers/infiniband/hw/sif/psif_hw_data.h | 6 ++- drivers/infiniband/hw/sif/psif_hw_data_be.h | 46 +++++++++++++++++++++ drivers/infiniband/hw/sif/psif_hw_data_le.h | 46 +++++++++++++++++++++ drivers/infiniband/hw/sif/psif_hw_print.c | 26 ++++++++++++ drivers/infiniband/hw/sif/psif_hw_print.h | 3 ++ drivers/infiniband/hw/sif/version.c | 11 +++-- drivers/infiniband/hw/sif/versioninfo.h | 8 ++-- 8 files changed, 135 insertions(+), 13 deletions(-) diff --git a/drivers/infiniband/hw/sif/psif_api.h b/drivers/infiniband/hw/sif/psif_api.h index 425ededc1609..1b991507cda4 100644 --- a/drivers/infiniband/hw/sif/psif_api.h +++ b/drivers/infiniband/hw/sif/psif_api.h @@ -43,7 +43,7 @@ typedef uint64_t __be64; * Update when new operations are added or otherwise * backward compatible changes are made */ -#define EPSC_MINOR_VERSION 9 +#define EPSC_MINOR_VERSION 10 /* * Macros for EPSC API #if checking in code diff --git a/drivers/infiniband/hw/sif/psif_hw_data.h b/drivers/infiniband/hw/sif/psif_hw_data.h index 75984f568119..a4975bf1134c 100644 --- a/drivers/infiniband/hw/sif/psif_hw_data.h +++ b/drivers/infiniband/hw/sif/psif_hw_data.h @@ -59,7 +59,7 @@ enum psif_enum_extent { PSIF_EPSC_DEGRADE_CAUSE_EXTENT = 0x7u, PSIF_EPSC_ATOMIC_CAP_EXTENT = 0x3u, PSIF_EPSC_CSR_STATUS_EXTENT = 0x100u, - PSIF_EPSC_CSR_OPCODE_EXTENT = 0x50u, + PSIF_EPSC_CSR_OPCODE_EXTENT = 0x51u, PSIF_EPSC_CSR_FLAGS_EXTENT = 0x5u, PSIF_VLINK_STATE_EXTENT = 0x11u, PSIF_EPSC_CSR_MODIFY_DEVICE_FLAGS_EXTENT = 0x3u, @@ -1278,8 +1278,10 @@ enum psif_epsc_csr_opcode { EPSC_VIMMA_CTRL = 0x4bu, /* EPSC BER (Bit Error Report) Data */ EPSC_BER_DATA = 0x4eu, + /* IB Diag Counters */ + EPSC_DIAG_COUNTERS = 0x4fu, /** EOF marker - must be last and highest in this enum type. */ - EPSC_LAST_OP = 0x4fu, + EPSC_LAST_OP = 0x50u, /* Padding out to required bits allocated */ PSIF_EPSC_CSR_OPCODE_FIELD_MAX = 0xffu }; /* enum psif_epsc_csr_opcode [ 8 bits] */ diff --git a/drivers/infiniband/hw/sif/psif_hw_data_be.h b/drivers/infiniband/hw/sif/psif_hw_data_be.h index 49dca085ec8e..33efe13ed05c 100644 --- a/drivers/infiniband/hw/sif/psif_hw_data_be.h +++ b/drivers/infiniband/hw/sif/psif_hw_data_be.h @@ -1848,6 +1848,36 @@ struct psif_eq_entry { u32 seq_num; } PSIF_PACKED_ALIGNED32; /* struct psif_eq_entry [64 byte] */ +/** + * \brief Definition of struct returned by EPSC_QUERY_ON_CHIP_TEMP + * \details + * This struct contain temperatures in Centigrades from several PSIF chip internal sensors. + * Naming of struct memebers reflect PSIF ASIC internal module names. + * \par Width + * 64 bit + * \par Used in + * the parameter for the PSIF_QUERY sub-operation EPSC_QUERY_ON_CHIP_TEMP - index field input ignored + * \par Classification + * internal, development + */ + +struct psif_epsc_query_on_chip_temp { + /* Sample max value */ + u16 max:8; + /* Default main sensor */ + u16 main:8; + /* ARM cores */ + u16 eps:8; + /* IB cores */ + u16 ibu:8; + /* Transaction core */ + u16 tsu:8; + /* PCI core */ + u16 peu:8; + /* Future sensors */ + u16 noname:16; +} PSIF_PACKED_ALIGNED; /* struct psif_epsc_query_on_chip_temp [ 8 byte] */ + /** * \brief Definition of struct returned by EPSC_QUERY_EXTERNAL_PORT_INFO * \details @@ -2808,6 +2838,20 @@ struct psif_epsc_csr_ber_data { u32 len; } PSIF_PACKED_ALIGNED; /* struct psif_epsc_csr_ber_data [24 byte] */ +/** + * Structure for EPSC_DIAG_COUNTERS + */ +struct psif_epsc_csr_diag_counters { + /* Buffer address in host memory */ + u64 host_addr; + /* MMU supplied by the driver */ + struct psif_mmu_cntx mmu_cntx; + /* UF number */ + u32 uf; + /* Buffer length in bytes */ + u32 len; +} PSIF_PACKED_ALIGNED; /* struct psif_epsc_csr_diag_counters [24 byte] */ + /* Public API for mailbox requests details */ union psif_epsc_csr_details { /* Anonymous data */ @@ -2878,6 +2922,8 @@ union psif_epsc_csr_details { struct psif_epsc_csr_vimma_ctrl vimma_ctrl; /* BER data query */ struct psif_epsc_csr_ber_data ber; + /* DIAG counters query */ + struct psif_epsc_csr_diag_counters diag; } PSIF_PACKED; /* union psif_epsc_csr_details [88 byte] */ /** diff --git a/drivers/infiniband/hw/sif/psif_hw_data_le.h b/drivers/infiniband/hw/sif/psif_hw_data_le.h index c28eb5ca8b94..19af0dcaea8a 100644 --- a/drivers/infiniband/hw/sif/psif_hw_data_le.h +++ b/drivers/infiniband/hw/sif/psif_hw_data_le.h @@ -1848,6 +1848,36 @@ struct psif_eq_entry { u32 noname:32; } PSIF_PACKED_ALIGNED32; /* struct psif_eq_entry [64 byte] */ +/** + * \brief Definition of struct returned by EPSC_QUERY_ON_CHIP_TEMP + * \details + * This struct contain temperatures in Centigrades from several PSIF chip internal sensors. + * Naming of struct memebers reflect PSIF ASIC internal module names. + * \par Width + * 64 bit + * \par Used in + * the parameter for the PSIF_QUERY sub-operation EPSC_QUERY_ON_CHIP_TEMP - index field input ignored + * \par Classification + * internal, development + */ + +struct psif_epsc_query_on_chip_temp { + /* Future sensors */ + u16 noname:16; + /* PCI core */ + u16 peu:8; + /* Transaction core */ + u16 tsu:8; + /* IB cores */ + u16 ibu:8; + /* ARM cores */ + u16 eps:8; + /* Default main sensor */ + u16 main:8; + /* Sample max value */ + u16 max:8; +} PSIF_PACKED_ALIGNED; /* struct psif_epsc_query_on_chip_temp [ 8 byte] */ + /** * \brief Definition of struct returned by EPSC_QUERY_EXTERNAL_PORT_INFO * \details @@ -2808,6 +2838,20 @@ struct psif_epsc_csr_ber_data { u32 port; } PSIF_PACKED_ALIGNED; /* struct psif_epsc_csr_ber_data [24 byte] */ +/** + * Structure for EPSC_DIAG_COUNTERS + */ +struct psif_epsc_csr_diag_counters { + /* Buffer address in host memory */ + u64 host_addr; + /* MMU supplied by the driver */ + struct psif_mmu_cntx mmu_cntx; + /* Buffer length in bytes */ + u32 len; + /* UF number */ + u32 uf; +} PSIF_PACKED_ALIGNED; /* struct psif_epsc_csr_diag_counters [24 byte] */ + /* Public API for mailbox requests details */ union psif_epsc_csr_details { /* Anonymous data */ @@ -2878,6 +2922,8 @@ union psif_epsc_csr_details { struct psif_epsc_csr_vimma_ctrl vimma_ctrl; /* BER data query */ struct psif_epsc_csr_ber_data ber; + /* DIAG counters query */ + struct psif_epsc_csr_diag_counters diag; } PSIF_PACKED; /* union psif_epsc_csr_details [88 byte] */ /** diff --git a/drivers/infiniband/hw/sif/psif_hw_print.c b/drivers/infiniband/hw/sif/psif_hw_print.c index c2ae32db514d..d9a074fa9280 100644 --- a/drivers/infiniband/hw/sif/psif_hw_print.c +++ b/drivers/infiniband/hw/sif/psif_hw_print.c @@ -1443,6 +1443,8 @@ const char *string_enum_psif_epsc_csr_opcode(enum psif_epsc_csr_opcode val) return "EPSC_VIMMA_CTRL"; case EPSC_BER_DATA: return "EPSC_BER_DATA"; + case EPSC_DIAG_COUNTERS: + return "EPSC_DIAG_COUNTERS"; case EPSC_LAST_OP: return "EPSC_LAST_OP"; case PSIF_EPSC_CSR_OPCODE_FIELD_MAX: @@ -4456,6 +4458,28 @@ void write_struct_psif_epsc_csr_ber_data(XFILE *fd, xprintf(fd, "}"); } /* end write_..._psif_epsc_csr_ber_data(psif_epsc_csr_ber_data data) */ +void write_struct_psif_epsc_csr_diag_counters(XFILE *fd, + int network_order, + const struct psif_epsc_csr_diag_counters *data) +{ + u64 swap[3]; + + if (network_order) { + copy_convert_to_sw(swap, (volatile void *)data, 24); + data = (struct psif_epsc_csr_diag_counters *)swap; + } + xprintf(fd, "{"); + xprintf(fd, " .host_addr = "); + write_bits_u64(fd, 64, data->host_addr); + xprintf(fd, ", .mmu_cntx = "); + write_struct_psif_mmu_cntx(fd, 0, &(data->mmu_cntx)); + xprintf(fd, ", .len = "); + write_bits_u32(fd, 32, data->len); + xprintf(fd, ", .uf = "); + write_bits_u32(fd, 32, data->uf); + xprintf(fd, "}"); +} /* end write_..._psif_epsc_csr_diag_counters(psif_epsc_csr_diag_counters data) */ + void write_union_psif_epsc_csr_details(XFILE *fd, int network_order, const union psif_epsc_csr_details *data) @@ -4537,6 +4561,8 @@ void write_union_psif_epsc_csr_details(XFILE *fd, write_struct_psif_epsc_csr_vimma_ctrl(fd, 0, &(data->vimma_ctrl)); xprintf(fd, ", .ber = "); write_struct_psif_epsc_csr_ber_data(fd, 0, &(data->ber)); + xprintf(fd, ", .diag = "); + write_struct_psif_epsc_csr_diag_counters(fd, 0, &(data->diag)); xprintf(fd, "}"); } /* end write_..._psif_epsc_csr_details(psif_epsc_csr_details data) */ diff --git a/drivers/infiniband/hw/sif/psif_hw_print.h b/drivers/infiniband/hw/sif/psif_hw_print.h index 47018e5ffe04..861ff62a829a 100644 --- a/drivers/infiniband/hw/sif/psif_hw_print.h +++ b/drivers/infiniband/hw/sif/psif_hw_print.h @@ -416,6 +416,9 @@ void write_struct_psif_epsc_csr_vimma_ctrl(XFILE *fd, void write_struct_psif_epsc_csr_ber_data(XFILE *fd, int network_order, const struct psif_epsc_csr_ber_data *data); +void write_struct_psif_epsc_csr_diag_counters(XFILE *fd, + int network_order, + const struct psif_epsc_csr_diag_counters *data); void write_union_psif_epsc_csr_details(XFILE *fd, int network_order, const union psif_epsc_csr_details *data); diff --git a/drivers/infiniband/hw/sif/version.c b/drivers/infiniband/hw/sif/version.c index 7a2f5dfbd78f..ae3dc70455d4 100644 --- a/drivers/infiniband/hw/sif/version.c +++ b/drivers/infiniband/hw/sif/version.c @@ -3,14 +3,13 @@ #include "version.h" struct sif_version sif_version = { -.git_repo = "sifdrv [origin/master]", -.last_commit = "titan_1.0.0.2 pqp: Be less aggressive in invoking cond_resched()", -.git_status = """?? drivers/\n" -, -.build_git_time = "Tue, 26 Jul 2016 15:46:06 +0000", +.git_repo = "sifdrv [non public commit]", +.last_commit = "titan_1.0.0.3 transform: Update used version of EPSC_API", +.git_status = "", +.build_git_time = "Fri, 12 Aug 2016 11:24:07 +0000", .build_user = "komang", .git_psifapi_repo = "psifapi [origin/master]", -.last_psifapi_commit = "titan_1.0.0.2 EPSC_API_VERSION(2,8) - New EPSC_QUERY_ON_CHIP_TEMP", +.last_psifapi_commit = "titan_1.0.0.3 EPSC_API_VERSION(2,10) - EPSC_DIAG_COUNTERS", .git_psifapi_status = "", }; diff --git a/drivers/infiniband/hw/sif/versioninfo.h b/drivers/infiniband/hw/sif/versioninfo.h index e6d46bf9d237..2b7d562364ad 100644 --- a/drivers/infiniband/hw/sif/versioninfo.h +++ b/drivers/infiniband/hw/sif/versioninfo.h @@ -1,6 +1,6 @@ /* Misc driver release info */ -#define BUILD_DATE "2016-07-26" -#define BUILD_TIME "15:46:06" -#define BUILD_EPOCH 1469547966 -#define TITAN_RELEASE "1.0.0.2" +#define BUILD_DATE "2016-08-12" +#define BUILD_TIME "11:24:07" +#define BUILD_EPOCH 1471001047 +#define TITAN_RELEASE "1.0.0.3" -- 2.50.1