Future patches will use this change for netport MCDI support.

Signed-off-by: Ivan Malov <ivan.ma...@arknetworks.am>
Reviewed-by: Andy Moreton <andy.more...@amd.com>
Reviewed-by: Pieter Jansen Van Vuuren <pieter.jansen-van-vuu...@amd.com>
---
 drivers/common/sfc_efx/base/ef10_impl.h | 13 +++++++++++
 drivers/common/sfc_efx/base/ef10_phy.c  | 31 ++++++++++++++++++-------
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/drivers/common/sfc_efx/base/ef10_impl.h 
b/drivers/common/sfc_efx/base/ef10_impl.h
index 3476f274ce..b872ec626c 100644
--- a/drivers/common/sfc_efx/base/ef10_impl.h
+++ b/drivers/common/sfc_efx/base/ef10_impl.h
@@ -801,6 +801,19 @@ ef10_phy_stats_update(
 
 #endif /* EFSYS_OPT_PHY_STATS */
 
+LIBEFX_INTERNAL
+extern                         void
+mcdi_phy_decode_link_mode(
+       __in                    efx_nic_t *enp,
+       __in                    boolean_t fd,
+       __in                    boolean_t up,
+       __in                    unsigned int speed,
+       __in                    unsigned int fcntl,
+       __in                    uint32_t fec,
+       __out                   efx_link_mode_t *link_modep,
+       __out                   unsigned int *fcntlp,
+       __out                   efx_phy_fec_type_t *fecp);
+
 #if EFSYS_OPT_BIST
 
 LIBEFX_INTERNAL
diff --git a/drivers/common/sfc_efx/base/ef10_phy.c 
b/drivers/common/sfc_efx/base/ef10_phy.c
index 49babdecd5..d458199c7a 100644
--- a/drivers/common/sfc_efx/base/ef10_phy.c
+++ b/drivers/common/sfc_efx/base/ef10_phy.c
@@ -92,10 +92,21 @@ mcdi_phy_decode_cap(
        *maskp = mask;
 }
 
-static                 void
+static                         void
+mcdi_phy_decode_link_up_duplex(
+       __in                    uint32_t link_flags,
+       __out                   boolean_t *fdp,
+       __out                   boolean_t *upp)
+{
+       *fdp = !!(link_flags & (1U << MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN));
+       *upp = !!(link_flags & (1U << MC_CMD_GET_LINK_OUT_LINK_UP_LBN));
+}
+
+                       void
 mcdi_phy_decode_link_mode(
        __in            efx_nic_t *enp,
-       __in            uint32_t link_flags,
+       __in            boolean_t fd,
+       __in            boolean_t up,
        __in            unsigned int speed,
        __in            unsigned int fcntl,
        __in            uint32_t fec,
@@ -103,11 +114,6 @@ mcdi_phy_decode_link_mode(
        __out           unsigned int *fcntlp,
        __out           efx_phy_fec_type_t *fecp)
 {
-       boolean_t fd = !!(link_flags &
-                   (1 << MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN));
-       boolean_t up = !!(link_flags &
-                   (1 << MC_CMD_GET_LINK_OUT_LINK_UP_LBN));
-
        _NOTE(ARGUNUSED(enp))
 
        if (!up)
@@ -179,6 +185,8 @@ ef10_phy_link_ev(
        unsigned int ev_fcntl;
        unsigned int ev_speed;
        uint32_t lp_cap_mask;
+       boolean_t fd;
+       boolean_t up;
 
        if (ev_is_v2) {
                link_flags = (1 << MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN);
@@ -226,7 +234,8 @@ ef10_phy_link_ev(
                break;
        }
 
-       mcdi_phy_decode_link_mode(enp, link_flags, speed, ev_fcntl,
+       mcdi_phy_decode_link_up_duplex(link_flags, &fd, &up);
+       mcdi_phy_decode_link_mode(enp, fd, up, speed, ev_fcntl,
                                    MC_CMD_FEC_NONE, &link_mode,
                                    &fcntl, &fec);
        mcdi_phy_decode_cap(ev_lp_cap, &lp_cap_mask);
@@ -281,6 +290,8 @@ ef10_phy_get_link(
        uint32_t fec;
        EFX_MCDI_DECLARE_BUF(payload, MC_CMD_GET_LINK_IN_LEN,
                MC_CMD_GET_LINK_OUT_V2_LEN);
+       boolean_t fd;
+       boolean_t up;
        efx_rc_t rc;
 
        req.emr_cmd = MC_CMD_GET_LINK;
@@ -311,7 +322,9 @@ ef10_phy_get_link(
        else
                fec = MCDI_OUT_DWORD(req, GET_LINK_OUT_V2_FEC_TYPE);
 
-       mcdi_phy_decode_link_mode(enp, MCDI_OUT_DWORD(req, GET_LINK_OUT_FLAGS),
+       mcdi_phy_decode_link_up_duplex(MCDI_OUT_DWORD(req, GET_LINK_OUT_FLAGS),
+                                   &fd, &up);
+       mcdi_phy_decode_link_mode(enp, fd, up,
                            MCDI_OUT_DWORD(req, GET_LINK_OUT_LINK_SPEED),
                            MCDI_OUT_DWORD(req, GET_LINK_OUT_FCNTL),
                            fec, &elsp->epls.epls_link_mode,
-- 
2.39.5

Reply via email to