Skip to content

Commit c3c0363

Browse files
DylanVanAsschegregkh
authored andcommitted
misc: fastrpc: support complete DMA pool access to the DSP
To support FastRPC Context Banks which aren't mapped via the SMMU, make the whole reserved memory region available to the DSP to allow access to coherent buffers. This is performed by assigning the memory to the DSP via a hypervisor call to set the correct permissions for the Virtual Machines on the DSP. This is only necessary when a memory region is provided for SLPI DSPs so guard this with a domain ID check. Signed-off-by: Dylan Van Assche <[email protected]> Reviewed-by: Caleb Connolly <[email protected]> Reviewed-by: Dmitry Baryshkov <[email protected]> Reviewed-by: Ekansh Gupta <[email protected]> Signed-off-by: Srinivas Kandagatla <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 65cf378 commit c3c0363

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

drivers/misc/fastrpc.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2250,6 +2250,8 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
22502250
int i, err, domain_id = -1, vmcount;
22512251
const char *domain;
22522252
bool secure_dsp;
2253+
struct device_node *rmem_node;
2254+
struct reserved_mem *rmem;
22532255
unsigned int vmids[FASTRPC_MAX_VMIDS];
22542256

22552257
err = of_property_read_string(rdev->of_node, "label", &domain);
@@ -2292,6 +2294,23 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
22922294
}
22932295
}
22942296

2297+
rmem_node = of_parse_phandle(rdev->of_node, "memory-region", 0);
2298+
if (domain_id == SDSP_DOMAIN_ID && rmem_node) {
2299+
u64 src_perms;
2300+
2301+
rmem = of_reserved_mem_lookup(rmem_node);
2302+
if (!rmem) {
2303+
err = -EINVAL;
2304+
goto fdev_error;
2305+
}
2306+
2307+
src_perms = BIT(QCOM_SCM_VMID_HLOS);
2308+
2309+
qcom_scm_assign_mem(rmem->base, rmem->size, &src_perms,
2310+
data->vmperms, data->vmcount);
2311+
2312+
}
2313+
22952314
secure_dsp = !(of_property_read_bool(rdev->of_node, "qcom,non-secure-domain"));
22962315
data->secure = secure_dsp;
22972316

0 commit comments

Comments
 (0)