|
@@ -217,6 +217,48 @@ out:
|
|
|
}
|
|
|
EXPORT_SYMBOL(rproc_da_to_va);
|
|
|
|
|
|
+/**
|
|
|
+ * rproc_find_carveout_by_name() - lookup the carveout region by a name
|
|
|
+ * @rproc: handle of a remote processor
|
|
|
+ * @name,..: carveout name to find (standard printf format)
|
|
|
+ *
|
|
|
+ * Platform driver has the capability to register some pre-allacoted carveout
|
|
|
+ * (physically contiguous memory regions) before rproc firmware loading and
|
|
|
+ * associated resource table analysis. These regions may be dedicated memory
|
|
|
+ * regions internal to the coprocessor or specified DDR region with specific
|
|
|
+ * attributes
|
|
|
+ *
|
|
|
+ * This function is a helper function with which we can go over the
|
|
|
+ * allocated carveouts and return associated region characteristics like
|
|
|
+ * coprocessor address, length or processor virtual address.
|
|
|
+ *
|
|
|
+ * Return: a valid pointer on carveout entry on success or NULL on failure.
|
|
|
+ */
|
|
|
+struct rproc_mem_entry *
|
|
|
+rproc_find_carveout_by_name(struct rproc *rproc, const char *name, ...)
|
|
|
+{
|
|
|
+ va_list args;
|
|
|
+ char _name[32];
|
|
|
+ struct rproc_mem_entry *carveout, *mem = NULL;
|
|
|
+
|
|
|
+ if (!name)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ va_start(args, name);
|
|
|
+ vsnprintf(_name, sizeof(_name), name, args);
|
|
|
+ va_end(args);
|
|
|
+
|
|
|
+ list_for_each_entry(carveout, &rproc->carveouts, node) {
|
|
|
+ /* Compare carveout and requested names */
|
|
|
+ if (!strcmp(carveout->name, _name)) {
|
|
|
+ mem = carveout;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return mem;
|
|
|
+}
|
|
|
+
|
|
|
int rproc_alloc_vring(struct rproc_vdev *rvdev, int i)
|
|
|
{
|
|
|
struct rproc *rproc = rvdev->rproc;
|