The CMIS parser only supports link length multipliers of 0.1 and 1, but revision 5.0 of the specification (May 2021) added a multiplier of 10 and revision 5.3 (September 2024) added multipliers of 50, 100, 200 and 500. Add support for the missing multipliers. Fixes: 88ca347ef35a ("Add QSFP-DD support") Reviewed-by: Danielle Ratson Signed-off-by: Ido Schimmel --- cmis.c | 8 +++++++- cmis.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cmis.c b/cmis.c index 351e18484854..7a7e928ebb2f 100644 --- a/cmis.c +++ b/cmis.c @@ -188,6 +188,7 @@ static void cmis_show_cbl_asm_len(const struct cmis_memory_map *map) */ static void cmis_print_smf_cbl_len(const struct cmis_memory_map *map) { + static const float smf_mul2[] = { 50.0f, 100.0f, 200.0f, 500.0f }; static const char *fn = "Length (SMF)"; float mul = 1.0f; float val = 0.0f; @@ -203,7 +204,12 @@ static void cmis_print_smf_cbl_len(const struct cmis_memory_map *map) case CMIS_MULTIPLIER_01: mul = 1.0f; break; - default: + case CMIS_MULTIPLIER_10: + mul = 10.0f; + break; + case CMIS_MULTIPLIER_11: + mul = smf_mul2[(map->page_01h[CMIS_SMF_LEN_MUL2_OFFSET] & + CMIS_LEN_MUL_MASK) >> 6]; break; } diff --git a/cmis.h b/cmis.h index 82fd2456a3ec..387809e00cd5 100644 --- a/cmis.h +++ b/cmis.h @@ -120,6 +120,7 @@ #define CMIS_OM4_LEN_OFFSET 0x86 #define CMIS_OM3_LEN_OFFSET 0x87 #define CMIS_OM2_LEN_OFFSET 0x88 +#define CMIS_SMF_LEN_MUL2_OFFSET 0x89 /* Wavelength (Page 1) */ #define CMIS_NOM_WAVELENGTH_MSB 0x8A -- 2.55.0