aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/remoteproc
diff options
context:
space:
mode:
authorJuan Gutierrez <jgutierrez@ti.com>2011-10-17 18:07:27 -0500
committerIliyan Malchev <malchev@google.com>2011-10-18 17:17:44 -0700
commitfcc1aa50b61be6c31d1c2d791b47f226d3cf370b (patch)
treee0f5e1874a75da7ebc1d0b42ec8c6e3d6c88818b /drivers/remoteproc
parent1e600867aa9b1982c652719693762bd967ad5b53 (diff)
downloadkernel_samsung_tuna-fcc1aa50b61be6c31d1c2d791b47f226d3cf370b.tar.gz
kernel_samsung_tuna-fcc1aa50b61be6c31d1c2d791b47f226d3cf370b.tar.bz2
kernel_samsung_tuna-fcc1aa50b61be6c31d1c2d791b47f226d3cf370b.zip
remoteproc: Add version debugfs
Reading the version debugfs file dumps the core0, core1 and sysbios-rpmsg identifier version of the proper firmware binary Change-Id: I1dca032d56fb26333499342662d25aa3b9257a6e Signed-off-by: Juan Gutierrez <jgutierrez@ti.com> Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'drivers/remoteproc')
-rw-r--r--drivers/remoteproc/remoteproc.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/drivers/remoteproc/remoteproc.c b/drivers/remoteproc/remoteproc.c
index 2ecbcef4379..ef9d0ffad23 100644
--- a/drivers/remoteproc/remoteproc.c
+++ b/drivers/remoteproc/remoteproc.c
@@ -103,6 +103,21 @@ static ssize_t rproc_name_read(struct file *filp, char __user *userbuf,
return simple_read_from_buffer(userbuf, count, ppos, buf, i);
}
+static ssize_t rproc_version_read(struct file *filp, char __user *userbuf,
+ size_t count, loff_t *ppos)
+{
+
+ struct rproc *rproc = filp->private_data;
+ char *pch;
+ int len;
+ pch = strstr(rproc->header, "version:");
+ if (!pch)
+ return 0;
+ pch += strlen("version:") + 1;
+ len = rproc->header_len - (pch - rproc->header);
+ return simple_read_from_buffer(userbuf, count, ppos, pch, len);
+}
+
static int rproc_open_generic(struct inode *inode, struct file *file)
{
file->private_data = inode->i_private;
@@ -472,6 +487,12 @@ static const struct file_operations rproc_name_ops = {
.llseek = generic_file_llseek,
};
+static const struct file_operations rproc_version_ops = {
+ .read = rproc_version_read,
+ .open = rproc_open_generic,
+ .llseek = generic_file_llseek,
+};
+
DEBUGFS_READONLY_FILE(trace0, rproc->trace_buf0, rproc->trace_len0);
DEBUGFS_READONLY_FILE(trace1, rproc->trace_buf1, rproc->trace_len1);
DEBUGFS_READONLY_FILE(trace0_last, rproc->last_trace_buf0,
@@ -1077,6 +1098,15 @@ static void rproc_loader_cont(const struct firmware *fw, void *context)
}
dev_info(dev, "BIOS image version is %d\n", image->version);
+
+ rproc->header = kzalloc(image->header_len, GFP_KERNEL);
+ if (!rproc->header) {
+ dev_err(dev, "%s: kzalloc failed\n", __func__);
+ goto out;
+ }
+ memcpy(rproc->header, image->header, image->header_len);
+ rproc->header_len = image->header_len;
+
/* Ensure we recognize this BIOS version: */
if (image->version != RPROC_BIOS_VERSION) {
dev_err(dev, "Expected BIOS version: %d!\n",
@@ -1284,6 +1314,7 @@ void rproc_put(struct rproc *rproc)
rproc_reset_poolmem(rproc);
memset(rproc->memory_maps, 0, sizeof(rproc->memory_maps));
+ kfree(rproc->header);
/*
* make sure rproc is really running before powering it off.
@@ -1655,9 +1686,11 @@ int rproc_register(struct device *dev, const char *name,
goto out;
}
- debugfs_create_file("name", 0400, rproc->dbg_dir, rproc,
+ debugfs_create_file("name", 0444, rproc->dbg_dir, rproc,
&rproc_name_ops);
+ debugfs_create_file("version", 0444, rproc->dbg_dir, rproc,
+ &rproc_version_ops);
out:
return 0;
}