The indication fields in the MCDI response are individual
bits, but the current code mistakenly compares the larger
dword with 1. This breaks encap. type discovery. Fix that.

Fixes: 891408c45a63 ("common/sfc_efx/base: indicate MAE support for 
encapsulation")
Cc: sta...@dpdk.org

Signed-off-by: Ivan Malov <ivan.ma...@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru>
Reviewed-by: Andy Moreton <amore...@xilinx.com>
---
 drivers/common/sfc_efx/base/efx_mae.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/common/sfc_efx/base/efx_mae.c 
b/drivers/common/sfc_efx/base/efx_mae.c
index e6156102d..80fe155d0 100644
--- a/drivers/common/sfc_efx/base/efx_mae.c
+++ b/drivers/common/sfc_efx/base/efx_mae.c
@@ -46,17 +46,20 @@ efx_mae_get_capabilities(
 
        maep->em_encap_types_supported = 0;
 
-       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_VXLAN) == 1) {
+       if (MCDI_OUT_DWORD_FIELD(req, MAE_GET_CAPS_OUT_ENCAP_TYPES_SUPPORTED,
+           MAE_GET_CAPS_OUT_ENCAP_TYPE_VXLAN) != 0) {
                maep->em_encap_types_supported |=
                    (1U << EFX_TUNNEL_PROTOCOL_VXLAN);
        }
 
-       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_GENEVE) == 1) {
+       if (MCDI_OUT_DWORD_FIELD(req, MAE_GET_CAPS_OUT_ENCAP_TYPES_SUPPORTED,
+           MAE_GET_CAPS_OUT_ENCAP_TYPE_GENEVE) != 0) {
                maep->em_encap_types_supported |=
                    (1U << EFX_TUNNEL_PROTOCOL_GENEVE);
        }
 
-       if (MCDI_OUT_DWORD(req, MAE_GET_CAPS_OUT_ENCAP_TYPE_NVGRE) == 1) {
+       if (MCDI_OUT_DWORD_FIELD(req, MAE_GET_CAPS_OUT_ENCAP_TYPES_SUPPORTED,
+           MAE_GET_CAPS_OUT_ENCAP_TYPE_NVGRE) != 0) {
                maep->em_encap_types_supported |=
                    (1U << EFX_TUNNEL_PROTOCOL_NVGRE);
        }
-- 
2.20.1

Reply via email to