Commit 3e24c066 authored by Federico Vaga's avatar Federico Vaga

Merge branch '6-review-vaibhav-changes' into 'master'

Resolve "Review vaibhav changes"

Closes #6

See merge request be-cem-edl/fec/hardware-modules/svec!4
parents 23e88e5d eca36381
......@@ -3,20 +3,23 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
*.o
*.a
*.so
*.ko
*.mod.c
.*.o.cmd
.*.ko.cmd
*.mod.d
*.mod*
.*cmd
*.o.d
*.tmp
*.tmp*
*.swp
.tmp_versions
modules.order
Module.symvers
\#*
*~
GTAGS
GPATH
GRTAGS
GTAGS
Makefile.specific
compile_commands.json
.clangd
compile_commands.json
\ No newline at end of file
cscope*
......@@ -18,11 +18,11 @@ SVEC_VERSION_BLD := $(shell printf "0x%02x%02x0000" $(VER_MAJ) $(VER_MIN))
ccflags-y += -DADDITIONAL_VERSIONS="$(SUBMODULE_VERSIONS)"
ccflags-y += -DVERSION=\"$(VERSION)\"
ccflags-y += -DSVEC_VERSION_BLD=$(SVEC_VERSION_BLD)
ccflags-$(CONFIG_FPGA_MGR_BACKPORT) += -DCONFIG_FPGA_MGR_BACKPORT
ccflags-y += -Wall -Werror
ccflags-$(CONFIG_FPGA_MGR_BACKPORT) += -I$(FPGA_MGR_ABS)/include
ccflags-y += -I$(VMEBRIDGE_ABS)/include
ccflags-y += -I$(FPGA_MGR_ABS)/include
ccflags-$(CONFIG_FPGA_MGR_BACKPORT) += -DCONFIG_FPGA_MGR_BACKPORT
ccflags-y += -I$(FMC_ABS)/include
ccflags-y += -I$(I2C_ABS)/include
ccflags-y += -I$(SPI_ABS)/include
......@@ -37,11 +37,10 @@ FPGA_MGR_BACKPORT_INCLUDE += -I$(FPGA_MGR_ABS)/include/linux
LINUXINCLUDE := $(FPGA_MGR_BACKPORT_INCLUDE) $(LINUXINCLUDE)
KBUILD_EXTRA_SYMBOLS += $(FPGA_MGR_ABS)/drivers/fpga/Module.symvers
endif
KBUILD_EXTRA_SYMBOLS += $(FMC_ABS)/drivers/fmc/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(VMEBRIDGE_ABS)/driver/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(FPGA_MGR_ABS)/drivers/fpga/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(FMC_ABS)/drivers/fmc/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(I2C_BUS)/drivers/i2c/busses/Module.symvers
KBUILD_EXTRA_SYMBOLS += $(I2C_ABS)/drivers/i2c/busses/Module.symvers
obj-m := svec-fmc-carrier.o
......
......@@ -9,7 +9,7 @@ TOP_DIR ?= $(shell pwd)/../..
HDL_DIR ?= $(TOP_DIR)/hdl
KVERSION ?= $(shell uname -r)
LINUX ?= /lib/modules/$(KVERSION)/build
KERNELSRC ?= /lib/modules/$(KVERSION)/build
VMEBRIDGE_ABS ?= $(abspath $(VMEBRIDGE))
FPGA_MGR_ABS ?= $(abspath $(FPGA_MGR))
......@@ -21,6 +21,8 @@ VERSION = $(shell git describe --dirty --long --tags)
CHEBY ?= cheby
CONFIG_FPGA_MGR_BACKPORT ?= n
all: modules
.PHONY: all modules clean help install modules_install coccicheck svec-core-fpga.h
......@@ -32,11 +34,12 @@ clean-spec-core-fpga.h:
rm -f spec-core-fpga.h
install: modules_install
clean: clean-spec-core-fpga.h
$(MAKE) -C $(LINUX) M=$(shell pwd) $@
$(MAKE) -C $(KERNELSRC) M=$(shell pwd) $@
modules help coccicheck modules_install: svec-core-fpga.h
$(MAKE) -C $(LINUX) M=$(shell pwd) \
$(MAKE) -C $(KERNELSRC) M=$(shell pwd) \
VERSION=$(VERSION) \
VMEBRIDGE_ABS=$(VMEBRIDGE_ABS) \
FPGA_MGR_ABS=$(FPGA_MGR_ABS) \
......
......@@ -155,9 +155,8 @@ static int svec_fpga_dbg_init(struct svec_fpga *svec_fpga)
svec_fpga->dbg_csr_reg.regs = svec_fpga_debugfs_reg32;
svec_fpga->dbg_csr_reg.nregs = ARRAY_SIZE(svec_fpga_debugfs_reg32);
svec_fpga->dbg_csr_reg.base = svec_fpga->fpga;
svec_fpga->dbg_csr = debugfs_create_regset32(SVEC_DBG_CSR_NAME, 0200,
svec_fpga->dbg_dir,
&svec_fpga->dbg_csr_reg);
debugfs_create_regset32(SVEC_DBG_CSR_NAME, 0200, svec_fpga->dbg_dir,
&svec_fpga->dbg_csr_reg);
if (IS_ERR_OR_NULL(svec_fpga->dbg_csr)) {
err = PTR_ERR(svec_fpga->dbg_csr);
dev_warn(&svec_fpga->dev,
......
......@@ -69,33 +69,15 @@ static int svec_fw_load(struct svec_dev *svec_dev, const char *name)
return err;
}
static void remove_callback(struct device *dev)
static ssize_t svec_fpga_firmware_store(struct device *dev,
struct device_attribute *attr,
const char *buf,
size_t count)
{
vme_unregister_device(to_vme_dev(dev));
}
#define VBRIDGE_DBG_FW_BUF_LEN 128
static ssize_t svec_dbg_fw_write(struct file *file,
const char __user *buf,
size_t count, loff_t *ppos)
{
struct svec_dev *svec_dev = file->private_data;
char buf_l[VBRIDGE_DBG_FW_BUF_LEN];
int err, ret;
if (VBRIDGE_DBG_FW_BUF_LEN < count) {
dev_err(&svec_dev->dev,
"Firmware name too long max %u\n",
VBRIDGE_DBG_FW_BUF_LEN);
return -EINVAL;
}
memset(buf_l, 0, VBRIDGE_DBG_FW_BUF_LEN);
err = copy_from_user(buf_l, buf, count);
if (err)
return -EFAULT;
struct svec_dev *svec_dev = to_svec_dev(dev);
int err;
err = svec_fw_load(svec_dev, buf_l);
err = svec_fw_load(svec_dev, buf);
if (err)
dev_err(&svec_dev->dev,
"FPGA Configuration failure %d\n", err);
......@@ -107,22 +89,27 @@ static ssize_t svec_dbg_fw_write(struct file *file,
*/
dev_warn(&svec_dev->dev, "VME Slave removed\n");
dev_warn(&svec_dev->dev, "Remove this device driver instance\n");
ret = device_schedule_callback(svec_dev->dev.parent, remove_callback);
if (ret) {
if (device_remove_file_self(&svec_dev->dev, attr)) {
vme_unregister_device(to_vme_dev(svec_dev->dev.parent));
}
else {
dev_err(&svec_dev->dev,
"Can't remove device driver instance %d\n", ret);
return ret;
"Can't remove device driver instance.\n");
}
return err ? err : count;
}
static const struct file_operations svec_dbg_fw_ops = {
.owner = THIS_MODULE,
.open = simple_open,
.write = svec_dbg_fw_write,
static DEVICE_ATTR_WO(svec_fpga_firmware);
static struct attribute *svec_sys_dev_attrs[] = {
&dev_attr_svec_fpga_firmware.attr,
NULL
};
ATTRIBUTE_GROUPS(svec_sys_dev);
static void seq_printf_meta(struct seq_file *s, const char *indent,
struct svec_meta_id *meta)
{
......@@ -186,16 +173,6 @@ static int svec_dbg_init(struct svec_dev *svec_dev)
return PTR_ERR(svec_dev->dbg_dir);
}
svec_dev->dbg_fw = debugfs_create_file(SVEC_DBG_FW_NAME, 0200,
svec_dev->dbg_dir,
svec_dev,
&svec_dbg_fw_ops);
if (IS_ERR_OR_NULL(svec_dev->dbg_fw)) {
dev_err(dev, "Cannot create debugfs file \"%s\" (%ld)\n",
SVEC_DBG_FW_NAME, PTR_ERR(svec_dev->dbg_fw));
return PTR_ERR(svec_dev->dbg_fw);
}
svec_dev->dbg_meta = debugfs_create_file(SVEC_DBG_META_NAME, 0200,
svec_dev->dbg_dir,
svec_dev,
......@@ -546,6 +523,7 @@ static int svec_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
static const struct device_type svec_type = {
.name = "svec",
.groups = svec_sys_dev_groups,
.release = svec_dev_release,
.uevent = svec_dev_uevent,
};
......
......@@ -117,7 +117,6 @@ struct svec_dev {
struct dentry *dbg_dir;
#define SVEC_DBG_FW_NAME "fpga_firmware"
struct dentry *dbg_fw;
#define SVEC_DBG_META_NAME "fpga_device_metadata"
struct dentry *dbg_meta;
struct svec_fpga *svec_fpga;
......
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