X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fnfp%2Fnfpcore%2Fnfp_cppcore.c;h=f91049383e853f24ac0c26560555947b930cc66e;hb=dac12650eb1a5f9cb89f0da8355c6ce002f1e88d;hp=848c452eab84b88a13a8fb787dd469287a065ddf;hpb=df96fd0d73955bdc7ca3909e772ff2ad903249c6;p=dpdk.git diff --git a/drivers/net/nfp/nfpcore/nfp_cppcore.c b/drivers/net/nfp/nfpcore/nfp_cppcore.c index 848c452eab..f91049383e 100644 --- a/drivers/net/nfp/nfpcore/nfp_cppcore.c +++ b/drivers/net/nfp/nfpcore/nfp_cppcore.c @@ -22,8 +22,9 @@ #define NFP_PL_DEVICE_ID 0x00000004 #define NFP_PL_DEVICE_ID_MASK 0xff - -#define NFP6000_ARM_GCSR_SOFTMODEL0 0x00400144 +#define NFP_PL_DEVICE_PART_MASK 0xffff0000 +#define NFP_PL_DEVICE_MODEL_MASK (NFP_PL_DEVICE_PART_MASK | \ + NFP_PL_DEVICE_ID_MASK) void nfp_cpp_priv_set(struct nfp_cpp *cpp, void *priv) @@ -46,13 +47,18 @@ nfp_cpp_model_set(struct nfp_cpp *cpp, uint32_t model) uint32_t nfp_cpp_model(struct nfp_cpp *cpp) { + int err; + uint32_t model; + if (!cpp) return NFP_CPP_MODEL_INVALID; - if (cpp->model == 0) - cpp->model = __nfp_cpp_model_autodetect(cpp); + err = __nfp_cpp_model_autodetect(cpp, &model); - return cpp->model; + if (err < 0) + return err; + + return model; } void @@ -389,9 +395,6 @@ nfp_xpb_to_cpp(struct nfp_cpp *cpp, uint32_t *xpb_addr) uint32_t xpb; int island; - if (!NFP_CPP_MODEL_IS_6000(cpp->model)) - return 0; - xpb = NFP_CPP_ID(14, NFP_CPP_ACTION_RW, 0); /* @@ -796,29 +799,21 @@ nfp_cpp_area_fill(struct nfp_cpp_area *area, unsigned long offset, * as those are model-specific */ uint32_t -__nfp_cpp_model_autodetect(struct nfp_cpp *cpp) +__nfp_cpp_model_autodetect(struct nfp_cpp *cpp, uint32_t *model) { - uint32_t arm_id = NFP_CPP_ID(NFP_CPP_TARGET_ARM, 0, 0); - uint32_t model = 0; - - if (nfp_cpp_readl(cpp, arm_id, NFP6000_ARM_GCSR_SOFTMODEL0, &model)) - return 0; - - if (NFP_CPP_MODEL_IS_6000(model)) { - uint32_t tmp; - - nfp_cpp_model_set(cpp, model); + uint32_t reg; + int err; - /* The PL's PluDeviceID revision code is authoratative */ - model &= ~0xff; - if (nfp_xpb_readl(cpp, NFP_XPB_DEVICE(1, 1, 16) + - NFP_PL_DEVICE_ID, &tmp)) - return 0; + err = nfp_xpb_readl(cpp, NFP_XPB_DEVICE(1, 1, 16) + NFP_PL_DEVICE_ID, + ®); + if (err < 0) + return err; - model |= (NFP_PL_DEVICE_ID_MASK & tmp) - 0x10; - } + *model = reg & NFP_PL_DEVICE_MODEL_MASK; + if (*model & NFP_PL_DEVICE_ID_MASK) + *model -= 0x10; - return model; + return 0; } /*