Commit 8b4aec9a authored by Robert Tivy's avatar Robert Tivy Committed by Ohad Ben-Cohen

remoteproc: support default firmware name in rproc_alloc()

If rproc_alloc isn't given a firmware name, look for a default
one using the "rproc-%s-fw" template.
Signed-off-by: default avatarRobert Tivy <rtivy@ti.com>
[add commit log, document change, use snprintf, minor style change]
Signed-off-by: default avatarOhad Ben-Cohen <ohad@wizery.com>
parent e5bc0294
...@@ -1236,11 +1236,11 @@ static struct device_type rproc_type = { ...@@ -1236,11 +1236,11 @@ static struct device_type rproc_type = {
* @dev: the underlying device * @dev: the underlying device
* @name: name of this remote processor * @name: name of this remote processor
* @ops: platform-specific handlers (mainly start/stop) * @ops: platform-specific handlers (mainly start/stop)
* @firmware: name of firmware file to load * @firmware: name of firmware file to load, can be NULL
* @len: length of private data needed by the rproc driver (in bytes) * @len: length of private data needed by the rproc driver (in bytes)
* *
* Allocates a new remote processor handle, but does not register * Allocates a new remote processor handle, but does not register
* it yet. * it yet. if @firmware is NULL, a default name is used.
* *
* This function should be used by rproc implementations during initialization * This function should be used by rproc implementations during initialization
* of the remote processor. * of the remote processor.
...@@ -1259,19 +1259,39 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, ...@@ -1259,19 +1259,39 @@ struct rproc *rproc_alloc(struct device *dev, const char *name,
const char *firmware, int len) const char *firmware, int len)
{ {
struct rproc *rproc; struct rproc *rproc;
char *p, *template = "rproc-%s-fw";
int name_len = 0;
if (!dev || !name || !ops) if (!dev || !name || !ops)
return NULL; return NULL;
rproc = kzalloc(sizeof(struct rproc) + len, GFP_KERNEL); if (!firmware)
/*
* Make room for default firmware name (minus %s plus '\0').
* If the caller didn't pass in a firmware name then
* construct a default name. We're already glomming 'len'
* bytes onto the end of the struct rproc allocation, so do
* a few more for the default firmware name (but only if
* the caller doesn't pass one).
*/
name_len = strlen(name) + strlen(template) - 2 + 1;
rproc = kzalloc(sizeof(struct rproc) + len + name_len, GFP_KERNEL);
if (!rproc) { if (!rproc) {
dev_err(dev, "%s: kzalloc failed\n", __func__); dev_err(dev, "%s: kzalloc failed\n", __func__);
return NULL; return NULL;
} }
if (!firmware) {
p = (char *)rproc + sizeof(struct rproc) + len;
snprintf(p, name_len, template, name);
} else {
p = (char *)firmware;
}
rproc->firmware = p;
rproc->name = name; rproc->name = name;
rproc->ops = ops; rproc->ops = ops;
rproc->firmware = firmware;
rproc->priv = &rproc[1]; rproc->priv = &rproc[1];
device_initialize(&rproc->dev); device_initialize(&rproc->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