diff --git a/icnss2/debug.c b/icnss2/debug.c index 1c1e0bddac..bfe3fe4100 100644 --- a/icnss2/debug.c +++ b/icnss2/debug.c @@ -341,12 +341,22 @@ static int icnss_stats_show_events(struct seq_file *s, struct icnss_priv *priv) return 0; } +static u64 icnss_get_serial_id(struct icnss_priv *priv) +{ + u32 msb = priv->serial_id.serial_id_msb; + u32 lsb = priv->serial_id.serial_id_lsb; + + msb &= 0xFFFF; + return (((u64)msb << 32) | lsb); +} + static int icnss_stats_show_state(struct seq_file *s, struct icnss_priv *priv) { enum icnss_driver_state i; int skip = 0; unsigned long state; + seq_printf(s, "\nSerial Number: 0x%llx", icnss_get_serial_id(priv)); seq_printf(s, "\nState: 0x%lx(", priv->state); for (i = 0, state = priv->state; state != 0; state >>= 1, i++) { diff --git a/icnss2/main.h b/icnss2/main.h index 94c22c5e9b..cf1330c887 100644 --- a/icnss2/main.h +++ b/icnss2/main.h @@ -531,6 +531,7 @@ struct icnss_priv { enum icnss_phy_he_channel_width_cap phy_he_channel_width_cap; enum icnss_phy_qam_cap phy_qam_cap; bool rproc_fw_download; + struct wlchip_serial_id_v01 serial_id; }; struct icnss_reg_info { diff --git a/icnss2/qmi.c b/icnss2/qmi.c index fbde170cae..fafda484ae 100644 --- a/icnss2/qmi.c +++ b/icnss2/qmi.c @@ -815,6 +815,13 @@ int wlfw_cap_send_sync_msg(struct icnss_priv *priv) if (resp->phy_qam_cap_valid) priv->phy_qam_cap = (enum icnss_phy_qam_cap)resp->phy_qam_cap; + if (resp->serial_id_valid) { + priv->serial_id = resp->serial_id; + icnss_pr_info("serial id 0x%x 0x%x\n", + resp->serial_id.serial_id_msb, + resp->serial_id.serial_id_lsb); + } + icnss_pr_dbg("Capability, chip_id: 0x%x, chip_family: 0x%x, board_id: 0x%x, soc_id: 0x%x", priv->chip_info.chip_id, priv->chip_info.chip_family, priv->board_id, priv->soc_id);