Commit 63870454 authored by Federico Vaga's avatar Federico Vaga

sw: improve version validation

The code was checking for the exact match MAJ.MIN, but what we want
is:

REAL CMP EXPECTED
---- --- --------
MAJ  ==   MAJ
MIN  >=   MIN
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 7ab7b175
...@@ -10,10 +10,10 @@ endif ...@@ -10,10 +10,10 @@ endif
VER_MAJ := $(shell echo $(subst v,,$(VERSION)) | cut -d '.' -f 1) VER_MAJ := $(shell echo $(subst v,,$(VERSION)) | cut -d '.' -f 1)
VER_MIN := $(shell echo $(subst v,,$(VERSION)) | cut -d '.' -f 2) VER_MIN := $(shell echo $(subst v,,$(VERSION)) | cut -d '.' -f 2)
SVEC_META_VERSION_COMPAT := $(shell printf "0x%02x%02x0000" $(VER_MAJ) $(VER_MIN)) SVEC_VERSION_BLD := $(shell printf "0x%02x%02x0000" $(VER_MAJ) $(VER_MIN))
ccflags-y += -DADDITIONAL_VERSIONS="$(SUBMODULE_VERSIONS)" ccflags-y += -DADDITIONAL_VERSIONS="$(SUBMODULE_VERSIONS)"
ccflags-y += -DVERSION=\"$(VERSION)\" ccflags-y += -DVERSION=\"$(VERSION)\"
ccflags-y += -DSVEC_META_VERSION_COMPAT=$(SVEC_META_VERSION_COMPAT) ccflags-y += -DSVEC_VERSION_BLD=$(SVEC_VERSION_BLD)
ccflags-y += -Wall -Werror ccflags-y += -Wall -Werror
ccflags-y += -I$(VMEBRIDGE_ABS)/include ccflags-y += -I$(VMEBRIDGE_ABS)/include
......
...@@ -810,6 +810,17 @@ static void svec_fpga_app_exit(struct svec_fpga *svec_fpga) ...@@ -810,6 +810,17 @@ static void svec_fpga_app_exit(struct svec_fpga *svec_fpga)
} }
} }
static bool svec_fpga_is_valid_version(uint32_t expected, uint32_t found)
{
if (version_ignore)
return true;
if (SVEC_VERSION_MAJ(found) != SVEC_VERSION_MAJ(expected))
return false;
if (SVEC_VERSION_MIN(found) < SVEC_VERSION_MIN(expected))
return false;
return true;
}
static bool svec_fpga_is_valid(struct svec_dev *svec_dev, static bool svec_fpga_is_valid(struct svec_dev *svec_dev,
struct svec_meta_id *meta) struct svec_meta_id *meta)
{ {
...@@ -835,15 +846,13 @@ static bool svec_fpga_is_valid(struct svec_dev *svec_dev, ...@@ -835,15 +846,13 @@ static bool svec_fpga_is_valid(struct svec_dev *svec_dev,
return false; return false;
} }
if (!version_ignore && if (!svec_fpga_is_valid_version(SVEC_VERSION_DRV, meta->version)) {
(meta->version & SVEC_META_VERSION_MASK) != SVEC_META_VERSION_COMPAT) {
dev_err(&svec_dev->dev, dev_err(&svec_dev->dev,
"Unknow version: %08x, expected: %08x\n", "Invalid version: %08x, expected: %08x\n",
meta->version, SVEC_META_VERSION_COMPAT); meta->version, SVEC_VERSION_DRV);
return false; return false;
} }
return true; return true;
} }
......
...@@ -123,6 +123,11 @@ struct svec_dev { ...@@ -123,6 +123,11 @@ struct svec_dev {
struct svec_fpga *svec_fpga; struct svec_fpga *svec_fpga;
}; };
#define SVEC_VERSION_DRV SVEC_VERSION_BLD
#define SVEC_VERSION_MAJ(_VER) ((_VER >> 24) & 0xFF)
#define SVEC_VERSION_MIN(_VER) ((_VER >> 16) & 0xFF)
#define SVEC_VERSION_PATCH(_VER) (_VER & 0xFFFF)
static inline struct svec_dev *to_svec_dev(struct device *_dev) static inline struct svec_dev *to_svec_dev(struct device *_dev)
{ {
return container_of(_dev, struct svec_dev, dev); return container_of(_dev, struct svec_dev, dev);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment