OSDN Git Service

nfp: use PluDevice register for model for non-NFP6000 chips
authorDirk van der Merwe <dirk.vandermerwe@netronome.com>
Fri, 11 Mar 2022 10:42:59 +0000 (11:42 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 12 Mar 2022 07:10:22 +0000 (23:10 -0800)
The model number for NFP3800 and newer devices can be completely
derived from PluDevice register without subtracting 0x10.

Signed-off-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: Fei Qin <fei.qin@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cpplib.c

index 85734c6..508ae6b 100644 (file)
@@ -22,6 +22,7 @@
 #include "nfp6000/nfp_xpb.h"
 
 /* NFP6000 PL */
+#define NFP_PL_DEVICE_PART_NFP6000             0x6200
 #define NFP_PL_DEVICE_ID                       0x00000004
 #define   NFP_PL_DEVICE_ID_MASK                        GENMASK(7, 0)
 #define   NFP_PL_DEVICE_PART_MASK              GENMASK(31, 16)
@@ -130,8 +131,12 @@ int nfp_cpp_model_autodetect(struct nfp_cpp *cpp, u32 *model)
                return err;
 
        *model = reg & NFP_PL_DEVICE_MODEL_MASK;
-       if (*model & NFP_PL_DEVICE_ID_MASK)
-               *model -= 0x10;
+       /* Disambiguate the NFP4000/NFP5000/NFP6000 chips */
+       if (FIELD_GET(NFP_PL_DEVICE_PART_MASK, reg) ==
+           NFP_PL_DEVICE_PART_NFP6000) {
+               if (*model & NFP_PL_DEVICE_ID_MASK)
+                       *model -= 0x10;
+       }
 
        return 0;
 }