Skip to content

Commit

Permalink
remtoteproc: maintain max notifyid
Browse files Browse the repository at this point in the history
Some of the rproc drivers (STE modem specifically) needs to know
the range of the notification IDs used for notifying the device.

Maintain a variable in struct rproc holding the largest allocated
notification id, so low-level rproc drivers could access it.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
[ohad: rebase, slightly edit commit log]
Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
  • Loading branch information
Sjur Brændeland authored and Ohad Ben-Cohen committed Sep 18, 2012
1 parent 2e37abb commit 099a3f3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/remoteproc/remoteproc_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ int rproc_alloc_vring(struct rproc_vdev *rvdev, int i)
return ret;
}

/* Store largest notifyid */
rproc->max_notifyid = max(rproc->max_notifyid, notifyid);

dev_dbg(dev, "vring%d: va %p dma %x size %x idr %d\n", i, va,
dma, size, notifyid);

Expand Down Expand Up @@ -269,13 +272,25 @@ rproc_parse_vring(struct rproc_vdev *rvdev, struct fw_rsc_vdev *rsc, int i)
return 0;
}

static int rproc_max_notifyid(int id, void *p, void *data)
{
int *maxid = data;
*maxid = max(*maxid, id);
return 0;
}

void rproc_free_vring(struct rproc_vring *rvring)
{
int size = PAGE_ALIGN(vring_size(rvring->len, rvring->align));
struct rproc *rproc = rvring->rvdev->rproc;
int maxid = 0;

dma_free_coherent(rproc->dev.parent, size, rvring->va, rvring->dma);
idr_remove(&rproc->notifyids, rvring->notifyid);

/* Find the largest remaining notifyid */
idr_for_each(&rproc->notifyids, rproc_max_notifyid, &maxid);
rproc->max_notifyid = maxid;
}

/**
Expand Down
2 changes: 2 additions & 0 deletions include/linux/remoteproc.h
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,7 @@ enum rproc_crash_type {
* @crash_cnt: crash counter
* @crash_comp: completion used to sync crash handler and the rproc reload
* @recovery_disabled: flag that state if recovery was disabled
* @max_notifyid: largest allocated notify id.
*/
struct rproc {
struct klist_node node;
Expand Down Expand Up @@ -427,6 +428,7 @@ struct rproc {
unsigned crash_cnt;
struct completion crash_comp;
bool recovery_disabled;
int max_notifyid;
};

/* we currently support only two vrings per rvdev */
Expand Down

0 comments on commit 099a3f3

Please sign in to comment.