Commit feb0b8cc authored by Luis Fernando Ruiz's avatar Luis Fernando Ruiz Committed by Juan David González Cobas

svec: Avoid reprogram in an already programmed card

parent 60ec5d80
......@@ -12,6 +12,7 @@
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/fmc-sdb.h>
#include <linux/jhash.h>
#include "svec.h"
static int svec_show_sdb;
......@@ -39,8 +40,10 @@ static int svec_reprogram(struct fmc_device *fmc, struct fmc_driver *drv,
const struct firmware *fw;
struct svec_dev *svec = fmc->carrier_data;
struct device *dev = fmc->hwdev;
uint32_t fw_hash;
int ret = 0;
/* If no firmware filename is provided, load default */
if (!gw)
gw = svec_fw_name;
......@@ -65,23 +68,32 @@ static int svec_reprogram(struct fmc_device *fmc, struct fmc_driver *drv,
dev_warn(dev, "request firmware \"%s\": error %i\n", gw, ret);
return ret;
}
/* Hash firmware bitstream */
fw_hash = jhash(fw->data, fw->size,0);
if (fw_hash == svec->fw_hash) {
dev_info(dev, "card already programmed with \"%s\" [%x]\n", gw, fw_hash);
goto out;
}
/* FIXME?? */
fmc_free_sdb_tree(fmc);
fmc->flags &= ~(FMC_DEVICE_HAS_GOLDEN | FMC_DEVICE_HAS_CUSTOM);
/* load the firmware */
ret = svec_load_fpga(svec, fw->data, fw->size);
if (ret <0) {
dev_err(dev, "write firmware \"%s\": error %i\n", gw, ret);
dev_err(dev, "error %i programming firmware \"%s\"\n", ret, gw);
goto out;
}
if (gw == svec_fw_name)
fmc->flags |= FMC_DEVICE_HAS_GOLDEN;
else
fmc->flags |= FMC_DEVICE_HAS_CUSTOM;
/* configure and activate function 0 */
/* FIXME: Only once?? */
dev_info(fmc->hwdev, "svec-fmc: setup fa0\n");
svec_setup_csr_fa0(svec->map[MAP_CR_CSR]->kernel_va, svec->vmebase,
svec->vector, svec->level);
/* Store firmware hash to avoid reprogram */
svec->fw_hash = fw_hash;
out:
release_firmware(fw);
if (ret < 0)
......
......@@ -44,7 +44,7 @@ struct svec_dev {
struct device *dev;
char driver[16];
char description[80];
uint32_t fw_hash;
struct vme_mapping *map[2];
/* struct work_struct work; */
......
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