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 <me@dylanvanassche.be> Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Ekansh Gupta <quic_ekangupt@quicinc.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20240705075900.424100-5-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 65cf378 commit c3c0363

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

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)